summaryrefslogtreecommitdiffstats
path: root/tests/ui/issues
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:03 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:03 +0000
commit64d98f8ee037282c35007b64c2649055c56af1db (patch)
tree5492bcf97fce41ee1c0b1cc2add283f3e66cdab0 /tests/ui/issues
parentAdding debian version 1.67.1+dfsg1-1. (diff)
downloadrustc-64d98f8ee037282c35007b64c2649055c56af1db.tar.xz
rustc-64d98f8ee037282c35007b64c2649055c56af1db.zip
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/ui/issues')
-rw-r--r--tests/ui/issues/auxiliary/cgu_test.rs6
-rw-r--r--tests/ui/issues/auxiliary/cgu_test_a.rs15
-rw-r--r--tests/ui/issues/auxiliary/cgu_test_b.rs15
-rw-r--r--tests/ui/issues/auxiliary/i8.rs3
-rw-r--r--tests/ui/issues/auxiliary/iss.rs12
-rw-r--r--tests/ui/issues/auxiliary/issue-11224.rs16
-rw-r--r--tests/ui/issues/auxiliary/issue-11508.rs10
-rw-r--r--tests/ui/issues/auxiliary/issue-11529.rs1
-rw-r--r--tests/ui/issues/auxiliary/issue-11680.rs9
-rw-r--r--tests/ui/issues/auxiliary/issue-12133-dylib.rs1
-rw-r--r--tests/ui/issues/auxiliary/issue-12133-dylib2.rs6
-rw-r--r--tests/ui/issues/auxiliary/issue-12133-rlib.rs3
-rw-r--r--tests/ui/issues/auxiliary/issue-12612-1.rs3
-rw-r--r--tests/ui/issues/auxiliary/issue-12612-2.rs1
-rw-r--r--tests/ui/issues/auxiliary/issue-12660-aux.rs11
-rw-r--r--tests/ui/issues/auxiliary/issue-13507.rs87
-rw-r--r--tests/ui/issues/auxiliary/issue-13620-1.rs9
-rw-r--r--tests/ui/issues/auxiliary/issue-13620-2.rs3
-rw-r--r--tests/ui/issues/auxiliary/issue-13872-1.rs1
-rw-r--r--tests/ui/issues/auxiliary/issue-13872-2.rs3
-rw-r--r--tests/ui/issues/auxiliary/issue-13872-3.rs9
-rw-r--r--tests/ui/issues/auxiliary/issue-14344-1.rs5
-rw-r--r--tests/ui/issues/auxiliary/issue-14344-2.rs3
-rw-r--r--tests/ui/issues/auxiliary/issue-14421.rs25
-rw-r--r--tests/ui/issues/auxiliary/issue-14422.rs25
-rw-r--r--tests/ui/issues/auxiliary/issue-15562.rs5
-rw-r--r--tests/ui/issues/auxiliary/issue-16643.rs19
-rw-r--r--tests/ui/issues/auxiliary/issue-16725.rs3
-rw-r--r--tests/ui/issues/auxiliary/issue-17662.rs12
-rw-r--r--tests/ui/issues/auxiliary/issue-18501.rs17
-rw-r--r--tests/ui/issues/auxiliary/issue-18514.rs17
-rw-r--r--tests/ui/issues/auxiliary/issue-18711.rs5
-rw-r--r--tests/ui/issues/auxiliary/issue-18913-1.rs6
-rw-r--r--tests/ui/issues/auxiliary/issue-18913-2.rs6
-rw-r--r--tests/ui/issues/auxiliary/issue-1920.rs4
-rw-r--r--tests/ui/issues/auxiliary/issue-19293.rs4
-rw-r--r--tests/ui/issues/auxiliary/issue-19340-1.rs3
-rw-r--r--tests/ui/issues/auxiliary/issue-20389.rs4
-rw-r--r--tests/ui/issues/auxiliary/issue-21202.rs6
-rw-r--r--tests/ui/issues/auxiliary/issue-2170-lib.rs18
-rw-r--r--tests/ui/issues/auxiliary/issue-2316-a.rs3
-rw-r--r--tests/ui/issues/auxiliary/issue-2316-b.rs11
-rw-r--r--tests/ui/issues/auxiliary/issue-2380.rs13
-rw-r--r--tests/ui/issues/auxiliary/issue-2414-a.rs12
-rw-r--r--tests/ui/issues/auxiliary/issue-2414-b.rs4
-rw-r--r--tests/ui/issues/auxiliary/issue-2472-b.rs13
-rw-r--r--tests/ui/issues/auxiliary/issue-25185-1.rs8
-rw-r--r--tests/ui/issues/auxiliary/issue-25185-2.rs3
-rw-r--r--tests/ui/issues/auxiliary/issue-2526.rs44
-rw-r--r--tests/ui/issues/auxiliary/issue-25467.rs10
-rw-r--r--tests/ui/issues/auxiliary/issue-2631-a.rs14
-rw-r--r--tests/ui/issues/auxiliary/issue-2723-a.rs3
-rw-r--r--tests/ui/issues/auxiliary/issue-29181.rs5
-rw-r--r--tests/ui/issues/auxiliary/issue-29265.rs9
-rw-r--r--tests/ui/issues/auxiliary/issue-29485.rs16
-rw-r--r--tests/ui/issues/auxiliary/issue-3012-1.rs20
-rw-r--r--tests/ui/issues/auxiliary/issue-30123-aux.rs23
-rw-r--r--tests/ui/issues/auxiliary/issue-3136-a.rc4
-rw-r--r--tests/ui/issues/auxiliary/issue-3136-a.rs14
-rw-r--r--tests/ui/issues/auxiliary/issue-31702-1.rs16
-rw-r--r--tests/ui/issues/auxiliary/issue-31702-2.rs20
-rw-r--r--tests/ui/issues/auxiliary/issue-34796-aux.rs20
-rw-r--r--tests/ui/issues/auxiliary/issue-36954.rs7
-rw-r--r--tests/ui/issues/auxiliary/issue-38190.rs2
-rw-r--r--tests/ui/issues/auxiliary/issue-38226-aux.rs23
-rw-r--r--tests/ui/issues/auxiliary/issue-3979-traits.rs15
-rw-r--r--tests/ui/issues/auxiliary/issue-41053.rs1
-rw-r--r--tests/ui/issues/auxiliary/issue-41394.rs16
-rw-r--r--tests/ui/issues/auxiliary/issue-41549.rs3
-rw-r--r--tests/ui/issues/auxiliary/issue-42007-s.rs4
-rw-r--r--tests/ui/issues/auxiliary/issue-4208-cc.rs10
-rw-r--r--tests/ui/issues/auxiliary/issue-4545.rs2
-rw-r--r--tests/ui/issues/auxiliary/issue-48984-aux.rs6
-rw-r--r--tests/ui/issues/auxiliary/issue-49544.rs7
-rw-r--r--tests/ui/issues/auxiliary/issue-51798.rs3
-rw-r--r--tests/ui/issues/auxiliary/issue-52489.rs3
-rw-r--r--tests/ui/issues/auxiliary/issue-5518.rs4
-rw-r--r--tests/ui/issues/auxiliary/issue-5521.rs3
-rw-r--r--tests/ui/issues/auxiliary/issue-56943.rs3
-rw-r--r--tests/ui/issues/auxiliary/issue-57271-lib.rs11
-rw-r--r--tests/ui/issues/auxiliary/issue-5844-aux.rs3
-rw-r--r--tests/ui/issues/auxiliary/issue-7178.rs7
-rw-r--r--tests/ui/issues/auxiliary/issue-73112.rs10
-rw-r--r--tests/ui/issues/auxiliary/issue-7899.rs1
-rw-r--r--tests/ui/issues/auxiliary/issue-8044.rs15
-rw-r--r--tests/ui/issues/auxiliary/issue-8259.rs4
-rw-r--r--tests/ui/issues/auxiliary/issue-8401.rs16
-rw-r--r--tests/ui/issues/auxiliary/issue-9123.rs9
-rw-r--r--tests/ui/issues/auxiliary/issue-9155.rs7
-rw-r--r--tests/ui/issues/auxiliary/issue-9188.rs13
-rw-r--r--tests/ui/issues/auxiliary/issue-9906.rs15
-rw-r--r--tests/ui/issues/auxiliary/issue-9968.rs22
-rw-r--r--tests/ui/issues/auxiliary/private-trait-xc.rs1
-rw-r--r--tests/ui/issues/auxiliary/reexported-trait.rs17
-rw-r--r--tests/ui/issues/issue-100605.rs9
-rw-r--r--tests/ui/issues/issue-100605.stderr46
-rw-r--r--tests/ui/issues/issue-10228.rs20
-rw-r--r--tests/ui/issues/issue-10291.rs8
-rw-r--r--tests/ui/issues/issue-10291.stderr11
-rw-r--r--tests/ui/issues/issue-102964.rs10
-rw-r--r--tests/ui/issues/issue-102964.stderr19
-rw-r--r--tests/ui/issues/issue-10396.rs14
-rw-r--r--tests/ui/issues/issue-10412.rs27
-rw-r--r--tests/ui/issues/issue-10412.stderr75
-rw-r--r--tests/ui/issues/issue-10436.rs11
-rw-r--r--tests/ui/issues/issue-10456.rs25
-rw-r--r--tests/ui/issues/issue-10465.rs23
-rw-r--r--tests/ui/issues/issue-10465.stderr15
-rw-r--r--tests/ui/issues/issue-10545.rs9
-rw-r--r--tests/ui/issues/issue-10545.stderr15
-rw-r--r--tests/ui/issues/issue-10638.rs11
-rw-r--r--tests/ui/issues/issue-10656.rs3
-rw-r--r--tests/ui/issues/issue-10656.stderr15
-rw-r--r--tests/ui/issues/issue-10682.rs13
-rw-r--r--tests/ui/issues/issue-10683.rs11
-rw-r--r--tests/ui/issues/issue-10718.rs11
-rw-r--r--tests/ui/issues/issue-10734.rs36
-rw-r--r--tests/ui/issues/issue-10764.rs5
-rw-r--r--tests/ui/issues/issue-10764.stderr19
-rw-r--r--tests/ui/issues/issue-10767.rs8
-rw-r--r--tests/ui/issues/issue-10802.rs45
-rw-r--r--tests/ui/issues/issue-10806.rs38
-rw-r--r--tests/ui/issues/issue-10853.rs15
-rw-r--r--tests/ui/issues/issue-10877.rs16
-rw-r--r--tests/ui/issues/issue-10877.stderr27
-rw-r--r--tests/ui/issues/issue-10902.rs21
-rw-r--r--tests/ui/issues/issue-11004.rs27
-rw-r--r--tests/ui/issues/issue-11004.stderr19
-rw-r--r--tests/ui/issues/issue-11047.rs26
-rw-r--r--tests/ui/issues/issue-11085.rs46
-rw-r--r--tests/ui/issues/issue-11192.rs22
-rw-r--r--tests/ui/issues/issue-11192.stderr17
-rw-r--r--tests/ui/issues/issue-11205.rs85
-rw-r--r--tests/ui/issues/issue-11224.rs8
-rw-r--r--tests/ui/issues/issue-11267.rs19
-rw-r--r--tests/ui/issues/issue-11374.rs27
-rw-r--r--tests/ui/issues/issue-11374.stderr21
-rw-r--r--tests/ui/issues/issue-11382.rs4
-rw-r--r--tests/ui/issues/issue-11384.rs10
-rw-r--r--tests/ui/issues/issue-11508.rs11
-rw-r--r--tests/ui/issues/issue-11515.rs10
-rw-r--r--tests/ui/issues/issue-11515.stderr13
-rw-r--r--tests/ui/issues/issue-11529.rs11
-rw-r--r--tests/ui/issues/issue-11552.rs24
-rw-r--r--tests/ui/issues/issue-11592.rs11
-rw-r--r--tests/ui/issues/issue-11593.rs10
-rw-r--r--tests/ui/issues/issue-11593.stderr15
-rw-r--r--tests/ui/issues/issue-11677.rs23
-rw-r--r--tests/ui/issues/issue-11680.rs11
-rw-r--r--tests/ui/issues/issue-11680.stderr27
-rw-r--r--tests/ui/issues/issue-11681.rs19
-rw-r--r--tests/ui/issues/issue-11681.stderr11
-rw-r--r--tests/ui/issues/issue-11692-1.rs3
-rw-r--r--tests/ui/issues/issue-11692-1.stderr8
-rw-r--r--tests/ui/issues/issue-11692-2.rs3
-rw-r--r--tests/ui/issues/issue-11692-2.stderr10
-rw-r--r--tests/ui/issues/issue-11709.rs38
-rw-r--r--tests/ui/issues/issue-11740.rs28
-rw-r--r--tests/ui/issues/issue-11771.rs11
-rw-r--r--tests/ui/issues/issue-11771.stderr39
-rw-r--r--tests/ui/issues/issue-11820.rs12
-rw-r--r--tests/ui/issues/issue-11844.rs8
-rw-r--r--tests/ui/issues/issue-11844.stderr14
-rw-r--r--tests/ui/issues/issue-11869.rs17
-rw-r--r--tests/ui/issues/issue-11873.rs7
-rw-r--r--tests/ui/issues/issue-11873.stderr16
-rw-r--r--tests/ui/issues/issue-11958.rs11
-rw-r--r--tests/ui/issues/issue-11958.stderr20
-rw-r--r--tests/ui/issues/issue-12028.rs38
-rw-r--r--tests/ui/issues/issue-12028.stderr15
-rw-r--r--tests/ui/issues/issue-12033.rs7
-rw-r--r--tests/ui/issues/issue-12041.rs13
-rw-r--r--tests/ui/issues/issue-12041.stderr11
-rw-r--r--tests/ui/issues/issue-12127.rs14
-rw-r--r--tests/ui/issues/issue-12127.stderr18
-rw-r--r--tests/ui/issues/issue-12133-1.rs10
-rw-r--r--tests/ui/issues/issue-12133-2.rs11
-rw-r--r--tests/ui/issues/issue-12133-3.rs13
-rw-r--r--tests/ui/issues/issue-12187-1.rs8
-rw-r--r--tests/ui/issues/issue-12187-1.stderr14
-rw-r--r--tests/ui/issues/issue-12187-2.rs8
-rw-r--r--tests/ui/issues/issue-12187-2.stderr14
-rw-r--r--tests/ui/issues/issue-12285.rs14
-rw-r--r--tests/ui/issues/issue-1251.rs16
-rw-r--r--tests/ui/issues/issue-12511.rs8
-rw-r--r--tests/ui/issues/issue-12511.stderr33
-rw-r--r--tests/ui/issues/issue-12567.rs13
-rw-r--r--tests/ui/issues/issue-12567.stderr47
-rw-r--r--tests/ui/issues/issue-1257.rs11
-rw-r--r--tests/ui/issues/issue-12612.rs15
-rw-r--r--tests/ui/issues/issue-12660.rs14
-rw-r--r--tests/ui/issues/issue-12677.rs9
-rw-r--r--tests/ui/issues/issue-12699.rs10
-rw-r--r--tests/ui/issues/issue-12729.rs14
-rw-r--r--tests/ui/issues/issue-12744.rs5
-rw-r--r--tests/ui/issues/issue-12860.rs49
-rw-r--r--tests/ui/issues/issue-12863.rs8
-rw-r--r--tests/ui/issues/issue-12863.stderr9
-rw-r--r--tests/ui/issues/issue-12909.rs20
-rw-r--r--tests/ui/issues/issue-12920.rs8
-rw-r--r--tests/ui/issues/issue-12997-1.rs11
-rw-r--r--tests/ui/issues/issue-12997-1.stderr14
-rw-r--r--tests/ui/issues/issue-12997-2.rs9
-rw-r--r--tests/ui/issues/issue-12997-2.stderr21
-rw-r--r--tests/ui/issues/issue-13027.rs178
-rw-r--r--tests/ui/issues/issue-13033.rs14
-rw-r--r--tests/ui/issues/issue-13033.stderr20
-rw-r--r--tests/ui/issues/issue-13058.rs27
-rw-r--r--tests/ui/issues/issue-13058.stderr12
-rw-r--r--tests/ui/issues/issue-13105.rs9
-rw-r--r--tests/ui/issues/issue-13167.rs22
-rw-r--r--tests/ui/issues/issue-13202.rs7
-rw-r--r--tests/ui/issues/issue-13204.rs25
-rw-r--r--tests/ui/issues/issue-13214.rs23
-rw-r--r--tests/ui/issues/issue-13259-windows-tcb-trash.rs42
-rw-r--r--tests/ui/issues/issue-13264.rs74
-rw-r--r--tests/ui/issues/issue-13323.rs58
-rw-r--r--tests/ui/issues/issue-13359.rs13
-rw-r--r--tests/ui/issues/issue-13359.stderr39
-rw-r--r--tests/ui/issues/issue-13405.rs20
-rw-r--r--tests/ui/issues/issue-13407.rs9
-rw-r--r--tests/ui/issues/issue-13407.stderr24
-rw-r--r--tests/ui/issues/issue-13434.rs21
-rw-r--r--tests/ui/issues/issue-13446.rs6
-rw-r--r--tests/ui/issues/issue-13446.stderr13
-rw-r--r--tests/ui/issues/issue-13466.rs20
-rw-r--r--tests/ui/issues/issue-13466.stderr26
-rw-r--r--tests/ui/issues/issue-13482-2.rs9
-rw-r--r--tests/ui/issues/issue-13482-2.stderr9
-rw-r--r--tests/ui/issues/issue-13482.rs7
-rw-r--r--tests/ui/issues/issue-13482.stderr9
-rw-r--r--tests/ui/issues/issue-13497-2.rs7
-rw-r--r--tests/ui/issues/issue-13497-2.stderr12
-rw-r--r--tests/ui/issues/issue-13497.rs8
-rw-r--r--tests/ui/issues/issue-13497.stderr15
-rw-r--r--tests/ui/issues/issue-13507-2.rs36
-rw-r--r--tests/ui/issues/issue-1362.rs8
-rw-r--r--tests/ui/issues/issue-1362.stderr16
-rw-r--r--tests/ui/issues/issue-13620.rs11
-rw-r--r--tests/ui/issues/issue-13665.rs15
-rw-r--r--tests/ui/issues/issue-13703.rs6
-rw-r--r--tests/ui/issues/issue-13763.rs15
-rw-r--r--tests/ui/issues/issue-13775.rs9
-rw-r--r--tests/ui/issues/issue-13808.rs18
-rw-r--r--tests/ui/issues/issue-13847.rs3
-rw-r--r--tests/ui/issues/issue-13847.stderr9
-rw-r--r--tests/ui/issues/issue-13867.rs48
-rw-r--r--tests/ui/issues/issue-13872.rs12
-rw-r--r--tests/ui/issues/issue-14082.rs20
-rw-r--r--tests/ui/issues/issue-14091-2.rs17
-rw-r--r--tests/ui/issues/issue-14091-2.stderr18
-rw-r--r--tests/ui/issues/issue-14091.rs4
-rw-r--r--tests/ui/issues/issue-14091.stderr9
-rw-r--r--tests/ui/issues/issue-14092.rs4
-rw-r--r--tests/ui/issues/issue-14092.stderr14
-rw-r--r--tests/ui/issues/issue-14229.rs21
-rw-r--r--tests/ui/issues/issue-14254.rs93
-rw-r--r--tests/ui/issues/issue-14285.rs17
-rw-r--r--tests/ui/issues/issue-14285.stderr11
-rw-r--r--tests/ui/issues/issue-14308.rs15
-rw-r--r--tests/ui/issues/issue-14330.rs7
-rw-r--r--tests/ui/issues/issue-14344.rs11
-rw-r--r--tests/ui/issues/issue-14366.rs4
-rw-r--r--tests/ui/issues/issue-14366.stderr16
-rw-r--r--tests/ui/issues/issue-14382.rs15
-rw-r--r--tests/ui/issues/issue-14393.rs10
-rw-r--r--tests/ui/issues/issue-14399.rs18
-rw-r--r--tests/ui/issues/issue-14421.rs16
-rw-r--r--tests/ui/issues/issue-14422.rs16
-rw-r--r--tests/ui/issues/issue-1448-2.rs7
-rw-r--r--tests/ui/issues/issue-1448-2.stderr21
-rw-r--r--tests/ui/issues/issue-1451.rs27
-rw-r--r--tests/ui/issues/issue-14541.rs10
-rw-r--r--tests/ui/issues/issue-14541.stderr11
-rw-r--r--tests/ui/issues/issue-1460.rs7
-rw-r--r--tests/ui/issues/issue-1460.stderr11
-rw-r--r--tests/ui/issues/issue-14721.rs4
-rw-r--r--tests/ui/issues/issue-14721.stderr9
-rw-r--r--tests/ui/issues/issue-1476.rs3
-rw-r--r--tests/ui/issues/issue-1476.stderr9
-rw-r--r--tests/ui/issues/issue-14821.rs21
-rw-r--r--tests/ui/issues/issue-14845.rs11
-rw-r--r--tests/ui/issues/issue-14845.stderr15
-rw-r--r--tests/ui/issues/issue-14853.rs20
-rw-r--r--tests/ui/issues/issue-14853.stderr12
-rw-r--r--tests/ui/issues/issue-14865.rs23
-rw-r--r--tests/ui/issues/issue-14875.rs35
-rw-r--r--tests/ui/issues/issue-14901.rs18
-rw-r--r--tests/ui/issues/issue-14915.rs6
-rw-r--r--tests/ui/issues/issue-14915.stderr11
-rw-r--r--tests/ui/issues/issue-14919.rs55
-rw-r--r--tests/ui/issues/issue-14959.rs55
-rw-r--r--tests/ui/issues/issue-15034.rs22
-rw-r--r--tests/ui/issues/issue-15034.stderr11
-rw-r--r--tests/ui/issues/issue-15043.rs14
-rw-r--r--tests/ui/issues/issue-15063.rs12
-rw-r--r--tests/ui/issues/issue-15094.rs26
-rw-r--r--tests/ui/issues/issue-15094.stderr12
-rw-r--r--tests/ui/issues/issue-15104.rs13
-rw-r--r--tests/ui/issues/issue-15129-rpass.rs25
-rw-r--r--tests/ui/issues/issue-15155.rs21
-rw-r--r--tests/ui/issues/issue-15167.rs26
-rw-r--r--tests/ui/issues/issue-15167.stderr47
-rw-r--r--tests/ui/issues/issue-15189.rs10
-rw-r--r--tests/ui/issues/issue-15207.rs6
-rw-r--r--tests/ui/issues/issue-15207.stderr9
-rw-r--r--tests/ui/issues/issue-15260.rs25
-rw-r--r--tests/ui/issues/issue-15260.stderr36
-rw-r--r--tests/ui/issues/issue-15381.rs9
-rw-r--r--tests/ui/issues/issue-15381.stderr11
-rw-r--r--tests/ui/issues/issue-15444.rs23
-rw-r--r--tests/ui/issues/issue-15523-big.rs39
-rw-r--r--tests/ui/issues/issue-15523.rs42
-rw-r--r--tests/ui/issues/issue-15562.rs19
-rw-r--r--tests/ui/issues/issue-15571.rs57
-rw-r--r--tests/ui/issues/issue-15673.rs9
-rw-r--r--tests/ui/issues/issue-15689-1.rs10
-rw-r--r--tests/ui/issues/issue-15689-2.rs10
-rw-r--r--tests/ui/issues/issue-15734.rs58
-rw-r--r--tests/ui/issues/issue-15735.rs17
-rw-r--r--tests/ui/issues/issue-15756.rs14
-rw-r--r--tests/ui/issues/issue-15756.stderr13
-rw-r--r--tests/ui/issues/issue-15763.rs88
-rw-r--r--tests/ui/issues/issue-15774.rs25
-rw-r--r--tests/ui/issues/issue-15783.rs14
-rw-r--r--tests/ui/issues/issue-15783.stderr19
-rw-r--r--tests/ui/issues/issue-15793.rs27
-rw-r--r--tests/ui/issues/issue-15858.rs33
-rw-r--r--tests/ui/issues/issue-15896.rs15
-rw-r--r--tests/ui/issues/issue-15896.stderr12
-rw-r--r--tests/ui/issues/issue-15965.rs7
-rw-r--r--tests/ui/issues/issue-15965.stderr11
-rw-r--r--tests/ui/issues/issue-16048.rs30
-rw-r--r--tests/ui/issues/issue-16048.stderr21
-rw-r--r--tests/ui/issues/issue-16149.rs11
-rw-r--r--tests/ui/issues/issue-16149.stderr12
-rw-r--r--tests/ui/issues/issue-16151.rs29
-rw-r--r--tests/ui/issues/issue-16250.rs9
-rw-r--r--tests/ui/issues/issue-16250.stderr22
-rw-r--r--tests/ui/issues/issue-16256.rs7
-rw-r--r--tests/ui/issues/issue-16256.stderr11
-rw-r--r--tests/ui/issues/issue-16278.rs10
-rw-r--r--tests/ui/issues/issue-16338.rs10
-rw-r--r--tests/ui/issues/issue-16338.stderr14
-rw-r--r--tests/ui/issues/issue-16401.rs15
-rw-r--r--tests/ui/issues/issue-16401.stderr14
-rw-r--r--tests/ui/issues/issue-16441.rs12
-rw-r--r--tests/ui/issues/issue-16452.rs10
-rw-r--r--tests/ui/issues/issue-16492.rs67
-rw-r--r--tests/ui/issues/issue-16530.rs15
-rw-r--r--tests/ui/issues/issue-16538.mir.stderr29
-rw-r--r--tests/ui/issues/issue-16538.rs19
-rw-r--r--tests/ui/issues/issue-16538.thir.stderr29
-rw-r--r--tests/ui/issues/issue-16560.rs18
-rw-r--r--tests/ui/issues/issue-16562.rs17
-rw-r--r--tests/ui/issues/issue-16562.stderr9
-rw-r--r--tests/ui/issues/issue-16596.rs22
-rw-r--r--tests/ui/issues/issue-1660.rs8
-rw-r--r--tests/ui/issues/issue-16643.rs10
-rw-r--r--tests/ui/issues/issue-16648.rs11
-rw-r--r--tests/ui/issues/issue-16668.rs20
-rw-r--r--tests/ui/issues/issue-16671.rs12
-rw-r--r--tests/ui/issues/issue-16683.rs9
-rw-r--r--tests/ui/issues/issue-16683.stderr13
-rw-r--r--tests/ui/issues/issue-16725.rs8
-rw-r--r--tests/ui/issues/issue-16725.stderr15
-rw-r--r--tests/ui/issues/issue-16739.rs45
-rw-r--r--tests/ui/issues/issue-16745.rs11
-rw-r--r--tests/ui/issues/issue-16774.rs45
-rw-r--r--tests/ui/issues/issue-16783.rs8
-rw-r--r--tests/ui/issues/issue-16819.rs12
-rw-r--r--tests/ui/issues/issue-16922-rpass.rs11
-rw-r--r--tests/ui/issues/issue-16922.rs10
-rw-r--r--tests/ui/issues/issue-16922.stderr15
-rw-r--r--tests/ui/issues/issue-16939.rs8
-rw-r--r--tests/ui/issues/issue-16939.stderr19
-rw-r--r--tests/ui/issues/issue-1696.rs8
-rw-r--r--tests/ui/issues/issue-16966.rs4
-rw-r--r--tests/ui/issues/issue-16966.stderr11
-rw-r--r--tests/ui/issues/issue-16994.rs9
-rw-r--r--tests/ui/issues/issue-17001.rs5
-rw-r--r--tests/ui/issues/issue-17001.stderr9
-rw-r--r--tests/ui/issues/issue-17033.rs6
-rw-r--r--tests/ui/issues/issue-17033.stderr13
-rw-r--r--tests/ui/issues/issue-17068.rs12
-rw-r--r--tests/ui/issues/issue-17121.rs31
-rw-r--r--tests/ui/issues/issue-17216.rs21
-rw-r--r--tests/ui/issues/issue-17252.rs10
-rw-r--r--tests/ui/issues/issue-17252.stderr16
-rw-r--r--tests/ui/issues/issue-17302.rs26
-rw-r--r--tests/ui/issues/issue-17322.rs13
-rw-r--r--tests/ui/issues/issue-17336.rs9
-rw-r--r--tests/ui/issues/issue-17337.rs17
-rw-r--r--tests/ui/issues/issue-17337.stderr14
-rw-r--r--tests/ui/issues/issue-17351.rs10
-rw-r--r--tests/ui/issues/issue-17361.rs9
-rw-r--r--tests/ui/issues/issue-17373.rs4
-rw-r--r--tests/ui/issues/issue-17373.stderr9
-rw-r--r--tests/ui/issues/issue-17385.rs29
-rw-r--r--tests/ui/issues/issue-17385.stderr23
-rw-r--r--tests/ui/issues/issue-17405.rs9
-rw-r--r--tests/ui/issues/issue-17405.stderr9
-rw-r--r--tests/ui/issues/issue-17431-1.rs6
-rw-r--r--tests/ui/issues/issue-17431-1.stderr14
-rw-r--r--tests/ui/issues/issue-17431-2.rs8
-rw-r--r--tests/ui/issues/issue-17431-2.stderr20
-rw-r--r--tests/ui/issues/issue-17431-3.rs8
-rw-r--r--tests/ui/issues/issue-17431-3.stderr14
-rw-r--r--tests/ui/issues/issue-17431-4.rs8
-rw-r--r--tests/ui/issues/issue-17431-4.stderr14
-rw-r--r--tests/ui/issues/issue-17431-5.rs11
-rw-r--r--tests/ui/issues/issue-17431-5.stderr14
-rw-r--r--tests/ui/issues/issue-17431-6.rs8
-rw-r--r--tests/ui/issues/issue-17431-6.stderr14
-rw-r--r--tests/ui/issues/issue-17431-7.rs6
-rw-r--r--tests/ui/issues/issue-17431-7.stderr14
-rw-r--r--tests/ui/issues/issue-17441.rs13
-rw-r--r--tests/ui/issues/issue-17441.stderr47
-rw-r--r--tests/ui/issues/issue-17450.rs7
-rw-r--r--tests/ui/issues/issue-17503.rs10
-rw-r--r--tests/ui/issues/issue-17546.rs42
-rw-r--r--tests/ui/issues/issue-17546.stderr73
-rw-r--r--tests/ui/issues/issue-17551.rs8
-rw-r--r--tests/ui/issues/issue-17551.stderr14
-rw-r--r--tests/ui/issues/issue-17651.rs7
-rw-r--r--tests/ui/issues/issue-17651.stderr15
-rw-r--r--tests/ui/issues/issue-17662.rs17
-rw-r--r--tests/ui/issues/issue-17732.rs13
-rw-r--r--tests/ui/issues/issue-17734.rs15
-rw-r--r--tests/ui/issues/issue-17740.rs18
-rw-r--r--tests/ui/issues/issue-17740.stderr41
-rw-r--r--tests/ui/issues/issue-17746.rs25
-rw-r--r--tests/ui/issues/issue-17758.rs12
-rw-r--r--tests/ui/issues/issue-17758.stderr13
-rw-r--r--tests/ui/issues/issue-17771.rs21
-rw-r--r--tests/ui/issues/issue-17800.rs12
-rw-r--r--tests/ui/issues/issue-17800.stderr14
-rw-r--r--tests/ui/issues/issue-17816.rs10
-rw-r--r--tests/ui/issues/issue-17877.rs13
-rw-r--r--tests/ui/issues/issue-17897.rs8
-rw-r--r--tests/ui/issues/issue-17904-2.rs6
-rw-r--r--tests/ui/issues/issue-17904-2.stderr11
-rw-r--r--tests/ui/issues/issue-17904.rs14
-rw-r--r--tests/ui/issues/issue-17905-2.rs18
-rw-r--r--tests/ui/issues/issue-17905-2.stderr41
-rw-r--r--tests/ui/issues/issue-17905.rs19
-rw-r--r--tests/ui/issues/issue-17933.rs9
-rw-r--r--tests/ui/issues/issue-17933.stderr9
-rw-r--r--tests/ui/issues/issue-17954.rs15
-rw-r--r--tests/ui/issues/issue-17954.stderr12
-rw-r--r--tests/ui/issues/issue-17959.rs21
-rw-r--r--tests/ui/issues/issue-17959.stderr15
-rw-r--r--tests/ui/issues/issue-17994.rs3
-rw-r--r--tests/ui/issues/issue-17994.stderr9
-rw-r--r--tests/ui/issues/issue-17999.rs10
-rw-r--r--tests/ui/issues/issue-17999.stderr20
-rw-r--r--tests/ui/issues/issue-18058.rs4
-rw-r--r--tests/ui/issues/issue-18058.stderr9
-rw-r--r--tests/ui/issues/issue-18088.rs8
-rw-r--r--tests/ui/issues/issue-18107.rs13
-rw-r--r--tests/ui/issues/issue-18107.stderr18
-rw-r--r--tests/ui/issues/issue-18110.rs7
-rw-r--r--tests/ui/issues/issue-18119.rs12
-rw-r--r--tests/ui/issues/issue-18119.stderr21
-rw-r--r--tests/ui/issues/issue-18159.rs3
-rw-r--r--tests/ui/issues/issue-18159.stderr14
-rw-r--r--tests/ui/issues/issue-18173.rs12
-rw-r--r--tests/ui/issues/issue-18183.rs3
-rw-r--r--tests/ui/issues/issue-18183.stderr9
-rw-r--r--tests/ui/issues/issue-18188.rs22
-rw-r--r--tests/ui/issues/issue-1821.rs13
-rw-r--r--tests/ui/issues/issue-18232.rs22
-rw-r--r--tests/ui/issues/issue-18352.rs14
-rw-r--r--tests/ui/issues/issue-18353.rs15
-rw-r--r--tests/ui/issues/issue-18389.rs18
-rw-r--r--tests/ui/issues/issue-18389.stderr16
-rw-r--r--tests/ui/issues/issue-18423.rs8
-rw-r--r--tests/ui/issues/issue-18423.stderr11
-rw-r--r--tests/ui/issues/issue-18446-2.rs13
-rw-r--r--tests/ui/issues/issue-18446.rs19
-rw-r--r--tests/ui/issues/issue-18446.stderr24
-rw-r--r--tests/ui/issues/issue-18464.rs12
-rw-r--r--tests/ui/issues/issue-18501.rs13
-rw-r--r--tests/ui/issues/issue-18514.rs16
-rw-r--r--tests/ui/issues/issue-18532.rs7
-rw-r--r--tests/ui/issues/issue-18532.stderr11
-rw-r--r--tests/ui/issues/issue-18539.rs16
-rw-r--r--tests/ui/issues/issue-18566.rs25
-rw-r--r--tests/ui/issues/issue-18566.stderr12
-rw-r--r--tests/ui/issues/issue-18576.rs16
-rw-r--r--tests/ui/issues/issue-18611.rs9
-rw-r--r--tests/ui/issues/issue-18611.stderr9
-rw-r--r--tests/ui/issues/issue-18685.rs21
-rw-r--r--tests/ui/issues/issue-1871.rs12
-rw-r--r--tests/ui/issues/issue-1871.stderr9
-rw-r--r--tests/ui/issues/issue-18711.rs12
-rw-r--r--tests/ui/issues/issue-18738.rs17
-rw-r--r--tests/ui/issues/issue-18767.rs10
-rw-r--r--tests/ui/issues/issue-18783.rs28
-rw-r--r--tests/ui/issues/issue-18783.stderr33
-rw-r--r--tests/ui/issues/issue-18804/auxiliary/lib.rs10
-rw-r--r--tests/ui/issues/issue-18804/main.rs19
-rw-r--r--tests/ui/issues/issue-18809.rs12
-rw-r--r--tests/ui/issues/issue-18819.rs18
-rw-r--r--tests/ui/issues/issue-18819.stderr30
-rw-r--r--tests/ui/issues/issue-18845.rs16
-rw-r--r--tests/ui/issues/issue-18859.rs16
-rw-r--r--tests/ui/issues/issue-18906.rs30
-rw-r--r--tests/ui/issues/issue-18913.rs9
-rw-r--r--tests/ui/issues/issue-18919.rs12
-rw-r--r--tests/ui/issues/issue-18919.stderr23
-rw-r--r--tests/ui/issues/issue-18952.rs56
-rw-r--r--tests/ui/issues/issue-18959.rs20
-rw-r--r--tests/ui/issues/issue-18959.stderr18
-rw-r--r--tests/ui/issues/issue-18988.rs11
-rw-r--r--tests/ui/issues/issue-1900.rs2
-rw-r--r--tests/ui/issues/issue-1900.stderr9
-rw-r--r--tests/ui/issues/issue-19001.rs11
-rw-r--r--tests/ui/issues/issue-19037.rs20
-rw-r--r--tests/ui/issues/issue-19086.rs13
-rw-r--r--tests/ui/issues/issue-19086.stderr12
-rw-r--r--tests/ui/issues/issue-19097.rs14
-rw-r--r--tests/ui/issues/issue-19098.rs12
-rw-r--r--tests/ui/issues/issue-19100.fixed29
-rw-r--r--tests/ui/issues/issue-19100.rs29
-rw-r--r--tests/ui/issues/issue-19100.stderr17
-rw-r--r--tests/ui/issues/issue-19102.rs12
-rw-r--r--tests/ui/issues/issue-19127.rs10
-rw-r--r--tests/ui/issues/issue-19129-1.rs16
-rw-r--r--tests/ui/issues/issue-19129-2.rs11
-rw-r--r--tests/ui/issues/issue-19135.rs13
-rw-r--r--tests/ui/issues/issue-1920-1.rs14
-rw-r--r--tests/ui/issues/issue-1920-1.stderr15
-rw-r--r--tests/ui/issues/issue-1920-2.rs12
-rw-r--r--tests/ui/issues/issue-1920-2.stderr15
-rw-r--r--tests/ui/issues/issue-1920-3.rs16
-rw-r--r--tests/ui/issues/issue-1920-3.stderr15
-rw-r--r--tests/ui/issues/issue-19244-1.rs6
-rw-r--r--tests/ui/issues/issue-19244-1.stderr9
-rw-r--r--tests/ui/issues/issue-19244-2.rs7
-rw-r--r--tests/ui/issues/issue-19244-2.stderr11
-rw-r--r--tests/ui/issues/issue-19293.rs10
-rw-r--r--tests/ui/issues/issue-19340-1.rs17
-rw-r--r--tests/ui/issues/issue-19340-2.rs24
-rw-r--r--tests/ui/issues/issue-19367.rs32
-rw-r--r--tests/ui/issues/issue-19380.rs18
-rw-r--r--tests/ui/issues/issue-19380.stderr25
-rw-r--r--tests/ui/issues/issue-19398.rs12
-rw-r--r--tests/ui/issues/issue-19404.rs37
-rw-r--r--tests/ui/issues/issue-19479.rs19
-rw-r--r--tests/ui/issues/issue-19482.rs13
-rw-r--r--tests/ui/issues/issue-19482.stderr12
-rw-r--r--tests/ui/issues/issue-19499.rs15
-rw-r--r--tests/ui/issues/issue-19521.rs3
-rw-r--r--tests/ui/issues/issue-19521.stderr9
-rw-r--r--tests/ui/issues/issue-19601.rs6
-rw-r--r--tests/ui/issues/issue-1962.fixed10
-rw-r--r--tests/ui/issues/issue-1962.rs10
-rw-r--r--tests/ui/issues/issue-1962.stderr10
-rw-r--r--tests/ui/issues/issue-19631.rs16
-rw-r--r--tests/ui/issues/issue-19632.rs14
-rw-r--r--tests/ui/issues/issue-19692.rs8
-rw-r--r--tests/ui/issues/issue-19692.stderr12
-rw-r--r--tests/ui/issues/issue-19707.rs7
-rw-r--r--tests/ui/issues/issue-19707.stderr36
-rw-r--r--tests/ui/issues/issue-19734.rs8
-rw-r--r--tests/ui/issues/issue-19734.stderr8
-rw-r--r--tests/ui/issues/issue-1974.rs11
-rw-r--r--tests/ui/issues/issue-19811-escape-unicode.rs9
-rw-r--r--tests/ui/issues/issue-19850.rs22
-rw-r--r--tests/ui/issues/issue-19922.rs8
-rw-r--r--tests/ui/issues/issue-19922.stderr11
-rw-r--r--tests/ui/issues/issue-19982.rs22
-rw-r--r--tests/ui/issues/issue-19991.rs9
-rw-r--r--tests/ui/issues/issue-19991.stderr16
-rw-r--r--tests/ui/issues/issue-20009.rs13
-rw-r--r--tests/ui/issues/issue-20055-box-trait.rs41
-rw-r--r--tests/ui/issues/issue-20055-box-unsized-array.rs29
-rw-r--r--tests/ui/issues/issue-20162.rs7
-rw-r--r--tests/ui/issues/issue-20162.stderr16
-rw-r--r--tests/ui/issues/issue-20174.rs7
-rw-r--r--tests/ui/issues/issue-20186.rs16
-rw-r--r--tests/ui/issues/issue-20225.rs22
-rw-r--r--tests/ui/issues/issue-20225.stderr46
-rw-r--r--tests/ui/issues/issue-20261.rs7
-rw-r--r--tests/ui/issues/issue-20261.stderr9
-rw-r--r--tests/ui/issues/issue-20313-rpass.rs11
-rw-r--r--tests/ui/issues/issue-20313.rs6
-rw-r--r--tests/ui/issues/issue-20313.stderr12
-rw-r--r--tests/ui/issues/issue-20389.rs15
-rw-r--r--tests/ui/issues/issue-20396.rs16
-rw-r--r--tests/ui/issues/issue-20413.rs42
-rw-r--r--tests/ui/issues/issue-20413.stderr73
-rw-r--r--tests/ui/issues/issue-20414.rs21
-rw-r--r--tests/ui/issues/issue-20427.rs88
-rw-r--r--tests/ui/issues/issue-20433.rs8
-rw-r--r--tests/ui/issues/issue-20433.stderr13
-rw-r--r--tests/ui/issues/issue-20454.rs13
-rw-r--r--tests/ui/issues/issue-20544.rs18
-rw-r--r--tests/ui/issues/issue-20575.rs10
-rw-r--r--tests/ui/issues/issue-20605.rs6
-rw-r--r--tests/ui/issues/issue-20605.stderr16
-rw-r--r--tests/ui/issues/issue-20616.rs44
-rw-r--r--tests/ui/issues/issue-2063-resource.rs14
-rw-r--r--tests/ui/issues/issue-2063.rs22
-rw-r--r--tests/ui/issues/issue-20644.rs32
-rw-r--r--tests/ui/issues/issue-20676.rs12
-rw-r--r--tests/ui/issues/issue-20714.rs5
-rw-r--r--tests/ui/issues/issue-20714.stderr20
-rw-r--r--tests/ui/issues/issue-2074.rs16
-rw-r--r--tests/ui/issues/issue-20763-1.rs29
-rw-r--r--tests/ui/issues/issue-20763-2.rs24
-rw-r--r--tests/ui/issues/issue-20772.rs5
-rw-r--r--tests/ui/issues/issue-20772.stderr16
-rw-r--r--tests/ui/issues/issue-20797.rs93
-rw-r--r--tests/ui/issues/issue-20803.rs10
-rw-r--r--tests/ui/issues/issue-20831-debruijn.rs39
-rw-r--r--tests/ui/issues/issue-20831-debruijn.stderr27
-rw-r--r--tests/ui/issues/issue-20847.rs12
-rw-r--r--tests/ui/issues/issue-20939.rs6
-rw-r--r--tests/ui/issues/issue-20939.stderr9
-rw-r--r--tests/ui/issues/issue-20953.rs12
-rw-r--r--tests/ui/issues/issue-20971.rs23
-rw-r--r--tests/ui/issues/issue-21033.rs48
-rw-r--r--tests/ui/issues/issue-21140.rs6
-rw-r--r--tests/ui/issues/issue-21160.rs11
-rw-r--r--tests/ui/issues/issue-21160.stderr17
-rw-r--r--tests/ui/issues/issue-21174-2.rs13
-rw-r--r--tests/ui/issues/issue-21174.rs11
-rw-r--r--tests/ui/issues/issue-21174.stderr12
-rw-r--r--tests/ui/issues/issue-21177.rs9
-rw-r--r--tests/ui/issues/issue-21177.stderr16
-rw-r--r--tests/ui/issues/issue-21202.rs15
-rw-r--r--tests/ui/issues/issue-21202.stderr14
-rw-r--r--tests/ui/issues/issue-21245.rs56
-rw-r--r--tests/ui/issues/issue-21291.rs10
-rw-r--r--tests/ui/issues/issue-21306.rs9
-rw-r--r--tests/ui/issues/issue-21332.rs10
-rw-r--r--tests/ui/issues/issue-21332.stderr15
-rw-r--r--tests/ui/issues/issue-21361.rs11
-rw-r--r--tests/ui/issues/issue-21384.rs21
-rw-r--r--tests/ui/issues/issue-21400.rs56
-rw-r--r--tests/ui/issues/issue-21402.rs12
-rw-r--r--tests/ui/issues/issue-21449.rs6
-rw-r--r--tests/ui/issues/issue-21449.stderr9
-rw-r--r--tests/ui/issues/issue-2150.rs12
-rw-r--r--tests/ui/issues/issue-2150.stderr16
-rw-r--r--tests/ui/issues/issue-2151.rs4
-rw-r--r--tests/ui/issues/issue-2151.stderr16
-rw-r--r--tests/ui/issues/issue-21546.rs49
-rw-r--r--tests/ui/issues/issue-21546.stderr69
-rw-r--r--tests/ui/issues/issue-21554.rs6
-rw-r--r--tests/ui/issues/issue-21554.stderr9
-rw-r--r--tests/ui/issues/issue-21596.rs5
-rw-r--r--tests/ui/issues/issue-21596.stderr15
-rw-r--r--tests/ui/issues/issue-21600.rs18
-rw-r--r--tests/ui/issues/issue-21600.stderr31
-rw-r--r--tests/ui/issues/issue-21622.rs21
-rw-r--r--tests/ui/issues/issue-21634.rs20
-rw-r--r--tests/ui/issues/issue-21655.rs12
-rw-r--r--tests/ui/issues/issue-2170-exe.rs9
-rw-r--r--tests/ui/issues/issue-21701.rs15
-rw-r--r--tests/ui/issues/issue-21701.stderr30
-rw-r--r--tests/ui/issues/issue-21763.rs11
-rw-r--r--tests/ui/issues/issue-21763.stderr20
-rw-r--r--tests/ui/issues/issue-21837.rs10
-rw-r--r--tests/ui/issues/issue-21837.stderr19
-rw-r--r--tests/ui/issues/issue-21891.rs12
-rw-r--r--tests/ui/issues/issue-2190-1.rs26
-rw-r--r--tests/ui/issues/issue-21909.rs15
-rw-r--r--tests/ui/issues/issue-21922.rs17
-rw-r--r--tests/ui/issues/issue-21946.rs12
-rw-r--r--tests/ui/issues/issue-21946.stderr9
-rw-r--r--tests/ui/issues/issue-21950.rs13
-rw-r--r--tests/ui/issues/issue-21950.stderr24
-rw-r--r--tests/ui/issues/issue-21974.rs18
-rw-r--r--tests/ui/issues/issue-21974.stderr17
-rw-r--r--tests/ui/issues/issue-22008.rs9
-rw-r--r--tests/ui/issues/issue-22034.rs11
-rw-r--r--tests/ui/issues/issue-22034.stderr13
-rw-r--r--tests/ui/issues/issue-22036.rs25
-rw-r--r--tests/ui/issues/issue-2214.rs41
-rw-r--r--tests/ui/issues/issue-22258.rs10
-rw-r--r--tests/ui/issues/issue-22289.rs3
-rw-r--r--tests/ui/issues/issue-22289.stderr14
-rw-r--r--tests/ui/issues/issue-22312.rs17
-rw-r--r--tests/ui/issues/issue-22312.stderr14
-rw-r--r--tests/ui/issues/issue-22346.rs11
-rw-r--r--tests/ui/issues/issue-22356.rs34
-rw-r--r--tests/ui/issues/issue-22370.rs6
-rw-r--r--tests/ui/issues/issue-22370.stderr14
-rw-r--r--tests/ui/issues/issue-22384.rs8
-rw-r--r--tests/ui/issues/issue-22384.stderr9
-rw-r--r--tests/ui/issues/issue-22403.rs6
-rw-r--r--tests/ui/issues/issue-22426.rs9
-rw-r--r--tests/ui/issues/issue-22434.rs8
-rw-r--r--tests/ui/issues/issue-22434.stderr12
-rw-r--r--tests/ui/issues/issue-22468.rs9
-rw-r--r--tests/ui/issues/issue-22468.stderr13
-rw-r--r--tests/ui/issues/issue-22471.rs7
-rw-r--r--tests/ui/issues/issue-22536-copy-mustnt-zero.rs28
-rw-r--r--tests/ui/issues/issue-22577.rs26
-rw-r--r--tests/ui/issues/issue-22599.rs10
-rw-r--r--tests/ui/issues/issue-22599.stderr14
-rw-r--r--tests/ui/issues/issue-22603.rs15
-rw-r--r--tests/ui/issues/issue-22629.rs14
-rw-r--r--tests/ui/issues/issue-22638.polonius.stderr15
-rw-r--r--tests/ui/issues/issue-22638.rs63
-rw-r--r--tests/ui/issues/issue-22638.stderr14
-rw-r--r--tests/ui/issues/issue-22644.rs35
-rw-r--r--tests/ui/issues/issue-22644.stderr123
-rw-r--r--tests/ui/issues/issue-22673.rs7
-rw-r--r--tests/ui/issues/issue-22684.rs18
-rw-r--r--tests/ui/issues/issue-22684.stderr11
-rw-r--r--tests/ui/issues/issue-22706.rs3
-rw-r--r--tests/ui/issues/issue-22706.stderr11
-rw-r--r--tests/ui/issues/issue-22777.rs48
-rw-r--r--tests/ui/issues/issue-22781.rs15
-rw-r--r--tests/ui/issues/issue-22789.rs8
-rw-r--r--tests/ui/issues/issue-2281-part1.rs1
-rw-r--r--tests/ui/issues/issue-2281-part1.stderr9
-rw-r--r--tests/ui/issues/issue-22814.rs13
-rw-r--r--tests/ui/issues/issue-2284.rs14
-rw-r--r--tests/ui/issues/issue-22864-1.rs7
-rw-r--r--tests/ui/issues/issue-22864-2.rs7
-rw-r--r--tests/ui/issues/issue-22872.rs24
-rw-r--r--tests/ui/issues/issue-22872.stderr24
-rw-r--r--tests/ui/issues/issue-22874.rs10
-rw-r--r--tests/ui/issues/issue-22874.stderr12
-rw-r--r--tests/ui/issues/issue-2288.rs33
-rw-r--r--tests/ui/issues/issue-22886.rs21
-rw-r--r--tests/ui/issues/issue-22886.stderr9
-rw-r--r--tests/ui/issues/issue-22894.rs4
-rw-r--r--tests/ui/issues/issue-22933-1.rs23
-rw-r--r--tests/ui/issues/issue-22933-2.rs8
-rw-r--r--tests/ui/issues/issue-22933-2.stderr15
-rw-r--r--tests/ui/issues/issue-22992-2.rs18
-rw-r--r--tests/ui/issues/issue-22992.rs75
-rw-r--r--tests/ui/issues/issue-23024.rs12
-rw-r--r--tests/ui/issues/issue-23024.stderr30
-rw-r--r--tests/ui/issues/issue-23036.rs10
-rw-r--r--tests/ui/issues/issue-23041.rs7
-rw-r--r--tests/ui/issues/issue-23041.stderr14
-rw-r--r--tests/ui/issues/issue-23046.rs20
-rw-r--r--tests/ui/issues/issue-23046.stderr14
-rw-r--r--tests/ui/issues/issue-23073.rs9
-rw-r--r--tests/ui/issues/issue-23073.stderr14
-rw-r--r--tests/ui/issues/issue-2311-2.rs26
-rw-r--r--tests/ui/issues/issue-2311.rs11
-rw-r--r--tests/ui/issues/issue-2312.rs16
-rw-r--r--tests/ui/issues/issue-23122-1.rs14
-rw-r--r--tests/ui/issues/issue-23122-1.stderr9
-rw-r--r--tests/ui/issues/issue-23122-2.rs15
-rw-r--r--tests/ui/issues/issue-23122-2.stderr19
-rw-r--r--tests/ui/issues/issue-2316-c.rs12
-rw-r--r--tests/ui/issues/issue-23173.rs13
-rw-r--r--tests/ui/issues/issue-23173.stderr39
-rw-r--r--tests/ui/issues/issue-23189.rs5
-rw-r--r--tests/ui/issues/issue-23189.stderr9
-rw-r--r--tests/ui/issues/issue-23217.rs5
-rw-r--r--tests/ui/issues/issue-23217.stderr14
-rw-r--r--tests/ui/issues/issue-23253.rs6
-rw-r--r--tests/ui/issues/issue-23253.stderr9
-rw-r--r--tests/ui/issues/issue-23261.rs61
-rw-r--r--tests/ui/issues/issue-23281.rs12
-rw-r--r--tests/ui/issues/issue-23281.stderr23
-rw-r--r--tests/ui/issues/issue-23302-1.rs7
-rw-r--r--tests/ui/issues/issue-23302-1.stderr16
-rw-r--r--tests/ui/issues/issue-23302-2.rs8
-rw-r--r--tests/ui/issues/issue-23302-2.stderr16
-rw-r--r--tests/ui/issues/issue-23302-3.rs5
-rw-r--r--tests/ui/issues/issue-23302-3.stderr21
-rw-r--r--tests/ui/issues/issue-23304-1.rs25
-rw-r--r--tests/ui/issues/issue-23304-2.rs13
-rw-r--r--tests/ui/issues/issue-23311.rs11
-rw-r--r--tests/ui/issues/issue-23336.rs11
-rw-r--r--tests/ui/issues/issue-23354-2.rs9
-rw-r--r--tests/ui/issues/issue-23354.rs8
-rw-r--r--tests/ui/issues/issue-23406.rs15
-rw-r--r--tests/ui/issues/issue-23433.rs13
-rw-r--r--tests/ui/issues/issue-23442.rs23
-rw-r--r--tests/ui/issues/issue-23477.rs16
-rw-r--r--tests/ui/issues/issue-23485.rs50
-rw-r--r--tests/ui/issues/issue-23491.rs8
-rw-r--r--tests/ui/issues/issue-23543.rs11
-rw-r--r--tests/ui/issues/issue-23543.stderr9
-rw-r--r--tests/ui/issues/issue-23544.rs9
-rw-r--r--tests/ui/issues/issue-23544.stderr9
-rw-r--r--tests/ui/issues/issue-23550.rs22
-rw-r--r--tests/ui/issues/issue-23589.rs5
-rw-r--r--tests/ui/issues/issue-23589.stderr26
-rw-r--r--tests/ui/issues/issue-23611-enum-swap-in-drop.rs259
-rw-r--r--tests/ui/issues/issue-23649-1.rs12
-rw-r--r--tests/ui/issues/issue-23649-2.rs10
-rw-r--r--tests/ui/issues/issue-23649-3.rs5
-rw-r--r--tests/ui/issues/issue-23699.rs14
-rw-r--r--tests/ui/issues/issue-23781.rs29
-rw-r--r--tests/ui/issues/issue-2380-b.rs10
-rw-r--r--tests/ui/issues/issue-23808.rs59
-rw-r--r--tests/ui/issues/issue-2383.rs9
-rw-r--r--tests/ui/issues/issue-23891.rs11
-rw-r--r--tests/ui/issues/issue-23898.rs11
-rw-r--r--tests/ui/issues/issue-23958.rs13
-rw-r--r--tests/ui/issues/issue-23966.rs4
-rw-r--r--tests/ui/issues/issue-23966.stderr15
-rw-r--r--tests/ui/issues/issue-23992.rs19
-rw-r--r--tests/ui/issues/issue-24013.rs7
-rw-r--r--tests/ui/issues/issue-24013.stderr9
-rw-r--r--tests/ui/issues/issue-24036.rs16
-rw-r--r--tests/ui/issues/issue-24036.stderr28
-rw-r--r--tests/ui/issues/issue-24086.rs23
-rw-r--r--tests/ui/issues/issue-2414-c.rs9
-rw-r--r--tests/ui/issues/issue-24161.rs11
-rw-r--r--tests/ui/issues/issue-24227.rs18
-rw-r--r--tests/ui/issues/issue-2428.rs14
-rw-r--r--tests/ui/issues/issue-24308.rs17
-rw-r--r--tests/ui/issues/issue-24322.rs9
-rw-r--r--tests/ui/issues/issue-24322.stderr14
-rw-r--r--tests/ui/issues/issue-24352.rs4
-rw-r--r--tests/ui/issues/issue-24352.stderr20
-rw-r--r--tests/ui/issues/issue-24353.rs8
-rw-r--r--tests/ui/issues/issue-24357.rs11
-rw-r--r--tests/ui/issues/issue-24357.stderr17
-rw-r--r--tests/ui/issues/issue-24363.rs6
-rw-r--r--tests/ui/issues/issue-24363.stderr18
-rw-r--r--tests/ui/issues/issue-24365.rs19
-rw-r--r--tests/ui/issues/issue-24365.stderr21
-rw-r--r--tests/ui/issues/issue-24389.rs11
-rw-r--r--tests/ui/issues/issue-24424.rs7
-rw-r--r--tests/ui/issues/issue-24424.stderr15
-rw-r--r--tests/ui/issues/issue-24434.rs7
-rw-r--r--tests/ui/issues/issue-24446.rs7
-rw-r--r--tests/ui/issues/issue-24446.stderr20
-rw-r--r--tests/ui/issues/issue-2445-b.rs31
-rw-r--r--tests/ui/issues/issue-2445.rs29
-rw-r--r--tests/ui/issues/issue-24533.rs24
-rw-r--r--tests/ui/issues/issue-24589.rs17
-rw-r--r--tests/ui/issues/issue-2463.rs25
-rw-r--r--tests/ui/issues/issue-24682.rs21
-rw-r--r--tests/ui/issues/issue-24682.stderr22
-rw-r--r--tests/ui/issues/issue-24687-embed-debuginfo/auxiliary/issue-24687-lib.rs10
-rw-r--r--tests/ui/issues/issue-24687-embed-debuginfo/auxiliary/issue-24687-mbcs-in-comments.rs27
-rw-r--r--tests/ui/issues/issue-24687-embed-debuginfo/main.rs14
-rw-r--r--tests/ui/issues/issue-2470-bounds-check-overflow.rs27
-rw-r--r--tests/ui/issues/issue-2472.rs14
-rw-r--r--tests/ui/issues/issue-24779.rs4
-rw-r--r--tests/ui/issues/issue-24819.rs11
-rw-r--r--tests/ui/issues/issue-24819.stderr19
-rw-r--r--tests/ui/issues/issue-2487-a.rs32
-rw-r--r--tests/ui/issues/issue-24945-repeat-dash-opts.rs10
-rw-r--r--tests/ui/issues/issue-24947.rs25
-rw-r--r--tests/ui/issues/issue-24954.rs13
-rw-r--r--tests/ui/issues/issue-2502.rs24
-rw-r--r--tests/ui/issues/issue-25076.rs11
-rw-r--r--tests/ui/issues/issue-25076.stderr17
-rw-r--r--tests/ui/issues/issue-25089.rs34
-rw-r--r--tests/ui/issues/issue-25145.rs13
-rw-r--r--tests/ui/issues/issue-25180.rs7
-rw-r--r--tests/ui/issues/issue-25185.rs13
-rw-r--r--tests/ui/issues/issue-2526-a.rs11
-rw-r--r--tests/ui/issues/issue-25279.rs16
-rw-r--r--tests/ui/issues/issue-25343.rs22
-rw-r--r--tests/ui/issues/issue-25368.rs14
-rw-r--r--tests/ui/issues/issue-25368.stderr14
-rw-r--r--tests/ui/issues/issue-25386.rs27
-rw-r--r--tests/ui/issues/issue-25386.stderr14
-rw-r--r--tests/ui/issues/issue-25394.rs6
-rw-r--r--tests/ui/issues/issue-25439.rs9
-rw-r--r--tests/ui/issues/issue-25439.stderr19
-rw-r--r--tests/ui/issues/issue-25467.rs12
-rw-r--r--tests/ui/issues/issue-25497.rs19
-rw-r--r--tests/ui/issues/issue-2550.rs22
-rw-r--r--tests/ui/issues/issue-25515.rs20
-rw-r--r--tests/ui/issues/issue-25549-multiple-drop.rs33
-rw-r--r--tests/ui/issues/issue-25579.rs20
-rw-r--r--tests/ui/issues/issue-25679.rs20
-rw-r--r--tests/ui/issues/issue-25693.rs22
-rw-r--r--tests/ui/issues/issue-25746-bool-transmute.rs11
-rw-r--r--tests/ui/issues/issue-25757.rs18
-rw-r--r--tests/ui/issues/issue-25810.rs28
-rw-r--r--tests/ui/issues/issue-2590.rs15
-rw-r--r--tests/ui/issues/issue-2590.stderr9
-rw-r--r--tests/ui/issues/issue-25901.rs14
-rw-r--r--tests/ui/issues/issue-25901.stderr15
-rw-r--r--tests/ui/issues/issue-26056.rs22
-rw-r--r--tests/ui/issues/issue-26056.stderr17
-rw-r--r--tests/ui/issues/issue-26093.rs12
-rw-r--r--tests/ui/issues/issue-26093.stderr32
-rw-r--r--tests/ui/issues/issue-26094.rs13
-rw-r--r--tests/ui/issues/issue-26094.stderr22
-rw-r--r--tests/ui/issues/issue-26095.rs23
-rw-r--r--tests/ui/issues/issue-2611-3.rs19
-rw-r--r--tests/ui/issues/issue-26127.rs12
-rw-r--r--tests/ui/issues/issue-26186.rs62
-rw-r--r--tests/ui/issues/issue-26205.rs31
-rw-r--r--tests/ui/issues/issue-26217.rs10
-rw-r--r--tests/ui/issues/issue-26217.stderr16
-rw-r--r--tests/ui/issues/issue-26237.rs12
-rw-r--r--tests/ui/issues/issue-26237.stderr15
-rw-r--r--tests/ui/issues/issue-26262.rs22
-rw-r--r--tests/ui/issues/issue-26262.stderr15
-rw-r--r--tests/ui/issues/issue-2631-b.rs17
-rw-r--r--tests/ui/issues/issue-2642.rs10
-rw-r--r--tests/ui/issues/issue-26468.rs29
-rw-r--r--tests/ui/issues/issue-26472.rs13
-rw-r--r--tests/ui/issues/issue-26472.stderr20
-rw-r--r--tests/ui/issues/issue-26484.rs12
-rw-r--r--tests/ui/issues/issue-26614.rs14
-rw-r--r--tests/ui/issues/issue-26619.rs22
-rw-r--r--tests/ui/issues/issue-26619.stderr11
-rw-r--r--tests/ui/issues/issue-26641.rs6
-rw-r--r--tests/ui/issues/issue-26646.rs12
-rw-r--r--tests/ui/issues/issue-26655.rs26
-rw-r--r--tests/ui/issues/issue-26709.rs17
-rw-r--r--tests/ui/issues/issue-26802.rs14
-rw-r--r--tests/ui/issues/issue-26805.rs6
-rw-r--r--tests/ui/issues/issue-26812.rs6
-rw-r--r--tests/ui/issues/issue-26812.stderr9
-rw-r--r--tests/ui/issues/issue-26905-rpass.rs21
-rw-r--r--tests/ui/issues/issue-26905.rs23
-rw-r--r--tests/ui/issues/issue-26905.stderr12
-rw-r--r--tests/ui/issues/issue-26948.rs6
-rw-r--r--tests/ui/issues/issue-26948.stderr9
-rw-r--r--tests/ui/issues/issue-26997.rs15
-rw-r--r--tests/ui/issues/issue-27008.rs7
-rw-r--r--tests/ui/issues/issue-27008.stderr9
-rw-r--r--tests/ui/issues/issue-27033.rs12
-rw-r--r--tests/ui/issues/issue-27033.stderr21
-rw-r--r--tests/ui/issues/issue-27042.rs17
-rw-r--r--tests/ui/issues/issue-27042.stderr48
-rw-r--r--tests/ui/issues/issue-27054-primitive-binary-ops.rs5
-rw-r--r--tests/ui/issues/issue-27078.rs9
-rw-r--r--tests/ui/issues/issue-27078.stderr19
-rw-r--r--tests/ui/issues/issue-2708.rs30
-rw-r--r--tests/ui/issues/issue-27105.rs15
-rw-r--r--tests/ui/issues/issue-2723-b.rs11
-rw-r--r--tests/ui/issues/issue-27240.rs27
-rw-r--r--tests/ui/issues/issue-27268.rs4
-rw-r--r--tests/ui/issues/issue-27281.rs17
-rw-r--r--tests/ui/issues/issue-27340.rs6
-rw-r--r--tests/ui/issues/issue-27340.stderr14
-rw-r--r--tests/ui/issues/issue-2735-2.rs27
-rw-r--r--tests/ui/issues/issue-2735-3.rs27
-rw-r--r--tests/ui/issues/issue-2735.rs22
-rw-r--r--tests/ui/issues/issue-27401-dropflag-reinit.rs26
-rw-r--r--tests/ui/issues/issue-27433.fixed7
-rw-r--r--tests/ui/issues/issue-27433.rs7
-rw-r--r--tests/ui/issues/issue-27433.stderr11
-rw-r--r--tests/ui/issues/issue-2748-a.rs17
-rw-r--r--tests/ui/issues/issue-27583.rs47
-rw-r--r--tests/ui/issues/issue-27592.rs19
-rw-r--r--tests/ui/issues/issue-27592.stderr22
-rw-r--r--tests/ui/issues/issue-2761.rs7
-rw-r--r--tests/ui/issues/issue-27639.rs11
-rw-r--r--tests/ui/issues/issue-27697.rs21
-rw-r--r--tests/ui/issues/issue-27815.rs12
-rw-r--r--tests/ui/issues/issue-27815.stderr27
-rw-r--r--tests/ui/issues/issue-27842.rs11
-rw-r--r--tests/ui/issues/issue-27842.stderr17
-rw-r--r--tests/ui/issues/issue-27859.rs20
-rw-r--r--tests/ui/issues/issue-27889.rs23
-rw-r--r--tests/ui/issues/issue-27901.rs11
-rw-r--r--tests/ui/issues/issue-27942.rs14
-rw-r--r--tests/ui/issues/issue-27942.stderr41
-rw-r--r--tests/ui/issues/issue-27949.rs41
-rw-r--r--tests/ui/issues/issue-27997.rs37
-rw-r--r--tests/ui/issues/issue-2804-2.rs12
-rw-r--r--tests/ui/issues/issue-28105.rs8
-rw-r--r--tests/ui/issues/issue-28105.stderr15
-rw-r--r--tests/ui/issues/issue-28109.rs12
-rw-r--r--tests/ui/issues/issue-28109.stderr15
-rw-r--r--tests/ui/issues/issue-28181.rs6
-rw-r--r--tests/ui/issues/issue-2823.rs14
-rw-r--r--tests/ui/issues/issue-2823.stderr16
-rw-r--r--tests/ui/issues/issue-28279.rs21
-rw-r--r--tests/ui/issues/issue-28344.rs15
-rw-r--r--tests/ui/issues/issue-28344.stderr61
-rw-r--r--tests/ui/issues/issue-28433.rs12
-rw-r--r--tests/ui/issues/issue-28433.stderr15
-rw-r--r--tests/ui/issues/issue-28472.rs14
-rw-r--r--tests/ui/issues/issue-28472.stderr27
-rw-r--r--tests/ui/issues/issue-2848.rs17
-rw-r--r--tests/ui/issues/issue-2848.stderr11
-rw-r--r--tests/ui/issues/issue-2849.rs8
-rw-r--r--tests/ui/issues/issue-2849.stderr11
-rw-r--r--tests/ui/issues/issue-28498-must-work-ex1.rs18
-rw-r--r--tests/ui/issues/issue-28498-must-work-ex2.rs20
-rw-r--r--tests/ui/issues/issue-28498-ugeh-ex1.rs27
-rw-r--r--tests/ui/issues/issue-28550.rs16
-rw-r--r--tests/ui/issues/issue-28561.rs73
-rw-r--r--tests/ui/issues/issue-28568.rs12
-rw-r--r--tests/ui/issues/issue-28568.stderr12
-rw-r--r--tests/ui/issues/issue-28586.rs7
-rw-r--r--tests/ui/issues/issue-28586.stderr9
-rw-r--r--tests/ui/issues/issue-28600.rs15
-rw-r--r--tests/ui/issues/issue-28625.rs22
-rw-r--r--tests/ui/issues/issue-28625.stderr12
-rw-r--r--tests/ui/issues/issue-28776.mir.stderr11
-rw-r--r--tests/ui/issues/issue-28776.rs9
-rw-r--r--tests/ui/issues/issue-28776.thir.stderr11
-rw-r--r--tests/ui/issues/issue-28777.rs22
-rw-r--r--tests/ui/issues/issue-28822.rs7
-rw-r--r--tests/ui/issues/issue-28828.rs18
-rw-r--r--tests/ui/issues/issue-28839.rs15
-rw-r--r--tests/ui/issues/issue-28936.rs27
-rw-r--r--tests/ui/issues/issue-2895.rs28
-rw-r--r--tests/ui/issues/issue-28971.rs16
-rw-r--r--tests/ui/issues/issue-28971.stderr15
-rw-r--r--tests/ui/issues/issue-28983.rs22
-rw-r--r--tests/ui/issues/issue-28992-empty.rs16
-rw-r--r--tests/ui/issues/issue-28992-empty.stderr16
-rw-r--r--tests/ui/issues/issue-28999.rs11
-rw-r--r--tests/ui/issues/issue-29030.rs9
-rw-r--r--tests/ui/issues/issue-29037.rs24
-rw-r--r--tests/ui/issues/issue-2904.rs79
-rw-r--r--tests/ui/issues/issue-29048.rs12
-rw-r--r--tests/ui/issues/issue-29053.rs12
-rw-r--r--tests/ui/issues/issue-29071-2.rs32
-rw-r--r--tests/ui/issues/issue-29071.rs16
-rw-r--r--tests/ui/issues/issue-29092.rs26
-rw-r--r--tests/ui/issues/issue-29147-rpass.rs28
-rw-r--r--tests/ui/issues/issue-29147.rs23
-rw-r--r--tests/ui/issues/issue-29147.stderr17
-rw-r--r--tests/ui/issues/issue-29181.rs9
-rw-r--r--tests/ui/issues/issue-29181.stderr21
-rw-r--r--tests/ui/issues/issue-29265.rs10
-rw-r--r--tests/ui/issues/issue-29276.rs5
-rw-r--r--tests/ui/issues/issue-2935.rs28
-rw-r--r--tests/ui/issues/issue-29466.rs3603
-rw-r--r--tests/ui/issues/issue-29485.rs19
-rw-r--r--tests/ui/issues/issue-2951.rs11
-rw-r--r--tests/ui/issues/issue-2951.stderr20
-rw-r--r--tests/ui/issues/issue-29516.rs20
-rw-r--r--tests/ui/issues/issue-29522.rs17
-rw-r--r--tests/ui/issues/issue-29540.rs492
-rw-r--r--tests/ui/issues/issue-29663.rs56
-rw-r--r--tests/ui/issues/issue-29668.rs16
-rw-r--r--tests/ui/issues/issue-29710.rs11
-rw-r--r--tests/ui/issues/issue-29723.rs22
-rw-r--r--tests/ui/issues/issue-29723.stderr36
-rw-r--r--tests/ui/issues/issue-29740.rs317
-rw-r--r--tests/ui/issues/issue-29743.rs7
-rw-r--r--tests/ui/issues/issue-29746.rs36
-rw-r--r--tests/ui/issues/issue-29798.rs11
-rw-r--r--tests/ui/issues/issue-29821.rs19
-rw-r--r--tests/ui/issues/issue-29857.rs19
-rw-r--r--tests/ui/issues/issue-29861.rs20
-rw-r--r--tests/ui/issues/issue-29861.stderr9
-rw-r--r--tests/ui/issues/issue-2989.rs36
-rw-r--r--tests/ui/issues/issue-29948.rs40
-rw-r--r--tests/ui/issues/issue-2995.rs5
-rw-r--r--tests/ui/issues/issue-2995.stderr15
-rw-r--r--tests/ui/issues/issue-30007.rs7
-rw-r--r--tests/ui/issues/issue-30007.stderr13
-rw-r--r--tests/ui/issues/issue-30018-panic.rs26
-rw-r--r--tests/ui/issues/issue-3008-1.rs12
-rw-r--r--tests/ui/issues/issue-3008-1.stderr17
-rw-r--r--tests/ui/issues/issue-3008-2.rs6
-rw-r--r--tests/ui/issues/issue-3008-2.stderr14
-rw-r--r--tests/ui/issues/issue-3008-3.rs10
-rw-r--r--tests/ui/issues/issue-3008-3.stderr14
-rw-r--r--tests/ui/issues/issue-30081.rs15
-rw-r--r--tests/ui/issues/issue-3012-2.rs13
-rw-r--r--tests/ui/issues/issue-30123.rs9
-rw-r--r--tests/ui/issues/issue-30123.stderr12
-rw-r--r--tests/ui/issues/issue-3021-b.rs14
-rw-r--r--tests/ui/issues/issue-3021-b.stderr11
-rw-r--r--tests/ui/issues/issue-3021-d.rs28
-rw-r--r--tests/ui/issues/issue-3021-d.stderr19
-rw-r--r--tests/ui/issues/issue-30236.rs7
-rw-r--r--tests/ui/issues/issue-30236.stderr9
-rw-r--r--tests/ui/issues/issue-30255.rs24
-rw-r--r--tests/ui/issues/issue-30255.stderr39
-rw-r--r--tests/ui/issues/issue-3026.rs11
-rw-r--r--tests/ui/issues/issue-3029.rs14
-rw-r--r--tests/ui/issues/issue-3037.rs16
-rw-r--r--tests/ui/issues/issue-30371.rs10
-rw-r--r--tests/ui/issues/issue-3038.rs26
-rw-r--r--tests/ui/issues/issue-3038.stderr21
-rw-r--r--tests/ui/issues/issue-30380.rs36
-rw-r--r--tests/ui/issues/issue-30438-a.rs23
-rw-r--r--tests/ui/issues/issue-30438-a.stderr12
-rw-r--r--tests/ui/issues/issue-30438-b.rs24
-rw-r--r--tests/ui/issues/issue-30438-b.stderr12
-rw-r--r--tests/ui/issues/issue-30438-c.rs21
-rw-r--r--tests/ui/issues/issue-30438-c.stderr17
-rw-r--r--tests/ui/issues/issue-30490.rs102
-rw-r--r--tests/ui/issues/issue-3052.rs13
-rw-r--r--tests/ui/issues/issue-30530.rs28
-rw-r--r--tests/ui/issues/issue-30589.rs9
-rw-r--r--tests/ui/issues/issue-30589.stderr9
-rw-r--r--tests/ui/issues/issue-30615.rs5
-rw-r--r--tests/ui/issues/issue-30756.rs7
-rw-r--r--tests/ui/issues/issue-30891.rs10
-rw-r--r--tests/ui/issues/issue-3091.rs7
-rw-r--r--tests/ui/issues/issue-3099-a.rs5
-rw-r--r--tests/ui/issues/issue-3099-a.stderr14
-rw-r--r--tests/ui/issues/issue-3099-b.rs5
-rw-r--r--tests/ui/issues/issue-3099-b.stderr14
-rw-r--r--tests/ui/issues/issue-3099.rs11
-rw-r--r--tests/ui/issues/issue-3099.stderr14
-rw-r--r--tests/ui/issues/issue-31011.rs29
-rw-r--r--tests/ui/issues/issue-31011.stderr17
-rw-r--r--tests/ui/issues/issue-3109.rs4
-rw-r--r--tests/ui/issues/issue-3121.rs24
-rw-r--r--tests/ui/issues/issue-31260.rs15
-rw-r--r--tests/ui/issues/issue-31267-additional.rs20
-rw-r--r--tests/ui/issues/issue-31267.rs14
-rw-r--r--tests/ui/issues/issue-31299.rs35
-rw-r--r--tests/ui/issues/issue-3136-b.rs8
-rw-r--r--tests/ui/issues/issue-3149.rs26
-rw-r--r--tests/ui/issues/issue-31511.rs6
-rw-r--r--tests/ui/issues/issue-31511.stderr9
-rw-r--r--tests/ui/issues/issue-3154.rs11
-rw-r--r--tests/ui/issues/issue-3154.stderr11
-rw-r--r--tests/ui/issues/issue-31702.rs10
-rw-r--r--tests/ui/issues/issue-31769.rs4
-rw-r--r--tests/ui/issues/issue-31769.stderr16
-rw-r--r--tests/ui/issues/issue-31776.rs55
-rw-r--r--tests/ui/issues/issue-31910.rs11
-rw-r--r--tests/ui/issues/issue-31910.stderr9
-rw-r--r--tests/ui/issues/issue-32004.rs19
-rw-r--r--tests/ui/issues/issue-32004.stderr32
-rw-r--r--tests/ui/issues/issue-32008.rs28
-rw-r--r--tests/ui/issues/issue-32086.rs7
-rw-r--r--tests/ui/issues/issue-32086.stderr21
-rw-r--r--tests/ui/issues/issue-32122-1.fixed17
-rw-r--r--tests/ui/issues/issue-32122-1.rs17
-rw-r--r--tests/ui/issues/issue-32122-1.stderr18
-rw-r--r--tests/ui/issues/issue-32122-2.fixed28
-rw-r--r--tests/ui/issues/issue-32122-2.rs28
-rw-r--r--tests/ui/issues/issue-32122-2.stderr18
-rw-r--r--tests/ui/issues/issue-3214.rs11
-rw-r--r--tests/ui/issues/issue-3214.stderr28
-rw-r--r--tests/ui/issues/issue-3220.rs25
-rw-r--r--tests/ui/issues/issue-32292.rs9
-rw-r--r--tests/ui/issues/issue-32323.rs8
-rw-r--r--tests/ui/issues/issue-32323.stderr18
-rw-r--r--tests/ui/issues/issue-32324.rs24
-rw-r--r--tests/ui/issues/issue-32326.rs10
-rw-r--r--tests/ui/issues/issue-32326.stderr16
-rw-r--r--tests/ui/issues/issue-32377.rs19
-rw-r--r--tests/ui/issues/issue-32377.stderr12
-rw-r--r--tests/ui/issues/issue-32389.rs11
-rw-r--r--tests/ui/issues/issue-32518.rs13
-rw-r--r--tests/ui/issues/issue-32655.rs19
-rw-r--r--tests/ui/issues/issue-32655.stderr25
-rw-r--r--tests/ui/issues/issue-32709.rs8
-rw-r--r--tests/ui/issues/issue-32709.stderr17
-rw-r--r--tests/ui/issues/issue-32782.rs13
-rw-r--r--tests/ui/issues/issue-32782.stderr15
-rw-r--r--tests/ui/issues/issue-32797.rs13
-rw-r--r--tests/ui/issues/issue-32805.rs10
-rw-r--r--tests/ui/issues/issue-3290.rs8
-rw-r--r--tests/ui/issues/issue-32950.rs9
-rw-r--r--tests/ui/issues/issue-32950.stderr17
-rw-r--r--tests/ui/issues/issue-32995-2.rs13
-rw-r--r--tests/ui/issues/issue-32995-2.stderr21
-rw-r--r--tests/ui/issues/issue-32995.rs24
-rw-r--r--tests/ui/issues/issue-32995.stderr45
-rw-r--r--tests/ui/issues/issue-33096.rs19
-rw-r--r--tests/ui/issues/issue-33187.rs23
-rw-r--r--tests/ui/issues/issue-33202.rs9
-rw-r--r--tests/ui/issues/issue-33241.rs12
-rw-r--r--tests/ui/issues/issue-33287.rs10
-rw-r--r--tests/ui/issues/issue-33293.rs6
-rw-r--r--tests/ui/issues/issue-33293.stderr9
-rw-r--r--tests/ui/issues/issue-33387.rs32
-rw-r--r--tests/ui/issues/issue-3344.rs7
-rw-r--r--tests/ui/issues/issue-3344.stderr11
-rw-r--r--tests/ui/issues/issue-33461.rs28
-rw-r--r--tests/ui/issues/issue-33504.rs9
-rw-r--r--tests/ui/issues/issue-33504.stderr16
-rw-r--r--tests/ui/issues/issue-33525.rs5
-rw-r--r--tests/ui/issues/issue-33525.stderr22
-rw-r--r--tests/ui/issues/issue-33571.rs7
-rw-r--r--tests/ui/issues/issue-33571.stderr26
-rw-r--r--tests/ui/issues/issue-33687.rs17
-rw-r--r--tests/ui/issues/issue-33770.rs94
-rw-r--r--tests/ui/issues/issue-3389.rs26
-rw-r--r--tests/ui/issues/issue-33903.rs10
-rw-r--r--tests/ui/issues/issue-33941.rs9
-rw-r--r--tests/ui/issues/issue-33941.stderr42
-rw-r--r--tests/ui/issues/issue-33992.rs32
-rw-r--r--tests/ui/issues/issue-34047.rs8
-rw-r--r--tests/ui/issues/issue-34047.stderr12
-rw-r--r--tests/ui/issues/issue-34074.rs10
-rw-r--r--tests/ui/issues/issue-34209.rs11
-rw-r--r--tests/ui/issues/issue-34209.stderr12
-rw-r--r--tests/ui/issues/issue-34229.rs5
-rw-r--r--tests/ui/issues/issue-34229.stderr18
-rw-r--r--tests/ui/issues/issue-3424.rs20
-rw-r--r--tests/ui/issues/issue-3429.rs8
-rw-r--r--tests/ui/issues/issue-34334.rs8
-rw-r--r--tests/ui/issues/issue-34334.stderr38
-rw-r--r--tests/ui/issues/issue-34349.rs22
-rw-r--r--tests/ui/issues/issue-34349.stderr22
-rw-r--r--tests/ui/issues/issue-34373.rs11
-rw-r--r--tests/ui/issues/issue-34373.stderr27
-rw-r--r--tests/ui/issues/issue-34418.rs19
-rw-r--r--tests/ui/issues/issue-34427.rs17
-rw-r--r--tests/ui/issues/issue-3447.rs32
-rw-r--r--tests/ui/issues/issue-34503.rs11
-rw-r--r--tests/ui/issues/issue-34569.rs18
-rw-r--r--tests/ui/issues/issue-34571.rs11
-rw-r--r--tests/ui/issues/issue-34721.fixed34
-rw-r--r--tests/ui/issues/issue-34721.rs34
-rw-r--r--tests/ui/issues/issue-34721.stderr28
-rw-r--r--tests/ui/issues/issue-34751.rs11
-rw-r--r--tests/ui/issues/issue-3477.rs5
-rw-r--r--tests/ui/issues/issue-3477.stderr11
-rw-r--r--tests/ui/issues/issue-34780.rs11
-rw-r--r--tests/ui/issues/issue-34796.rs28
-rw-r--r--tests/ui/issues/issue-34839.rs19
-rw-r--r--tests/ui/issues/issue-34932.rs11
-rw-r--r--tests/ui/issues/issue-3500.rs10
-rw-r--r--tests/ui/issues/issue-35139.rs26
-rw-r--r--tests/ui/issues/issue-35139.stderr9
-rw-r--r--tests/ui/issues/issue-3521-2.fixed9
-rw-r--r--tests/ui/issues/issue-3521-2.rs9
-rw-r--r--tests/ui/issues/issue-3521-2.stderr11
-rw-r--r--tests/ui/issues/issue-35241.rs5
-rw-r--r--tests/ui/issues/issue-35241.stderr21
-rw-r--r--tests/ui/issues/issue-35423.rs9
-rw-r--r--tests/ui/issues/issue-3556.rs36
-rw-r--r--tests/ui/issues/issue-35570.rs29
-rw-r--r--tests/ui/issues/issue-35570.stderr19
-rw-r--r--tests/ui/issues/issue-3559.rs18
-rw-r--r--tests/ui/issues/issue-35600.rs18
-rw-r--r--tests/ui/issues/issue-3563-3.rs180
-rw-r--r--tests/ui/issues/issue-3574.rs14
-rw-r--r--tests/ui/issues/issue-35815.rs15
-rw-r--r--tests/ui/issues/issue-35976.rs24
-rw-r--r--tests/ui/issues/issue-35976.unimported.stderr16
-rw-r--r--tests/ui/issues/issue-35988.rs6
-rw-r--r--tests/ui/issues/issue-35988.stderr21
-rw-r--r--tests/ui/issues/issue-36023.rs24
-rw-r--r--tests/ui/issues/issue-36036-associated-type-layout.rs27
-rw-r--r--tests/ui/issues/issue-36075.rs14
-rw-r--r--tests/ui/issues/issue-3609.rs30
-rw-r--r--tests/ui/issues/issue-36116.rs25
-rw-r--r--tests/ui/issues/issue-36260.rs13
-rw-r--r--tests/ui/issues/issue-36278-prefix-nesting.rs20
-rw-r--r--tests/ui/issues/issue-36299.rs5
-rw-r--r--tests/ui/issues/issue-36299.stderr20
-rw-r--r--tests/ui/issues/issue-36379.rs5
-rw-r--r--tests/ui/issues/issue-36400.rs6
-rw-r--r--tests/ui/issues/issue-36400.stderr14
-rw-r--r--tests/ui/issues/issue-36401.rs16
-rw-r--r--tests/ui/issues/issue-36474.rs31
-rw-r--r--tests/ui/issues/issue-3656.rs27
-rw-r--r--tests/ui/issues/issue-3668-2.fixed8
-rw-r--r--tests/ui/issues/issue-3668-2.rs8
-rw-r--r--tests/ui/issues/issue-3668-2.stderr11
-rw-r--r--tests/ui/issues/issue-3668.rs14
-rw-r--r--tests/ui/issues/issue-3668.stderr11
-rw-r--r--tests/ui/issues/issue-36744-bitcast-args-if-needed.rs23
-rw-r--r--tests/ui/issues/issue-36744-without-calls.rs13
-rw-r--r--tests/ui/issues/issue-36786-resolve-call.rs8
-rw-r--r--tests/ui/issues/issue-36792.rs7
-rw-r--r--tests/ui/issues/issue-3680.rs9
-rw-r--r--tests/ui/issues/issue-3680.stderr18
-rw-r--r--tests/ui/issues/issue-36816.rs7
-rw-r--r--tests/ui/issues/issue-36836.rs15
-rw-r--r--tests/ui/issues/issue-36836.stderr9
-rw-r--r--tests/ui/issues/issue-36839.rs21
-rw-r--r--tests/ui/issues/issue-36856.rs16
-rw-r--r--tests/ui/issues/issue-36936.rs26
-rw-r--r--tests/ui/issues/issue-36954.rs8
-rw-r--r--tests/ui/issues/issue-3702-2.rs20
-rw-r--r--tests/ui/issues/issue-3702-2.stderr28
-rw-r--r--tests/ui/issues/issue-3702.rs13
-rw-r--r--tests/ui/issues/issue-37051.rs18
-rw-r--r--tests/ui/issues/issue-3707.rs18
-rw-r--r--tests/ui/issues/issue-3707.stderr19
-rw-r--r--tests/ui/issues/issue-37109.rs16
-rw-r--r--tests/ui/issues/issue-37131.rs9
-rw-r--r--tests/ui/issues/issue-37131.stderr11
-rw-r--r--tests/ui/issues/issue-37291/auxiliary/lib.rs42
-rw-r--r--tests/ui/issues/issue-37291/main.rs21
-rw-r--r--tests/ui/issues/issue-37311-type-length-limit/issue-37311.polonius.stderr15
-rw-r--r--tests/ui/issues/issue-37311-type-length-limit/issue-37311.rs23
-rw-r--r--tests/ui/issues/issue-37311-type-length-limit/issue-37311.stderr15
-rw-r--r--tests/ui/issues/issue-3743.rs55
-rw-r--r--tests/ui/issues/issue-37510.rs14
-rw-r--r--tests/ui/issues/issue-3753.rs32
-rw-r--r--tests/ui/issues/issue-37534.rs6
-rw-r--r--tests/ui/issues/issue-37534.stderr29
-rw-r--r--tests/ui/issues/issue-37576.rs45
-rw-r--r--tests/ui/issues/issue-37576.stderr51
-rw-r--r--tests/ui/issues/issue-37598.rs11
-rw-r--r--tests/ui/issues/issue-3763.rs29
-rw-r--r--tests/ui/issues/issue-3763.stderr40
-rw-r--r--tests/ui/issues/issue-37665.rs10
-rw-r--r--tests/ui/issues/issue-37665.stderr11
-rw-r--r--tests/ui/issues/issue-37686.rs7
-rw-r--r--tests/ui/issues/issue-37725.rs12
-rw-r--r--tests/ui/issues/issue-37733.rs7
-rw-r--r--tests/ui/issues/issue-3779.rs8
-rw-r--r--tests/ui/issues/issue-3779.stderr17
-rw-r--r--tests/ui/issues/issue-37884.rs14
-rw-r--r--tests/ui/issues/issue-37884.stderr22
-rw-r--r--tests/ui/issues/issue-3794.rs32
-rw-r--r--tests/ui/issues/issue-38160.rs19
-rw-r--r--tests/ui/issues/issue-38190.rs15
-rw-r--r--tests/ui/issues/issue-38226.rs15
-rw-r--r--tests/ui/issues/issue-38381.rs7
-rw-r--r--tests/ui/issues/issue-38412.rs10
-rw-r--r--tests/ui/issues/issue-38412.stderr9
-rw-r--r--tests/ui/issues/issue-38437.rs46
-rw-r--r--tests/ui/issues/issue-38458.rs5
-rw-r--r--tests/ui/issues/issue-38458.stderr9
-rw-r--r--tests/ui/issues/issue-3847.rs13
-rw-r--r--tests/ui/issues/issue-38556.rs13
-rw-r--r--tests/ui/issues/issue-38727.rs13
-rw-r--r--tests/ui/issues/issue-3874.rs12
-rw-r--r--tests/ui/issues/issue-38763.rs13
-rw-r--r--tests/ui/issues/issue-3878.rs9
-rw-r--r--tests/ui/issues/issue-38821.rs33
-rw-r--r--tests/ui/issues/issue-38821.stderr22
-rw-r--r--tests/ui/issues/issue-38857.rs5
-rw-r--r--tests/ui/issues/issue-38857.stderr19
-rw-r--r--tests/ui/issues/issue-38875/auxiliary/issue-38875-b.rs1
-rw-r--r--tests/ui/issues/issue-38875/issue-38875.rs8
-rw-r--r--tests/ui/issues/issue-3888-2.rs9
-rw-r--r--tests/ui/issues/issue-38919.rs5
-rw-r--r--tests/ui/issues/issue-38919.stderr11
-rw-r--r--tests/ui/issues/issue-38942.rs17
-rw-r--r--tests/ui/issues/issue-3895.rs11
-rw-r--r--tests/ui/issues/issue-38954.rs4
-rw-r--r--tests/ui/issues/issue-38954.stderr16
-rw-r--r--tests/ui/issues/issue-38987.rs4
-rw-r--r--tests/ui/issues/issue-39089.rs5
-rw-r--r--tests/ui/issues/issue-39175.rs16
-rw-r--r--tests/ui/issues/issue-39175.stderr15
-rw-r--r--tests/ui/issues/issue-39211.rs13
-rw-r--r--tests/ui/issues/issue-39211.stderr10
-rw-r--r--tests/ui/issues/issue-39292.rs17
-rw-r--r--tests/ui/issues/issue-39367.rs42
-rw-r--r--tests/ui/issues/issue-39467.rs11
-rw-r--r--tests/ui/issues/issue-39548.rs6
-rw-r--r--tests/ui/issues/issue-39687.rs6
-rw-r--r--tests/ui/issues/issue-39687.stderr9
-rw-r--r--tests/ui/issues/issue-39709.rs5
-rw-r--r--tests/ui/issues/issue-3979-2.rs18
-rw-r--r--tests/ui/issues/issue-3979-generics.rs36
-rw-r--r--tests/ui/issues/issue-3979-xcrate.rs25
-rw-r--r--tests/ui/issues/issue-3979.rs34
-rw-r--r--tests/ui/issues/issue-39808.rs17
-rw-r--r--tests/ui/issues/issue-39827.rs34
-rw-r--r--tests/ui/issues/issue-39848.rs9
-rw-r--r--tests/ui/issues/issue-39848.stderr25
-rw-r--r--tests/ui/issues/issue-3991.rs16
-rw-r--r--tests/ui/issues/issue-3993.rs10
-rw-r--r--tests/ui/issues/issue-3993.stderr15
-rw-r--r--tests/ui/issues/issue-39970.rs21
-rw-r--r--tests/ui/issues/issue-39970.stderr23
-rw-r--r--tests/ui/issues/issue-39984.rs14
-rw-r--r--tests/ui/issues/issue-40000.rs9
-rw-r--r--tests/ui/issues/issue-40000.stderr21
-rw-r--r--tests/ui/issues/issue-40003.rs178
-rw-r--r--tests/ui/issues/issue-40085.rs13
-rw-r--r--tests/ui/issues/issue-40136.rs15
-rw-r--r--tests/ui/issues/issue-40235.rs8
-rw-r--r--tests/ui/issues/issue-4025.rs25
-rw-r--r--tests/ui/issues/issue-40288-2.rs31
-rw-r--r--tests/ui/issues/issue-40288-2.stderr21
-rw-r--r--tests/ui/issues/issue-40288.rs20
-rw-r--r--tests/ui/issues/issue-40288.stderr15
-rw-r--r--tests/ui/issues/issue-40350.rs10
-rw-r--r--tests/ui/issues/issue-40402-ref-hints/issue-40402-1.rs10
-rw-r--r--tests/ui/issues/issue-40402-ref-hints/issue-40402-1.stderr14
-rw-r--r--tests/ui/issues/issue-40402-ref-hints/issue-40402-2.rs6
-rw-r--r--tests/ui/issues/issue-40402-ref-hints/issue-40402-2.stderr18
-rw-r--r--tests/ui/issues/issue-40408.rs7
-rw-r--r--tests/ui/issues/issue-40510-1.migrate.stderr13
-rw-r--r--tests/ui/issues/issue-40510-1.rs12
-rw-r--r--tests/ui/issues/issue-40510-1.stderr19
-rw-r--r--tests/ui/issues/issue-40510-2.rs13
-rw-r--r--tests/ui/issues/issue-40510-3.migrate.stderr15
-rw-r--r--tests/ui/issues/issue-40510-3.rs14
-rw-r--r--tests/ui/issues/issue-40510-3.stderr23
-rw-r--r--tests/ui/issues/issue-40510-4.rs15
-rw-r--r--tests/ui/issues/issue-40610.rs6
-rw-r--r--tests/ui/issues/issue-40610.stderr11
-rw-r--r--tests/ui/issues/issue-40749.rs6
-rw-r--r--tests/ui/issues/issue-40749.stderr12
-rw-r--r--tests/ui/issues/issue-40782.fixed8
-rw-r--r--tests/ui/issues/issue-40782.rs8
-rw-r--r--tests/ui/issues/issue-40782.stderr14
-rw-r--r--tests/ui/issues/issue-40827.rs17
-rw-r--r--tests/ui/issues/issue-40827.stderr55
-rw-r--r--tests/ui/issues/issue-40845.rs6
-rw-r--r--tests/ui/issues/issue-40845.stderr14
-rw-r--r--tests/ui/issues/issue-40861.rs6
-rw-r--r--tests/ui/issues/issue-40861.stderr11
-rw-r--r--tests/ui/issues/issue-40883.rs94
-rw-r--r--tests/ui/issues/issue-40951.rs12
-rw-r--r--tests/ui/issues/issue-41053.rs21
-rw-r--r--tests/ui/issues/issue-41139.rs12
-rw-r--r--tests/ui/issues/issue-41139.stderr12
-rw-r--r--tests/ui/issues/issue-41213.rs24
-rw-r--r--tests/ui/issues/issue-41229-ref-str.rs4
-rw-r--r--tests/ui/issues/issue-41229-ref-str.stderr16
-rw-r--r--tests/ui/issues/issue-41272.rs21
-rw-r--r--tests/ui/issues/issue-41298.rs8
-rw-r--r--tests/ui/issues/issue-41394-rpass.rs8
-rw-r--r--tests/ui/issues/issue-41394.rs11
-rw-r--r--tests/ui/issues/issue-41394.stderr17
-rw-r--r--tests/ui/issues/issue-41479.rs9
-rw-r--r--tests/ui/issues/issue-41498.rs17
-rw-r--r--tests/ui/issues/issue-41549.rs12
-rw-r--r--tests/ui/issues/issue-41549.stderr9
-rw-r--r--tests/ui/issues/issue-41604.rs11
-rw-r--r--tests/ui/issues/issue-41628.rs7
-rw-r--r--tests/ui/issues/issue-41652/auxiliary/issue-41652-b.rs6
-rw-r--r--tests/ui/issues/issue-41652/issue-41652.rs14
-rw-r--r--tests/ui/issues/issue-41652/issue-41652.stderr14
-rw-r--r--tests/ui/issues/issue-41677.rs28
-rw-r--r--tests/ui/issues/issue-41696.rs54
-rw-r--r--tests/ui/issues/issue-41726.rs7
-rw-r--r--tests/ui/issues/issue-41726.stderr15
-rw-r--r--tests/ui/issues/issue-41742.rs25
-rw-r--r--tests/ui/issues/issue-41742.stderr9
-rw-r--r--tests/ui/issues/issue-41744.rs7
-rw-r--r--tests/ui/issues/issue-41849-variance-req.rs35
-rw-r--r--tests/ui/issues/issue-41880.rs29
-rw-r--r--tests/ui/issues/issue-41880.stderr12
-rw-r--r--tests/ui/issues/issue-41888.rs34
-rw-r--r--tests/ui/issues/issue-41936-variance-coerce-unsized-cycle.rs30
-rw-r--r--tests/ui/issues/issue-41974.rs14
-rw-r--r--tests/ui/issues/issue-41974.stderr19
-rw-r--r--tests/ui/issues/issue-41998.rs10
-rw-r--r--tests/ui/issues/issue-42007.rs11
-rw-r--r--tests/ui/issues/issue-4208.rs12
-rw-r--r--tests/ui/issues/issue-42106.rs10
-rw-r--r--tests/ui/issues/issue-42106.stderr13
-rw-r--r--tests/ui/issues/issue-42148.rs6
-rw-r--r--tests/ui/issues/issue-42210.rs21
-rw-r--r--tests/ui/issues/issue-4228.rs16
-rw-r--r--tests/ui/issues/issue-42312.rs11
-rw-r--r--tests/ui/issues/issue-42312.stderr37
-rw-r--r--tests/ui/issues/issue-42453.rs10
-rw-r--r--tests/ui/issues/issue-42467.rs24
-rw-r--r--tests/ui/issues/issue-4252.rs33
-rw-r--r--tests/ui/issues/issue-42552.rs31
-rw-r--r--tests/ui/issues/issue-4265.rs14
-rw-r--r--tests/ui/issues/issue-4265.stderr12
-rw-r--r--tests/ui/issues/issue-42755.rs7
-rw-r--r--tests/ui/issues/issue-42755.stderr8
-rw-r--r--tests/ui/issues/issue-42796.rs19
-rw-r--r--tests/ui/issues/issue-42796.stderr20
-rw-r--r--tests/ui/issues/issue-42880.rs8
-rw-r--r--tests/ui/issues/issue-42880.stderr9
-rw-r--r--tests/ui/issues/issue-42956.rs26
-rw-r--r--tests/ui/issues/issue-43057.rs14
-rw-r--r--tests/ui/issues/issue-43162.rs8
-rw-r--r--tests/ui/issues/issue-43162.stderr24
-rw-r--r--tests/ui/issues/issue-43205.rs5
-rw-r--r--tests/ui/issues/issue-43250.rs13
-rw-r--r--tests/ui/issues/issue-43250.stderr14
-rw-r--r--tests/ui/issues/issue-43291.rs9
-rw-r--r--tests/ui/issues/issue-4333.rs10
-rw-r--r--tests/ui/issues/issue-4335.rs13
-rw-r--r--tests/ui/issues/issue-4335.stderr13
-rw-r--r--tests/ui/issues/issue-43355.rs19
-rw-r--r--tests/ui/issues/issue-43355.stderr14
-rw-r--r--tests/ui/issues/issue-43357.rs11
-rw-r--r--tests/ui/issues/issue-43420-no-over-suggest.rs9
-rw-r--r--tests/ui/issues/issue-43420-no-over-suggest.stderr19
-rw-r--r--tests/ui/issues/issue-43424.rs12
-rw-r--r--tests/ui/issues/issue-43424.stderr8
-rw-r--r--tests/ui/issues/issue-43431.rs14
-rw-r--r--tests/ui/issues/issue-43431.stderr9
-rw-r--r--tests/ui/issues/issue-43483.rs16
-rw-r--r--tests/ui/issues/issue-43692.rs5
-rw-r--r--tests/ui/issues/issue-43806.rs23
-rw-r--r--tests/ui/issues/issue-43853.rs17
-rw-r--r--tests/ui/issues/issue-4387.rs6
-rw-r--r--tests/ui/issues/issue-43910.rs7
-rw-r--r--tests/ui/issues/issue-43923.rs12
-rw-r--r--tests/ui/issues/issue-43925.rs4
-rw-r--r--tests/ui/issues/issue-43925.stderr8
-rw-r--r--tests/ui/issues/issue-43926.rs4
-rw-r--r--tests/ui/issues/issue-43926.stderr8
-rw-r--r--tests/ui/issues/issue-43988.rs36
-rw-r--r--tests/ui/issues/issue-43988.stderr56
-rw-r--r--tests/ui/issues/issue-44023.rs4
-rw-r--r--tests/ui/issues/issue-44023.stderr11
-rw-r--r--tests/ui/issues/issue-44056.rs6
-rw-r--r--tests/ui/issues/issue-44078.rs3
-rw-r--r--tests/ui/issues/issue-44078.stderr11
-rw-r--r--tests/ui/issues/issue-44216-add-instant.rs10
-rw-r--r--tests/ui/issues/issue-44216-add-system-time.rs10
-rw-r--r--tests/ui/issues/issue-44216-sub-instant.rs10
-rw-r--r--tests/ui/issues/issue-44216-sub-system-time.rs10
-rw-r--r--tests/ui/issues/issue-44239.fixed11
-rw-r--r--tests/ui/issues/issue-44239.rs11
-rw-r--r--tests/ui/issues/issue-44239.stderr12
-rw-r--r--tests/ui/issues/issue-44247.rs19
-rw-r--r--tests/ui/issues/issue-44255.rs29
-rw-r--r--tests/ui/issues/issue-44405.rs22
-rw-r--r--tests/ui/issues/issue-44405.stderr11
-rw-r--r--tests/ui/issues/issue-4464.rs7
-rw-r--r--tests/ui/issues/issue-44730.rs15
-rw-r--r--tests/ui/issues/issue-44851.rs15
-rw-r--r--tests/ui/issues/issue-4517.rs8
-rw-r--r--tests/ui/issues/issue-4517.stderr17
-rw-r--r--tests/ui/issues/issue-4541.rs22
-rw-r--r--tests/ui/issues/issue-4542.rs12
-rw-r--r--tests/ui/issues/issue-45425.rs12
-rw-r--r--tests/ui/issues/issue-4545.rs7
-rw-r--r--tests/ui/issues/issue-45510.rs32
-rw-r--r--tests/ui/issues/issue-45562.fixed6
-rw-r--r--tests/ui/issues/issue-45562.rs6
-rw-r--r--tests/ui/issues/issue-45562.stderr12
-rw-r--r--tests/ui/issues/issue-45697-1.rs25
-rw-r--r--tests/ui/issues/issue-45697-1.stderr26
-rw-r--r--tests/ui/issues/issue-45697.rs25
-rw-r--r--tests/ui/issues/issue-45697.stderr26
-rw-r--r--tests/ui/issues/issue-45730.rs9
-rw-r--r--tests/ui/issues/issue-45730.stderr27
-rw-r--r--tests/ui/issues/issue-45731.rs27
-rw-r--r--tests/ui/issues/issue-45801.rs25
-rw-r--r--tests/ui/issues/issue-45801.stderr11
-rw-r--r--tests/ui/issues/issue-45965.rs4
-rw-r--r--tests/ui/issues/issue-45965.stderr11
-rw-r--r--tests/ui/issues/issue-46069.rs23
-rw-r--r--tests/ui/issues/issue-46101.rs6
-rw-r--r--tests/ui/issues/issue-46101.stderr15
-rw-r--r--tests/ui/issues/issue-46302.rs9
-rw-r--r--tests/ui/issues/issue-46302.stderr12
-rw-r--r--tests/ui/issues/issue-46311.rs4
-rw-r--r--tests/ui/issues/issue-46311.stderr8
-rw-r--r--tests/ui/issues/issue-46332.rs11
-rw-r--r--tests/ui/issues/issue-46332.stderr12
-rw-r--r--tests/ui/issues/issue-46438.rs13
-rw-r--r--tests/ui/issues/issue-46438.stderr8
-rw-r--r--tests/ui/issues/issue-46471-1.rs8
-rw-r--r--tests/ui/issues/issue-46471-1.stderr14
-rw-r--r--tests/ui/issues/issue-46472.rs6
-rw-r--r--tests/ui/issues/issue-46472.stderr12
-rw-r--r--tests/ui/issues/issue-46604.rs7
-rw-r--r--tests/ui/issues/issue-46604.stderr16
-rw-r--r--tests/ui/issues/issue-46756-consider-borrowing-cast-or-binexpr.fixed16
-rw-r--r--tests/ui/issues/issue-46756-consider-borrowing-cast-or-binexpr.rs16
-rw-r--r--tests/ui/issues/issue-46756-consider-borrowing-cast-or-binexpr.stderr35
-rw-r--r--tests/ui/issues/issue-46771.rs4
-rw-r--r--tests/ui/issues/issue-46771.stderr13
-rw-r--r--tests/ui/issues/issue-46855.rs24
-rw-r--r--tests/ui/issues/issue-46964.rs19
-rw-r--r--tests/ui/issues/issue-46983.rs6
-rw-r--r--tests/ui/issues/issue-46983.stderr10
-rw-r--r--tests/ui/issues/issue-47073-zero-padded-tuple-struct-indices.rs12
-rw-r--r--tests/ui/issues/issue-47073-zero-padded-tuple-struct-indices.stderr17
-rw-r--r--tests/ui/issues/issue-47094.rs16
-rw-r--r--tests/ui/issues/issue-47094.stderr25
-rw-r--r--tests/ui/issues/issue-47184.rs4
-rw-r--r--tests/ui/issues/issue-47184.stderr12
-rw-r--r--tests/ui/issues/issue-47309.rs21
-rw-r--r--tests/ui/issues/issue-4734.rs37
-rw-r--r--tests/ui/issues/issue-4735.rs19
-rw-r--r--tests/ui/issues/issue-4736.rs5
-rw-r--r--tests/ui/issues/issue-4736.stderr17
-rw-r--r--tests/ui/issues/issue-47364.rs59
-rw-r--r--tests/ui/issues/issue-47377.rs6
-rw-r--r--tests/ui/issues/issue-47377.stderr18
-rw-r--r--tests/ui/issues/issue-47380.rs5
-rw-r--r--tests/ui/issues/issue-47380.stderr18
-rw-r--r--tests/ui/issues/issue-47486.rs4
-rw-r--r--tests/ui/issues/issue-47486.stderr18
-rw-r--r--tests/ui/issues/issue-4759-1.rs4
-rw-r--r--tests/ui/issues/issue-4759.rs18
-rw-r--r--tests/ui/issues/issue-47638.rs10
-rw-r--r--tests/ui/issues/issue-47646.rs13
-rw-r--r--tests/ui/issues/issue-47646.stderr20
-rw-r--r--tests/ui/issues/issue-47673.rs6
-rw-r--r--tests/ui/issues/issue-47703-1.rs23
-rw-r--r--tests/ui/issues/issue-47703-tuple.rs11
-rw-r--r--tests/ui/issues/issue-47703.rs18
-rw-r--r--tests/ui/issues/issue-47715.rs28
-rw-r--r--tests/ui/issues/issue-47715.stderr27
-rw-r--r--tests/ui/issues/issue-47722.rs17
-rw-r--r--tests/ui/issues/issue-47725.rs28
-rw-r--r--tests/ui/issues/issue-47725.stderr60
-rw-r--r--tests/ui/issues/issue-48006.rs15
-rw-r--r--tests/ui/issues/issue-48131.mir.stderr20
-rw-r--r--tests/ui/issues/issue-48131.rs33
-rw-r--r--tests/ui/issues/issue-48131.thir.stderr20
-rw-r--r--tests/ui/issues/issue-48132.rs31
-rw-r--r--tests/ui/issues/issue-48159.rs27
-rw-r--r--tests/ui/issues/issue-48179.rs38
-rw-r--r--tests/ui/issues/issue-48276.rs33
-rw-r--r--tests/ui/issues/issue-48276.stderr28
-rw-r--r--tests/ui/issues/issue-4830.rs11
-rw-r--r--tests/ui/issues/issue-48364.rs6
-rw-r--r--tests/ui/issues/issue-48364.stderr17
-rw-r--r--tests/ui/issues/issue-48728.rs13
-rw-r--r--tests/ui/issues/issue-48728.stderr15
-rw-r--r--tests/ui/issues/issue-4875.rs15
-rw-r--r--tests/ui/issues/issue-48838.rs5
-rw-r--r--tests/ui/issues/issue-48838.stderr12
-rw-r--r--tests/ui/issues/issue-48984.rs9
-rw-r--r--tests/ui/issues/issue-49298.rs42
-rw-r--r--tests/ui/issues/issue-4935.rs6
-rw-r--r--tests/ui/issues/issue-4935.stderr19
-rw-r--r--tests/ui/issues/issue-49544.rs9
-rw-r--r--tests/ui/issues/issue-49588-non-shorthand-field-patterns-in-pattern-macro.rs16
-rw-r--r--tests/ui/issues/issue-49632.rs8
-rw-r--r--tests/ui/issues/issue-4968.rs10
-rw-r--r--tests/ui/issues/issue-4968.stderr20
-rw-r--r--tests/ui/issues/issue-4972.rs17
-rw-r--r--tests/ui/issues/issue-4972.stderr9
-rw-r--r--tests/ui/issues/issue-49824.rs9
-rw-r--r--tests/ui/issues/issue-49824.stderr23
-rw-r--r--tests/ui/issues/issue-49851/compiler-builtins-error.rs13
-rw-r--r--tests/ui/issues/issue-49851/compiler-builtins-error.stderr19
-rw-r--r--tests/ui/issues/issue-49854.rs9
-rw-r--r--tests/ui/issues/issue-49919.rs7
-rw-r--r--tests/ui/issues/issue-49919.stderr9
-rw-r--r--tests/ui/issues/issue-49934-errors.rs8
-rw-r--r--tests/ui/issues/issue-49934-errors.stderr14
-rw-r--r--tests/ui/issues/issue-49934.rs30
-rw-r--r--tests/ui/issues/issue-49934.stderr43
-rw-r--r--tests/ui/issues/issue-49955.rs20
-rw-r--r--tests/ui/issues/issue-49973.rs11
-rw-r--r--tests/ui/issues/issue-5008-borrowed-traitobject-method-call.rs34
-rw-r--r--tests/ui/issues/issue-50187.rs39
-rw-r--r--tests/ui/issues/issue-50264-inner-deref-trait/option-as_deref.rs4
-rw-r--r--tests/ui/issues/issue-50264-inner-deref-trait/option-as_deref.stderr12
-rw-r--r--tests/ui/issues/issue-50264-inner-deref-trait/option-as_deref_mut.rs4
-rw-r--r--tests/ui/issues/issue-50264-inner-deref-trait/option-as_deref_mut.stderr12
-rw-r--r--tests/ui/issues/issue-50264-inner-deref-trait/result-as_deref.rs4
-rw-r--r--tests/ui/issues/issue-50264-inner-deref-trait/result-as_deref.stderr12
-rw-r--r--tests/ui/issues/issue-50264-inner-deref-trait/result-as_deref_mut.rs4
-rw-r--r--tests/ui/issues/issue-50264-inner-deref-trait/result-as_deref_mut.stderr12
-rw-r--r--tests/ui/issues/issue-50403.rs5
-rw-r--r--tests/ui/issues/issue-50403.stderr8
-rw-r--r--tests/ui/issues/issue-50411.rs11
-rw-r--r--tests/ui/issues/issue-50415.rs16
-rw-r--r--tests/ui/issues/issue-50442.rs13
-rw-r--r--tests/ui/issues/issue-50471.rs9
-rw-r--r--tests/ui/issues/issue-50518.rs40
-rw-r--r--tests/ui/issues/issue-50571.fixed8
-rw-r--r--tests/ui/issues/issue-50571.rs8
-rw-r--r--tests/ui/issues/issue-50571.stderr14
-rw-r--r--tests/ui/issues/issue-50576.rs6
-rw-r--r--tests/ui/issues/issue-50576.stderr22
-rw-r--r--tests/ui/issues/issue-50581.rs3
-rw-r--r--tests/ui/issues/issue-50581.stderr9
-rw-r--r--tests/ui/issues/issue-50582.rs5
-rw-r--r--tests/ui/issues/issue-50582.stderr31
-rw-r--r--tests/ui/issues/issue-50585.rs5
-rw-r--r--tests/ui/issues/issue-50585.stderr19
-rw-r--r--tests/ui/issues/issue-50600.rs5
-rw-r--r--tests/ui/issues/issue-50600.stderr12
-rw-r--r--tests/ui/issues/issue-50618.rs19
-rw-r--r--tests/ui/issues/issue-50618.stderr11
-rw-r--r--tests/ui/issues/issue-5062.rs2
-rw-r--r--tests/ui/issues/issue-5062.stderr14
-rw-r--r--tests/ui/issues/issue-5067.rs75
-rw-r--r--tests/ui/issues/issue-5067.stderr110
-rw-r--r--tests/ui/issues/issue-50688.rs3
-rw-r--r--tests/ui/issues/issue-50688.stderr12
-rw-r--r--tests/ui/issues/issue-50689.rs9
-rw-r--r--tests/ui/issues/issue-50714-1.rs11
-rw-r--r--tests/ui/issues/issue-50714-1.stderr9
-rw-r--r--tests/ui/issues/issue-50714.rs3
-rw-r--r--tests/ui/issues/issue-50714.stderr9
-rw-r--r--tests/ui/issues/issue-50761.rs23
-rw-r--r--tests/ui/issues/issue-50781.rs19
-rw-r--r--tests/ui/issues/issue-50781.stderr24
-rw-r--r--tests/ui/issues/issue-50802.rs8
-rw-r--r--tests/ui/issues/issue-50802.stderr9
-rw-r--r--tests/ui/issues/issue-50811.rs55
-rw-r--r--tests/ui/issues/issue-50825-1.rs22
-rw-r--r--tests/ui/issues/issue-50825.rs15
-rw-r--r--tests/ui/issues/issue-50865-private-impl-trait/auxiliary/lib.rs18
-rw-r--r--tests/ui/issues/issue-50865-private-impl-trait/main.rs16
-rw-r--r--tests/ui/issues/issue-5100.rs57
-rw-r--r--tests/ui/issues/issue-5100.stderr76
-rw-r--r--tests/ui/issues/issue-51022.rs2
-rw-r--r--tests/ui/issues/issue-51022.stderr9
-rw-r--r--tests/ui/issues/issue-51044.rs30
-rw-r--r--tests/ui/issues/issue-51102.rs38
-rw-r--r--tests/ui/issues/issue-51102.stderr27
-rw-r--r--tests/ui/issues/issue-51116.rs12
-rw-r--r--tests/ui/issues/issue-51116.stderr9
-rw-r--r--tests/ui/issues/issue-51154.rs6
-rw-r--r--tests/ui/issues/issue-51154.stderr19
-rw-r--r--tests/ui/issues/issue-51515.rs10
-rw-r--r--tests/ui/issues/issue-51515.stderr22
-rw-r--r--tests/ui/issues/issue-5153.rs12
-rw-r--r--tests/ui/issues/issue-5153.stderr12
-rw-r--r--tests/ui/issues/issue-51632-try-desugar-incompatible-types.rs12
-rw-r--r--tests/ui/issues/issue-51632-try-desugar-incompatible-types.stderr22
-rw-r--r--tests/ui/issues/issue-51655.rs14
-rw-r--r--tests/ui/issues/issue-51714.rs21
-rw-r--r--tests/ui/issues/issue-51714.stderr63
-rw-r--r--tests/ui/issues/issue-51798.rs14
-rw-r--r--tests/ui/issues/issue-51874.rs3
-rw-r--r--tests/ui/issues/issue-51874.stderr14
-rw-r--r--tests/ui/issues/issue-51907.rs19
-rw-r--r--tests/ui/issues/issue-5192.rs39
-rw-r--r--tests/ui/issues/issue-51947.rs17
-rw-r--r--tests/ui/issues/issue-52049.rs8
-rw-r--r--tests/ui/issues/issue-52049.stderr14
-rw-r--r--tests/ui/issues/issue-52126-assign-op-invariance.rs49
-rw-r--r--tests/ui/issues/issue-52126-assign-op-invariance.stderr15
-rw-r--r--tests/ui/issues/issue-52140/auxiliary/some_crate.rs5
-rw-r--r--tests/ui/issues/issue-52140/main.rs13
-rw-r--r--tests/ui/issues/issue-52141/auxiliary/some_crate.rs5
-rw-r--r--tests/ui/issues/issue-52141/main.rs16
-rw-r--r--tests/ui/issues/issue-52262.rs24
-rw-r--r--tests/ui/issues/issue-52262.stderr9
-rw-r--r--tests/ui/issues/issue-5239-1.rs6
-rw-r--r--tests/ui/issues/issue-5239-1.stderr11
-rw-r--r--tests/ui/issues/issue-5239-2.rs9
-rw-r--r--tests/ui/issues/issue-52489.rs8
-rw-r--r--tests/ui/issues/issue-52489.stderr11
-rw-r--r--tests/ui/issues/issue-52533.rs7
-rw-r--r--tests/ui/issues/issue-52533.stderr11
-rw-r--r--tests/ui/issues/issue-52705/auxiliary/png2.rs3
-rw-r--r--tests/ui/issues/issue-52705/main.rs15
-rw-r--r--tests/ui/issues/issue-52717.rs13
-rw-r--r--tests/ui/issues/issue-52717.stderr12
-rw-r--r--tests/ui/issues/issue-5280.rs18
-rw-r--r--tests/ui/issues/issue-5315.rs9
-rw-r--r--tests/ui/issues/issue-5321-immediates-with-bare-self.rs15
-rw-r--r--tests/ui/issues/issue-53251.rs21
-rw-r--r--tests/ui/issues/issue-53251.stderr39
-rw-r--r--tests/ui/issues/issue-53275.rs9
-rw-r--r--tests/ui/issues/issue-53300.rs12
-rw-r--r--tests/ui/issues/issue-53300.stderr9
-rw-r--r--tests/ui/issues/issue-53333.rs9
-rw-r--r--tests/ui/issues/issue-53348.rs15
-rw-r--r--tests/ui/issues/issue-53348.stderr12
-rw-r--r--tests/ui/issues/issue-53419.rs8
-rw-r--r--tests/ui/issues/issue-53498.rs17
-rw-r--r--tests/ui/issues/issue-53498.stderr12
-rw-r--r--tests/ui/issues/issue-53568.rs47
-rw-r--r--tests/ui/issues/issue-5358-1.rs13
-rw-r--r--tests/ui/issues/issue-5358-1.stderr22
-rw-r--r--tests/ui/issues/issue-53712.rs9
-rw-r--r--tests/ui/issues/issue-53712.stderr11
-rw-r--r--tests/ui/issues/issue-53728.rs19
-rw-r--r--tests/ui/issues/issue-53843.rs26
-rw-r--r--tests/ui/issues/issue-54044.rs13
-rw-r--r--tests/ui/issues/issue-54044.stderr29
-rw-r--r--tests/ui/issues/issue-54062.rs12
-rw-r--r--tests/ui/issues/issue-54062.stderr9
-rw-r--r--tests/ui/issues/issue-54094.rs14
-rw-r--r--tests/ui/issues/issue-54302-cases.rs85
-rw-r--r--tests/ui/issues/issue-54302-cases.stderr38
-rw-r--r--tests/ui/issues/issue-54302.rs19
-rw-r--r--tests/ui/issues/issue-54302.stderr11
-rw-r--r--tests/ui/issues/issue-5439.rs19
-rw-r--r--tests/ui/issues/issue-5439.stderr11
-rw-r--r--tests/ui/issues/issue-54410.rs8
-rw-r--r--tests/ui/issues/issue-54410.stderr11
-rw-r--r--tests/ui/issues/issue-54462-mutable-noalias-correctness.rs25
-rw-r--r--tests/ui/issues/issue-54477-reduced-2.rs26
-rw-r--r--tests/ui/issues/issue-54582.rs16
-rw-r--r--tests/ui/issues/issue-54696.rs8
-rw-r--r--tests/ui/issues/issue-5518.rs8
-rw-r--r--tests/ui/issues/issue-5521.rs17
-rw-r--r--tests/ui/issues/issue-55376.rs16
-rw-r--r--tests/ui/issues/issue-55380.rs28
-rw-r--r--tests/ui/issues/issue-55380.stderr12
-rw-r--r--tests/ui/issues/issue-5550.rs9
-rw-r--r--tests/ui/issues/issue-5554.rs29
-rw-r--r--tests/ui/issues/issue-55587.rs5
-rw-r--r--tests/ui/issues/issue-55587.stderr11
-rw-r--r--tests/ui/issues/issue-5572.rs7
-rw-r--r--tests/ui/issues/issue-55731.rs52
-rw-r--r--tests/ui/issues/issue-55731.stderr14
-rw-r--r--tests/ui/issues/issue-56128.rs15
-rw-r--r--tests/ui/issues/issue-56175.rs9
-rw-r--r--tests/ui/issues/issue-56175.stderr37
-rw-r--r--tests/ui/issues/issue-56199.rs22
-rw-r--r--tests/ui/issues/issue-56199.stderr30
-rw-r--r--tests/ui/issues/issue-56229.rs35
-rw-r--r--tests/ui/issues/issue-56237.rs13
-rw-r--r--tests/ui/issues/issue-5666.rs26
-rw-r--r--tests/ui/issues/issue-56806.rs6
-rw-r--r--tests/ui/issues/issue-56806.stderr12
-rw-r--r--tests/ui/issues/issue-56835.rs9
-rw-r--r--tests/ui/issues/issue-56835.stderr15
-rw-r--r--tests/ui/issues/issue-56870.rs38
-rw-r--r--tests/ui/issues/issue-5688.rs20
-rw-r--r--tests/ui/issues/issue-56943.rs8
-rw-r--r--tests/ui/issues/issue-56943.stderr11
-rw-r--r--tests/ui/issues/issue-5708.rs55
-rw-r--r--tests/ui/issues/issue-57156.rs23
-rw-r--r--tests/ui/issues/issue-57162.rs7
-rw-r--r--tests/ui/issues/issue-5718.rs24
-rw-r--r--tests/ui/issues/issue-57198-pass.rs9
-rw-r--r--tests/ui/issues/issue-57271.rs24
-rw-r--r--tests/ui/issues/issue-57271.stderr27
-rw-r--r--tests/ui/issues/issue-57362-1.rs23
-rw-r--r--tests/ui/issues/issue-57362-1.stderr16
-rw-r--r--tests/ui/issues/issue-57362-2.rs25
-rw-r--r--tests/ui/issues/issue-57362-2.stderr18
-rw-r--r--tests/ui/issues/issue-57399-self-return-impl-trait.rs22
-rw-r--r--tests/ui/issues/issue-5741.rs9
-rw-r--r--tests/ui/issues/issue-5754.rs16
-rw-r--r--tests/ui/issues/issue-57741-1.rs18
-rw-r--r--tests/ui/issues/issue-57741-1.stderr25
-rw-r--r--tests/ui/issues/issue-57741.fixed31
-rw-r--r--tests/ui/issues/issue-57741.rs31
-rw-r--r--tests/ui/issues/issue-57741.stderr59
-rw-r--r--tests/ui/issues/issue-57781.rs20
-rw-r--r--tests/ui/issues/issue-57924.rs10
-rw-r--r--tests/ui/issues/issue-57924.stderr11
-rw-r--r--tests/ui/issues/issue-58212.rs15
-rw-r--r--tests/ui/issues/issue-58344.rs50
-rw-r--r--tests/ui/issues/issue-58375-monomorphize-default-impls.rs24
-rw-r--r--tests/ui/issues/issue-5844.mir.stderr11
-rw-r--r--tests/ui/issues/issue-5844.rs9
-rw-r--r--tests/ui/issues/issue-5844.thir.stderr11
-rw-r--r--tests/ui/issues/issue-58463.rs10
-rw-r--r--tests/ui/issues/issue-58712.rs14
-rw-r--r--tests/ui/issues/issue-58712.stderr20
-rw-r--r--tests/ui/issues/issue-58734.rs24
-rw-r--r--tests/ui/issues/issue-58734.stderr23
-rw-r--r--tests/ui/issues/issue-5883.rs13
-rw-r--r--tests/ui/issues/issue-5883.stderr36
-rw-r--r--tests/ui/issues/issue-5884.rs18
-rw-r--r--tests/ui/issues/issue-58857.rs7
-rw-r--r--tests/ui/issues/issue-58857.stderr8
-rw-r--r--tests/ui/issues/issue-5900.rs15
-rw-r--r--tests/ui/issues/issue-59020.rs27
-rw-r--r--tests/ui/issues/issue-5917.rs9
-rw-r--r--tests/ui/issues/issue-59326.rs26
-rw-r--r--tests/ui/issues/issue-59488.rs34
-rw-r--r--tests/ui/issues/issue-59488.stderr127
-rw-r--r--tests/ui/issues/issue-59494.rs23
-rw-r--r--tests/ui/issues/issue-59494.stderr18
-rw-r--r--tests/ui/issues/issue-5950.rs9
-rw-r--r--tests/ui/issues/issue-59756.fixed17
-rw-r--r--tests/ui/issues/issue-59756.rs21
-rw-r--r--tests/ui/issues/issue-59756.stderr20
-rw-r--r--tests/ui/issues/issue-5988.rs24
-rw-r--r--tests/ui/issues/issue-5997-enum.rs10
-rw-r--r--tests/ui/issues/issue-5997-enum.stderr13
-rw-r--r--tests/ui/issues/issue-5997-struct.rs10
-rw-r--r--tests/ui/issues/issue-5997-struct.stderr13
-rw-r--r--tests/ui/issues/issue-5997.rs15
-rw-r--r--tests/ui/issues/issue-60218.rs19
-rw-r--r--tests/ui/issues/issue-60218.stderr20
-rw-r--r--tests/ui/issues/issue-60622.rs16
-rw-r--r--tests/ui/issues/issue-60622.stderr35
-rw-r--r--tests/ui/issues/issue-60989.rs18
-rw-r--r--tests/ui/issues/issue-60989.stderr19
-rw-r--r--tests/ui/issues/issue-61106.rs6
-rw-r--r--tests/ui/issues/issue-61106.stderr19
-rw-r--r--tests/ui/issues/issue-61108.rs7
-rw-r--r--tests/ui/issues/issue-61108.stderr21
-rw-r--r--tests/ui/issues/issue-6117.rs12
-rw-r--r--tests/ui/issues/issue-6130.rs10
-rw-r--r--tests/ui/issues/issue-61475.rs15
-rw-r--r--tests/ui/issues/issue-6153.rs13
-rw-r--r--tests/ui/issues/issue-61623.rs10
-rw-r--r--tests/ui/issues/issue-61623.stderr14
-rw-r--r--tests/ui/issues/issue-61696.rs66
-rw-r--r--tests/ui/issues/issue-61894.rs21
-rw-r--r--tests/ui/issues/issue-62375.rs9
-rw-r--r--tests/ui/issues/issue-62375.stderr21
-rw-r--r--tests/ui/issues/issue-62480.rs10
-rw-r--r--tests/ui/issues/issue-62480.stderr22
-rw-r--r--tests/ui/issues/issue-6318.rs20
-rw-r--r--tests/ui/issues/issue-6344-let.rs15
-rw-r--r--tests/ui/issues/issue-6344-match.rs18
-rw-r--r--tests/ui/issues/issue-63983.rs15
-rw-r--r--tests/ui/issues/issue-63983.stderr19
-rw-r--r--tests/ui/issues/issue-64430.rs14
-rw-r--r--tests/ui/issues/issue-64430.stderr12
-rw-r--r--tests/ui/issues/issue-64559.rs6
-rw-r--r--tests/ui/issues/issue-64559.stderr22
-rw-r--r--tests/ui/issues/issue-6458-1.rs8
-rw-r--r--tests/ui/issues/issue-6458-2.rs5
-rw-r--r--tests/ui/issues/issue-6458-2.stderr14
-rw-r--r--tests/ui/issues/issue-6458-3.rs6
-rw-r--r--tests/ui/issues/issue-6458-3.stderr14
-rw-r--r--tests/ui/issues/issue-6458-4.rs7
-rw-r--r--tests/ui/issues/issue-6458-4.stderr16
-rw-r--r--tests/ui/issues/issue-6458.rs14
-rw-r--r--tests/ui/issues/issue-6458.stderr14
-rw-r--r--tests/ui/issues/issue-64593.rs12
-rw-r--r--tests/ui/issues/issue-64792-bad-unicode-ctor.rs5
-rw-r--r--tests/ui/issues/issue-64792-bad-unicode-ctor.stderr12
-rw-r--r--tests/ui/issues/issue-65131.rs18
-rw-r--r--tests/ui/issues/issue-65131.stderr12
-rw-r--r--tests/ui/issues/issue-65230.rs11
-rw-r--r--tests/ui/issues/issue-65230.stderr18
-rw-r--r--tests/ui/issues/issue-65462.rs15
-rw-r--r--tests/ui/issues/issue-6557.rs9
-rw-r--r--tests/ui/issues/issue-65634-raw-ident-suggestion.edition2015.stderr28
-rw-r--r--tests/ui/issues/issue-65634-raw-ident-suggestion.edition2018.stderr28
-rw-r--r--tests/ui/issues/issue-65634-raw-ident-suggestion.rs25
-rw-r--r--tests/ui/issues/issue-6596-2.rs11
-rw-r--r--tests/ui/issues/issue-6596-2.stderr13
-rw-r--r--tests/ui/issues/issue-66308.rs8
-rw-r--r--tests/ui/issues/issue-66353.rs15
-rw-r--r--tests/ui/issues/issue-66353.stderr17
-rw-r--r--tests/ui/issues/issue-6642.rs9
-rw-r--r--tests/ui/issues/issue-6642.stderr11
-rw-r--r--tests/ui/issues/issue-66667-function-cmp-cycle.rs16
-rw-r--r--tests/ui/issues/issue-66667-function-cmp-cycle.stderr55
-rw-r--r--tests/ui/issues/issue-66702-break-outside-loop-val.rs9
-rw-r--r--tests/ui/issues/issue-66702-break-outside-loop-val.stderr22
-rw-r--r--tests/ui/issues/issue-66706.rs22
-rw-r--r--tests/ui/issues/issue-66706.stderr37
-rw-r--r--tests/ui/issues/issue-66768.rs205
-rw-r--r--tests/ui/issues/issue-66923-show-error-for-correct-call.rs15
-rw-r--r--tests/ui/issues/issue-66923-show-error-for-correct-call.stderr40
-rw-r--r--tests/ui/issues/issue-67039-unsound-pin-partialeq.rs27
-rw-r--r--tests/ui/issues/issue-67039-unsound-pin-partialeq.stderr13
-rw-r--r--tests/ui/issues/issue-6738.rs10
-rw-r--r--tests/ui/issues/issue-6738.stderr16
-rw-r--r--tests/ui/issues/issue-67535.rs22
-rw-r--r--tests/ui/issues/issue-67535.stderr39
-rw-r--r--tests/ui/issues/issue-67552.polonius.stderr17
-rw-r--r--tests/ui/issues/issue-67552.rs32
-rw-r--r--tests/ui/issues/issue-67552.stderr17
-rw-r--r--tests/ui/issues/issue-68010-large-zst-consts.rs5
-rw-r--r--tests/ui/issues/issue-68696-catch-during-unwind.rs25
-rw-r--r--tests/ui/issues/issue-6892.rs58
-rw-r--r--tests/ui/issues/issue-68951.rs9
-rw-r--r--tests/ui/issues/issue-6898.rs33
-rw-r--r--tests/ui/issues/issue-69130.rs7
-rw-r--r--tests/ui/issues/issue-69130.stderr21
-rw-r--r--tests/ui/issues/issue-6919.rs11
-rw-r--r--tests/ui/issues/issue-69225-SCEVAddExpr-wrap-flag.rs33
-rw-r--r--tests/ui/issues/issue-69225-layout-repeated-checked-add.rs31
-rw-r--r--tests/ui/issues/issue-69306.rs45
-rw-r--r--tests/ui/issues/issue-69306.stderr138
-rw-r--r--tests/ui/issues/issue-6936.rs34
-rw-r--r--tests/ui/issues/issue-6936.stderr43
-rw-r--r--tests/ui/issues/issue-69396-const-no-type-in-macro.rs17
-rw-r--r--tests/ui/issues/issue-69396-const-no-type-in-macro.stderr50
-rw-r--r--tests/ui/issues/issue-69455.rs31
-rw-r--r--tests/ui/issues/issue-69455.stderr39
-rw-r--r--tests/ui/issues/issue-69602-type-err-during-codegen-ice.rs23
-rw-r--r--tests/ui/issues/issue-69602-type-err-during-codegen-ice.stderr25
-rw-r--r--tests/ui/issues/issue-69683.rs33
-rw-r--r--tests/ui/issues/issue-69683.stderr43
-rw-r--r--tests/ui/issues/issue-70093.rs10
-rw-r--r--tests/ui/issues/issue-7012.rs22
-rw-r--r--tests/ui/issues/issue-70381.rs6
-rw-r--r--tests/ui/issues/issue-70381.stderr8
-rw-r--r--tests/ui/issues/issue-7044.rs4
-rw-r--r--tests/ui/issues/issue-7044.stderr13
-rw-r--r--tests/ui/issues/issue-7061.rs10
-rw-r--r--tests/ui/issues/issue-7061.stderr14
-rw-r--r--tests/ui/issues/issue-70673.rs12
-rw-r--r--tests/ui/issues/issue-70724-add_type_neq_err_label-unwrap.rs10
-rw-r--r--tests/ui/issues/issue-70724-add_type_neq_err_label-unwrap.stderr38
-rw-r--r--tests/ui/issues/issue-70746.rs29
-rw-r--r--tests/ui/issues/issue-7092.rs15
-rw-r--r--tests/ui/issues/issue-7092.stderr14
-rw-r--r--tests/ui/issues/issue-71406.rs6
-rw-r--r--tests/ui/issues/issue-71406.stderr9
-rw-r--r--tests/ui/issues/issue-71584.rs6
-rw-r--r--tests/ui/issues/issue-71584.stderr17
-rw-r--r--tests/ui/issues/issue-71676-1.fixed53
-rw-r--r--tests/ui/issues/issue-71676-1.rs53
-rw-r--r--tests/ui/issues/issue-71676-1.stderr63
-rw-r--r--tests/ui/issues/issue-71676-2.rs42
-rw-r--r--tests/ui/issues/issue-71676-2.stderr18
-rw-r--r--tests/ui/issues/issue-7178.rs10
-rw-r--r--tests/ui/issues/issue-72002.rs29
-rw-r--r--tests/ui/issues/issue-72076.rs6
-rw-r--r--tests/ui/issues/issue-72076.stderr14
-rw-r--r--tests/ui/issues/issue-72278.rs19
-rw-r--r--tests/ui/issues/issue-72278.stderr15
-rw-r--r--tests/ui/issues/issue-7246.rs11
-rw-r--r--tests/ui/issues/issue-7246.stderr24
-rw-r--r--tests/ui/issues/issue-7268.rs10
-rw-r--r--tests/ui/issues/issue-72839-error-overflow.rs19
-rw-r--r--tests/ui/issues/issue-72839-error-overflow.stderr9
-rw-r--r--tests/ui/issues/issue-72933-match-stack-overflow.rs5208
-rw-r--r--tests/ui/issues/issue-73112.rs13
-rw-r--r--tests/ui/issues/issue-73112.stderr15
-rw-r--r--tests/ui/issues/issue-73229.rs33
-rw-r--r--tests/ui/issues/issue-7344.rs22
-rw-r--r--tests/ui/issues/issue-7364.rs7
-rw-r--r--tests/ui/issues/issue-7364.stderr14
-rw-r--r--tests/ui/issues/issue-74082.rs9
-rw-r--r--tests/ui/issues/issue-74082.stderr19
-rw-r--r--tests/ui/issues/issue-74236/auxiliary/dep.rs8
-rw-r--r--tests/ui/issues/issue-74236/main.rs9
-rw-r--r--tests/ui/issues/issue-74236/main.stderr11
-rw-r--r--tests/ui/issues/issue-74564-if-expr-stack-overflow.rs10419
-rw-r--r--tests/ui/issues/issue-7519-match-unit-in-arg.rs12
-rw-r--r--tests/ui/issues/issue-75283.rs6
-rw-r--r--tests/ui/issues/issue-75283.stderr18
-rw-r--r--tests/ui/issues/issue-75307.rs3
-rw-r--r--tests/ui/issues/issue-75307.stderr8
-rw-r--r--tests/ui/issues/issue-7563.rs28
-rw-r--r--tests/ui/issues/issue-75704.rs7
-rw-r--r--tests/ui/issues/issue-7575.rs17
-rw-r--r--tests/ui/issues/issue-75777.rs15
-rw-r--r--tests/ui/issues/issue-75777.stderr11
-rw-r--r--tests/ui/issues/issue-76042.rs16
-rw-r--r--tests/ui/issues/issue-7607-1.rs9
-rw-r--r--tests/ui/issues/issue-7607-1.stderr12
-rw-r--r--tests/ui/issues/issue-7607-2.rs16
-rw-r--r--tests/ui/issues/issue-76077-1.fixed18
-rw-r--r--tests/ui/issues/issue-76077-1.rs18
-rw-r--r--tests/ui/issues/issue-76077-1.stderr24
-rw-r--r--tests/ui/issues/issue-76077.rs10
-rw-r--r--tests/ui/issues/issue-76077.stderr10
-rw-r--r--tests/ui/issues/issue-76191.rs19
-rw-r--r--tests/ui/issues/issue-76191.stderr43
-rw-r--r--tests/ui/issues/issue-7660.rs18
-rw-r--r--tests/ui/issues/issue-7663.rs32
-rw-r--r--tests/ui/issues/issue-7673-cast-generically-implemented-trait.rs20
-rw-r--r--tests/ui/issues/issue-77218/issue-77218-2.fixed6
-rw-r--r--tests/ui/issues/issue-77218/issue-77218-2.rs6
-rw-r--r--tests/ui/issues/issue-77218/issue-77218-2.stderr16
-rw-r--r--tests/ui/issues/issue-77218/issue-77218.fixed5
-rw-r--r--tests/ui/issues/issue-77218/issue-77218.rs5
-rw-r--r--tests/ui/issues/issue-77218/issue-77218.stderr16
-rw-r--r--tests/ui/issues/issue-7784.rs30
-rw-r--r--tests/ui/issues/issue-77919.rs13
-rw-r--r--tests/ui/issues/issue-77919.stderr35
-rw-r--r--tests/ui/issues/issue-78115.rs19
-rw-r--r--tests/ui/issues/issue-7813.rs4
-rw-r--r--tests/ui/issues/issue-7813.stderr14
-rw-r--r--tests/ui/issues/issue-78192.rs17
-rw-r--r--tests/ui/issues/issue-78622.rs7
-rw-r--r--tests/ui/issues/issue-78622.stderr14
-rw-r--r--tests/ui/issues/issue-7867.rs14
-rw-r--r--tests/ui/issues/issue-7867.stderr17
-rw-r--r--tests/ui/issues/issue-78957.rs29
-rw-r--r--tests/ui/issues/issue-78957.stderr69
-rw-r--r--tests/ui/issues/issue-7899.rs11
-rw-r--r--tests/ui/issues/issue-7911.rs37
-rw-r--r--tests/ui/issues/issue-7950.rs8
-rw-r--r--tests/ui/issues/issue-7950.stderr12
-rw-r--r--tests/ui/issues/issue-7970a.rs8
-rw-r--r--tests/ui/issues/issue-7970a.stderr17
-rw-r--r--tests/ui/issues/issue-8044.rs11
-rw-r--r--tests/ui/issues/issue-80607.rs10
-rw-r--r--tests/ui/issues/issue-80607.stderr17
-rw-r--r--tests/ui/issues/issue-81584.fixed8
-rw-r--r--tests/ui/issues/issue-81584.rs8
-rw-r--r--tests/ui/issues/issue-81584.stderr14
-rw-r--r--tests/ui/issues/issue-8171-default-method-self-inherit-builtin-trait.rs19
-rw-r--r--tests/ui/issues/issue-81918.rs11
-rw-r--r--tests/ui/issues/issue-8248.rs15
-rw-r--r--tests/ui/issues/issue-8249.rs20
-rw-r--r--tests/ui/issues/issue-8259.rs12
-rw-r--r--tests/ui/issues/issue-82833-slice-miscompile.rs16
-rw-r--r--tests/ui/issues/issue-83048.rs5
-rw-r--r--tests/ui/issues/issue-83048.stderr9
-rw-r--r--tests/ui/issues/issue-83190.rs49
-rw-r--r--tests/ui/issues/issue-8391.rs9
-rw-r--r--tests/ui/issues/issue-83924.fixed20
-rw-r--r--tests/ui/issues/issue-83924.rs20
-rw-r--r--tests/ui/issues/issue-83924.stderr22
-rw-r--r--tests/ui/issues/issue-8398.rs13
-rw-r--r--tests/ui/issues/issue-8401.rs8
-rw-r--r--tests/ui/issues/issue-8498.rs27
-rw-r--r--tests/ui/issues/issue-8506.rs14
-rw-r--r--tests/ui/issues/issue-8521.rs25
-rw-r--r--tests/ui/issues/issue-85461.rs27
-rw-r--r--tests/ui/issues/issue-8578.rs20
-rw-r--r--tests/ui/issues/issue-86756.rs12
-rw-r--r--tests/ui/issues/issue-86756.stderr48
-rw-r--r--tests/ui/issues/issue-868.rs18
-rw-r--r--tests/ui/issues/issue-87199.rs20
-rw-r--r--tests/ui/issues/issue-87199.stderr40
-rw-r--r--tests/ui/issues/issue-8727.polonius.stderr26
-rw-r--r--tests/ui/issues/issue-8727.rs16
-rw-r--r--tests/ui/issues/issue-8727.stderr26
-rw-r--r--tests/ui/issues/issue-87490.rs10
-rw-r--r--tests/ui/issues/issue-87490.stderr14
-rw-r--r--tests/ui/issues/issue-8761.rs10
-rw-r--r--tests/ui/issues/issue-8761.stderr25
-rw-r--r--tests/ui/issues/issue-8767.rs5
-rw-r--r--tests/ui/issues/issue-8767.stderr9
-rw-r--r--tests/ui/issues/issue-87707.rs17
-rw-r--r--tests/ui/issues/issue-87707.run.stderr3
-rw-r--r--tests/ui/issues/issue-8783.rs24
-rw-r--r--tests/ui/issues/issue-88150.rs21
-rw-r--r--tests/ui/issues/issue-8860.rs49
-rw-r--r--tests/ui/issues/issue-8898.rs18
-rw-r--r--tests/ui/issues/issue-9047.rs14
-rw-r--r--tests/ui/issues/issue-9110.rs17
-rw-r--r--tests/ui/issues/issue-9123.rs8
-rw-r--r--tests/ui/issues/issue-9129.rs32
-rw-r--r--tests/ui/issues/issue-91489.rs40
-rw-r--r--tests/ui/issues/issue-9155.rs12
-rw-r--r--tests/ui/issues/issue-9188.rs11
-rw-r--r--tests/ui/issues/issue-9243.rs16
-rw-r--r--tests/ui/issues/issue-9249.rs6
-rw-r--r--tests/ui/issues/issue-9259.rs16
-rw-r--r--tests/ui/issues/issue-9382.rs40
-rw-r--r--tests/ui/issues/issue-9446.rs30
-rw-r--r--tests/ui/issues/issue-948.rs15
-rw-r--r--tests/ui/issues/issue-9575.rs7
-rw-r--r--tests/ui/issues/issue-9575.stderr12
-rw-r--r--tests/ui/issues/issue-9719.rs41
-rw-r--r--tests/ui/issues/issue-9725.rs7
-rw-r--r--tests/ui/issues/issue-9725.stderr18
-rw-r--r--tests/ui/issues/issue-9737.rs10
-rw-r--r--tests/ui/issues/issue-979.rs29
-rw-r--r--tests/ui/issues/issue-9814.rs8
-rw-r--r--tests/ui/issues/issue-9814.stderr9
-rw-r--r--tests/ui/issues/issue-98299.rs18
-rw-r--r--tests/ui/issues/issue-98299.stderr14
-rw-r--r--tests/ui/issues/issue-9837.rs11
-rw-r--r--tests/ui/issues/issue-9906.rs11
-rw-r--r--tests/ui/issues/issue-9918.rs5
-rw-r--r--tests/ui/issues/issue-9942.rs6
-rw-r--r--tests/ui/issues/issue-9951.rs21
-rw-r--r--tests/ui/issues/issue-9968.rs13
-rw-r--r--tests/ui/issues/issue-99838.rs40
-rw-r--r--tests/ui/issues/issue-pr29383.rs14
-rw-r--r--tests/ui/issues/issue-pr29383.stderr21
2122 files changed, 57413 insertions, 0 deletions
diff --git a/tests/ui/issues/auxiliary/cgu_test.rs b/tests/ui/issues/auxiliary/cgu_test.rs
new file mode 100644
index 000000000..5ed973164
--- /dev/null
+++ b/tests/ui/issues/auxiliary/cgu_test.rs
@@ -0,0 +1,6 @@
+// no-prefer-dynamic
+// compile-flags: --crate-type=lib
+
+pub fn id<T>(t: T) -> T {
+ t
+}
diff --git a/tests/ui/issues/auxiliary/cgu_test_a.rs b/tests/ui/issues/auxiliary/cgu_test_a.rs
new file mode 100644
index 000000000..a3dcd9201
--- /dev/null
+++ b/tests/ui/issues/auxiliary/cgu_test_a.rs
@@ -0,0 +1,15 @@
+// no-prefer-dynamic
+// compile-flags: -Ccodegen-units=2 --crate-type=lib
+
+extern crate cgu_test;
+
+pub mod a {
+ pub fn a() {
+ ::cgu_test::id(0);
+ }
+}
+pub mod b {
+ pub fn a() {
+ ::cgu_test::id(0);
+ }
+}
diff --git a/tests/ui/issues/auxiliary/cgu_test_b.rs b/tests/ui/issues/auxiliary/cgu_test_b.rs
new file mode 100644
index 000000000..a3dcd9201
--- /dev/null
+++ b/tests/ui/issues/auxiliary/cgu_test_b.rs
@@ -0,0 +1,15 @@
+// no-prefer-dynamic
+// compile-flags: -Ccodegen-units=2 --crate-type=lib
+
+extern crate cgu_test;
+
+pub mod a {
+ pub fn a() {
+ ::cgu_test::id(0);
+ }
+}
+pub mod b {
+ pub fn a() {
+ ::cgu_test::id(0);
+ }
+}
diff --git a/tests/ui/issues/auxiliary/i8.rs b/tests/ui/issues/auxiliary/i8.rs
new file mode 100644
index 000000000..889a9c4eb
--- /dev/null
+++ b/tests/ui/issues/auxiliary/i8.rs
@@ -0,0 +1,3 @@
+// A crate named after a built-in type.
+
+pub struct Test;
diff --git a/tests/ui/issues/auxiliary/iss.rs b/tests/ui/issues/auxiliary/iss.rs
new file mode 100644
index 000000000..cf32f6c2d
--- /dev/null
+++ b/tests/ui/issues/auxiliary/iss.rs
@@ -0,0 +1,12 @@
+#![crate_name="issue6919_3"]
+
+// part of issue-6919.rs
+
+pub struct C<K> where K: FnOnce() {
+ pub k: K,
+}
+
+fn no_op() { }
+pub const D : C<fn()> = C {
+ k: no_op as fn()
+};
diff --git a/tests/ui/issues/auxiliary/issue-11224.rs b/tests/ui/issues/auxiliary/issue-11224.rs
new file mode 100644
index 000000000..63543621a
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-11224.rs
@@ -0,0 +1,16 @@
+#![deny(dead_code)]
+
+mod inner {
+ pub trait Trait {
+ fn f(&self) { f(); }
+ }
+
+ impl Trait for isize {}
+
+ fn f() {}
+}
+
+pub fn foo() {
+ let a = &1isize as &inner::Trait;
+ a.f();
+}
diff --git a/tests/ui/issues/auxiliary/issue-11508.rs b/tests/ui/issues/auxiliary/issue-11508.rs
new file mode 100644
index 000000000..16bfc65c2
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-11508.rs
@@ -0,0 +1,10 @@
+pub struct Closed01<F>(pub F);
+
+pub trait Bar { fn new() -> Self; }
+
+impl<T: Bar> Bar for Closed01<T> {
+ fn new() -> Closed01<T> { Closed01(Bar::new()) }
+}
+impl Bar for f32 { fn new() -> f32 { 1.0 } }
+
+pub fn random<T: Bar>() -> T { Bar::new() }
diff --git a/tests/ui/issues/auxiliary/issue-11529.rs b/tests/ui/issues/auxiliary/issue-11529.rs
new file mode 100644
index 000000000..dd3ef4387
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-11529.rs
@@ -0,0 +1 @@
+pub struct A<'a>(pub &'a isize);
diff --git a/tests/ui/issues/auxiliary/issue-11680.rs b/tests/ui/issues/auxiliary/issue-11680.rs
new file mode 100644
index 000000000..74abbf0bf
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-11680.rs
@@ -0,0 +1,9 @@
+enum Foo {
+ Bar(isize)
+}
+
+pub mod test {
+ enum Foo {
+ Bar(isize)
+ }
+}
diff --git a/tests/ui/issues/auxiliary/issue-12133-dylib.rs b/tests/ui/issues/auxiliary/issue-12133-dylib.rs
new file mode 100644
index 000000000..8bd2b3353
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-12133-dylib.rs
@@ -0,0 +1 @@
+#![crate_type = "dylib"]
diff --git a/tests/ui/issues/auxiliary/issue-12133-dylib2.rs b/tests/ui/issues/auxiliary/issue-12133-dylib2.rs
new file mode 100644
index 000000000..30de74006
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-12133-dylib2.rs
@@ -0,0 +1,6 @@
+// no-prefer-dynamic
+
+#![crate_type = "dylib"]
+
+extern crate issue_12133_rlib as a;
+extern crate issue_12133_dylib as b;
diff --git a/tests/ui/issues/auxiliary/issue-12133-rlib.rs b/tests/ui/issues/auxiliary/issue-12133-rlib.rs
new file mode 100644
index 000000000..39c261e11
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-12133-rlib.rs
@@ -0,0 +1,3 @@
+// no-prefer-dynamic
+
+#![crate_type = "rlib"]
diff --git a/tests/ui/issues/auxiliary/issue-12612-1.rs b/tests/ui/issues/auxiliary/issue-12612-1.rs
new file mode 100644
index 000000000..01f5a784b
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-12612-1.rs
@@ -0,0 +1,3 @@
+pub mod bar {
+ pub fn foo() {}
+}
diff --git a/tests/ui/issues/auxiliary/issue-12612-2.rs b/tests/ui/issues/auxiliary/issue-12612-2.rs
new file mode 100644
index 000000000..2c7247871
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-12612-2.rs
@@ -0,0 +1 @@
+pub fn baz() {}
diff --git a/tests/ui/issues/auxiliary/issue-12660-aux.rs b/tests/ui/issues/auxiliary/issue-12660-aux.rs
new file mode 100644
index 000000000..6dea8662d
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-12660-aux.rs
@@ -0,0 +1,11 @@
+#![crate_type="lib"]
+#![crate_name="issue12660aux"]
+
+pub use my_mod::{MyStruct, my_fn};
+
+mod my_mod {
+ pub struct MyStruct;
+
+ pub fn my_fn(my_struct: MyStruct) {
+ }
+}
diff --git a/tests/ui/issues/auxiliary/issue-13507.rs b/tests/ui/issues/auxiliary/issue-13507.rs
new file mode 100644
index 000000000..c91013043
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-13507.rs
@@ -0,0 +1,87 @@
+pub mod testtypes {
+ use std::any::TypeId;
+
+ pub fn type_ids() -> Vec<TypeId> {
+ vec![
+ TypeId::of::<FooBool>(),
+ TypeId::of::<FooInt>(),
+ TypeId::of::<FooUint>(),
+ TypeId::of::<FooFloat>(),
+ TypeId::of::<FooStr>(),
+ TypeId::of::<FooArray>(),
+ TypeId::of::<FooSlice>(),
+ TypeId::of::<FooBox>(),
+ TypeId::of::<FooPtr>(),
+ TypeId::of::<FooRef>(),
+ TypeId::of::<FooFnPtr>(),
+ TypeId::of::<FooNil>(),
+ TypeId::of::<FooTuple>(),
+ TypeId::of::<FooTrait>(),
+ TypeId::of::<FooStruct>(),
+ TypeId::of::<FooEnum>()
+ ]
+ }
+
+ // Tests Bool
+ pub type FooBool = bool;
+
+ // Tests Char
+ pub type FooChar = char;
+
+ // Tests Int (does not test all variants of IntTy)
+ pub type FooInt = isize;
+
+ // Tests Uint (does not test all variants of UintTy)
+ pub type FooUint = usize;
+
+ // Tests Float (does not test all variants of FloatTy)
+ pub type FooFloat = f64;
+
+ // Tests Str
+ pub type FooStr = str;
+
+ // Tests Array
+ pub type FooArray = [u8; 1];
+
+ // Tests Slice
+ pub type FooSlice = [u8];
+
+ // Tests Box (of u8)
+ pub type FooBox = Box<u8>;
+
+ // Tests RawPtr
+ pub type FooPtr = *const u8;
+
+ // Tests Ref
+ pub type FooRef = &'static u8;
+
+ // Tests FnPtr
+ pub type FooFnPtr = fn(u8) -> bool;
+
+ // Tests Dynamic
+ pub trait FooTrait {
+ fn foo_method(&self) -> usize;
+ }
+
+ // Tests struct
+ pub struct FooStruct {
+ pub pub_foo_field: usize,
+ foo_field: usize
+ }
+
+ // Tests enum
+ pub enum FooEnum {
+ VarA(usize),
+ VarB(usize, usize)
+ }
+
+ // Tests Tuple
+ pub type FooNil = ();
+ pub type FooTuple = (u8, i8, bool);
+
+ // Skipping Param
+
+ // Skipping Infer
+
+ // Skipping Error
+}
diff --git a/tests/ui/issues/auxiliary/issue-13620-1.rs b/tests/ui/issues/auxiliary/issue-13620-1.rs
new file mode 100644
index 000000000..a77aa5a71
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-13620-1.rs
@@ -0,0 +1,9 @@
+pub struct Foo {
+ pub foo: extern "C" fn()
+}
+
+extern "C" fn the_foo() {}
+
+pub const FOO: Foo = Foo {
+ foo: the_foo
+};
diff --git a/tests/ui/issues/auxiliary/issue-13620-2.rs b/tests/ui/issues/auxiliary/issue-13620-2.rs
new file mode 100644
index 000000000..7efd24407
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-13620-2.rs
@@ -0,0 +1,3 @@
+extern crate issue_13620_1 as crate1;
+
+pub static FOO2: crate1::Foo = crate1::FOO;
diff --git a/tests/ui/issues/auxiliary/issue-13872-1.rs b/tests/ui/issues/auxiliary/issue-13872-1.rs
new file mode 100644
index 000000000..fa9258834
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-13872-1.rs
@@ -0,0 +1 @@
+pub enum A { B }
diff --git a/tests/ui/issues/auxiliary/issue-13872-2.rs b/tests/ui/issues/auxiliary/issue-13872-2.rs
new file mode 100644
index 000000000..8c64f16e3
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-13872-2.rs
@@ -0,0 +1,3 @@
+extern crate issue_13872_1 as foo;
+
+pub use foo::A::B;
diff --git a/tests/ui/issues/auxiliary/issue-13872-3.rs b/tests/ui/issues/auxiliary/issue-13872-3.rs
new file mode 100644
index 000000000..d31d52eb8
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-13872-3.rs
@@ -0,0 +1,9 @@
+extern crate issue_13872_2 as bar;
+
+use bar::B;
+
+pub fn foo() {
+ match B {
+ B => {}
+ }
+}
diff --git a/tests/ui/issues/auxiliary/issue-14344-1.rs b/tests/ui/issues/auxiliary/issue-14344-1.rs
new file mode 100644
index 000000000..954a1e554
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-14344-1.rs
@@ -0,0 +1,5 @@
+// no-prefer-dynamic
+
+#![crate_type = "rlib"]
+
+pub fn foo() {}
diff --git a/tests/ui/issues/auxiliary/issue-14344-2.rs b/tests/ui/issues/auxiliary/issue-14344-2.rs
new file mode 100644
index 000000000..c47b8c0ea
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-14344-2.rs
@@ -0,0 +1,3 @@
+extern crate issue_14344_1;
+
+pub fn bar() {}
diff --git a/tests/ui/issues/auxiliary/issue-14421.rs b/tests/ui/issues/auxiliary/issue-14421.rs
new file mode 100644
index 000000000..5fe4b24cf
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-14421.rs
@@ -0,0 +1,25 @@
+#![crate_type="lib"]
+#![deny(warnings)]
+#![allow(dead_code)]
+
+pub use src::aliases::B;
+pub use src::hidden_core::make;
+
+mod src {
+ pub mod aliases {
+ use super::hidden_core::A;
+ pub type B = A<f32>;
+ }
+
+ pub mod hidden_core {
+ use super::aliases::B;
+
+ pub struct A<T> { t: T }
+
+ pub fn make() -> B { A { t: 1.0 } }
+
+ impl<T> A<T> {
+ pub fn foo(&mut self) { println!("called foo"); }
+ }
+ }
+}
diff --git a/tests/ui/issues/auxiliary/issue-14422.rs b/tests/ui/issues/auxiliary/issue-14422.rs
new file mode 100644
index 000000000..a6026c1d0
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-14422.rs
@@ -0,0 +1,25 @@
+#![crate_type="lib"]
+#![deny(warnings)]
+
+pub use src::aliases::B;
+pub use src::hidden_core::make;
+
+mod src {
+ pub mod aliases {
+ use super::hidden_core::A;
+ pub type B = A;
+ }
+
+ pub mod hidden_core {
+ use super::aliases::B;
+
+ #[derive(Copy, Clone)]
+ pub struct A;
+
+ pub fn make() -> B { A }
+
+ impl A {
+ pub fn foo(&mut self) { println!("called foo"); }
+ }
+ }
+}
diff --git a/tests/ui/issues/auxiliary/issue-15562.rs b/tests/ui/issues/auxiliary/issue-15562.rs
new file mode 100644
index 000000000..6ff26b47e
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-15562.rs
@@ -0,0 +1,5 @@
+#![crate_type = "lib"]
+
+extern "C" {
+ pub fn transmute();
+}
diff --git a/tests/ui/issues/auxiliary/issue-16643.rs b/tests/ui/issues/auxiliary/issue-16643.rs
new file mode 100644
index 000000000..7808e0119
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-16643.rs
@@ -0,0 +1,19 @@
+#![crate_type = "lib"]
+
+pub struct TreeBuilder<H> { pub h: H }
+
+impl<H> TreeBuilder<H> {
+ pub fn process_token(&mut self) {
+ match self {
+ _ => for _y in self.by_ref() {}
+ }
+ }
+}
+
+impl<H> Iterator for TreeBuilder<H> {
+ type Item = H;
+
+ fn next(&mut self) -> Option<H> {
+ None
+ }
+}
diff --git a/tests/ui/issues/auxiliary/issue-16725.rs b/tests/ui/issues/auxiliary/issue-16725.rs
new file mode 100644
index 000000000..9f9abd575
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-16725.rs
@@ -0,0 +1,3 @@
+extern "C" {
+ fn bar();
+}
diff --git a/tests/ui/issues/auxiliary/issue-17662.rs b/tests/ui/issues/auxiliary/issue-17662.rs
new file mode 100644
index 000000000..75efe110c
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-17662.rs
@@ -0,0 +1,12 @@
+#![crate_type = "lib"]
+
+pub trait Foo<'a, T> {
+ fn foo(&'a self) -> T;
+}
+
+pub fn foo<'a, T>(x: &'a Foo<'a, T>) -> T {
+ let x: &'a Foo<T> = x;
+ // ^ the lifetime parameter of Foo is left to be inferred.
+ x.foo()
+ // ^ encoding this method call in metadata triggers an ICE.
+}
diff --git a/tests/ui/issues/auxiliary/issue-18501.rs b/tests/ui/issues/auxiliary/issue-18501.rs
new file mode 100644
index 000000000..dd914b464
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-18501.rs
@@ -0,0 +1,17 @@
+#![crate_type = "rlib"]
+struct Foo;
+
+trait Tr {
+ fn tr(&self);
+}
+
+impl Tr for Foo {
+ fn tr(&self) {}
+}
+
+fn take_method<T>(f: fn(&T), t: &T) {}
+
+#[inline]
+pub fn pass_method() {
+ take_method(Tr::tr, &Foo);
+}
diff --git a/tests/ui/issues/auxiliary/issue-18514.rs b/tests/ui/issues/auxiliary/issue-18514.rs
new file mode 100644
index 000000000..20c8e60ee
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-18514.rs
@@ -0,0 +1,17 @@
+#![crate_type = "rlib"]
+
+pub trait Tr {
+ fn tr(&self);
+}
+
+pub struct St<V>(pub Vec<V>);
+
+impl<V> Tr for St<V> {
+ fn tr(&self) {
+ match self {
+ &St(ref v) => {
+ v.iter();
+ }
+ }
+ }
+}
diff --git a/tests/ui/issues/auxiliary/issue-18711.rs b/tests/ui/issues/auxiliary/issue-18711.rs
new file mode 100644
index 000000000..5cb1f9c43
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-18711.rs
@@ -0,0 +1,5 @@
+#![crate_type = "rlib"]
+
+pub fn inner<F>(f: F) -> F {
+ (move || f)()
+}
diff --git a/tests/ui/issues/auxiliary/issue-18913-1.rs b/tests/ui/issues/auxiliary/issue-18913-1.rs
new file mode 100644
index 000000000..053c5ada5
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-18913-1.rs
@@ -0,0 +1,6 @@
+// no-prefer-dynamic
+
+#![crate_type = "rlib"]
+#![crate_name = "foo"]
+
+pub fn foo() -> i32 { 0 }
diff --git a/tests/ui/issues/auxiliary/issue-18913-2.rs b/tests/ui/issues/auxiliary/issue-18913-2.rs
new file mode 100644
index 000000000..54747b45f
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-18913-2.rs
@@ -0,0 +1,6 @@
+// no-prefer-dynamic
+
+#![crate_type = "rlib"]
+#![crate_name = "foo"]
+
+pub fn foo() -> i32 { 1 }
diff --git a/tests/ui/issues/auxiliary/issue-1920.rs b/tests/ui/issues/auxiliary/issue-1920.rs
new file mode 100644
index 000000000..1548cb995
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-1920.rs
@@ -0,0 +1,4 @@
+// Just exporting some type to test for correct diagnostics when this
+// crate is pulled in at a non-root location in client crate.
+
+pub struct S;
diff --git a/tests/ui/issues/auxiliary/issue-19293.rs b/tests/ui/issues/auxiliary/issue-19293.rs
new file mode 100644
index 000000000..31359e865
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-19293.rs
@@ -0,0 +1,4 @@
+pub struct Foo (pub isize);
+pub enum MyEnum {
+ Foo(Foo),
+}
diff --git a/tests/ui/issues/auxiliary/issue-19340-1.rs b/tests/ui/issues/auxiliary/issue-19340-1.rs
new file mode 100644
index 000000000..39ee36b8b
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-19340-1.rs
@@ -0,0 +1,3 @@
+pub enum Homura {
+ Madoka { name: String },
+}
diff --git a/tests/ui/issues/auxiliary/issue-20389.rs b/tests/ui/issues/auxiliary/issue-20389.rs
new file mode 100644
index 000000000..ae6d44eeb
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-20389.rs
@@ -0,0 +1,4 @@
+pub trait T {
+ type C;
+ fn dummy(&self) { }
+}
diff --git a/tests/ui/issues/auxiliary/issue-21202.rs b/tests/ui/issues/auxiliary/issue-21202.rs
new file mode 100644
index 000000000..e3daa1ba0
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-21202.rs
@@ -0,0 +1,6 @@
+pub mod A {
+ pub struct Foo;
+ impl Foo {
+ fn foo(&self) { }
+ }
+}
diff --git a/tests/ui/issues/auxiliary/issue-2170-lib.rs b/tests/ui/issues/auxiliary/issue-2170-lib.rs
new file mode 100644
index 000000000..a99385a83
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-2170-lib.rs
@@ -0,0 +1,18 @@
+fn foo(_x: i32) {
+}
+
+pub struct rsrc {
+ x: i32,
+}
+
+impl Drop for rsrc {
+ fn drop(&mut self) {
+ foo(self.x);
+ }
+}
+
+pub fn rsrc(x: i32) -> rsrc {
+ rsrc {
+ x: x
+ }
+}
diff --git a/tests/ui/issues/auxiliary/issue-2316-a.rs b/tests/ui/issues/auxiliary/issue-2316-a.rs
new file mode 100644
index 000000000..418ddc0b0
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-2316-a.rs
@@ -0,0 +1,3 @@
+enum cat {
+ tabby, calico, tortoiseshell
+}
diff --git a/tests/ui/issues/auxiliary/issue-2316-b.rs b/tests/ui/issues/auxiliary/issue-2316-b.rs
new file mode 100644
index 000000000..550c2d6eb
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-2316-b.rs
@@ -0,0 +1,11 @@
+#![allow(unused_imports)]
+
+extern crate issue_2316_a;
+
+pub mod cloth {
+ use issue_2316_a::*;
+
+ pub enum fabric {
+ gingham, flannel, calico
+ }
+}
diff --git a/tests/ui/issues/auxiliary/issue-2380.rs b/tests/ui/issues/auxiliary/issue-2380.rs
new file mode 100644
index 000000000..79fd62d16
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-2380.rs
@@ -0,0 +1,13 @@
+#![crate_name="a"]
+#![crate_type = "lib"]
+
+pub trait i<T>
+{
+ fn dummy(&self, t: T) -> T { panic!() }
+}
+
+pub fn f<T>() -> Box<i<T>+'static> {
+ impl<T> i<T> for () { }
+
+ Box::new(()) as Box<i<T>+'static>
+}
diff --git a/tests/ui/issues/auxiliary/issue-2414-a.rs b/tests/ui/issues/auxiliary/issue-2414-a.rs
new file mode 100644
index 000000000..b90ab32dd
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-2414-a.rs
@@ -0,0 +1,12 @@
+#![crate_name="a"]
+#![crate_type = "lib"]
+
+type t1 = usize;
+
+trait foo {
+ fn foo(&self);
+}
+
+impl foo for String {
+ fn foo(&self) {}
+}
diff --git a/tests/ui/issues/auxiliary/issue-2414-b.rs b/tests/ui/issues/auxiliary/issue-2414-b.rs
new file mode 100644
index 000000000..fc018349d
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-2414-b.rs
@@ -0,0 +1,4 @@
+#![crate_name="b"]
+#![crate_type = "lib"]
+
+extern crate a;
diff --git a/tests/ui/issues/auxiliary/issue-2472-b.rs b/tests/ui/issues/auxiliary/issue-2472-b.rs
new file mode 100644
index 000000000..0d151520f
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-2472-b.rs
@@ -0,0 +1,13 @@
+pub struct S(pub ());
+
+impl S {
+ pub fn foo(&self) { }
+}
+
+pub trait T {
+ fn bar(&self);
+}
+
+impl T for S {
+ fn bar(&self) { }
+}
diff --git a/tests/ui/issues/auxiliary/issue-25185-1.rs b/tests/ui/issues/auxiliary/issue-25185-1.rs
new file mode 100644
index 000000000..e957be9c1
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-25185-1.rs
@@ -0,0 +1,8 @@
+// no-prefer-dynamic
+
+#![crate_type = "rlib"]
+
+#[link(name = "rust_test_helpers", kind = "static")]
+extern "C" {
+ pub fn rust_dbg_extern_identity_u32(u: u32) -> u32;
+}
diff --git a/tests/ui/issues/auxiliary/issue-25185-2.rs b/tests/ui/issues/auxiliary/issue-25185-2.rs
new file mode 100644
index 000000000..7ce3df255
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-25185-2.rs
@@ -0,0 +1,3 @@
+extern crate issue_25185_1;
+
+pub use issue_25185_1::rust_dbg_extern_identity_u32;
diff --git a/tests/ui/issues/auxiliary/issue-2526.rs b/tests/ui/issues/auxiliary/issue-2526.rs
new file mode 100644
index 000000000..3b27f658c
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-2526.rs
@@ -0,0 +1,44 @@
+#![crate_name="issue_2526"]
+#![crate_type = "lib"]
+
+use std::marker;
+
+pub struct arc_destruct<T: Sync> {
+ _data: isize,
+ _marker: marker::PhantomData<T>
+}
+
+impl<T: Sync> Drop for arc_destruct<T> {
+ fn drop(&mut self) {}
+}
+
+fn arc_destruct<T: Sync>(data: isize) -> arc_destruct<T> {
+ arc_destruct {
+ _data: data,
+ _marker: marker::PhantomData
+ }
+}
+
+fn arc<T: Sync>(_data: T) -> arc_destruct<T> {
+ arc_destruct(0)
+}
+
+fn init() -> arc_destruct<context_res> {
+ arc(context_res())
+}
+
+pub struct context_res {
+ ctx : isize,
+}
+
+impl Drop for context_res {
+ fn drop(&mut self) {}
+}
+
+fn context_res() -> context_res {
+ context_res {
+ ctx: 0
+ }
+}
+
+pub type context = arc_destruct<context_res>;
diff --git a/tests/ui/issues/auxiliary/issue-25467.rs b/tests/ui/issues/auxiliary/issue-25467.rs
new file mode 100644
index 000000000..ca9b3097c
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-25467.rs
@@ -0,0 +1,10 @@
+#![crate_type="lib"]
+
+pub trait Trait {
+ // the issue is sensitive to interning order - so use names
+ // unlikely to appear in libstd.
+ type Issue25467FooT;
+ type Issue25467BarT;
+}
+
+pub type Object = Option<Box<Trait<Issue25467FooT=(),Issue25467BarT=()>>>;
diff --git a/tests/ui/issues/auxiliary/issue-2631-a.rs b/tests/ui/issues/auxiliary/issue-2631-a.rs
new file mode 100644
index 000000000..1e8211bfa
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-2631-a.rs
@@ -0,0 +1,14 @@
+#![crate_name="req"]
+#![crate_type = "lib"]
+
+use std::cell::RefCell;
+use std::collections::HashMap;
+use std::rc::Rc;
+
+pub type header_map = HashMap<String, Rc<RefCell<Vec<Rc<String>>>>>;
+
+// the unused ty param is necessary so this gets monomorphized
+pub fn request<T>(req: &header_map) {
+ let data = req[&"METHOD".to_string()].clone();
+ let _x = data.borrow().clone()[0].clone();
+}
diff --git a/tests/ui/issues/auxiliary/issue-2723-a.rs b/tests/ui/issues/auxiliary/issue-2723-a.rs
new file mode 100644
index 000000000..661b46d82
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-2723-a.rs
@@ -0,0 +1,3 @@
+pub unsafe fn f(xs: Vec<isize> ) {
+ xs.iter().map(|_x| { unsafe fn q() { panic!(); } }).collect::<Vec<()>>();
+}
diff --git a/tests/ui/issues/auxiliary/issue-29181.rs b/tests/ui/issues/auxiliary/issue-29181.rs
new file mode 100644
index 000000000..bd1a9be4e
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-29181.rs
@@ -0,0 +1,5 @@
+#![crate_type="lib"]
+
+pub mod foo {
+ pub use super::*;
+}
diff --git a/tests/ui/issues/auxiliary/issue-29265.rs b/tests/ui/issues/auxiliary/issue-29265.rs
new file mode 100644
index 000000000..6d26002a2
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-29265.rs
@@ -0,0 +1,9 @@
+#![crate_type = "lib"]
+
+pub struct SomeType {
+ pub some_member: usize,
+}
+
+pub static SOME_VALUE: SomeType = SomeType {
+ some_member: 1,
+};
diff --git a/tests/ui/issues/auxiliary/issue-29485.rs b/tests/ui/issues/auxiliary/issue-29485.rs
new file mode 100644
index 000000000..1e8891c51
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-29485.rs
@@ -0,0 +1,16 @@
+#![crate_name="a"]
+#![crate_type = "lib"]
+
+pub struct X(pub u8);
+
+impl Drop for X {
+ fn drop(&mut self) {
+ assert_eq!(self.0, 1)
+ }
+}
+
+pub fn f(x: &mut X, g: fn()) {
+ x.0 = 1;
+ g();
+ x.0 = 0;
+}
diff --git a/tests/ui/issues/auxiliary/issue-3012-1.rs b/tests/ui/issues/auxiliary/issue-3012-1.rs
new file mode 100644
index 000000000..509af2a8d
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-3012-1.rs
@@ -0,0 +1,20 @@
+#![crate_name="socketlib"]
+#![crate_type = "lib"]
+
+pub mod socket {
+ pub struct socket_handle {
+ sockfd: u32,
+ }
+
+ impl Drop for socket_handle {
+ fn drop(&mut self) {
+ /* c::close(self.sockfd); */
+ }
+ }
+
+ pub fn socket_handle(x: u32) -> socket_handle {
+ socket_handle {
+ sockfd: x
+ }
+ }
+}
diff --git a/tests/ui/issues/auxiliary/issue-30123-aux.rs b/tests/ui/issues/auxiliary/issue-30123-aux.rs
new file mode 100644
index 000000000..07c743eb2
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-30123-aux.rs
@@ -0,0 +1,23 @@
+use std::marker::PhantomData;
+
+pub struct Directed;
+pub struct Undirected;
+
+pub struct Graph<N, E, Ty = Directed> {
+ nodes: Vec<PhantomData<N>>,
+ edges: Vec<PhantomData<E>>,
+ ty: PhantomData<Ty>,
+}
+
+
+impl<N, E> Graph<N, E, Directed> {
+ pub fn new() -> Self {
+ Graph{nodes: Vec::new(), edges: Vec::new(), ty: PhantomData}
+ }
+}
+
+impl<N, E> Graph<N, E, Undirected> {
+ pub fn new_undirected() -> Self {
+ Graph{nodes: Vec::new(), edges: Vec::new(), ty: PhantomData}
+ }
+}
diff --git a/tests/ui/issues/auxiliary/issue-3136-a.rc b/tests/ui/issues/auxiliary/issue-3136-a.rc
new file mode 100644
index 000000000..cd5fd3145
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-3136-a.rc
@@ -0,0 +1,4 @@
+#![crate_type = "lib"]
+
+#[path = "issue-3136-a.rs"]
+pub mod issue_3136_a;
diff --git a/tests/ui/issues/auxiliary/issue-3136-a.rs b/tests/ui/issues/auxiliary/issue-3136-a.rs
new file mode 100644
index 000000000..9bb546ab3
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-3136-a.rs
@@ -0,0 +1,14 @@
+trait x {
+ fn use_x<T>(&self);
+}
+struct y(());
+impl x for y {
+ fn use_x<T>(&self) {
+ struct foo { //~ ERROR quux
+ i: ()
+ }
+ fn new_foo<T>(i: ()) -> foo {
+ foo { i: i }
+ }
+ }
+}
diff --git a/tests/ui/issues/auxiliary/issue-31702-1.rs b/tests/ui/issues/auxiliary/issue-31702-1.rs
new file mode 100644
index 000000000..a48d0dc2c
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-31702-1.rs
@@ -0,0 +1,16 @@
+#[derive(Copy)]
+pub struct U256(pub [u64; 4]);
+
+impl Clone for U256 {
+ fn clone(&self) -> U256 {
+ *self
+ }
+}
+
+impl U256 {
+ pub fn new(value: u64) -> U256 {
+ let mut ret = [0; 4];
+ ret[0] = value;
+ U256(ret)
+ }
+}
diff --git a/tests/ui/issues/auxiliary/issue-31702-2.rs b/tests/ui/issues/auxiliary/issue-31702-2.rs
new file mode 100644
index 000000000..d360ae0ca
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-31702-2.rs
@@ -0,0 +1,20 @@
+// compile-flags: -g
+
+extern crate issue_31702_1;
+
+use std::collections::HashMap;
+use issue_31702_1::U256;
+
+pub struct Ethash {
+ engine_params: fn() -> Option<&'static Vec<u8>>,
+ u256_params: HashMap<String, U256>,
+}
+
+impl Ethash {
+ pub fn u256_param(&mut self, name: &str) -> U256 {
+ let engine = self.engine_params;
+ *self.u256_params.entry(name.to_owned()).or_insert_with(|| {
+ engine().map_or(U256::new(0u64), |_a| loop {})
+ })
+ }
+}
diff --git a/tests/ui/issues/auxiliary/issue-34796-aux.rs b/tests/ui/issues/auxiliary/issue-34796-aux.rs
new file mode 100644
index 000000000..09c69b903
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-34796-aux.rs
@@ -0,0 +1,20 @@
+#![crate_type = "lib"]
+pub trait Future {
+ type Item;
+ type Error;
+}
+
+impl Future for u32 {
+ type Item = ();
+ type Error = Box<()>;
+}
+
+fn foo() -> Box<Future<Item=(), Error=Box<()>>> {
+ Box::new(0u32)
+}
+
+pub fn bar<F, A, B>(_s: F)
+ where F: Fn(A) -> B,
+{
+ foo();
+}
diff --git a/tests/ui/issues/auxiliary/issue-36954.rs b/tests/ui/issues/auxiliary/issue-36954.rs
new file mode 100644
index 000000000..bc444a381
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-36954.rs
@@ -0,0 +1,7 @@
+#![crate_type = "lib"]
+
+const fn foo(i: i32) -> i32 {
+ i
+}
+
+pub const FOO: i32 = foo(1);
diff --git a/tests/ui/issues/auxiliary/issue-38190.rs b/tests/ui/issues/auxiliary/issue-38190.rs
new file mode 100644
index 000000000..373e646ba
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-38190.rs
@@ -0,0 +1,2 @@
+#[macro_export]
+macro_rules! m { ([$i:item]) => {} }
diff --git a/tests/ui/issues/auxiliary/issue-38226-aux.rs b/tests/ui/issues/auxiliary/issue-38226-aux.rs
new file mode 100644
index 000000000..f96801719
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-38226-aux.rs
@@ -0,0 +1,23 @@
+#![crate_type="rlib"]
+
+#[inline(never)]
+pub fn foo<T>() {
+ let _: Box<SomeTrait> = Box::new(SomeTraitImpl);
+}
+
+pub fn bar() {
+ SomeTraitImpl.bar();
+}
+
+mod submod {
+ pub trait SomeTrait {
+ fn bar(&self) {
+ panic!("NO")
+ }
+ }
+}
+
+use self::submod::SomeTrait;
+
+pub struct SomeTraitImpl;
+impl SomeTrait for SomeTraitImpl {}
diff --git a/tests/ui/issues/auxiliary/issue-3979-traits.rs b/tests/ui/issues/auxiliary/issue-3979-traits.rs
new file mode 100644
index 000000000..5d03a0e9e
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-3979-traits.rs
@@ -0,0 +1,15 @@
+#![crate_name="issue_3979_traits"]
+
+#![crate_type = "lib"]
+
+pub trait Positioned {
+ fn SetX(&mut self, _: isize);
+ fn X(&self) -> isize;
+}
+
+pub trait Movable: Positioned {
+ fn translate(&mut self, dx: isize) {
+ let x = self.X() + dx;
+ self.SetX(x);
+ }
+}
diff --git a/tests/ui/issues/auxiliary/issue-41053.rs b/tests/ui/issues/auxiliary/issue-41053.rs
new file mode 100644
index 000000000..ae73c3e78
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-41053.rs
@@ -0,0 +1 @@
+pub struct Test;
diff --git a/tests/ui/issues/auxiliary/issue-41394.rs b/tests/ui/issues/auxiliary/issue-41394.rs
new file mode 100644
index 000000000..2e650efc7
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-41394.rs
@@ -0,0 +1,16 @@
+#![crate_type = "lib"]
+
+#[repr(u32)]
+pub enum Foo {
+ Foo = Private::Variant as u32
+}
+
+#[repr(u8)]
+enum Private {
+ Variant = 42
+}
+
+#[inline(always)]
+pub fn foo() -> Foo {
+ Foo::Foo
+}
diff --git a/tests/ui/issues/auxiliary/issue-41549.rs b/tests/ui/issues/auxiliary/issue-41549.rs
new file mode 100644
index 000000000..b7bd37525
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-41549.rs
@@ -0,0 +1,3 @@
+pub trait Trait {
+ const CONST: u32;
+}
diff --git a/tests/ui/issues/auxiliary/issue-42007-s.rs b/tests/ui/issues/auxiliary/issue-42007-s.rs
new file mode 100644
index 000000000..95119a589
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-42007-s.rs
@@ -0,0 +1,4 @@
+#[repr(u8)]
+pub enum E {
+ B = 1 as u8,
+}
diff --git a/tests/ui/issues/auxiliary/issue-4208-cc.rs b/tests/ui/issues/auxiliary/issue-4208-cc.rs
new file mode 100644
index 000000000..7b4c8b01a
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-4208-cc.rs
@@ -0,0 +1,10 @@
+#![crate_name="numeric"]
+#![crate_type = "lib"]
+
+pub trait Trig<T> {
+ fn sin(&self) -> T;
+}
+
+pub fn sin<T:Trig<R>, R>(theta: &T) -> R { theta.sin() }
+
+pub trait Angle<T>: Trig<T> {}
diff --git a/tests/ui/issues/auxiliary/issue-4545.rs b/tests/ui/issues/auxiliary/issue-4545.rs
new file mode 100644
index 000000000..2f6094750
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-4545.rs
@@ -0,0 +1,2 @@
+pub struct S<T>(Option<T>);
+pub fn mk<T>() -> S<T> { S(None) }
diff --git a/tests/ui/issues/auxiliary/issue-48984-aux.rs b/tests/ui/issues/auxiliary/issue-48984-aux.rs
new file mode 100644
index 000000000..7cc888cd4
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-48984-aux.rs
@@ -0,0 +1,6 @@
+#![crate_type = "lib"]
+#![crate_name = "issue48984aux"]
+
+pub trait Foo { type Item; }
+
+pub trait Bar: Foo<Item=[u8;1]> { }
diff --git a/tests/ui/issues/auxiliary/issue-49544.rs b/tests/ui/issues/auxiliary/issue-49544.rs
new file mode 100644
index 000000000..f8b3a3fba
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-49544.rs
@@ -0,0 +1,7 @@
+#![crate_type = "lib"]
+
+pub fn foo() -> Vec<String> {
+ std::env::args()
+ .skip(1)
+ .collect()
+}
diff --git a/tests/ui/issues/auxiliary/issue-51798.rs b/tests/ui/issues/auxiliary/issue-51798.rs
new file mode 100644
index 000000000..fef5213db
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-51798.rs
@@ -0,0 +1,3 @@
+#![crate_type = "lib"]
+
+pub fn vec() -> Vec<u8> { vec![] }
diff --git a/tests/ui/issues/auxiliary/issue-52489.rs b/tests/ui/issues/auxiliary/issue-52489.rs
new file mode 100644
index 000000000..f53bf7db5
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-52489.rs
@@ -0,0 +1,3 @@
+#![crate_type = "lib"]
+#![unstable(feature = "issue_52489_unstable", issue = "none")]
+#![feature(staged_api)]
diff --git a/tests/ui/issues/auxiliary/issue-5518.rs b/tests/ui/issues/auxiliary/issue-5518.rs
new file mode 100644
index 000000000..bfe96552a
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-5518.rs
@@ -0,0 +1,4 @@
+trait A<'a, T> {
+ fn f(&mut self) -> &'a mut T;
+ fn p() -> T;
+}
diff --git a/tests/ui/issues/auxiliary/issue-5521.rs b/tests/ui/issues/auxiliary/issue-5521.rs
new file mode 100644
index 000000000..c2f81779b
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-5521.rs
@@ -0,0 +1,3 @@
+use std::collections::HashMap;
+
+pub type map = Box<HashMap<usize, usize>>;
diff --git a/tests/ui/issues/auxiliary/issue-56943.rs b/tests/ui/issues/auxiliary/issue-56943.rs
new file mode 100644
index 000000000..65b9beb91
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-56943.rs
@@ -0,0 +1,3 @@
+pub struct S;
+mod m { pub struct S; }
+pub use crate::m::S as S2;
diff --git a/tests/ui/issues/auxiliary/issue-57271-lib.rs b/tests/ui/issues/auxiliary/issue-57271-lib.rs
new file mode 100644
index 000000000..ff625668a
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-57271-lib.rs
@@ -0,0 +1,11 @@
+#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
+pub enum BaseType {
+ Byte,
+ Char,
+ Double,
+ Float,
+ Int,
+ Long,
+ Short,
+ Boolean,
+}
diff --git a/tests/ui/issues/auxiliary/issue-5844-aux.rs b/tests/ui/issues/auxiliary/issue-5844-aux.rs
new file mode 100644
index 000000000..ea83378ca
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-5844-aux.rs
@@ -0,0 +1,3 @@
+extern "C" {
+ pub fn rand() -> u32;
+}
diff --git a/tests/ui/issues/auxiliary/issue-7178.rs b/tests/ui/issues/auxiliary/issue-7178.rs
new file mode 100644
index 000000000..56ae5139a
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-7178.rs
@@ -0,0 +1,7 @@
+pub struct Foo<'a, A:'a>(&'a A);
+
+impl<'a, A> Foo<'a, A> {
+ pub fn new(a: &'a A) -> Foo<'a, A> {
+ Foo(a)
+ }
+}
diff --git a/tests/ui/issues/auxiliary/issue-73112.rs b/tests/ui/issues/auxiliary/issue-73112.rs
new file mode 100644
index 000000000..6210c29bb
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-73112.rs
@@ -0,0 +1,10 @@
+#[repr(transparent)]
+pub struct PageTableEntry {
+ entry: u64,
+}
+
+#[repr(align(4096))]
+#[repr(C)]
+pub struct PageTable {
+ entries: [PageTableEntry; 512],
+}
diff --git a/tests/ui/issues/auxiliary/issue-7899.rs b/tests/ui/issues/auxiliary/issue-7899.rs
new file mode 100644
index 000000000..3af6e8716
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-7899.rs
@@ -0,0 +1 @@
+pub struct V2<T>(pub T, pub T);
diff --git a/tests/ui/issues/auxiliary/issue-8044.rs b/tests/ui/issues/auxiliary/issue-8044.rs
new file mode 100644
index 000000000..2ec25f51c
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-8044.rs
@@ -0,0 +1,15 @@
+pub struct BTree<V> {
+ pub node: TreeItem<V>,
+}
+
+pub enum TreeItem<V> {
+ TreeLeaf { value: V },
+}
+
+pub fn leaf<V>(value: V) -> TreeItem<V> {
+ TreeItem::TreeLeaf { value: value }
+}
+
+fn main() {
+ BTree::<isize> { node: leaf(1) };
+}
diff --git a/tests/ui/issues/auxiliary/issue-8259.rs b/tests/ui/issues/auxiliary/issue-8259.rs
new file mode 100644
index 000000000..891aee099
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-8259.rs
@@ -0,0 +1,4 @@
+pub enum Foo<'a> {
+ A,
+ B(&'a str),
+}
diff --git a/tests/ui/issues/auxiliary/issue-8401.rs b/tests/ui/issues/auxiliary/issue-8401.rs
new file mode 100644
index 000000000..e35dbbfab
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-8401.rs
@@ -0,0 +1,16 @@
+// for this issue, this code must be built in a library
+
+use std::mem;
+
+trait A {
+ fn dummy(&self) { }
+}
+struct B;
+impl A for B {}
+
+fn bar<T>(_: &mut A, _: &T) {}
+
+fn foo<T>(t: &T) {
+ let mut b = B;
+ bar(&mut b as &mut A, t)
+}
diff --git a/tests/ui/issues/auxiliary/issue-9123.rs b/tests/ui/issues/auxiliary/issue-9123.rs
new file mode 100644
index 000000000..60af53359
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-9123.rs
@@ -0,0 +1,9 @@
+#![crate_type = "lib"]
+
+pub trait X {
+ fn x() {
+ fn f() { }
+ f();
+ }
+ fn dummy(&self) { }
+}
diff --git a/tests/ui/issues/auxiliary/issue-9155.rs b/tests/ui/issues/auxiliary/issue-9155.rs
new file mode 100644
index 000000000..049a96a65
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-9155.rs
@@ -0,0 +1,7 @@
+pub struct Foo<T>(T);
+
+impl<T> Foo<T> {
+ pub fn new(t: T) -> Foo<T> {
+ Foo(t)
+ }
+}
diff --git a/tests/ui/issues/auxiliary/issue-9188.rs b/tests/ui/issues/auxiliary/issue-9188.rs
new file mode 100644
index 000000000..3bc5697a1
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-9188.rs
@@ -0,0 +1,13 @@
+pub fn foo<T>() -> &'static isize {
+ if false {
+ static a: isize = 4;
+ return &a;
+ } else {
+ static a: isize = 5;
+ return &a;
+ }
+}
+
+pub fn bar() -> &'static isize {
+ foo::<isize>()
+}
diff --git a/tests/ui/issues/auxiliary/issue-9906.rs b/tests/ui/issues/auxiliary/issue-9906.rs
new file mode 100644
index 000000000..8a3eea790
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-9906.rs
@@ -0,0 +1,15 @@
+pub use other::FooBar;
+pub use other::foo;
+
+mod other {
+ pub struct FooBar{value: isize}
+ impl FooBar{
+ pub fn new(val: isize) -> FooBar {
+ FooBar{value: val}
+ }
+ }
+
+ pub fn foo(){
+ 1+1;
+ }
+}
diff --git a/tests/ui/issues/auxiliary/issue-9968.rs b/tests/ui/issues/auxiliary/issue-9968.rs
new file mode 100644
index 000000000..8d795b59e
--- /dev/null
+++ b/tests/ui/issues/auxiliary/issue-9968.rs
@@ -0,0 +1,22 @@
+pub use internal::core::{Trait, Struct};
+
+mod internal {
+ pub mod core {
+ pub struct Struct;
+ impl Struct {
+ pub fn init() -> Struct {
+ Struct
+ }
+ }
+
+ pub trait Trait {
+ fn test(&self) {
+ private();
+ }
+ }
+
+ impl Trait for Struct {}
+
+ fn private() { }
+ }
+}
diff --git a/tests/ui/issues/auxiliary/private-trait-xc.rs b/tests/ui/issues/auxiliary/private-trait-xc.rs
new file mode 100644
index 000000000..481a48a7c
--- /dev/null
+++ b/tests/ui/issues/auxiliary/private-trait-xc.rs
@@ -0,0 +1 @@
+trait Foo {}
diff --git a/tests/ui/issues/auxiliary/reexported-trait.rs b/tests/ui/issues/auxiliary/reexported-trait.rs
new file mode 100644
index 000000000..51a991bef
--- /dev/null
+++ b/tests/ui/issues/auxiliary/reexported-trait.rs
@@ -0,0 +1,17 @@
+mod private {
+ pub trait Trait {
+ fn trait_method(&self) {
+ }
+ }
+ pub trait TraitB {
+ fn trait_method_b(&self) {
+ }
+ }
+}
+
+pub struct FooStruct;
+pub use crate::private::Trait;
+impl crate::private::Trait for FooStruct {}
+
+pub use crate::private::TraitB as TraitBRename;
+impl crate::private::TraitB for FooStruct {}
diff --git a/tests/ui/issues/issue-100605.rs b/tests/ui/issues/issue-100605.rs
new file mode 100644
index 000000000..917a45c15
--- /dev/null
+++ b/tests/ui/issues/issue-100605.rs
@@ -0,0 +1,9 @@
+fn takes_option(_arg: Option<&String>) {}
+
+fn main() {
+ takes_option(&None); //~ ERROR 4:18: 4:23: mismatched types [E0308]
+
+ let x = String::from("x");
+ let res = Some(x);
+ takes_option(&res); //~ ERROR 8:18: 8:22: mismatched types [E0308]
+}
diff --git a/tests/ui/issues/issue-100605.stderr b/tests/ui/issues/issue-100605.stderr
new file mode 100644
index 000000000..886e3cd6b
--- /dev/null
+++ b/tests/ui/issues/issue-100605.stderr
@@ -0,0 +1,46 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-100605.rs:4:18
+ |
+LL | takes_option(&None);
+ | ------------ ^^^^^ expected enum `Option`, found `&Option<_>`
+ | |
+ | arguments to this function are incorrect
+ |
+ = note: expected enum `Option<&String>`
+ found reference `&Option<_>`
+note: function defined here
+ --> $DIR/issue-100605.rs:1:4
+ |
+LL | fn takes_option(_arg: Option<&String>) {}
+ | ^^^^^^^^^^^^ ---------------------
+help: you can convert from `&Option<T>` to `Option<&T>` using `.as_ref()`
+ |
+LL | takes_option(None.as_ref());
+ | ~~~~~~~~~~~~~
+help: consider removing the borrow
+ |
+LL - takes_option(&None);
+LL + takes_option(None);
+ |
+
+error[E0308]: mismatched types
+ --> $DIR/issue-100605.rs:8:18
+ |
+LL | takes_option(&res);
+ | ------------ ^^^^
+ | | |
+ | | expected enum `Option`, found `&Option<String>`
+ | | help: you can convert from `&Option<T>` to `Option<&T>` using `.as_ref()`: `res.as_ref()`
+ | arguments to this function are incorrect
+ |
+ = note: expected enum `Option<&String>`
+ found reference `&Option<String>`
+note: function defined here
+ --> $DIR/issue-100605.rs:1:4
+ |
+LL | fn takes_option(_arg: Option<&String>) {}
+ | ^^^^^^^^^^^^ ---------------------
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-10228.rs b/tests/ui/issues/issue-10228.rs
new file mode 100644
index 000000000..ebf8b436f
--- /dev/null
+++ b/tests/ui/issues/issue-10228.rs
@@ -0,0 +1,20 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(unused_variables)]
+// pretty-expanded FIXME #23616
+
+enum StdioContainer {
+ CreatePipe(bool)
+}
+
+struct Test<'a> {
+ args: &'a [String],
+ io: &'a [StdioContainer]
+}
+
+pub fn main() {
+ let test = Test {
+ args: &[],
+ io: &[StdioContainer::CreatePipe(true)]
+ };
+}
diff --git a/tests/ui/issues/issue-10291.rs b/tests/ui/issues/issue-10291.rs
new file mode 100644
index 000000000..31b9e1240
--- /dev/null
+++ b/tests/ui/issues/issue-10291.rs
@@ -0,0 +1,8 @@
+fn test<'x>(x: &'x isize) {
+ drop::<Box<dyn for<'z> FnMut(&'z isize) -> &'z isize>>(Box::new(|z| {
+ x
+ //~^ ERROR lifetime may not live long enough
+ }));
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-10291.stderr b/tests/ui/issues/issue-10291.stderr
new file mode 100644
index 000000000..a7b827d27
--- /dev/null
+++ b/tests/ui/issues/issue-10291.stderr
@@ -0,0 +1,11 @@
+error: lifetime may not live long enough
+ --> $DIR/issue-10291.rs:3:9
+ |
+LL | fn test<'x>(x: &'x isize) {
+ | -- lifetime `'x` defined here
+LL | drop::<Box<dyn for<'z> FnMut(&'z isize) -> &'z isize>>(Box::new(|z| {
+LL | x
+ | ^ returning this value requires that `'x` must outlive `'static`
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-102964.rs b/tests/ui/issues/issue-102964.rs
new file mode 100644
index 000000000..43ff23600
--- /dev/null
+++ b/tests/ui/issues/issue-102964.rs
@@ -0,0 +1,10 @@
+use std::rc::Rc;
+type Foo<'a, T> = &'a dyn Fn(&T);
+type RcFoo<'a, T> = Rc<Foo<'a, T>>;
+
+fn bar_function<T>(function: Foo<T>) -> RcFoo<T> {
+ //~^ ERROR mismatched types
+ let rc = Rc::new(function);
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-102964.stderr b/tests/ui/issues/issue-102964.stderr
new file mode 100644
index 000000000..450403909
--- /dev/null
+++ b/tests/ui/issues/issue-102964.stderr
@@ -0,0 +1,19 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-102964.rs:5:41
+ |
+LL | fn bar_function<T>(function: Foo<T>) -> RcFoo<T> {
+ | ------------ ^^^^^^^^ expected struct `Rc`, found `()`
+ | |
+ | implicitly returns `()` as its body has no tail or `return` expression
+ |
+ = note: expected struct `Rc<&dyn for<'a> Fn(&'a T)>`
+ found unit type `()`
+help: consider returning the local binding `rc`
+ |
+LL ~ let rc = Rc::new(function);
+LL + rc
+ |
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-10396.rs b/tests/ui/issues/issue-10396.rs
new file mode 100644
index 000000000..d16ea3dc3
--- /dev/null
+++ b/tests/ui/issues/issue-10396.rs
@@ -0,0 +1,14 @@
+// check-pass
+#![allow(dead_code)]
+#[derive(Debug)]
+enum Foo<'s> {
+ V(&'s str)
+}
+
+fn f(arr: &[&Foo]) {
+ for &f in arr {
+ println!("{:?}", f);
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-10412.rs b/tests/ui/issues/issue-10412.rs
new file mode 100644
index 000000000..0de170161
--- /dev/null
+++ b/tests/ui/issues/issue-10412.rs
@@ -0,0 +1,27 @@
+trait Serializable<'self, T> {
+ //~^ ERROR lifetimes cannot use keyword names
+ fn serialize(val: &'self T) -> Vec<u8>; //~ ERROR lifetimes cannot use keyword names
+ fn deserialize(repr: &[u8]) -> &'self T; //~ ERROR lifetimes cannot use keyword names
+}
+
+impl<'self> Serializable<str> for &'self str {
+ //~^ ERROR lifetimes cannot use keyword names
+ //~| ERROR lifetimes cannot use keyword names
+ //~| ERROR implicit elided lifetime not allowed here
+ //~| ERROR the size for values of type `str` cannot be known at compilation time [E0277]
+ fn serialize(val: &'self str) -> Vec<u8> {
+ //~^ ERROR lifetimes cannot use keyword names
+ vec![1]
+ }
+ fn deserialize(repr: &[u8]) -> &'self str {
+ //~^ ERROR lifetimes cannot use keyword names
+ "hi"
+ }
+}
+
+fn main() {
+ println!("hello");
+ let x = "foo".to_string();
+ let y = x;
+ println!("{}", y);
+}
diff --git a/tests/ui/issues/issue-10412.stderr b/tests/ui/issues/issue-10412.stderr
new file mode 100644
index 000000000..46b9fd541
--- /dev/null
+++ b/tests/ui/issues/issue-10412.stderr
@@ -0,0 +1,75 @@
+error: lifetimes cannot use keyword names
+ --> $DIR/issue-10412.rs:1:20
+ |
+LL | trait Serializable<'self, T> {
+ | ^^^^^
+
+error: lifetimes cannot use keyword names
+ --> $DIR/issue-10412.rs:3:24
+ |
+LL | fn serialize(val: &'self T) -> Vec<u8>;
+ | ^^^^^
+
+error: lifetimes cannot use keyword names
+ --> $DIR/issue-10412.rs:4:37
+ |
+LL | fn deserialize(repr: &[u8]) -> &'self T;
+ | ^^^^^
+
+error: lifetimes cannot use keyword names
+ --> $DIR/issue-10412.rs:7:6
+ |
+LL | impl<'self> Serializable<str> for &'self str {
+ | ^^^^^
+
+error: lifetimes cannot use keyword names
+ --> $DIR/issue-10412.rs:7:36
+ |
+LL | impl<'self> Serializable<str> for &'self str {
+ | ^^^^^
+
+error: lifetimes cannot use keyword names
+ --> $DIR/issue-10412.rs:12:24
+ |
+LL | fn serialize(val: &'self str) -> Vec<u8> {
+ | ^^^^^
+
+error: lifetimes cannot use keyword names
+ --> $DIR/issue-10412.rs:16:37
+ |
+LL | fn deserialize(repr: &[u8]) -> &'self str {
+ | ^^^^^
+
+error[E0726]: implicit elided lifetime not allowed here
+ --> $DIR/issue-10412.rs:7:13
+ |
+LL | impl<'self> Serializable<str> for &'self str {
+ | ^^^^^^^^^^^^^^^^^ expected lifetime parameter
+ |
+ = note: assuming a `'static` lifetime...
+help: indicate the anonymous lifetime
+ |
+LL | impl<'self> Serializable<'_, str> for &'self str {
+ | +++
+
+error[E0277]: the size for values of type `str` cannot be known at compilation time
+ --> $DIR/issue-10412.rs:7:13
+ |
+LL | impl<'self> Serializable<str> for &'self str {
+ | ^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `str`
+note: required by a bound in `Serializable`
+ --> $DIR/issue-10412.rs:1:27
+ |
+LL | trait Serializable<'self, T> {
+ | ^ required by this bound in `Serializable`
+help: consider relaxing the implicit `Sized` restriction
+ |
+LL | trait Serializable<'self, T: ?Sized> {
+ | ++++++++
+
+error: aborting due to 9 previous errors
+
+Some errors have detailed explanations: E0277, E0726.
+For more information about an error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-10436.rs b/tests/ui/issues/issue-10436.rs
new file mode 100644
index 000000000..a7a20bad5
--- /dev/null
+++ b/tests/ui/issues/issue-10436.rs
@@ -0,0 +1,11 @@
+// run-pass
+fn works<T>(x: T) -> Vec<T> { vec![x] }
+
+fn also_works<T: Clone>(x: T) -> Vec<T> { vec![x] }
+
+fn main() {
+ let _: Vec<usize> = works(0);
+ let _: Vec<usize> = also_works(0);
+ let _ = works(0);
+ let _ = also_works(0);
+}
diff --git a/tests/ui/issues/issue-10456.rs b/tests/ui/issues/issue-10456.rs
new file mode 100644
index 000000000..9f8d25955
--- /dev/null
+++ b/tests/ui/issues/issue-10456.rs
@@ -0,0 +1,25 @@
+// check-pass
+// pretty-expanded FIXME #23616
+
+pub struct Foo;
+
+pub trait Bar {
+ fn bar(&self);
+}
+
+pub trait Baz {
+ fn baz(&self) { }
+}
+
+impl<T: Baz> Bar for T {
+ fn bar(&self) {}
+}
+
+impl Baz for Foo {}
+
+pub fn foo(t: Box<Foo>) {
+ t.bar(); // ~Foo doesn't implement Baz
+ (*t).bar(); // ok b/c Foo implements Baz
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-10465.rs b/tests/ui/issues/issue-10465.rs
new file mode 100644
index 000000000..d899c3ffa
--- /dev/null
+++ b/tests/ui/issues/issue-10465.rs
@@ -0,0 +1,23 @@
+pub mod a {
+ pub trait A {
+ fn foo(&self);
+ }
+
+}
+pub mod b {
+ use a::A;
+
+ pub struct B;
+ impl A for B { fn foo(&self) {} }
+
+ pub mod c {
+ use b::B;
+
+ fn foo(b: &B) {
+ b.foo(); //~ ERROR: no method named `foo` found
+ }
+ }
+
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-10465.stderr b/tests/ui/issues/issue-10465.stderr
new file mode 100644
index 000000000..0ccf69dc0
--- /dev/null
+++ b/tests/ui/issues/issue-10465.stderr
@@ -0,0 +1,15 @@
+error[E0599]: no method named `foo` found for reference `&B` in the current scope
+ --> $DIR/issue-10465.rs:17:15
+ |
+LL | b.foo();
+ | ^^^ method not found in `&B`
+ |
+ = help: items from traits can only be used if the trait is in scope
+help: the following trait is implemented but not in scope; perhaps add a `use` for it:
+ |
+LL | use a::A;
+ |
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-10545.rs b/tests/ui/issues/issue-10545.rs
new file mode 100644
index 000000000..acd071496
--- /dev/null
+++ b/tests/ui/issues/issue-10545.rs
@@ -0,0 +1,9 @@
+mod a {
+ struct S;
+ impl S { }
+}
+
+fn foo(_: a::S) { //~ ERROR: struct `S` is private
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-10545.stderr b/tests/ui/issues/issue-10545.stderr
new file mode 100644
index 000000000..f1da33eab
--- /dev/null
+++ b/tests/ui/issues/issue-10545.stderr
@@ -0,0 +1,15 @@
+error[E0603]: struct `S` is private
+ --> $DIR/issue-10545.rs:6:14
+ |
+LL | fn foo(_: a::S) {
+ | ^ private struct
+ |
+note: the struct `S` is defined here
+ --> $DIR/issue-10545.rs:2:5
+ |
+LL | struct S;
+ | ^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0603`.
diff --git a/tests/ui/issues/issue-10638.rs b/tests/ui/issues/issue-10638.rs
new file mode 100644
index 000000000..e359669c0
--- /dev/null
+++ b/tests/ui/issues/issue-10638.rs
@@ -0,0 +1,11 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+pub fn main() {
+ //// I am not a doc comment!
+ ////////////////// still not a doc comment
+ /////**** nope, me neither */
+ /*** And neither am I! */
+ 5;
+ /*****! certainly not I */
+}
diff --git a/tests/ui/issues/issue-10656.rs b/tests/ui/issues/issue-10656.rs
new file mode 100644
index 000000000..250c4bc44
--- /dev/null
+++ b/tests/ui/issues/issue-10656.rs
@@ -0,0 +1,3 @@
+#![deny(missing_docs)]
+#![crate_type="lib"]
+//~^^ ERROR missing documentation for the crate
diff --git a/tests/ui/issues/issue-10656.stderr b/tests/ui/issues/issue-10656.stderr
new file mode 100644
index 000000000..2e4365f1e
--- /dev/null
+++ b/tests/ui/issues/issue-10656.stderr
@@ -0,0 +1,15 @@
+error: missing documentation for the crate
+ --> $DIR/issue-10656.rs:1:1
+ |
+LL | / #![deny(missing_docs)]
+LL | | #![crate_type="lib"]
+ | |____________________^
+ |
+note: the lint level is defined here
+ --> $DIR/issue-10656.rs:1:9
+ |
+LL | #![deny(missing_docs)]
+ | ^^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-10682.rs b/tests/ui/issues/issue-10682.rs
new file mode 100644
index 000000000..72e4559d3
--- /dev/null
+++ b/tests/ui/issues/issue-10682.rs
@@ -0,0 +1,13 @@
+// run-pass
+// Regression test for issue #10682
+// Nested `proc` usage can't use outer owned data
+
+// pretty-expanded FIXME #23616
+
+fn work(_: Box<isize>) {}
+fn foo<F:FnOnce()>(_: F) {}
+
+pub fn main() {
+ let a = Box::new(1);
+ foo(move|| { foo(move|| { work(a) }) })
+}
diff --git a/tests/ui/issues/issue-10683.rs b/tests/ui/issues/issue-10683.rs
new file mode 100644
index 000000000..dcb221f8c
--- /dev/null
+++ b/tests/ui/issues/issue-10683.rs
@@ -0,0 +1,11 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+static NAME: &'static str = "hello world";
+
+fn main() {
+ match &*NAME.to_ascii_lowercase() {
+ "foo" => {}
+ _ => {}
+ }
+}
diff --git a/tests/ui/issues/issue-10718.rs b/tests/ui/issues/issue-10718.rs
new file mode 100644
index 000000000..a1de0cfe6
--- /dev/null
+++ b/tests/ui/issues/issue-10718.rs
@@ -0,0 +1,11 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+fn f<F:FnOnce()>(p: F) {
+ p();
+}
+
+pub fn main() {
+ let p = || ();
+ f(p);
+}
diff --git a/tests/ui/issues/issue-10734.rs b/tests/ui/issues/issue-10734.rs
new file mode 100644
index 000000000..723e6ed22
--- /dev/null
+++ b/tests/ui/issues/issue-10734.rs
@@ -0,0 +1,36 @@
+// run-pass
+#![allow(non_upper_case_globals)]
+
+static mut drop_count: usize = 0;
+
+struct Foo {
+ dropped: bool
+}
+
+impl Drop for Foo {
+ fn drop(&mut self) {
+ // Test to make sure we haven't dropped already
+ assert!(!self.dropped);
+ self.dropped = true;
+ // And record the fact that we dropped for verification later
+ unsafe { drop_count += 1; }
+ }
+}
+
+pub fn main() {
+ // An `if true { expr }` statement should compile the same as `{ expr }`.
+ if true {
+ let _a = Foo{ dropped: false };
+ }
+ // Check that we dropped already (as expected from a `{ expr }`).
+ unsafe { assert_eq!(drop_count, 1); }
+
+ // An `if false {} else { expr }` statement should compile the same as `{ expr }`.
+ if false {
+ panic!();
+ } else {
+ let _a = Foo{ dropped: false };
+ }
+ // Check that we dropped already (as expected from a `{ expr }`).
+ unsafe { assert_eq!(drop_count, 2); }
+}
diff --git a/tests/ui/issues/issue-10764.rs b/tests/ui/issues/issue-10764.rs
new file mode 100644
index 000000000..bb915f58d
--- /dev/null
+++ b/tests/ui/issues/issue-10764.rs
@@ -0,0 +1,5 @@
+fn f(_: extern "Rust" fn()) {}
+extern "C" fn bar() {}
+
+fn main() { f(bar) }
+//~^ ERROR mismatched types
diff --git a/tests/ui/issues/issue-10764.stderr b/tests/ui/issues/issue-10764.stderr
new file mode 100644
index 000000000..4d8a85a13
--- /dev/null
+++ b/tests/ui/issues/issue-10764.stderr
@@ -0,0 +1,19 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-10764.rs:4:15
+ |
+LL | fn main() { f(bar) }
+ | - ^^^ expected "Rust" fn, found "C" fn
+ | |
+ | arguments to this function are incorrect
+ |
+ = note: expected fn pointer `fn()`
+ found fn item `extern "C" fn() {bar}`
+note: function defined here
+ --> $DIR/issue-10764.rs:1:4
+ |
+LL | fn f(_: extern "Rust" fn()) {}
+ | ^ ---------------------
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-10767.rs b/tests/ui/issues/issue-10767.rs
new file mode 100644
index 000000000..5670cd458
--- /dev/null
+++ b/tests/ui/issues/issue-10767.rs
@@ -0,0 +1,8 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+pub fn main() {
+ fn f() {
+ }
+ let _: Box<fn()> = Box::new(f as fn());
+}
diff --git a/tests/ui/issues/issue-10802.rs b/tests/ui/issues/issue-10802.rs
new file mode 100644
index 000000000..99e1a92df
--- /dev/null
+++ b/tests/ui/issues/issue-10802.rs
@@ -0,0 +1,45 @@
+// run-pass
+#![allow(dead_code)]
+
+struct DroppableStruct;
+enum DroppableEnum {
+ DroppableVariant1, DroppableVariant2
+}
+
+static mut DROPPED: bool = false;
+
+impl Drop for DroppableStruct {
+ fn drop(&mut self) {
+ unsafe { DROPPED = true; }
+ }
+}
+impl Drop for DroppableEnum {
+ fn drop(&mut self) {
+ unsafe { DROPPED = true; }
+ }
+}
+
+trait MyTrait { fn dummy(&self) { } }
+impl MyTrait for Box<DroppableStruct> {}
+impl MyTrait for Box<DroppableEnum> {}
+
+struct Whatever { w: Box<dyn MyTrait+'static> }
+impl Whatever {
+ fn new(w: Box<dyn MyTrait+'static>) -> Whatever {
+ Whatever { w: w }
+ }
+}
+
+fn main() {
+ {
+ let f: Box<_> = Box::new(DroppableStruct);
+ let _a = Whatever::new(Box::new(f) as Box<dyn MyTrait>);
+ }
+ assert!(unsafe { DROPPED });
+ unsafe { DROPPED = false; }
+ {
+ let f: Box<_> = Box::new(DroppableEnum::DroppableVariant1);
+ let _a = Whatever::new(Box::new(f) as Box<dyn MyTrait>);
+ }
+ assert!(unsafe { DROPPED });
+}
diff --git a/tests/ui/issues/issue-10806.rs b/tests/ui/issues/issue-10806.rs
new file mode 100644
index 000000000..2f1d7bb5a
--- /dev/null
+++ b/tests/ui/issues/issue-10806.rs
@@ -0,0 +1,38 @@
+// run-pass
+#![allow(unused_imports)]
+
+// pretty-expanded FIXME #23616
+
+pub fn foo() -> isize {
+ 3
+}
+pub fn bar() -> isize {
+ 4
+}
+
+pub mod baz {
+ use {foo, bar};
+ pub fn quux() -> isize {
+ foo() + bar()
+ }
+}
+
+pub mod grault {
+ use {foo};
+ pub fn garply() -> isize {
+ foo()
+ }
+}
+
+pub mod waldo {
+ use {};
+ pub fn plugh() -> isize {
+ 0
+ }
+}
+
+pub fn main() {
+ let _x = baz::quux();
+ let _y = grault::garply();
+ let _z = waldo::plugh();
+}
diff --git a/tests/ui/issues/issue-10853.rs b/tests/ui/issues/issue-10853.rs
new file mode 100644
index 000000000..3dcabf9b1
--- /dev/null
+++ b/tests/ui/issues/issue-10853.rs
@@ -0,0 +1,15 @@
+// check-pass
+// pretty-expanded FIXME #23616
+
+#![deny(missing_docs)]
+#![doc="module"]
+
+#[doc="struct"]
+pub struct Foo;
+
+pub fn foo() {
+ #![doc="fn"]
+}
+
+#[doc="main"]
+pub fn main() {}
diff --git a/tests/ui/issues/issue-10877.rs b/tests/ui/issues/issue-10877.rs
new file mode 100644
index 000000000..15a383175
--- /dev/null
+++ b/tests/ui/issues/issue-10877.rs
@@ -0,0 +1,16 @@
+struct Foo {
+ x: isize,
+}
+extern "C" {
+ fn foo(1: ());
+ //~^ ERROR: patterns aren't allowed in foreign function declarations
+ fn bar((): isize);
+ //~^ ERROR: patterns aren't allowed in foreign function declarations
+ fn baz(Foo { x }: isize);
+ //~^ ERROR: patterns aren't allowed in foreign function declarations
+ fn qux((x, y): ());
+ //~^ ERROR: patterns aren't allowed in foreign function declarations
+ fn this_is_actually_ok(a: usize);
+ fn and_so_is_this(_: usize);
+}
+fn main() {}
diff --git a/tests/ui/issues/issue-10877.stderr b/tests/ui/issues/issue-10877.stderr
new file mode 100644
index 000000000..bd3797cba
--- /dev/null
+++ b/tests/ui/issues/issue-10877.stderr
@@ -0,0 +1,27 @@
+error[E0130]: patterns aren't allowed in foreign function declarations
+ --> $DIR/issue-10877.rs:5:12
+ |
+LL | fn foo(1: ());
+ | ^ pattern not allowed in foreign function
+
+error[E0130]: patterns aren't allowed in foreign function declarations
+ --> $DIR/issue-10877.rs:7:12
+ |
+LL | fn bar((): isize);
+ | ^^ pattern not allowed in foreign function
+
+error[E0130]: patterns aren't allowed in foreign function declarations
+ --> $DIR/issue-10877.rs:9:12
+ |
+LL | fn baz(Foo { x }: isize);
+ | ^^^^^^^^^ pattern not allowed in foreign function
+
+error[E0130]: patterns aren't allowed in foreign function declarations
+ --> $DIR/issue-10877.rs:11:12
+ |
+LL | fn qux((x, y): ());
+ | ^^^^^^ pattern not allowed in foreign function
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0130`.
diff --git a/tests/ui/issues/issue-10902.rs b/tests/ui/issues/issue-10902.rs
new file mode 100644
index 000000000..162482d49
--- /dev/null
+++ b/tests/ui/issues/issue-10902.rs
@@ -0,0 +1,21 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+pub mod two_tuple {
+ pub trait T { fn dummy(&self) { } }
+ pub struct P<'a>(&'a (dyn T + 'a), &'a (dyn T + 'a));
+ pub fn f<'a>(car: &'a dyn T, cdr: &'a dyn T) -> P<'a> {
+ P(car, cdr)
+ }
+}
+
+pub mod two_fields {
+ pub trait T { fn dummy(&self) { } }
+ pub struct P<'a> { car: &'a (dyn T + 'a), cdr: &'a (dyn T + 'a) }
+ pub fn f<'a>(car: &'a dyn T, cdr: &'a dyn T) -> P<'a> {
+ P{ car: car, cdr: cdr }
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-11004.rs b/tests/ui/issues/issue-11004.rs
new file mode 100644
index 000000000..10ef1f5e3
--- /dev/null
+++ b/tests/ui/issues/issue-11004.rs
@@ -0,0 +1,27 @@
+use std::mem;
+
+struct A { x: i32, y: f64 }
+
+#[cfg(not(works))]
+unsafe fn access(n:*mut A) -> (i32, f64) {
+ let x : i32 = n.x; //~ no field `x` on type `*mut A`
+ let y : f64 = n.y; //~ no field `y` on type `*mut A`
+ (x, y)
+}
+
+#[cfg(works)]
+unsafe fn access(n:*mut A) -> (i32, f64) {
+ let x : i32 = (*n).x;
+ let y : f64 = (*n).y;
+ (x, y)
+}
+
+fn main() {
+ let a : A = A { x: 3, y: 3.14 };
+ let p : &A = &a;
+ let (x,y) = unsafe {
+ let n : *mut A = mem::transmute(p);
+ access(n)
+ };
+ println!("x: {}, y: {}", x, y);
+}
diff --git a/tests/ui/issues/issue-11004.stderr b/tests/ui/issues/issue-11004.stderr
new file mode 100644
index 000000000..b5831e42e
--- /dev/null
+++ b/tests/ui/issues/issue-11004.stderr
@@ -0,0 +1,19 @@
+error[E0609]: no field `x` on type `*mut A`
+ --> $DIR/issue-11004.rs:7:21
+ |
+LL | let x : i32 = n.x;
+ | --^
+ | |
+ | help: `n` is a raw pointer; try dereferencing it: `(*n).x`
+
+error[E0609]: no field `y` on type `*mut A`
+ --> $DIR/issue-11004.rs:8:21
+ |
+LL | let y : f64 = n.y;
+ | --^
+ | |
+ | help: `n` is a raw pointer; try dereferencing it: `(*n).y`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0609`.
diff --git a/tests/ui/issues/issue-11047.rs b/tests/ui/issues/issue-11047.rs
new file mode 100644
index 000000000..1fb2b5bb3
--- /dev/null
+++ b/tests/ui/issues/issue-11047.rs
@@ -0,0 +1,26 @@
+// run-pass
+// Test that static methods can be invoked on `type` aliases
+
+#![allow(unused_variables)]
+
+pub mod foo {
+ pub mod bar {
+ pub mod baz {
+ pub struct Qux;
+
+ impl Qux {
+ pub fn new() {}
+ }
+ }
+ }
+}
+
+fn main() {
+
+ type Ham = foo::bar::baz::Qux;
+ let foo = foo::bar::baz::Qux::new(); // invoke directly
+ let bar = Ham::new(); // invoke via type alias
+
+ type StringVec = Vec<String>;
+ let sv = StringVec::new();
+}
diff --git a/tests/ui/issues/issue-11085.rs b/tests/ui/issues/issue-11085.rs
new file mode 100644
index 000000000..47c03238b
--- /dev/null
+++ b/tests/ui/issues/issue-11085.rs
@@ -0,0 +1,46 @@
+// run-pass
+#![allow(dead_code)]
+// compile-flags: --cfg foo
+
+// pretty-expanded FIXME #23616
+
+struct Foo {
+ #[cfg(fail)]
+ bar: baz,
+ foo: isize,
+}
+
+struct Foo2 {
+ #[cfg(foo)]
+ foo: isize,
+}
+
+enum Bar1 {
+ Bar1_1,
+ #[cfg(fail)]
+ Bar1_2(NotAType),
+}
+
+enum Bar2 {
+ #[cfg(fail)]
+ Bar2_1(NotAType),
+}
+
+enum Bar3 {
+ Bar3_1 {
+ #[cfg(fail)]
+ foo: isize,
+ bar: isize,
+ }
+}
+
+pub fn main() {
+ let _f = Foo { foo: 3 };
+ let _f = Foo2 { foo: 3 };
+
+ match Bar1::Bar1_1 {
+ Bar1::Bar1_1 => {}
+ }
+
+ let _f = Bar3::Bar3_1 { bar: 3 };
+}
diff --git a/tests/ui/issues/issue-11192.rs b/tests/ui/issues/issue-11192.rs
new file mode 100644
index 000000000..1a3d8c9fe
--- /dev/null
+++ b/tests/ui/issues/issue-11192.rs
@@ -0,0 +1,22 @@
+struct Foo {
+ x: isize
+}
+
+
+impl Drop for Foo {
+ fn drop(&mut self) {
+ println!("drop {}", self.x);
+ }
+}
+
+
+fn main() {
+ let mut ptr: Box<_> = Box::new(Foo { x: 0 });
+ let mut test = |foo: &Foo| {
+ println!("access {}", foo.x);
+ ptr = Box::new(Foo { x: ptr.x + 1 });
+ println!("access {}", foo.x);
+ };
+ test(&*ptr);
+ //~^ ERROR: cannot borrow `*ptr` as immutable
+}
diff --git a/tests/ui/issues/issue-11192.stderr b/tests/ui/issues/issue-11192.stderr
new file mode 100644
index 000000000..fc1548013
--- /dev/null
+++ b/tests/ui/issues/issue-11192.stderr
@@ -0,0 +1,17 @@
+error[E0502]: cannot borrow `*ptr` as immutable because it is also borrowed as mutable
+ --> $DIR/issue-11192.rs:20:10
+ |
+LL | let mut test = |foo: &Foo| {
+ | ----------- mutable borrow occurs here
+LL | println!("access {}", foo.x);
+LL | ptr = Box::new(Foo { x: ptr.x + 1 });
+ | --- first borrow occurs due to use of `ptr` in closure
+...
+LL | test(&*ptr);
+ | ---- ^^^^^ immutable borrow occurs here
+ | |
+ | mutable borrow later used by call
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0502`.
diff --git a/tests/ui/issues/issue-11205.rs b/tests/ui/issues/issue-11205.rs
new file mode 100644
index 000000000..ce0951eaf
--- /dev/null
+++ b/tests/ui/issues/issue-11205.rs
@@ -0,0 +1,85 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+#![allow(dead_code)]
+
+trait Foo { fn dummy(&self) { } }
+impl Foo for isize {}
+fn foo(_: [&dyn Foo; 2]) {}
+fn foos(_: &[&dyn Foo]) {}
+fn foog<T>(_: &[T], _: &[T]) {}
+
+fn bar(_: [Box<dyn Foo>; 2]) {}
+fn bars(_: &[Box<dyn Foo+'static>]) {}
+
+fn main() {
+ let x: [&dyn Foo; 2] = [&1, &2];
+ foo(x);
+ foo([&1, &2]);
+
+ let r = &1;
+ let x: [&dyn Foo; 2] = [r; 2];
+ foo(x);
+ foo([&1; 2]);
+
+ let x: &[&dyn Foo] = &[&1, &2];
+ foos(x);
+ foos(&[&1, &2]);
+
+ let x: &[&dyn Foo] = &[&1, &2];
+ let r = &1;
+ foog(x, &[r]);
+
+ let x: [Box<dyn Foo>; 2] = [Box::new(1), Box::new(2)];
+ bar(x);
+ bar([Box::new(1), Box::new(2)]);
+
+ let x: &[Box<dyn Foo+'static>] = &[Box::new(1), Box::new(2)];
+ bars(x);
+ bars(&[Box::new(1), Box::new(2)]);
+
+ let x: &[Box<dyn Foo+'static>] = &[Box::new(1), Box::new(2)];
+ foog(x, &[Box::new(1)]);
+
+ struct T<'a> {
+ t: [&'a (dyn Foo+'a); 2]
+ }
+ let _n = T {
+ t: [&1, &2]
+ };
+ let r = &1;
+ let _n = T {
+ t: [r; 2]
+ };
+ let x: [&dyn Foo; 2] = [&1, &2];
+ let _n = T {
+ t: x
+ };
+
+ struct F<'b> {
+ t: &'b [&'b (dyn Foo+'b)]
+ }
+ let _n = F {
+ t: &[&1, &2]
+ };
+ let r = &1;
+ let r: [&dyn Foo; 2] = [r; 2];
+ let _n = F {
+ t: &r
+ };
+ let x: [&dyn Foo; 2] = [&1, &2];
+ let _n = F {
+ t: &x
+ };
+
+ struct M<'a> {
+ t: &'a [Box<dyn Foo+'static>]
+ }
+ let _n = M {
+ t: &[Box::new(1), Box::new(2)]
+ };
+ let x: [Box<dyn Foo>; 2] = [Box::new(1), Box::new(2)];
+ let _n = M {
+ t: &x
+ };
+}
diff --git a/tests/ui/issues/issue-11224.rs b/tests/ui/issues/issue-11224.rs
new file mode 100644
index 000000000..e1c1df99a
--- /dev/null
+++ b/tests/ui/issues/issue-11224.rs
@@ -0,0 +1,8 @@
+// run-pass
+// aux-build:issue-11224.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_11224 as unused;
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-11267.rs b/tests/ui/issues/issue-11267.rs
new file mode 100644
index 000000000..848ed6ac7
--- /dev/null
+++ b/tests/ui/issues/issue-11267.rs
@@ -0,0 +1,19 @@
+// run-pass
+// Tests that unary structs can be mutably borrowed.
+
+struct Empty;
+
+trait T<U> {
+ fn next(&mut self) -> Option<U>;
+}
+impl T<isize> for Empty {
+ fn next(&mut self) -> Option<isize> { None }
+}
+
+fn do_something_with(a : &mut dyn T<isize>) {
+ println!("{:?}", a.next())
+}
+
+pub fn main() {
+ do_something_with(&mut Empty);
+}
diff --git a/tests/ui/issues/issue-11374.rs b/tests/ui/issues/issue-11374.rs
new file mode 100644
index 000000000..7519ba282
--- /dev/null
+++ b/tests/ui/issues/issue-11374.rs
@@ -0,0 +1,27 @@
+use std::io::{self, Read};
+use std::vec;
+
+pub struct Container<'a> {
+ reader: &'a mut dyn Read
+}
+
+impl<'a> Container<'a> {
+ pub fn wrap<'s>(reader: &'s mut dyn io::Read) -> Container<'s> {
+ Container { reader: reader }
+ }
+
+ pub fn read_to(&mut self, vec: &mut [u8]) {
+ self.reader.read(vec);
+ }
+}
+
+pub fn for_stdin<'a>() -> Container<'a> {
+ let mut r = io::stdin();
+ Container::wrap(&mut r as &mut dyn io::Read)
+}
+
+fn main() {
+ let mut c = for_stdin();
+ let mut v = Vec::new();
+ c.read_to(v); //~ ERROR E0308
+}
diff --git a/tests/ui/issues/issue-11374.stderr b/tests/ui/issues/issue-11374.stderr
new file mode 100644
index 000000000..ace77814a
--- /dev/null
+++ b/tests/ui/issues/issue-11374.stderr
@@ -0,0 +1,21 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-11374.rs:26:15
+ |
+LL | c.read_to(v);
+ | ------- ^
+ | | |
+ | | expected `&mut [u8]`, found struct `Vec`
+ | | help: consider mutably borrowing here: `&mut v`
+ | arguments to this method are incorrect
+ |
+ = note: expected mutable reference `&mut [u8]`
+ found struct `Vec<_>`
+note: associated function defined here
+ --> $DIR/issue-11374.rs:13:12
+ |
+LL | pub fn read_to(&mut self, vec: &mut [u8]) {
+ | ^^^^^^^ --------------
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-11382.rs b/tests/ui/issues/issue-11382.rs
new file mode 100644
index 000000000..42a7a0d04
--- /dev/null
+++ b/tests/ui/issues/issue-11382.rs
@@ -0,0 +1,4 @@
+// run-pass
+fn main() {
+ println!("{}", 1.2);
+}
diff --git a/tests/ui/issues/issue-11384.rs b/tests/ui/issues/issue-11384.rs
new file mode 100644
index 000000000..0105b4d22
--- /dev/null
+++ b/tests/ui/issues/issue-11384.rs
@@ -0,0 +1,10 @@
+// check-pass
+// pretty-expanded FIXME #23616
+
+trait Common { fn dummy(&self) { } }
+
+impl<'t, T> Common for (T, &'t T) {}
+
+impl<'t, T> Common for (&'t T, T) {}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-11508.rs b/tests/ui/issues/issue-11508.rs
new file mode 100644
index 000000000..49868b73e
--- /dev/null
+++ b/tests/ui/issues/issue-11508.rs
@@ -0,0 +1,11 @@
+// run-pass
+// aux-build:issue-11508.rs
+
+extern crate issue_11508 as rand;
+
+use rand::{Closed01, random};
+
+fn main() {
+ let Closed01(val) = random::<Closed01<f32>>();
+ println!("{}", val);
+}
diff --git a/tests/ui/issues/issue-11515.rs b/tests/ui/issues/issue-11515.rs
new file mode 100644
index 000000000..b5c942f96
--- /dev/null
+++ b/tests/ui/issues/issue-11515.rs
@@ -0,0 +1,10 @@
+struct Test {
+ func: Box<dyn FnMut() + 'static>,
+}
+
+
+
+fn main() {
+ let closure: Box<dyn Fn() + 'static> = Box::new(|| ());
+ let test = Box::new(Test { func: closure }); //~ ERROR trait upcasting coercion is experimental [E0658]
+}
diff --git a/tests/ui/issues/issue-11515.stderr b/tests/ui/issues/issue-11515.stderr
new file mode 100644
index 000000000..accd47f0f
--- /dev/null
+++ b/tests/ui/issues/issue-11515.stderr
@@ -0,0 +1,13 @@
+error[E0658]: cannot cast `dyn Fn()` to `dyn FnMut()`, trait upcasting coercion is experimental
+ --> $DIR/issue-11515.rs:9:38
+ |
+LL | let test = Box::new(Test { func: closure });
+ | ^^^^^^^
+ |
+ = note: see issue #65991 <https://github.com/rust-lang/rust/issues/65991> for more information
+ = help: add `#![feature(trait_upcasting)]` to the crate attributes to enable
+ = note: required when coercing `Box<(dyn Fn() + 'static)>` into `Box<(dyn FnMut() + 'static)>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0658`.
diff --git a/tests/ui/issues/issue-11529.rs b/tests/ui/issues/issue-11529.rs
new file mode 100644
index 000000000..9a6cc8e9f
--- /dev/null
+++ b/tests/ui/issues/issue-11529.rs
@@ -0,0 +1,11 @@
+// run-pass
+// aux-build:issue-11529.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_11529 as a;
+
+fn main() {
+ let one = 1;
+ let _a = a::A(&one);
+}
diff --git a/tests/ui/issues/issue-11552.rs b/tests/ui/issues/issue-11552.rs
new file mode 100644
index 000000000..9fb9f3d2e
--- /dev/null
+++ b/tests/ui/issues/issue-11552.rs
@@ -0,0 +1,24 @@
+// run-pass
+#![feature(box_patterns)]
+
+#[derive(Clone)]
+enum Noun
+{
+ Atom(isize),
+ Cell(Box<Noun>, Box<Noun>)
+}
+
+fn fas(n: &Noun) -> Noun
+{
+ match n {
+ &Noun::Cell(box Noun::Atom(2), box Noun::Cell(ref a, _)) => (**a).clone(),
+ _ => panic!("Invalid fas pattern")
+ }
+}
+
+pub fn main() {
+ fas(
+ &Noun::Cell(Box::new(Noun::Atom(2)),
+ Box::new(Noun::Cell(Box::new(Noun::Atom(2)), Box::new(Noun::Atom(3)))))
+ );
+}
diff --git a/tests/ui/issues/issue-11592.rs b/tests/ui/issues/issue-11592.rs
new file mode 100644
index 000000000..a4611f2f9
--- /dev/null
+++ b/tests/ui/issues/issue-11592.rs
@@ -0,0 +1,11 @@
+// check-pass
+//! Ensure the private trait Bar isn't complained about.
+
+#![deny(missing_docs)]
+
+mod foo {
+ trait Bar { fn bar(&self) { } }
+ impl Bar for i8 { fn bar(&self) { } }
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-11593.rs b/tests/ui/issues/issue-11593.rs
new file mode 100644
index 000000000..8bf034e82
--- /dev/null
+++ b/tests/ui/issues/issue-11593.rs
@@ -0,0 +1,10 @@
+// aux-build:private-trait-xc.rs
+
+extern crate private_trait_xc;
+
+struct Bar;
+
+impl private_trait_xc::Foo for Bar {}
+//~^ ERROR: trait `Foo` is private
+
+fn main() {}
diff --git a/tests/ui/issues/issue-11593.stderr b/tests/ui/issues/issue-11593.stderr
new file mode 100644
index 000000000..aa9768b18
--- /dev/null
+++ b/tests/ui/issues/issue-11593.stderr
@@ -0,0 +1,15 @@
+error[E0603]: trait `Foo` is private
+ --> $DIR/issue-11593.rs:7:24
+ |
+LL | impl private_trait_xc::Foo for Bar {}
+ | ^^^ private trait
+ |
+note: the trait `Foo` is defined here
+ --> $DIR/auxiliary/private-trait-xc.rs:1:1
+ |
+LL | trait Foo {}
+ | ^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0603`.
diff --git a/tests/ui/issues/issue-11677.rs b/tests/ui/issues/issue-11677.rs
new file mode 100644
index 000000000..be18c736f
--- /dev/null
+++ b/tests/ui/issues/issue-11677.rs
@@ -0,0 +1,23 @@
+// run-pass
+#![allow(unused_imports)]
+
+#![allow(dead_code)]
+
+// this code used to cause an ICE
+
+use std::marker;
+
+trait X<T> {
+ fn dummy(&self) -> T { panic!() }
+}
+
+struct S<T> {f: Box<dyn X<T>+'static>,
+ g: Box<dyn X<T>+'static>}
+
+struct F;
+impl X<isize> for F {
+}
+
+fn main() {
+ S {f: Box::new(F), g: Box::new(F) };
+}
diff --git a/tests/ui/issues/issue-11680.rs b/tests/ui/issues/issue-11680.rs
new file mode 100644
index 000000000..bfa8f5c5a
--- /dev/null
+++ b/tests/ui/issues/issue-11680.rs
@@ -0,0 +1,11 @@
+// aux-build:issue-11680.rs
+
+extern crate issue_11680 as other;
+
+fn main() {
+ let _b = other::Foo::Bar(1);
+ //~^ ERROR: enum `Foo` is private
+
+ let _b = other::test::Foo::Bar(1);
+ //~^ ERROR: enum `Foo` is private
+}
diff --git a/tests/ui/issues/issue-11680.stderr b/tests/ui/issues/issue-11680.stderr
new file mode 100644
index 000000000..ea224af8e
--- /dev/null
+++ b/tests/ui/issues/issue-11680.stderr
@@ -0,0 +1,27 @@
+error[E0603]: enum `Foo` is private
+ --> $DIR/issue-11680.rs:6:21
+ |
+LL | let _b = other::Foo::Bar(1);
+ | ^^^ private enum
+ |
+note: the enum `Foo` is defined here
+ --> $DIR/auxiliary/issue-11680.rs:1:1
+ |
+LL | enum Foo {
+ | ^^^^^^^^
+
+error[E0603]: enum `Foo` is private
+ --> $DIR/issue-11680.rs:9:27
+ |
+LL | let _b = other::test::Foo::Bar(1);
+ | ^^^ private enum
+ |
+note: the enum `Foo` is defined here
+ --> $DIR/auxiliary/issue-11680.rs:6:5
+ |
+LL | enum Foo {
+ | ^^^^^^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0603`.
diff --git a/tests/ui/issues/issue-11681.rs b/tests/ui/issues/issue-11681.rs
new file mode 100644
index 000000000..6d8810d80
--- /dev/null
+++ b/tests/ui/issues/issue-11681.rs
@@ -0,0 +1,19 @@
+// This tests verifies that unary structs and enum variants
+// are treated as rvalues and their lifetime is not bounded to
+// the static scope.
+
+struct Test;
+
+impl Drop for Test {
+ fn drop (&mut self) {}
+}
+
+fn createTest<'a>() -> &'a Test {
+ let testValue = &Test;
+ return testValue; //~ ERROR cannot return value referencing temporary value
+}
+
+
+pub fn main() {
+ createTest();
+}
diff --git a/tests/ui/issues/issue-11681.stderr b/tests/ui/issues/issue-11681.stderr
new file mode 100644
index 000000000..f2f930766
--- /dev/null
+++ b/tests/ui/issues/issue-11681.stderr
@@ -0,0 +1,11 @@
+error[E0515]: cannot return value referencing temporary value
+ --> $DIR/issue-11681.rs:13:10
+ |
+LL | let testValue = &Test;
+ | ---- temporary value created here
+LL | return testValue;
+ | ^^^^^^^^^ returns a value referencing data owned by the current function
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0515`.
diff --git a/tests/ui/issues/issue-11692-1.rs b/tests/ui/issues/issue-11692-1.rs
new file mode 100644
index 000000000..b6f3bb8ef
--- /dev/null
+++ b/tests/ui/issues/issue-11692-1.rs
@@ -0,0 +1,3 @@
+fn main() {
+ print!(testo!()); //~ ERROR cannot find macro `testo` in this scope
+}
diff --git a/tests/ui/issues/issue-11692-1.stderr b/tests/ui/issues/issue-11692-1.stderr
new file mode 100644
index 000000000..386463436
--- /dev/null
+++ b/tests/ui/issues/issue-11692-1.stderr
@@ -0,0 +1,8 @@
+error: cannot find macro `testo` in this scope
+ --> $DIR/issue-11692-1.rs:2:12
+ |
+LL | print!(testo!());
+ | ^^^^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-11692-2.rs b/tests/ui/issues/issue-11692-2.rs
new file mode 100644
index 000000000..5957ed338
--- /dev/null
+++ b/tests/ui/issues/issue-11692-2.rs
@@ -0,0 +1,3 @@
+fn main() {
+ concat!(test!()); //~ ERROR cannot find macro `test` in this scope
+}
diff --git a/tests/ui/issues/issue-11692-2.stderr b/tests/ui/issues/issue-11692-2.stderr
new file mode 100644
index 000000000..84746ca2c
--- /dev/null
+++ b/tests/ui/issues/issue-11692-2.stderr
@@ -0,0 +1,10 @@
+error: cannot find macro `test` in this scope
+ --> $DIR/issue-11692-2.rs:2:13
+ |
+LL | concat!(test!());
+ | ^^^^
+ |
+ = note: `test` is in scope, but it is an attribute: `#[test]`
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-11709.rs b/tests/ui/issues/issue-11709.rs
new file mode 100644
index 000000000..cb5e3dff3
--- /dev/null
+++ b/tests/ui/issues/issue-11709.rs
@@ -0,0 +1,38 @@
+// run-pass
+#![allow(dead_code)]
+// ignore-pretty issue #37199
+
+// Don't panic on blocks without results
+// There are several tests in this run-pass that raised
+// when this bug was opened. The cases where the compiler
+// panics before the fix have a comment.
+
+struct S {x:()}
+
+fn test(slot: &mut Option<Box<dyn FnMut() -> Box<dyn FnMut()>>>) -> () {
+ let a = slot.take();
+ let _a = match a {
+ // `{let .. a(); }` would break
+ Some(mut a) => { let _a = a(); },
+ None => (),
+ };
+}
+
+fn not(b: bool) -> bool {
+ if b {
+ !b
+ } else {
+ // `panic!(...)` would break
+ panic!("Break the compiler");
+ }
+}
+
+pub fn main() {
+ // {} would break
+ let _r = {};
+ let mut slot = None;
+ // `{ test(...); }` would break
+ let _s : S = S{ x: { test(&mut slot); } };
+
+ let _b = not(true);
+}
diff --git a/tests/ui/issues/issue-11740.rs b/tests/ui/issues/issue-11740.rs
new file mode 100644
index 000000000..9faeb7770
--- /dev/null
+++ b/tests/ui/issues/issue-11740.rs
@@ -0,0 +1,28 @@
+// check-pass
+// revisions: mir thir
+// [thir]compile-flags: -Zthir-unsafeck
+
+struct Attr {
+ name: String,
+ value: String,
+}
+
+struct Element {
+ attrs: Vec<Box<Attr>>,
+}
+
+impl Element {
+ pub unsafe fn get_attr<'a>(&'a self, name: &str) {
+ self.attrs
+ .iter()
+ .find(|attr| {
+ let attr: &&Box<Attr> = std::mem::transmute(attr);
+ true
+ });
+ }
+}
+
+fn main() {
+ let element = Element { attrs: Vec::new() };
+ let _ = unsafe { element.get_attr("foo") };
+}
diff --git a/tests/ui/issues/issue-11771.rs b/tests/ui/issues/issue-11771.rs
new file mode 100644
index 000000000..c69cd1e79
--- /dev/null
+++ b/tests/ui/issues/issue-11771.rs
@@ -0,0 +1,11 @@
+fn main() {
+ let x = ();
+ 1 +
+ x //~^ ERROR E0277
+ ;
+
+ let x: () = ();
+ 1 +
+ x //~^ ERROR E0277
+ ;
+}
diff --git a/tests/ui/issues/issue-11771.stderr b/tests/ui/issues/issue-11771.stderr
new file mode 100644
index 000000000..161fce4b0
--- /dev/null
+++ b/tests/ui/issues/issue-11771.stderr
@@ -0,0 +1,39 @@
+error[E0277]: cannot add `()` to `{integer}`
+ --> $DIR/issue-11771.rs:3:7
+ |
+LL | 1 +
+ | ^ no implementation for `{integer} + ()`
+ |
+ = help: the trait `Add<()>` is not implemented for `{integer}`
+ = help: the following other types implement trait `Add<Rhs>`:
+ <&'a f32 as Add<f32>>
+ <&'a f64 as Add<f64>>
+ <&'a i128 as Add<i128>>
+ <&'a i16 as Add<i16>>
+ <&'a i32 as Add<i32>>
+ <&'a i64 as Add<i64>>
+ <&'a i8 as Add<i8>>
+ <&'a isize as Add<isize>>
+ and 48 others
+
+error[E0277]: cannot add `()` to `{integer}`
+ --> $DIR/issue-11771.rs:8:7
+ |
+LL | 1 +
+ | ^ no implementation for `{integer} + ()`
+ |
+ = help: the trait `Add<()>` is not implemented for `{integer}`
+ = help: the following other types implement trait `Add<Rhs>`:
+ <&'a f32 as Add<f32>>
+ <&'a f64 as Add<f64>>
+ <&'a i128 as Add<i128>>
+ <&'a i16 as Add<i16>>
+ <&'a i32 as Add<i32>>
+ <&'a i64 as Add<i64>>
+ <&'a i8 as Add<i8>>
+ <&'a isize as Add<isize>>
+ and 48 others
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-11820.rs b/tests/ui/issues/issue-11820.rs
new file mode 100644
index 000000000..7ffe96527
--- /dev/null
+++ b/tests/ui/issues/issue-11820.rs
@@ -0,0 +1,12 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+struct NoClone;
+
+fn main() {
+ let rnc = &NoClone;
+ let rsnc = &Some(NoClone);
+
+ let _: &NoClone = rnc.clone();
+ let _: &Option<NoClone> = rsnc.clone();
+}
diff --git a/tests/ui/issues/issue-11844.rs b/tests/ui/issues/issue-11844.rs
new file mode 100644
index 000000000..f974a4702
--- /dev/null
+++ b/tests/ui/issues/issue-11844.rs
@@ -0,0 +1,8 @@
+fn main() {
+ let a = Some(Box::new(1));
+ match a {
+ Ok(a) => //~ ERROR: mismatched types
+ println!("{}",a),
+ None => panic!()
+ }
+}
diff --git a/tests/ui/issues/issue-11844.stderr b/tests/ui/issues/issue-11844.stderr
new file mode 100644
index 000000000..81cf918a1
--- /dev/null
+++ b/tests/ui/issues/issue-11844.stderr
@@ -0,0 +1,14 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-11844.rs:4:9
+ |
+LL | match a {
+ | - this expression has type `Option<Box<{integer}>>`
+LL | Ok(a) =>
+ | ^^^^^ expected enum `Option`, found enum `Result`
+ |
+ = note: expected enum `Option<Box<{integer}>>`
+ found enum `Result<_, _>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-11869.rs b/tests/ui/issues/issue-11869.rs
new file mode 100644
index 000000000..b300f4593
--- /dev/null
+++ b/tests/ui/issues/issue-11869.rs
@@ -0,0 +1,17 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+struct A {
+ a: String
+}
+
+fn borrow<'a>(binding: &'a A) -> &'a str {
+ match &*binding.a {
+ "in" => "in_",
+ "ref" => "ref_",
+ ident => ident
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-11873.rs b/tests/ui/issues/issue-11873.rs
new file mode 100644
index 000000000..d3bd05caf
--- /dev/null
+++ b/tests/ui/issues/issue-11873.rs
@@ -0,0 +1,7 @@
+fn main() {
+ let mut v = vec![1];
+ let mut f = || v.push(2);
+ let _w = v; //~ ERROR: cannot move out of `v`
+
+ f();
+}
diff --git a/tests/ui/issues/issue-11873.stderr b/tests/ui/issues/issue-11873.stderr
new file mode 100644
index 000000000..c814eedd2
--- /dev/null
+++ b/tests/ui/issues/issue-11873.stderr
@@ -0,0 +1,16 @@
+error[E0505]: cannot move out of `v` because it is borrowed
+ --> $DIR/issue-11873.rs:4:14
+ |
+LL | let mut f = || v.push(2);
+ | -- - borrow occurs due to use in closure
+ | |
+ | borrow of `v` occurs here
+LL | let _w = v;
+ | ^ move out of `v` occurs here
+LL |
+LL | f();
+ | - borrow later used here
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0505`.
diff --git a/tests/ui/issues/issue-11958.rs b/tests/ui/issues/issue-11958.rs
new file mode 100644
index 000000000..a7af01e25
--- /dev/null
+++ b/tests/ui/issues/issue-11958.rs
@@ -0,0 +1,11 @@
+// run-pass
+
+// We shouldn't need to rebind a moved upvar as mut if it's already
+// marked as mut
+
+pub fn main() {
+ let mut x = 1;
+ let _thunk = Box::new(move|| { x = 2; });
+ //~^ WARN value assigned to `x` is never read
+ //~| WARN unused variable: `x`
+}
diff --git a/tests/ui/issues/issue-11958.stderr b/tests/ui/issues/issue-11958.stderr
new file mode 100644
index 000000000..5dca4c2f0
--- /dev/null
+++ b/tests/ui/issues/issue-11958.stderr
@@ -0,0 +1,20 @@
+warning: value assigned to `x` is never read
+ --> $DIR/issue-11958.rs:8:36
+ |
+LL | let _thunk = Box::new(move|| { x = 2; });
+ | ^
+ |
+ = help: maybe it is overwritten before being read?
+ = note: `#[warn(unused_assignments)]` on by default
+
+warning: unused variable: `x`
+ --> $DIR/issue-11958.rs:8:36
+ |
+LL | let _thunk = Box::new(move|| { x = 2; });
+ | ^
+ |
+ = help: did you mean to capture by reference instead?
+ = note: `#[warn(unused_variables)]` on by default
+
+warning: 2 warnings emitted
+
diff --git a/tests/ui/issues/issue-12028.rs b/tests/ui/issues/issue-12028.rs
new file mode 100644
index 000000000..7503766ff
--- /dev/null
+++ b/tests/ui/issues/issue-12028.rs
@@ -0,0 +1,38 @@
+// Test an example where we fail to infer the type parameter H. This
+// is because there is really nothing constraining it. At one time, we
+// would infer based on the where clauses in scope, but that no longer
+// works.
+
+trait Hash<H> {
+ fn hash2(&self, hasher: &H) -> u64;
+}
+
+trait Stream {
+ fn input(&mut self, bytes: &[u8]);
+ fn result(&self) -> u64;
+}
+
+trait StreamHasher {
+ type S : Stream;
+ fn stream(&self) -> Self::S;
+}
+
+trait StreamHash<H: StreamHasher>: Hash<H> {
+ fn input_stream(&self, stream: &mut H::S);
+}
+
+impl<H: StreamHasher> Hash<H> for u8 {
+ fn hash2(&self, hasher: &H) -> u64 {
+ let mut stream = hasher.stream();
+ self.input_stream(&mut stream); //~ ERROR type annotations needed
+ Stream::result(&stream)
+ }
+}
+
+impl<H: StreamHasher> StreamHash<H> for u8 {
+ fn input_stream(&self, stream: &mut H::S) {
+ Stream::input(stream, &[*self]);
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-12028.stderr b/tests/ui/issues/issue-12028.stderr
new file mode 100644
index 000000000..8d6b81c24
--- /dev/null
+++ b/tests/ui/issues/issue-12028.stderr
@@ -0,0 +1,15 @@
+error[E0284]: type annotations needed
+ --> $DIR/issue-12028.rs:27:14
+ |
+LL | self.input_stream(&mut stream);
+ | ^^^^^^^^^^^^
+ |
+ = note: cannot satisfy `<_ as StreamHasher>::S == <H as StreamHasher>::S`
+help: try using a fully qualified path to specify the expected types
+ |
+LL | <u8 as StreamHash<H>>::input_stream(self, &mut stream);
+ | ++++++++++++++++++++++++++++++++++++ ~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0284`.
diff --git a/tests/ui/issues/issue-12033.rs b/tests/ui/issues/issue-12033.rs
new file mode 100644
index 000000000..9dc7573c9
--- /dev/null
+++ b/tests/ui/issues/issue-12033.rs
@@ -0,0 +1,7 @@
+// run-pass
+use std::cell::RefCell;
+
+fn main() {
+ let x = RefCell::new(0);
+ if *x.borrow() == 0 {} else {}
+}
diff --git a/tests/ui/issues/issue-12041.rs b/tests/ui/issues/issue-12041.rs
new file mode 100644
index 000000000..091e8fe8b
--- /dev/null
+++ b/tests/ui/issues/issue-12041.rs
@@ -0,0 +1,13 @@
+use std::sync::mpsc::channel;
+use std::thread;
+
+fn main() {
+ let (tx, rx) = channel();
+ let _t = thread::spawn(move|| -> () {
+ loop {
+ let tx = tx;
+ //~^ ERROR: use of moved value: `tx`
+ tx.send(1);
+ }
+ });
+}
diff --git a/tests/ui/issues/issue-12041.stderr b/tests/ui/issues/issue-12041.stderr
new file mode 100644
index 000000000..b9ffa499a
--- /dev/null
+++ b/tests/ui/issues/issue-12041.stderr
@@ -0,0 +1,11 @@
+error[E0382]: use of moved value: `tx`
+ --> $DIR/issue-12041.rs:8:22
+ |
+LL | let tx = tx;
+ | ^^ value moved here, in previous iteration of loop
+ |
+ = note: move occurs because `tx` has type `Sender<i32>`, which does not implement the `Copy` trait
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0382`.
diff --git a/tests/ui/issues/issue-12127.rs b/tests/ui/issues/issue-12127.rs
new file mode 100644
index 000000000..199d542e8
--- /dev/null
+++ b/tests/ui/issues/issue-12127.rs
@@ -0,0 +1,14 @@
+#![feature(unboxed_closures, tuple_trait)]
+
+fn to_fn_once<A:std::marker::Tuple,F:FnOnce<A>>(f: F) -> F { f }
+fn do_it(x: &isize) { }
+
+fn main() {
+ let x: Box<_> = Box::new(22);
+ let f = to_fn_once(move|| do_it(&*x));
+ to_fn_once(move|| {
+ f();
+ f();
+ //~^ ERROR: use of moved value: `f`
+ })()
+}
diff --git a/tests/ui/issues/issue-12127.stderr b/tests/ui/issues/issue-12127.stderr
new file mode 100644
index 000000000..2c451b07f
--- /dev/null
+++ b/tests/ui/issues/issue-12127.stderr
@@ -0,0 +1,18 @@
+error[E0382]: use of moved value: `f`
+ --> $DIR/issue-12127.rs:11:9
+ |
+LL | f();
+ | --- `f` moved due to this call
+LL | f();
+ | ^ value used here after move
+ |
+note: this value implements `FnOnce`, which causes it to be moved when called
+ --> $DIR/issue-12127.rs:10:9
+ |
+LL | f();
+ | ^
+ = note: move occurs because `f` has type `[closure@$DIR/issue-12127.rs:8:24: 8:30]`, which does not implement the `Copy` trait
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0382`.
diff --git a/tests/ui/issues/issue-12133-1.rs b/tests/ui/issues/issue-12133-1.rs
new file mode 100644
index 000000000..96ad5abd5
--- /dev/null
+++ b/tests/ui/issues/issue-12133-1.rs
@@ -0,0 +1,10 @@
+// run-pass
+// aux-build:issue-12133-rlib.rs
+// aux-build:issue-12133-dylib.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_12133_rlib as a;
+extern crate issue_12133_dylib as b;
+
+fn main() {}
diff --git a/tests/ui/issues/issue-12133-2.rs b/tests/ui/issues/issue-12133-2.rs
new file mode 100644
index 000000000..02fec65c2
--- /dev/null
+++ b/tests/ui/issues/issue-12133-2.rs
@@ -0,0 +1,11 @@
+// run-pass
+// aux-build:issue-12133-rlib.rs
+// aux-build:issue-12133-dylib.rs
+// no-prefer-dynamic
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_12133_rlib as a;
+extern crate issue_12133_dylib as b;
+
+fn main() {}
diff --git a/tests/ui/issues/issue-12133-3.rs b/tests/ui/issues/issue-12133-3.rs
new file mode 100644
index 000000000..e6b16e2da
--- /dev/null
+++ b/tests/ui/issues/issue-12133-3.rs
@@ -0,0 +1,13 @@
+// run-pass
+// aux-build:issue-12133-rlib.rs
+// aux-build:issue-12133-dylib.rs
+// aux-build:issue-12133-dylib2.rs
+// ignore-emscripten no dylib support
+// ignore-musl
+// ignore-sgx no dylib support
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_12133_dylib2 as other;
+
+fn main() {}
diff --git a/tests/ui/issues/issue-12187-1.rs b/tests/ui/issues/issue-12187-1.rs
new file mode 100644
index 000000000..86128ed94
--- /dev/null
+++ b/tests/ui/issues/issue-12187-1.rs
@@ -0,0 +1,8 @@
+fn new<T>() -> &'static T {
+ panic!()
+}
+
+fn main() {
+ let &v = new();
+ //~^ ERROR type annotations needed
+}
diff --git a/tests/ui/issues/issue-12187-1.stderr b/tests/ui/issues/issue-12187-1.stderr
new file mode 100644
index 000000000..806b7f0ac
--- /dev/null
+++ b/tests/ui/issues/issue-12187-1.stderr
@@ -0,0 +1,14 @@
+error[E0282]: type annotations needed for `&T`
+ --> $DIR/issue-12187-1.rs:6:9
+ |
+LL | let &v = new();
+ | ^^
+ |
+help: consider giving this pattern a type, where the placeholders `_` are specified
+ |
+LL | let &v: &T = new();
+ | ++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-12187-2.rs b/tests/ui/issues/issue-12187-2.rs
new file mode 100644
index 000000000..080a6206b
--- /dev/null
+++ b/tests/ui/issues/issue-12187-2.rs
@@ -0,0 +1,8 @@
+fn new<'r, T>() -> &'r T {
+ panic!()
+}
+
+fn main() {
+ let &v = new();
+ //~^ ERROR type annotations needed
+}
diff --git a/tests/ui/issues/issue-12187-2.stderr b/tests/ui/issues/issue-12187-2.stderr
new file mode 100644
index 000000000..a1fa0a2b0
--- /dev/null
+++ b/tests/ui/issues/issue-12187-2.stderr
@@ -0,0 +1,14 @@
+error[E0282]: type annotations needed for `&T`
+ --> $DIR/issue-12187-2.rs:6:9
+ |
+LL | let &v = new();
+ | ^^
+ |
+help: consider giving this pattern a type, where the placeholders `_` are specified
+ |
+LL | let &v: &T = new();
+ | ++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-12285.rs b/tests/ui/issues/issue-12285.rs
new file mode 100644
index 000000000..24ac5d2fb
--- /dev/null
+++ b/tests/ui/issues/issue-12285.rs
@@ -0,0 +1,14 @@
+// run-pass
+
+struct S;
+
+fn main() {
+ match Some(&S) {
+ Some(&S) => {},
+ _x => unreachable!()
+ }
+ match Some(&S) {
+ Some(&S) => {},
+ None => unreachable!()
+ }
+}
diff --git a/tests/ui/issues/issue-1251.rs b/tests/ui/issues/issue-1251.rs
new file mode 100644
index 000000000..c2c047c79
--- /dev/null
+++ b/tests/ui/issues/issue-1251.rs
@@ -0,0 +1,16 @@
+// build-pass
+#![allow(unused_attributes)]
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+// ignore-wasm32-bare no libc to test ffi with
+#![feature(rustc_private)]
+
+mod rustrt {
+ extern crate libc;
+
+ extern "C" {
+ pub fn rust_get_test_int() -> libc::intptr_t;
+ }
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-12511.rs b/tests/ui/issues/issue-12511.rs
new file mode 100644
index 000000000..ea83e3fd9
--- /dev/null
+++ b/tests/ui/issues/issue-12511.rs
@@ -0,0 +1,8 @@
+trait T1 : T2 {
+//~^ ERROR cycle detected
+}
+
+trait T2 : T1 {
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-12511.stderr b/tests/ui/issues/issue-12511.stderr
new file mode 100644
index 000000000..789a1141c
--- /dev/null
+++ b/tests/ui/issues/issue-12511.stderr
@@ -0,0 +1,33 @@
+error[E0391]: cycle detected when computing the super predicates of `T1`
+ --> $DIR/issue-12511.rs:1:1
+ |
+LL | trait T1 : T2 {
+ | ^^^^^^^^^^^^^
+ |
+note: ...which requires computing the super traits of `T1`...
+ --> $DIR/issue-12511.rs:1:12
+ |
+LL | trait T1 : T2 {
+ | ^^
+note: ...which requires computing the super predicates of `T2`...
+ --> $DIR/issue-12511.rs:5:1
+ |
+LL | trait T2 : T1 {
+ | ^^^^^^^^^^^^^
+note: ...which requires computing the super traits of `T2`...
+ --> $DIR/issue-12511.rs:5:12
+ |
+LL | trait T2 : T1 {
+ | ^^
+ = note: ...which again requires computing the super predicates of `T1`, completing the cycle
+note: cycle used when collecting item types in top-level module
+ --> $DIR/issue-12511.rs:1:1
+ |
+LL | / trait T1 : T2 {
+LL | |
+LL | | }
+ | |_^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0391`.
diff --git a/tests/ui/issues/issue-12567.rs b/tests/ui/issues/issue-12567.rs
new file mode 100644
index 000000000..1b2a37de4
--- /dev/null
+++ b/tests/ui/issues/issue-12567.rs
@@ -0,0 +1,13 @@
+fn match_vecs<'a, T>(l1: &'a [T], l2: &'a [T]) {
+ match (l1, l2) {
+ //~^ ERROR: cannot move out of type `[T]`, a non-copy slice
+ //~| ERROR: cannot move out of type `[T]`, a non-copy slice
+ (&[], &[]) => println!("both empty"),
+ (&[], &[hd, ..]) | (&[hd, ..], &[])
+ => println!("one empty"),
+ (&[hd1, ..], &[hd2, ..])
+ => println!("both nonempty"),
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-12567.stderr b/tests/ui/issues/issue-12567.stderr
new file mode 100644
index 000000000..7fa06825f
--- /dev/null
+++ b/tests/ui/issues/issue-12567.stderr
@@ -0,0 +1,47 @@
+error[E0508]: cannot move out of type `[T]`, a non-copy slice
+ --> $DIR/issue-12567.rs:2:11
+ |
+LL | match (l1, l2) {
+ | ^^^^^^^^ cannot move out of here
+...
+LL | (&[], &[hd, ..]) | (&[hd, ..], &[])
+ | -- data moved here
+LL | => println!("one empty"),
+LL | (&[hd1, ..], &[hd2, ..])
+ | --- ...and here
+ |
+ = note: move occurs because these variables have types that don't implement the `Copy` trait
+help: consider borrowing the pattern binding
+ |
+LL | (&[], &[ref hd, ..]) | (&[hd, ..], &[])
+ | +++
+help: consider borrowing the pattern binding
+ |
+LL | (&[ref hd1, ..], &[hd2, ..])
+ | +++
+
+error[E0508]: cannot move out of type `[T]`, a non-copy slice
+ --> $DIR/issue-12567.rs:2:11
+ |
+LL | match (l1, l2) {
+ | ^^^^^^^^ cannot move out of here
+...
+LL | (&[], &[hd, ..]) | (&[hd, ..], &[])
+ | -- data moved here
+LL | => println!("one empty"),
+LL | (&[hd1, ..], &[hd2, ..])
+ | --- ...and here
+ |
+ = note: move occurs because these variables have types that don't implement the `Copy` trait
+help: consider borrowing the pattern binding
+ |
+LL | (&[], &[ref hd, ..]) | (&[hd, ..], &[])
+ | +++
+help: consider borrowing the pattern binding
+ |
+LL | (&[hd1, ..], &[ref hd2, ..])
+ | +++
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0508`.
diff --git a/tests/ui/issues/issue-1257.rs b/tests/ui/issues/issue-1257.rs
new file mode 100644
index 000000000..de5a6d359
--- /dev/null
+++ b/tests/ui/issues/issue-1257.rs
@@ -0,0 +1,11 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+pub fn main () {
+ let mut line = "".to_string();
+ let mut i = 0;
+ while line != "exit".to_string() {
+ line = if i == 9 { "exit".to_string() } else { "notexit".to_string() };
+ i += 1;
+ }
+}
diff --git a/tests/ui/issues/issue-12612.rs b/tests/ui/issues/issue-12612.rs
new file mode 100644
index 000000000..d254f6941
--- /dev/null
+++ b/tests/ui/issues/issue-12612.rs
@@ -0,0 +1,15 @@
+// run-pass
+#![allow(unused_imports)]
+// aux-build:issue-12612-1.rs
+// aux-build:issue-12612-2.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_12612_1 as foo;
+extern crate issue_12612_2 as bar;
+
+mod test {
+ use bar::baz;
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-12660.rs b/tests/ui/issues/issue-12660.rs
new file mode 100644
index 000000000..44c492b43
--- /dev/null
+++ b/tests/ui/issues/issue-12660.rs
@@ -0,0 +1,14 @@
+// run-pass
+// aux-build:issue-12660-aux.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue12660aux;
+
+use issue12660aux::{my_fn, MyStruct};
+
+#[allow(path_statements)]
+fn main() {
+ my_fn(MyStruct);
+ MyStruct;
+}
diff --git a/tests/ui/issues/issue-12677.rs b/tests/ui/issues/issue-12677.rs
new file mode 100644
index 000000000..d0e4c17d4
--- /dev/null
+++ b/tests/ui/issues/issue-12677.rs
@@ -0,0 +1,9 @@
+// run-pass
+
+fn main() {
+ let s = "Hello";
+ let first = s.bytes();
+ let second = first.clone();
+
+ assert_eq!(first.collect::<Vec<u8>>(), second.collect::<Vec<u8>>())
+}
diff --git a/tests/ui/issues/issue-12699.rs b/tests/ui/issues/issue-12699.rs
new file mode 100644
index 000000000..e26c2d7cd
--- /dev/null
+++ b/tests/ui/issues/issue-12699.rs
@@ -0,0 +1,10 @@
+// run-pass
+// ignore-wasm32-bare can't block the thread
+// ignore-sgx not supported
+#![allow(deprecated)]
+
+use std::thread;
+
+fn main() {
+ thread::sleep_ms(250);
+}
diff --git a/tests/ui/issues/issue-12729.rs b/tests/ui/issues/issue-12729.rs
new file mode 100644
index 000000000..aa0b04af2
--- /dev/null
+++ b/tests/ui/issues/issue-12729.rs
@@ -0,0 +1,14 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+pub struct Foo;
+
+mod bar {
+ use Foo;
+
+ impl Foo {
+ fn baz(&self) {}
+ }
+}
+fn main() {}
diff --git a/tests/ui/issues/issue-12744.rs b/tests/ui/issues/issue-12744.rs
new file mode 100644
index 000000000..e2756ec97
--- /dev/null
+++ b/tests/ui/issues/issue-12744.rs
@@ -0,0 +1,5 @@
+// run-pass
+fn main() {
+ fn test() -> Box<dyn std::any::Any + 'static> { Box::new(1) }
+ println!("{:?}", test())
+}
diff --git a/tests/ui/issues/issue-12860.rs b/tests/ui/issues/issue-12860.rs
new file mode 100644
index 000000000..01b642cdf
--- /dev/null
+++ b/tests/ui/issues/issue-12860.rs
@@ -0,0 +1,49 @@
+// run-pass
+use std::collections::HashSet;
+
+#[derive(Copy, Clone, PartialEq, Eq, Hash)]
+struct XYZ {
+ x: isize,
+ y: isize,
+ z: isize
+}
+
+fn main() {
+ let mut connected = HashSet::new();
+ let mut border = HashSet::new();
+
+ let middle = XYZ{x: 0, y: 0, z: 0};
+ border.insert(middle);
+
+ while !border.is_empty() && connected.len() < 10000 {
+ let choice = *(border.iter().next().unwrap());
+ border.remove(&choice);
+ connected.insert(choice);
+
+ let cxp = XYZ{x: choice.x + 1, y: choice.y, z: choice.z};
+ let cxm = XYZ{x: choice.x - 1, y: choice.y, z: choice.z};
+ let cyp = XYZ{x: choice.x, y: choice.y + 1, z: choice.z};
+ let cym = XYZ{x: choice.x, y: choice.y - 1, z: choice.z};
+ let czp = XYZ{x: choice.x, y: choice.y, z: choice.z + 1};
+ let czm = XYZ{x: choice.x, y: choice.y, z: choice.z - 1};
+
+ if !connected.contains(&cxp) {
+ border.insert(cxp);
+ }
+ if !connected.contains(&cxm){
+ border.insert(cxm);
+ }
+ if !connected.contains(&cyp){
+ border.insert(cyp);
+ }
+ if !connected.contains(&cym) {
+ border.insert(cym);
+ }
+ if !connected.contains(&czp){
+ border.insert(czp);
+ }
+ if !connected.contains(&czm) {
+ border.insert(czm);
+ }
+ }
+}
diff --git a/tests/ui/issues/issue-12863.rs b/tests/ui/issues/issue-12863.rs
new file mode 100644
index 000000000..1ac1c3d81
--- /dev/null
+++ b/tests/ui/issues/issue-12863.rs
@@ -0,0 +1,8 @@
+mod foo { pub fn bar() {} }
+
+fn main() {
+ match () {
+ foo::bar => {}
+ //~^ ERROR expected unit struct, unit variant or constant, found function `foo::bar`
+ }
+}
diff --git a/tests/ui/issues/issue-12863.stderr b/tests/ui/issues/issue-12863.stderr
new file mode 100644
index 000000000..9c29a37cb
--- /dev/null
+++ b/tests/ui/issues/issue-12863.stderr
@@ -0,0 +1,9 @@
+error[E0532]: expected unit struct, unit variant or constant, found function `foo::bar`
+ --> $DIR/issue-12863.rs:5:9
+ |
+LL | foo::bar => {}
+ | ^^^^^^^^ not a unit struct, unit variant or constant
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0532`.
diff --git a/tests/ui/issues/issue-12909.rs b/tests/ui/issues/issue-12909.rs
new file mode 100644
index 000000000..a68d73a00
--- /dev/null
+++ b/tests/ui/issues/issue-12909.rs
@@ -0,0 +1,20 @@
+// run-pass
+#![allow(unused_variables)]
+// pretty-expanded FIXME #23616
+
+use std::collections::HashMap;
+
+fn copy<T: Copy>(&x: &T) -> T {
+ x
+}
+
+fn main() {
+ let arr = [(1, 1), (2, 2), (3, 3)];
+
+ let v1: Vec<&_> = arr.iter().collect();
+ let v2: Vec<_> = arr.iter().map(copy).collect();
+
+ let m1: HashMap<_, _> = arr.iter().map(copy).collect();
+ let m2: HashMap<isize, _> = arr.iter().map(copy).collect();
+ let m3: HashMap<_, usize> = arr.iter().map(copy).collect();
+}
diff --git a/tests/ui/issues/issue-12920.rs b/tests/ui/issues/issue-12920.rs
new file mode 100644
index 000000000..a0cfea055
--- /dev/null
+++ b/tests/ui/issues/issue-12920.rs
@@ -0,0 +1,8 @@
+// run-fail
+// error-pattern:explicit panic
+// ignore-emscripten no processes
+
+pub fn main() {
+ panic!();
+ println!("{}", 1);
+}
diff --git a/tests/ui/issues/issue-12997-1.rs b/tests/ui/issues/issue-12997-1.rs
new file mode 100644
index 000000000..9f808dac3
--- /dev/null
+++ b/tests/ui/issues/issue-12997-1.rs
@@ -0,0 +1,11 @@
+// compile-flags: --test
+
+//! Test that makes sure wrongly-typed bench functions aren't ignored
+
+#![feature(test)]
+
+#[bench]
+fn foo() { } //~ ERROR functions used as benches
+
+#[bench]
+fn bar(x: isize, y: isize) { } //~ ERROR functions used as benches
diff --git a/tests/ui/issues/issue-12997-1.stderr b/tests/ui/issues/issue-12997-1.stderr
new file mode 100644
index 000000000..00c605174
--- /dev/null
+++ b/tests/ui/issues/issue-12997-1.stderr
@@ -0,0 +1,14 @@
+error: functions used as benches must have signature `fn(&mut Bencher) -> impl Termination`
+ --> $DIR/issue-12997-1.rs:8:1
+ |
+LL | fn foo() { }
+ | ^^^^^^^^^^^^
+
+error: functions used as benches must have signature `fn(&mut Bencher) -> impl Termination`
+ --> $DIR/issue-12997-1.rs:11:1
+ |
+LL | fn bar(x: isize, y: isize) { }
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/issues/issue-12997-2.rs b/tests/ui/issues/issue-12997-2.rs
new file mode 100644
index 000000000..9df965315
--- /dev/null
+++ b/tests/ui/issues/issue-12997-2.rs
@@ -0,0 +1,9 @@
+// compile-flags: --test
+
+//! Test that makes sure wrongly-typed bench functions are rejected
+
+#![feature(test)]
+
+#[bench]
+fn bar(x: isize) { }
+//~^ ERROR mismatched types
diff --git a/tests/ui/issues/issue-12997-2.stderr b/tests/ui/issues/issue-12997-2.stderr
new file mode 100644
index 000000000..2a3d0e345
--- /dev/null
+++ b/tests/ui/issues/issue-12997-2.stderr
@@ -0,0 +1,21 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-12997-2.rs:8:1
+ |
+LL | #[bench]
+ | -------- in this procedural macro expansion
+LL | fn bar(x: isize) { }
+ | ^^^^^^^^^^^^^^^^^^^^
+ | |
+ | expected `isize`, found `&mut Bencher`
+ | arguments to this function are incorrect
+ |
+note: function defined here
+ --> $DIR/issue-12997-2.rs:8:4
+ |
+LL | fn bar(x: isize) { }
+ | ^^^ --------
+ = note: this error originates in the attribute macro `bench` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-13027.rs b/tests/ui/issues/issue-13027.rs
new file mode 100644
index 000000000..64bf2a11d
--- /dev/null
+++ b/tests/ui/issues/issue-13027.rs
@@ -0,0 +1,178 @@
+// run-pass
+
+// Tests that match expression handles overlapped literal and range
+// properly in the presence of guard function.
+
+fn val() -> usize { 1 }
+
+static CONST: usize = 1;
+
+pub fn main() {
+ lit_shadow_range();
+ range_shadow_lit();
+ range_shadow_range();
+ multi_pats_shadow_lit();
+ multi_pats_shadow_range();
+ lit_shadow_multi_pats();
+ range_shadow_multi_pats();
+ misc();
+}
+
+fn lit_shadow_range() {
+ assert_eq!(2, match 1 {
+ 1 if false => 1,
+ 1..=2 => 2,
+ _ => 3
+ });
+
+ let x = 0;
+ assert_eq!(2, match x+1 {
+ 0 => 0,
+ 1 if false => 1,
+ 1..=2 => 2,
+ _ => 3
+ });
+
+ assert_eq!(2, match val() {
+ 1 if false => 1,
+ 1..=2 => 2,
+ _ => 3
+ });
+
+ assert_eq!(2, match CONST {
+ 0 => 0,
+ 1 if false => 1,
+ 1..=2 => 2,
+ _ => 3
+ });
+
+ // value is out of the range of second arm, should match wildcard pattern
+ assert_eq!(3, match 3 {
+ 1 if false => 1,
+ 1..=2 => 2,
+ _ => 3
+ });
+}
+
+fn range_shadow_lit() {
+ assert_eq!(2, match 1 {
+ 1..=2 if false => 1,
+ 1 => 2,
+ _ => 3
+ });
+
+ let x = 0;
+ assert_eq!(2, match x+1 {
+ 0 => 0,
+ 1..=2 if false => 1,
+ 1 => 2,
+ _ => 3
+ });
+
+ assert_eq!(2, match val() {
+ 1..=2 if false => 1,
+ 1 => 2,
+ _ => 3
+ });
+
+ assert_eq!(2, match CONST {
+ 0 => 0,
+ 1..=2 if false => 1,
+ 1 => 2,
+ _ => 3
+ });
+
+ // ditto
+ assert_eq!(3, match 3 {
+ 1..=2 if false => 1,
+ 1 => 2,
+ _ => 3
+ });
+}
+
+fn range_shadow_range() {
+ assert_eq!(2, match 1 {
+ 0..=2 if false => 1,
+ 1..=3 => 2,
+ _ => 3,
+ });
+
+ let x = 0;
+ assert_eq!(2, match x+1 {
+ 100 => 0,
+ 0..=2 if false => 1,
+ 1..=3 => 2,
+ _ => 3,
+ });
+
+ assert_eq!(2, match val() {
+ 0..=2 if false => 1,
+ 1..=3 => 2,
+ _ => 3,
+ });
+
+ assert_eq!(2, match CONST {
+ 100 => 0,
+ 0..=2 if false => 1,
+ 1..=3 => 2,
+ _ => 3,
+ });
+
+ // ditto
+ assert_eq!(3, match 5 {
+ 0..=2 if false => 1,
+ 1..=3 => 2,
+ _ => 3,
+ });
+}
+
+fn multi_pats_shadow_lit() {
+ assert_eq!(2, match 1 {
+ 100 => 0,
+ 0 | 1..=10 if false => 1,
+ 1 => 2,
+ _ => 3,
+ });
+}
+
+fn multi_pats_shadow_range() {
+ assert_eq!(2, match 1 {
+ 100 => 0,
+ 0 | 1..=10 if false => 1,
+ 1..=3 => 2,
+ _ => 3,
+ });
+}
+
+fn lit_shadow_multi_pats() {
+ assert_eq!(2, match 1 {
+ 100 => 0,
+ 1 if false => 1,
+ 0 | 1..=10 => 2,
+ _ => 3,
+ });
+}
+
+fn range_shadow_multi_pats() {
+ assert_eq!(2, match 1 {
+ 100 => 0,
+ 1..=3 if false => 1,
+ 0 | 1..=10 => 2,
+ _ => 3,
+ });
+}
+
+fn misc() {
+ enum Foo {
+ Bar(#[allow(unused_tuple_struct_fields)] usize, bool)
+ }
+ // This test basically mimics how trace_macros! macro is implemented,
+ // which is a rare combination of vector patterns, multiple wild-card
+ // patterns and guard functions.
+ let r = match [Foo::Bar(0, false)] {
+ [Foo::Bar(_, pred)] if pred => 1,
+ [Foo::Bar(_, pred)] if !pred => 2,
+ _ => 0,
+ };
+ assert_eq!(2, r);
+}
diff --git a/tests/ui/issues/issue-13033.rs b/tests/ui/issues/issue-13033.rs
new file mode 100644
index 000000000..fdb356e70
--- /dev/null
+++ b/tests/ui/issues/issue-13033.rs
@@ -0,0 +1,14 @@
+trait Foo {
+ fn bar(&mut self, other: &mut dyn Foo);
+}
+
+struct Baz;
+
+impl Foo for Baz {
+ fn bar(&mut self, other: &dyn Foo) {}
+ //~^ ERROR method `bar` has an incompatible type for trait
+ //~| expected signature `fn(&mut Baz, &mut dyn Foo)`
+ //~| found signature `fn(&mut Baz, &dyn Foo)`
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-13033.stderr b/tests/ui/issues/issue-13033.stderr
new file mode 100644
index 000000000..db2c1189e
--- /dev/null
+++ b/tests/ui/issues/issue-13033.stderr
@@ -0,0 +1,20 @@
+error[E0053]: method `bar` has an incompatible type for trait
+ --> $DIR/issue-13033.rs:8:30
+ |
+LL | fn bar(&mut self, other: &dyn Foo) {}
+ | ^^^^^^^^
+ | |
+ | types differ in mutability
+ | help: change the parameter type to match the trait: `&mut dyn Foo`
+ |
+note: type in trait
+ --> $DIR/issue-13033.rs:2:30
+ |
+LL | fn bar(&mut self, other: &mut dyn Foo);
+ | ^^^^^^^^^^^^
+ = note: expected signature `fn(&mut Baz, &mut dyn Foo)`
+ found signature `fn(&mut Baz, &dyn Foo)`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0053`.
diff --git a/tests/ui/issues/issue-13058.rs b/tests/ui/issues/issue-13058.rs
new file mode 100644
index 000000000..a5806feb7
--- /dev/null
+++ b/tests/ui/issues/issue-13058.rs
@@ -0,0 +1,27 @@
+use std::ops::Range;
+
+trait Itble<'r, T, I: Iterator<Item=T>> { fn iter(&'r self) -> I; }
+
+impl<'r> Itble<'r, usize, Range<usize>> for (usize, usize) {
+ fn iter(&'r self) -> Range<usize> {
+ let &(min, max) = self;
+ min..max
+ }
+}
+
+fn check<'r, I: Iterator<Item=usize>, T: Itble<'r, usize, I>>(cont: &T) -> bool
+{
+ let cont_iter = cont.iter();
+//~^ ERROR explicit lifetime required in the type of `cont` [E0621]
+ let result = cont_iter.fold(Some(0), |state, val| {
+ state.map_or(None, |mask| {
+ let bit = 1 << val;
+ if mask & bit == 0 {Some(mask|bit)} else {None}
+ })
+ });
+ result.is_some()
+}
+
+fn main() {
+ check(&(3, 5));
+}
diff --git a/tests/ui/issues/issue-13058.stderr b/tests/ui/issues/issue-13058.stderr
new file mode 100644
index 000000000..8368978de
--- /dev/null
+++ b/tests/ui/issues/issue-13058.stderr
@@ -0,0 +1,12 @@
+error[E0621]: explicit lifetime required in the type of `cont`
+ --> $DIR/issue-13058.rs:14:21
+ |
+LL | fn check<'r, I: Iterator<Item=usize>, T: Itble<'r, usize, I>>(cont: &T) -> bool
+ | -- help: add explicit lifetime `'r` to the type of `cont`: `&'r T`
+LL | {
+LL | let cont_iter = cont.iter();
+ | ^^^^^^^^^^^ lifetime `'r` required
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0621`.
diff --git a/tests/ui/issues/issue-13105.rs b/tests/ui/issues/issue-13105.rs
new file mode 100644
index 000000000..15a98c779
--- /dev/null
+++ b/tests/ui/issues/issue-13105.rs
@@ -0,0 +1,9 @@
+// check-pass
+// pretty-expanded FIXME #23616
+
+trait Foo {
+ #[allow(anonymous_parameters)]
+ fn quux(u8) {}
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-13167.rs b/tests/ui/issues/issue-13167.rs
new file mode 100644
index 000000000..8584c98de
--- /dev/null
+++ b/tests/ui/issues/issue-13167.rs
@@ -0,0 +1,22 @@
+// check-pass
+// pretty-expanded FIXME #23616
+
+use std::slice;
+
+pub struct PhfMapEntries<'a, T: 'a> {
+ iter: slice::Iter<'a, (&'static str, T)>,
+}
+
+impl<'a, T> Iterator for PhfMapEntries<'a, T> {
+ type Item = (&'static str, &'a T);
+
+ fn next(&mut self) -> Option<(&'static str, &'a T)> {
+ self.iter.by_ref().map(|&(key, ref value)| (key, value)).next()
+ }
+
+ fn size_hint(&self) -> (usize, Option<usize>) {
+ self.iter.size_hint()
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-13202.rs b/tests/ui/issues/issue-13202.rs
new file mode 100644
index 000000000..16debb5b6
--- /dev/null
+++ b/tests/ui/issues/issue-13202.rs
@@ -0,0 +1,7 @@
+// run-fail
+// error-pattern:bad input
+// ignore-emscripten no processes
+
+fn main() {
+ Some("foo").unwrap_or(panic!("bad input")).to_string();
+}
diff --git a/tests/ui/issues/issue-13204.rs b/tests/ui/issues/issue-13204.rs
new file mode 100644
index 000000000..3d6aba845
--- /dev/null
+++ b/tests/ui/issues/issue-13204.rs
@@ -0,0 +1,25 @@
+// run-pass
+#![allow(unused_mut)]
+// Test that when instantiating trait default methods, typeck handles
+// lifetime parameters defined on the method bound correctly.
+
+
+pub trait Foo {
+ fn bar<'a, I: Iterator<Item=&'a ()>>(&self, it: I) -> usize {
+ let mut xs = it.filter(|_| true);
+ xs.count()
+ }
+}
+
+pub struct Baz;
+
+impl Foo for Baz {
+ // When instantiating `Foo::bar` for `Baz` here, typeck used to
+ // ICE due to the lifetime parameter of `bar`.
+}
+
+fn main() {
+ let x = Baz;
+ let y = vec![(), (), ()];
+ assert_eq!(x.bar(y.iter()), 3);
+}
diff --git a/tests/ui/issues/issue-13214.rs b/tests/ui/issues/issue-13214.rs
new file mode 100644
index 000000000..0cf8d0675
--- /dev/null
+++ b/tests/ui/issues/issue-13214.rs
@@ -0,0 +1,23 @@
+// build-pass
+#![allow(dead_code)]
+// defining static with struct that contains enum
+// with &'static str variant used to cause ICE
+
+// pretty-expanded FIXME #23616
+
+pub enum Foo {
+ Bar,
+ Baz(&'static str),
+}
+
+pub static TEST: Test = Test {
+ foo: Foo::Bar,
+ c: 'a'
+};
+
+pub struct Test {
+ foo: Foo,
+ c: char,
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-13259-windows-tcb-trash.rs b/tests/ui/issues/issue-13259-windows-tcb-trash.rs
new file mode 100644
index 000000000..740e7780d
--- /dev/null
+++ b/tests/ui/issues/issue-13259-windows-tcb-trash.rs
@@ -0,0 +1,42 @@
+// run-pass
+#![feature(rustc_private)]
+
+extern crate libc;
+
+#[cfg(windows)]
+mod imp {
+ type LPVOID = *mut u8;
+ type DWORD = u32;
+ type LPWSTR = *mut u16;
+
+ extern "system" {
+ fn FormatMessageW(flags: DWORD,
+ lpSrc: LPVOID,
+ msgId: DWORD,
+ langId: DWORD,
+ buf: LPWSTR,
+ nsize: DWORD,
+ args: *const u8)
+ -> DWORD;
+ }
+
+ pub fn test() {
+ let mut buf: [u16; 50] = [0; 50];
+ let ret = unsafe {
+ FormatMessageW(0x1000, core::ptr::null_mut(), 1, 0x400,
+ buf.as_mut_ptr(), buf.len() as u32, core::ptr::null())
+ };
+ // On some 32-bit Windowses (Win7-8 at least) this will panic with segmented
+ // stacks taking control of pvArbitrary
+ assert!(ret != 0);
+ }
+}
+
+#[cfg(not(windows))]
+mod imp {
+ pub fn test() { }
+}
+
+fn main() {
+ imp::test()
+}
diff --git a/tests/ui/issues/issue-13264.rs b/tests/ui/issues/issue-13264.rs
new file mode 100644
index 000000000..691bb63a2
--- /dev/null
+++ b/tests/ui/issues/issue-13264.rs
@@ -0,0 +1,74 @@
+// run-pass
+#![allow(non_camel_case_types)]
+#![allow(non_snake_case)]
+
+use std::ops::Deref;
+
+struct Root {
+ jsref: JSRef
+}
+
+impl Deref for Root {
+ type Target = JSRef;
+
+ fn deref<'a>(&'a self) -> &'a JSRef {
+ &self.jsref
+ }
+}
+
+#[derive(Copy, Clone)]
+struct JSRef {
+ node: *const Node
+}
+
+impl Deref for JSRef {
+ type Target = Node;
+
+ fn deref<'a>(&'a self) -> &'a Node {
+ self.get()
+ }
+}
+
+trait INode {
+ fn RemoveChild(&self);
+}
+
+impl INode for JSRef {
+ fn RemoveChild(&self) {
+ self.get().RemoveChild(0)
+ }
+}
+
+impl JSRef {
+ fn AddChild(&self) {
+ self.get().AddChild(0);
+ }
+
+ fn get<'a>(&'a self) -> &'a Node {
+ unsafe {
+ &*self.node
+ }
+ }
+}
+
+struct Node;
+
+impl Node {
+ fn RemoveChild(&self, _a: usize) {
+ }
+
+ fn AddChild(&self, _a: usize) {
+ }
+}
+
+fn main() {
+ let n = Node;
+ let jsref = JSRef { node: &n };
+ let root = Root { jsref: jsref };
+
+ root.AddChild();
+ jsref.AddChild();
+
+ root.RemoveChild();
+ jsref.RemoveChild();
+}
diff --git a/tests/ui/issues/issue-13323.rs b/tests/ui/issues/issue-13323.rs
new file mode 100644
index 000000000..71e14d4da
--- /dev/null
+++ b/tests/ui/issues/issue-13323.rs
@@ -0,0 +1,58 @@
+// run-pass
+
+struct StrWrap {
+ s: String
+}
+
+impl StrWrap {
+ fn new(s: &str) -> StrWrap {
+ StrWrap { s: s.to_string() }
+ }
+
+ fn get_s<'a>(&'a self) -> &'a str {
+ &self.s
+ }
+}
+
+struct MyStruct {
+ s: StrWrap
+}
+
+impl MyStruct {
+ fn new(s: &str) -> MyStruct {
+ MyStruct { s: StrWrap::new(s) }
+ }
+
+ fn get_str_wrap<'a>(&'a self) -> &'a StrWrap {
+ &self.s
+ }
+}
+
+trait Matcher<T> {
+ fn matches(&self, actual: T) -> bool;
+}
+
+fn assert_that<T, U: Matcher<T>>(actual: T, matcher: &U) {
+ assert!(matcher.matches(actual));
+}
+
+struct EqualTo<T> {
+ expected: T
+}
+
+impl<T: Eq> Matcher<T> for EqualTo<T> {
+ fn matches(&self, actual: T) -> bool {
+ self.expected.eq(&actual)
+ }
+}
+
+fn equal_to<T: Eq>(expected: T) -> Box<EqualTo<T>> {
+ Box::new(EqualTo { expected: expected })
+}
+
+pub fn main() {
+ let my_struct = MyStruct::new("zomg");
+ let s = my_struct.get_str_wrap();
+
+ assert_that(s.get_s(), &*equal_to("zomg"));
+}
diff --git a/tests/ui/issues/issue-13359.rs b/tests/ui/issues/issue-13359.rs
new file mode 100644
index 000000000..9129790c5
--- /dev/null
+++ b/tests/ui/issues/issue-13359.rs
@@ -0,0 +1,13 @@
+fn foo(_s: i16) { }
+
+fn bar(_s: u32) { }
+
+fn main() {
+ foo(1*(1 as isize));
+ //~^ ERROR mismatched types
+ //~| expected `i16`, found `isize`
+
+ bar(1*(1 as usize));
+ //~^ ERROR mismatched types
+ //~| expected `u32`, found `usize`
+}
diff --git a/tests/ui/issues/issue-13359.stderr b/tests/ui/issues/issue-13359.stderr
new file mode 100644
index 000000000..fef63680a
--- /dev/null
+++ b/tests/ui/issues/issue-13359.stderr
@@ -0,0 +1,39 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-13359.rs:6:9
+ |
+LL | foo(1*(1 as isize));
+ | --- ^^^^^^^^^^^^^^ expected `i16`, found `isize`
+ | |
+ | arguments to this function are incorrect
+ |
+note: function defined here
+ --> $DIR/issue-13359.rs:1:4
+ |
+LL | fn foo(_s: i16) { }
+ | ^^^ -------
+help: you can convert an `isize` to an `i16` and panic if the converted value doesn't fit
+ |
+LL | foo((1*(1 as isize)).try_into().unwrap());
+ | + +++++++++++++++++++++
+
+error[E0308]: mismatched types
+ --> $DIR/issue-13359.rs:10:9
+ |
+LL | bar(1*(1 as usize));
+ | --- ^^^^^^^^^^^^^^ expected `u32`, found `usize`
+ | |
+ | arguments to this function are incorrect
+ |
+note: function defined here
+ --> $DIR/issue-13359.rs:3:4
+ |
+LL | fn bar(_s: u32) { }
+ | ^^^ -------
+help: you can convert a `usize` to a `u32` and panic if the converted value doesn't fit
+ |
+LL | bar((1*(1 as usize)).try_into().unwrap());
+ | + +++++++++++++++++++++
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-13405.rs b/tests/ui/issues/issue-13405.rs
new file mode 100644
index 000000000..732172b23
--- /dev/null
+++ b/tests/ui/issues/issue-13405.rs
@@ -0,0 +1,20 @@
+// check-pass
+#![allow(dead_code)]
+#![allow(unused_variables)]
+// pretty-expanded FIXME #23616
+
+struct Foo<'a> {
+ i: &'a bool,
+ j: Option<&'a isize>,
+}
+
+impl<'a> Foo<'a> {
+ fn bar(&mut self, j: &isize) {
+ let child = Foo {
+ i: self.i,
+ j: Some(j)
+ };
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-13407.rs b/tests/ui/issues/issue-13407.rs
new file mode 100644
index 000000000..7ea81ffb5
--- /dev/null
+++ b/tests/ui/issues/issue-13407.rs
@@ -0,0 +1,9 @@
+mod A {
+ struct C;
+}
+
+fn main() {
+ A::C = 1;
+ //~^ ERROR: invalid left-hand side of assignment
+ //~| ERROR: struct `C` is private
+}
diff --git a/tests/ui/issues/issue-13407.stderr b/tests/ui/issues/issue-13407.stderr
new file mode 100644
index 000000000..54b6c640d
--- /dev/null
+++ b/tests/ui/issues/issue-13407.stderr
@@ -0,0 +1,24 @@
+error[E0603]: unit struct `C` is private
+ --> $DIR/issue-13407.rs:6:8
+ |
+LL | A::C = 1;
+ | ^ private unit struct
+ |
+note: the unit struct `C` is defined here
+ --> $DIR/issue-13407.rs:2:5
+ |
+LL | struct C;
+ | ^^^^^^^^^
+
+error[E0070]: invalid left-hand side of assignment
+ --> $DIR/issue-13407.rs:6:10
+ |
+LL | A::C = 1;
+ | ---- ^
+ | |
+ | cannot assign to this expression
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0070, E0603.
+For more information about an error, try `rustc --explain E0070`.
diff --git a/tests/ui/issues/issue-13434.rs b/tests/ui/issues/issue-13434.rs
new file mode 100644
index 000000000..1b7d3e201
--- /dev/null
+++ b/tests/ui/issues/issue-13434.rs
@@ -0,0 +1,21 @@
+// run-pass
+#[derive(Debug)]
+struct MyStruct;
+
+trait Repro {
+ fn repro(self, s: MyStruct) -> String;
+}
+
+impl<F> Repro for F where F: FnOnce(MyStruct) -> String {
+ fn repro(self, s: MyStruct) -> String {
+ self(s)
+ }
+}
+
+fn do_stuff<R: Repro>(r: R) -> String {
+ r.repro(MyStruct)
+}
+
+pub fn main() {
+ assert_eq!("MyStruct".to_string(), do_stuff(|s: MyStruct| format!("{:?}", s)));
+}
diff --git a/tests/ui/issues/issue-13446.rs b/tests/ui/issues/issue-13446.rs
new file mode 100644
index 000000000..9f1fc4277
--- /dev/null
+++ b/tests/ui/issues/issue-13446.rs
@@ -0,0 +1,6 @@
+// Used to cause ICE
+
+static VEC: [u32; 256] = vec![];
+//~^ ERROR mismatched types
+
+fn main() {}
diff --git a/tests/ui/issues/issue-13446.stderr b/tests/ui/issues/issue-13446.stderr
new file mode 100644
index 000000000..30fb73dd3
--- /dev/null
+++ b/tests/ui/issues/issue-13446.stderr
@@ -0,0 +1,13 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-13446.rs:3:26
+ |
+LL | static VEC: [u32; 256] = vec![];
+ | ^^^^^^ expected array `[u32; 256]`, found struct `Vec`
+ |
+ = note: expected array `[u32; 256]`
+ found struct `Vec<_>`
+ = note: this error originates in the macro `vec` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-13466.rs b/tests/ui/issues/issue-13466.rs
new file mode 100644
index 000000000..a420c7704
--- /dev/null
+++ b/tests/ui/issues/issue-13466.rs
@@ -0,0 +1,20 @@
+// Regression test for #13466
+
+pub fn main() {
+ // The expected arm type `Option<T>` has one type parameter, while
+ // the actual arm `Result<T, E>` has two. typeck should not be
+ // tricked into looking up a non-existing second type parameter.
+ let _x: usize = match Some(1) {
+ Ok(u) => u,
+ //~^ ERROR mismatched types
+ //~| expected enum `Option<{integer}>`
+ //~| found enum `Result<_, _>`
+ //~| expected enum `Option`, found enum `Result`
+
+ Err(e) => panic!(e)
+ //~^ ERROR mismatched types
+ //~| expected enum `Option<{integer}>`
+ //~| found enum `Result<_, _>`
+ //~| expected enum `Option`, found enum `Result`
+ };
+}
diff --git a/tests/ui/issues/issue-13466.stderr b/tests/ui/issues/issue-13466.stderr
new file mode 100644
index 000000000..c78466f4e
--- /dev/null
+++ b/tests/ui/issues/issue-13466.stderr
@@ -0,0 +1,26 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-13466.rs:8:9
+ |
+LL | let _x: usize = match Some(1) {
+ | ------- this expression has type `Option<{integer}>`
+LL | Ok(u) => u,
+ | ^^^^^ expected enum `Option`, found enum `Result`
+ |
+ = note: expected enum `Option<{integer}>`
+ found enum `Result<_, _>`
+
+error[E0308]: mismatched types
+ --> $DIR/issue-13466.rs:14:9
+ |
+LL | let _x: usize = match Some(1) {
+ | ------- this expression has type `Option<{integer}>`
+...
+LL | Err(e) => panic!(e)
+ | ^^^^^^ expected enum `Option`, found enum `Result`
+ |
+ = note: expected enum `Option<{integer}>`
+ found enum `Result<_, _>`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-13482-2.rs b/tests/ui/issues/issue-13482-2.rs
new file mode 100644
index 000000000..bbcb954af
--- /dev/null
+++ b/tests/ui/issues/issue-13482-2.rs
@@ -0,0 +1,9 @@
+// compile-flags:-Z verbose
+
+fn main() {
+ let x = [1,2];
+ let y = match x {
+ [] => None, //~ ERROR pattern requires 0 elements but array has 2
+ [a,_] => Some(a)
+ };
+}
diff --git a/tests/ui/issues/issue-13482-2.stderr b/tests/ui/issues/issue-13482-2.stderr
new file mode 100644
index 000000000..ccab95878
--- /dev/null
+++ b/tests/ui/issues/issue-13482-2.stderr
@@ -0,0 +1,9 @@
+error[E0527]: pattern requires 0 elements but array has 2
+ --> $DIR/issue-13482-2.rs:6:9
+ |
+LL | [] => None,
+ | ^^ expected 2 elements
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0527`.
diff --git a/tests/ui/issues/issue-13482.rs b/tests/ui/issues/issue-13482.rs
new file mode 100644
index 000000000..244b3237e
--- /dev/null
+++ b/tests/ui/issues/issue-13482.rs
@@ -0,0 +1,7 @@
+fn main() {
+ let x = [1,2];
+ let y = match x {
+ [] => None, //~ ERROR pattern requires 0 elements but array has 2
+ [a,_] => Some(a)
+ };
+}
diff --git a/tests/ui/issues/issue-13482.stderr b/tests/ui/issues/issue-13482.stderr
new file mode 100644
index 000000000..3eb05f504
--- /dev/null
+++ b/tests/ui/issues/issue-13482.stderr
@@ -0,0 +1,9 @@
+error[E0527]: pattern requires 0 elements but array has 2
+ --> $DIR/issue-13482.rs:4:5
+ |
+LL | [] => None,
+ | ^^ expected 2 elements
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0527`.
diff --git a/tests/ui/issues/issue-13497-2.rs b/tests/ui/issues/issue-13497-2.rs
new file mode 100644
index 000000000..c82da0f00
--- /dev/null
+++ b/tests/ui/issues/issue-13497-2.rs
@@ -0,0 +1,7 @@
+fn read_lines_borrowed<'a>() -> Vec<&'a str> {
+ let rawLines: Vec<String> = vec!["foo ".to_string(), " bar".to_string()];
+ rawLines //~ ERROR cannot return value referencing local variable `rawLines`
+ .iter().map(|l| l.trim()).collect()
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-13497-2.stderr b/tests/ui/issues/issue-13497-2.stderr
new file mode 100644
index 000000000..a365e24e2
--- /dev/null
+++ b/tests/ui/issues/issue-13497-2.stderr
@@ -0,0 +1,12 @@
+error[E0515]: cannot return value referencing local variable `rawLines`
+ --> $DIR/issue-13497-2.rs:3:5
+ |
+LL | // rawLines
+LL | || .iter().map(|l| l.trim()).collect()
+ | ||_______________-___________________________^ returns a value referencing data owned by the current function
+ | |_______________|
+ | `rawLines` is borrowed here
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0515`.
diff --git a/tests/ui/issues/issue-13497.rs b/tests/ui/issues/issue-13497.rs
new file mode 100644
index 000000000..4b2795aa8
--- /dev/null
+++ b/tests/ui/issues/issue-13497.rs
@@ -0,0 +1,8 @@
+fn read_lines_borrowed1() -> Vec<
+ &str //~ ERROR missing lifetime specifier
+> {
+ let rawLines: Vec<String> = vec!["foo ".to_string(), " bar".to_string()];
+ rawLines.iter().map(|l| l.trim()).collect()
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-13497.stderr b/tests/ui/issues/issue-13497.stderr
new file mode 100644
index 000000000..4b1d979da
--- /dev/null
+++ b/tests/ui/issues/issue-13497.stderr
@@ -0,0 +1,15 @@
+error[E0106]: missing lifetime specifier
+ --> $DIR/issue-13497.rs:2:5
+ |
+LL | &str
+ | ^ expected named lifetime parameter
+ |
+ = help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from
+help: consider using the `'static` lifetime
+ |
+LL | &'static str
+ | +++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0106`.
diff --git a/tests/ui/issues/issue-13507-2.rs b/tests/ui/issues/issue-13507-2.rs
new file mode 100644
index 000000000..63f3589c6
--- /dev/null
+++ b/tests/ui/issues/issue-13507-2.rs
@@ -0,0 +1,36 @@
+// run-pass
+#![allow(unused_imports)]
+// aux-build:issue-13507.rs
+
+extern crate issue_13507;
+use issue_13507::testtypes;
+
+use std::any::TypeId;
+
+pub fn type_ids() -> Vec<TypeId> {
+ use issue_13507::testtypes::*;
+ vec![
+ TypeId::of::<FooBool>(),
+ TypeId::of::<FooInt>(),
+ TypeId::of::<FooUint>(),
+ TypeId::of::<FooFloat>(),
+ TypeId::of::<FooStr>(),
+ TypeId::of::<FooArray>(),
+ TypeId::of::<FooSlice>(),
+ TypeId::of::<FooBox>(),
+ TypeId::of::<FooPtr>(),
+ TypeId::of::<FooRef>(),
+ TypeId::of::<FooFnPtr>(),
+ TypeId::of::<FooNil>(),
+ TypeId::of::<FooTuple>(),
+ TypeId::of::<dyn FooTrait>(),
+ TypeId::of::<FooStruct>(),
+ TypeId::of::<FooEnum>()
+ ]
+}
+
+pub fn main() {
+ let othercrate = issue_13507::testtypes::type_ids();
+ let thiscrate = type_ids();
+ assert_eq!(thiscrate, othercrate);
+}
diff --git a/tests/ui/issues/issue-1362.rs b/tests/ui/issues/issue-1362.rs
new file mode 100644
index 000000000..6fd43f50e
--- /dev/null
+++ b/tests/ui/issues/issue-1362.rs
@@ -0,0 +1,8 @@
+// Regression test for issue #1362 - without that fix the span will be bogus
+// no-reformat
+fn main() {
+ let x: u32 = 20i32; //~ ERROR mismatched types
+}
+// NOTE: Do not add any extra lines as the line number the error is
+// on is significant; an error later in the source file might not
+// trigger the bug.
diff --git a/tests/ui/issues/issue-1362.stderr b/tests/ui/issues/issue-1362.stderr
new file mode 100644
index 000000000..babbb6e51
--- /dev/null
+++ b/tests/ui/issues/issue-1362.stderr
@@ -0,0 +1,16 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-1362.rs:4:16
+ |
+LL | let x: u32 = 20i32;
+ | --- ^^^^^ expected `u32`, found `i32`
+ | |
+ | expected due to this
+ |
+help: change the type of the numeric literal from `i32` to `u32`
+ |
+LL | let x: u32 = 20u32;
+ | ~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-13620.rs b/tests/ui/issues/issue-13620.rs
new file mode 100644
index 000000000..3c3c19df7
--- /dev/null
+++ b/tests/ui/issues/issue-13620.rs
@@ -0,0 +1,11 @@
+// run-pass
+// aux-build:issue-13620-1.rs
+// aux-build:issue-13620-2.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_13620_2 as crate2;
+
+fn main() {
+ (crate2::FOO2.foo)();
+}
diff --git a/tests/ui/issues/issue-13665.rs b/tests/ui/issues/issue-13665.rs
new file mode 100644
index 000000000..a3843c650
--- /dev/null
+++ b/tests/ui/issues/issue-13665.rs
@@ -0,0 +1,15 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+fn foo<'r>() {
+ let maybe_value_ref: Option<&'r u8> = None;
+
+ let _ = maybe_value_ref.map(|& ref v| v);
+ let _ = maybe_value_ref.map(|& ref v| -> &'r u8 {v});
+ let _ = maybe_value_ref.map(|& ref v: &'r u8| -> &'r u8 {v});
+ let _ = maybe_value_ref.map(|& ref v: &'r u8| {v});
+}
+
+fn main() {
+ foo();
+}
diff --git a/tests/ui/issues/issue-13703.rs b/tests/ui/issues/issue-13703.rs
new file mode 100644
index 000000000..424c99974
--- /dev/null
+++ b/tests/ui/issues/issue-13703.rs
@@ -0,0 +1,6 @@
+// check-pass
+// pretty-expanded FIXME #23616
+
+pub struct Foo<'a, 'b: 'a> { foo: &'a &'b isize }
+pub fn foo<'a, 'b>(x: Foo<'a, 'b>, _o: Option<& & ()>) { let _y = x.foo; }
+fn main() {}
diff --git a/tests/ui/issues/issue-13763.rs b/tests/ui/issues/issue-13763.rs
new file mode 100644
index 000000000..dd5f6dbc9
--- /dev/null
+++ b/tests/ui/issues/issue-13763.rs
@@ -0,0 +1,15 @@
+// run-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+mod u8 {
+ pub const BITS: usize = 8;
+}
+
+const NUM: usize = u8::BITS;
+
+struct MyStruct { nums: [usize; 8] }
+
+fn main() {
+ let _s = MyStruct { nums: [0; NUM] };
+}
diff --git a/tests/ui/issues/issue-13775.rs b/tests/ui/issues/issue-13775.rs
new file mode 100644
index 000000000..f5977effc
--- /dev/null
+++ b/tests/ui/issues/issue-13775.rs
@@ -0,0 +1,9 @@
+// check-pass
+// pretty-expanded FIXME #23616
+
+trait Foo {
+ #[allow(anonymous_parameters)]
+ fn bar(&self, isize) {}
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-13808.rs b/tests/ui/issues/issue-13808.rs
new file mode 100644
index 000000000..9f9db067b
--- /dev/null
+++ b/tests/ui/issues/issue-13808.rs
@@ -0,0 +1,18 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(unused_variables)]
+// pretty-expanded FIXME #23616
+
+struct Foo<'a> {
+ listener: Box<dyn FnMut() + 'a>,
+}
+
+impl<'a> Foo<'a> {
+ fn new<F>(listener: F) -> Foo<'a> where F: FnMut() + 'a {
+ Foo { listener: Box::new(listener) }
+ }
+}
+
+fn main() {
+ let a = Foo::new(|| {});
+}
diff --git a/tests/ui/issues/issue-13847.rs b/tests/ui/issues/issue-13847.rs
new file mode 100644
index 000000000..06a0304ae
--- /dev/null
+++ b/tests/ui/issues/issue-13847.rs
@@ -0,0 +1,3 @@
+fn main() {
+ return.is_failure //~ ERROR no field `is_failure` on type `!`
+}
diff --git a/tests/ui/issues/issue-13847.stderr b/tests/ui/issues/issue-13847.stderr
new file mode 100644
index 000000000..52b8dc049
--- /dev/null
+++ b/tests/ui/issues/issue-13847.stderr
@@ -0,0 +1,9 @@
+error[E0609]: no field `is_failure` on type `!`
+ --> $DIR/issue-13847.rs:2:12
+ |
+LL | return.is_failure
+ | ^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0609`.
diff --git a/tests/ui/issues/issue-13867.rs b/tests/ui/issues/issue-13867.rs
new file mode 100644
index 000000000..9510aae77
--- /dev/null
+++ b/tests/ui/issues/issue-13867.rs
@@ -0,0 +1,48 @@
+// run-pass
+// Test that codegen works correctly when there are multiple refutable
+// patterns in match expression.
+
+enum Foo {
+ FooUint(usize),
+ FooNullary,
+}
+
+fn main() {
+ let r = match (Foo::FooNullary, 'a') {
+ (Foo::FooUint(..), 'a'..='z') => 1,
+ (Foo::FooNullary, 'x') => 2,
+ _ => 0
+ };
+ assert_eq!(r, 0);
+
+ let r = match (Foo::FooUint(0), 'a') {
+ (Foo::FooUint(1), 'a'..='z') => 1,
+ (Foo::FooUint(..), 'x') => 2,
+ (Foo::FooNullary, 'a') => 3,
+ _ => 0
+ };
+ assert_eq!(r, 0);
+
+ let r = match ('a', Foo::FooUint(0)) {
+ ('a'..='z', Foo::FooUint(1)) => 1,
+ ('x', Foo::FooUint(..)) => 2,
+ ('a', Foo::FooNullary) => 3,
+ _ => 0
+ };
+ assert_eq!(r, 0);
+
+ let r = match ('a', 'a') {
+ ('a'..='z', 'b') => 1,
+ ('x', 'a'..='z') => 2,
+ _ => 0
+ };
+ assert_eq!(r, 0);
+
+ let r = match ('a', 'a') {
+ ('a'..='z', 'b') => 1,
+ ('x', 'a'..='z') => 2,
+ ('a', 'a') => 3,
+ _ => 0
+ };
+ assert_eq!(r, 3);
+}
diff --git a/tests/ui/issues/issue-13872.rs b/tests/ui/issues/issue-13872.rs
new file mode 100644
index 000000000..aade6b836
--- /dev/null
+++ b/tests/ui/issues/issue-13872.rs
@@ -0,0 +1,12 @@
+// run-pass
+// aux-build:issue-13872-1.rs
+// aux-build:issue-13872-2.rs
+// aux-build:issue-13872-3.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_13872_3 as other;
+
+fn main() {
+ other::foo();
+}
diff --git a/tests/ui/issues/issue-14082.rs b/tests/ui/issues/issue-14082.rs
new file mode 100644
index 000000000..52b8c8680
--- /dev/null
+++ b/tests/ui/issues/issue-14082.rs
@@ -0,0 +1,20 @@
+// check-pass
+// pretty-expanded FIXME #23616
+
+#![allow(unused_imports, dead_code)]
+
+use foo::Foo;
+
+mod foo {
+ pub use m::Foo; // this should shadow d::Foo
+}
+
+mod m {
+ pub struct Foo;
+}
+
+mod d {
+ pub struct Foo;
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-14091-2.rs b/tests/ui/issues/issue-14091-2.rs
new file mode 100644
index 000000000..e2f6b1833
--- /dev/null
+++ b/tests/ui/issues/issue-14091-2.rs
@@ -0,0 +1,17 @@
+//
+
+// Very
+
+// sensitive
+pub struct BytePos(pub u32);
+
+// to particular
+
+// line numberings / offsets
+
+fn main() {
+ let x = BytePos(1);
+
+ assert!(x, x);
+ //~^ ERROR cannot apply unary operator `!` to type `BytePos`
+}
diff --git a/tests/ui/issues/issue-14091-2.stderr b/tests/ui/issues/issue-14091-2.stderr
new file mode 100644
index 000000000..f8375d4ef
--- /dev/null
+++ b/tests/ui/issues/issue-14091-2.stderr
@@ -0,0 +1,18 @@
+error[E0600]: cannot apply unary operator `!` to type `BytePos`
+ --> $DIR/issue-14091-2.rs:15:5
+ |
+LL | assert!(x, x);
+ | ^^^^^^^^^^^^^ cannot apply unary operator `!`
+ |
+note: an implementation of `Not` might be missing for `BytePos`
+ --> $DIR/issue-14091-2.rs:6:1
+ |
+LL | pub struct BytePos(pub u32);
+ | ^^^^^^^^^^^^^^^^^^ must implement `Not`
+note: the trait `Not` must be implemented
+ --> $SRC_DIR/core/src/ops/bit.rs:LL:COL
+ = note: this error originates in the macro `assert` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0600`.
diff --git a/tests/ui/issues/issue-14091.rs b/tests/ui/issues/issue-14091.rs
new file mode 100644
index 000000000..0ee20de90
--- /dev/null
+++ b/tests/ui/issues/issue-14091.rs
@@ -0,0 +1,4 @@
+fn main(){
+ assert!(1,1);
+ //~^ ERROR mismatched types
+}
diff --git a/tests/ui/issues/issue-14091.stderr b/tests/ui/issues/issue-14091.stderr
new file mode 100644
index 000000000..0a9640a9e
--- /dev/null
+++ b/tests/ui/issues/issue-14091.stderr
@@ -0,0 +1,9 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-14091.rs:2:5
+ |
+LL | assert!(1,1);
+ | ^^^^^^^^^^^^ expected `bool`, found integer
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-14092.rs b/tests/ui/issues/issue-14092.rs
new file mode 100644
index 000000000..67c2a42ea
--- /dev/null
+++ b/tests/ui/issues/issue-14092.rs
@@ -0,0 +1,4 @@
+fn fn1(0: Box) {}
+//~^ ERROR missing generics for struct `Box`
+
+fn main() {}
diff --git a/tests/ui/issues/issue-14092.stderr b/tests/ui/issues/issue-14092.stderr
new file mode 100644
index 000000000..3a43627e6
--- /dev/null
+++ b/tests/ui/issues/issue-14092.stderr
@@ -0,0 +1,14 @@
+error[E0107]: missing generics for struct `Box`
+ --> $DIR/issue-14092.rs:1:11
+ |
+LL | fn fn1(0: Box) {}
+ | ^^^ expected at least 1 generic argument
+ |
+help: add missing generic argument
+ |
+LL | fn fn1(0: Box<T>) {}
+ | +++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0107`.
diff --git a/tests/ui/issues/issue-14229.rs b/tests/ui/issues/issue-14229.rs
new file mode 100644
index 000000000..477a2c650
--- /dev/null
+++ b/tests/ui/issues/issue-14229.rs
@@ -0,0 +1,21 @@
+// run-pass
+trait Foo: Sized {
+ fn foo(self) {}
+}
+
+trait Bar: Sized {
+ fn bar(self) {}
+}
+
+struct S;
+
+impl<'l> Foo for &'l S {}
+
+impl<T: Foo> Bar for T {}
+
+fn main() {
+ let s = S;
+ s.foo();
+ (&s).bar();
+ s.bar();
+}
diff --git a/tests/ui/issues/issue-14254.rs b/tests/ui/issues/issue-14254.rs
new file mode 100644
index 000000000..6f9308376
--- /dev/null
+++ b/tests/ui/issues/issue-14254.rs
@@ -0,0 +1,93 @@
+// check-pass
+// pretty-expanded FIXME #23616
+
+trait Foo: Sized {
+ fn bar(&self);
+ fn baz(&self) { }
+ fn bah(_: Option<Self>) { }
+}
+
+struct BarTy {
+ x : isize,
+ y : f64,
+}
+
+impl BarTy {
+ fn a() {}
+ fn b(&self) {}
+}
+
+// If these fail, it's necessary to update rustc_resolve and the cfail tests.
+impl Foo for *const BarTy {
+ fn bar(&self) {
+ self.baz();
+ BarTy::a();
+ Foo::bah(None::<*const BarTy>);
+ }
+}
+
+// If these fail, it's necessary to update rustc_resolve and the cfail tests.
+impl<'a> Foo for &'a BarTy {
+ fn bar(&self) {
+ self.baz();
+ self.x;
+ self.y;
+ BarTy::a();
+ Foo::bah(None::<&BarTy>);
+ self.b();
+ }
+}
+
+// If these fail, it's necessary to update rustc_resolve and the cfail tests.
+impl<'a> Foo for &'a mut BarTy {
+ fn bar(&self) {
+ self.baz();
+ self.x;
+ self.y;
+ BarTy::a();
+ Foo::bah(None::<&mut BarTy>);
+ self.b();
+ }
+}
+
+// If these fail, it's necessary to update rustc_resolve and the cfail tests.
+impl Foo for Box<BarTy> {
+ fn bar(&self) {
+ self.baz();
+ Foo::bah(None::<Box<BarTy>>);
+ }
+}
+
+// If these fail, it's necessary to update rustc_resolve and the cfail tests.
+impl Foo for *const isize {
+ fn bar(&self) {
+ self.baz();
+ Foo::bah(None::<*const isize>);
+ }
+}
+
+// If these fail, it's necessary to update rustc_resolve and the cfail tests.
+impl<'a> Foo for &'a isize {
+ fn bar(&self) {
+ self.baz();
+ Foo::bah(None::<&isize>);
+ }
+}
+
+// If these fail, it's necessary to update rustc_resolve and the cfail tests.
+impl<'a> Foo for &'a mut isize {
+ fn bar(&self) {
+ self.baz();
+ Foo::bah(None::<&mut isize>);
+ }
+}
+
+// If these fail, it's necessary to update rustc_resolve and the cfail tests.
+impl Foo for Box<isize> {
+ fn bar(&self) {
+ self.baz();
+ Foo::bah(None::<Box<isize>>);
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-14285.rs b/tests/ui/issues/issue-14285.rs
new file mode 100644
index 000000000..2ba9ff717
--- /dev/null
+++ b/tests/ui/issues/issue-14285.rs
@@ -0,0 +1,17 @@
+trait Foo {
+ fn dummy(&self) { }
+}
+
+struct A;
+
+impl Foo for A {}
+
+struct B<'a>(&'a (dyn Foo + 'a));
+
+fn foo<'a>(a: &dyn Foo) -> B<'a> {
+ B(a) //~ ERROR explicit lifetime required in the type of `a` [E0621]
+}
+
+fn main() {
+ let _test = foo(&A);
+}
diff --git a/tests/ui/issues/issue-14285.stderr b/tests/ui/issues/issue-14285.stderr
new file mode 100644
index 000000000..5c0706601
--- /dev/null
+++ b/tests/ui/issues/issue-14285.stderr
@@ -0,0 +1,11 @@
+error[E0621]: explicit lifetime required in the type of `a`
+ --> $DIR/issue-14285.rs:12:5
+ |
+LL | fn foo<'a>(a: &dyn Foo) -> B<'a> {
+ | -------- help: add explicit lifetime `'a` to the type of `a`: `&'a (dyn Foo + 'a)`
+LL | B(a)
+ | ^^^^ lifetime `'a` required
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0621`.
diff --git a/tests/ui/issues/issue-14308.rs b/tests/ui/issues/issue-14308.rs
new file mode 100644
index 000000000..e067bcdf3
--- /dev/null
+++ b/tests/ui/issues/issue-14308.rs
@@ -0,0 +1,15 @@
+// run-pass
+
+struct A(isize);
+
+fn main() {
+ let x = match A(3) {
+ A(..) => 1
+ };
+ assert_eq!(x, 1);
+ let x = match A(4) {
+ A(1) => 1,
+ A(..) => 2
+ };
+ assert_eq!(x, 2);
+}
diff --git a/tests/ui/issues/issue-14330.rs b/tests/ui/issues/issue-14330.rs
new file mode 100644
index 000000000..0844fc720
--- /dev/null
+++ b/tests/ui/issues/issue-14330.rs
@@ -0,0 +1,7 @@
+// check-pass
+#![allow(unused_imports)]
+// pretty-expanded FIXME #23616
+
+#[macro_use] extern crate std as std2;
+
+fn main() {}
diff --git a/tests/ui/issues/issue-14344.rs b/tests/ui/issues/issue-14344.rs
new file mode 100644
index 000000000..33b1df827
--- /dev/null
+++ b/tests/ui/issues/issue-14344.rs
@@ -0,0 +1,11 @@
+// run-pass
+// aux-build:issue-14344-1.rs
+// aux-build:issue-14344-2.rs
+
+extern crate issue_14344_1;
+extern crate issue_14344_2;
+
+fn main() {
+ issue_14344_1::foo();
+ issue_14344_2::bar();
+}
diff --git a/tests/ui/issues/issue-14366.rs b/tests/ui/issues/issue-14366.rs
new file mode 100644
index 000000000..bb338860d
--- /dev/null
+++ b/tests/ui/issues/issue-14366.rs
@@ -0,0 +1,4 @@
+fn main() {
+ let _x = "test" as &dyn (::std::any::Any);
+ //~^ ERROR the size for values of type
+}
diff --git a/tests/ui/issues/issue-14366.stderr b/tests/ui/issues/issue-14366.stderr
new file mode 100644
index 000000000..10a73b245
--- /dev/null
+++ b/tests/ui/issues/issue-14366.stderr
@@ -0,0 +1,16 @@
+error[E0277]: the size for values of type `str` cannot be known at compilation time
+ --> $DIR/issue-14366.rs:2:14
+ |
+LL | let _x = "test" as &dyn (::std::any::Any);
+ | ^^^^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `str`
+ = note: required for the cast from `str` to the object type `dyn Any`
+help: consider borrowing the value, since `&str` can be coerced into `dyn Any`
+ |
+LL | let _x = &"test" as &dyn (::std::any::Any);
+ | +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-14382.rs b/tests/ui/issues/issue-14382.rs
new file mode 100644
index 000000000..dca24d0be
--- /dev/null
+++ b/tests/ui/issues/issue-14382.rs
@@ -0,0 +1,15 @@
+// run-pass
+#[derive(Debug)]
+struct Matrix4<S>(#[allow(unused_tuple_struct_fields)] S);
+trait POrd<S> {}
+
+fn translate<S: POrd<S>>(s: S) -> Matrix4<S> { Matrix4(s) }
+
+impl POrd<f32> for f32 {}
+impl POrd<f64> for f64 {}
+
+fn main() {
+ let x = 1.0;
+ let m : Matrix4<f32> = translate(x);
+ println!("m: {:?}", m);
+}
diff --git a/tests/ui/issues/issue-14393.rs b/tests/ui/issues/issue-14393.rs
new file mode 100644
index 000000000..df635407a
--- /dev/null
+++ b/tests/ui/issues/issue-14393.rs
@@ -0,0 +1,10 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+fn main() {
+ match ("", 1_usize) {
+ (_, 42_usize) => (),
+ ("", _) => (),
+ _ => ()
+ }
+}
diff --git a/tests/ui/issues/issue-14399.rs b/tests/ui/issues/issue-14399.rs
new file mode 100644
index 000000000..7b32bf8e4
--- /dev/null
+++ b/tests/ui/issues/issue-14399.rs
@@ -0,0 +1,18 @@
+// run-pass
+// #14399
+// We'd previously ICE if we had a method call whose return
+// value was coerced to a trait object. (v.clone() returns Box<B1>
+// which is coerced to Box<A>).
+
+// pretty-expanded FIXME #23616
+
+#[derive(Clone)]
+struct B1;
+
+trait A { fn foo(&self) {} }
+impl A for B1 {}
+
+fn main() {
+ let v: Box<_> = Box::new(B1);
+ let _c: Box<dyn A> = v.clone();
+}
diff --git a/tests/ui/issues/issue-14421.rs b/tests/ui/issues/issue-14421.rs
new file mode 100644
index 000000000..c59bd8706
--- /dev/null
+++ b/tests/ui/issues/issue-14421.rs
@@ -0,0 +1,16 @@
+// run-pass
+#![allow(non_snake_case)]
+
+// aux-build:issue-14421.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_14421 as bug_lib;
+
+use bug_lib::B;
+use bug_lib::make;
+
+pub fn main() {
+ let mut an_A: B = make();
+ an_A.foo();
+}
diff --git a/tests/ui/issues/issue-14422.rs b/tests/ui/issues/issue-14422.rs
new file mode 100644
index 000000000..b9e2065d0
--- /dev/null
+++ b/tests/ui/issues/issue-14422.rs
@@ -0,0 +1,16 @@
+// run-pass
+#![allow(non_snake_case)]
+
+// aux-build:issue-14422.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_14422 as bug_lib;
+
+use bug_lib::B;
+use bug_lib::make;
+
+pub fn main() {
+ let mut an_A: B = make();
+ an_A.foo();
+}
diff --git a/tests/ui/issues/issue-1448-2.rs b/tests/ui/issues/issue-1448-2.rs
new file mode 100644
index 000000000..829e81b9c
--- /dev/null
+++ b/tests/ui/issues/issue-1448-2.rs
@@ -0,0 +1,7 @@
+// Regression test for issue #1448 and #1386
+
+fn foo(a: u32) -> u32 { a }
+
+fn main() {
+ println!("{}", foo(10i32)); //~ ERROR mismatched types
+}
diff --git a/tests/ui/issues/issue-1448-2.stderr b/tests/ui/issues/issue-1448-2.stderr
new file mode 100644
index 000000000..203dd92c9
--- /dev/null
+++ b/tests/ui/issues/issue-1448-2.stderr
@@ -0,0 +1,21 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-1448-2.rs:6:24
+ |
+LL | println!("{}", foo(10i32));
+ | --- ^^^^^ expected `u32`, found `i32`
+ | |
+ | arguments to this function are incorrect
+ |
+note: function defined here
+ --> $DIR/issue-1448-2.rs:3:4
+ |
+LL | fn foo(a: u32) -> u32 { a }
+ | ^^^ ------
+help: change the type of the numeric literal from `i32` to `u32`
+ |
+LL | println!("{}", foo(10u32));
+ | ~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-1451.rs b/tests/ui/issues/issue-1451.rs
new file mode 100644
index 000000000..ad8928b20
--- /dev/null
+++ b/tests/ui/issues/issue-1451.rs
@@ -0,0 +1,27 @@
+// run-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+#![allow(non_snake_case)]
+#![allow(unused_variables)]
+
+struct T { f: extern "Rust" fn() }
+struct S { f: extern "Rust" fn() }
+
+fn fooS(t: S) {
+}
+
+fn fooT(t: T) {
+}
+
+fn bar() {
+}
+
+pub fn main() {
+ let x: extern "Rust" fn() = bar;
+ fooS(S {f: x});
+ fooS(S {f: bar});
+
+ let x: extern "Rust" fn() = bar;
+ fooT(T {f: x});
+ fooT(T {f: bar});
+}
diff --git a/tests/ui/issues/issue-14541.rs b/tests/ui/issues/issue-14541.rs
new file mode 100644
index 000000000..555ec9f98
--- /dev/null
+++ b/tests/ui/issues/issue-14541.rs
@@ -0,0 +1,10 @@
+struct Vec2 { y: f32 }
+struct Vec3 { y: f32, z: f32 }
+
+fn make(v: Vec2) {
+ let Vec3 { y: _, z: _ } = v;
+ //~^ ERROR mismatched types
+ //~| expected struct `Vec2`, found struct `Vec3`
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-14541.stderr b/tests/ui/issues/issue-14541.stderr
new file mode 100644
index 000000000..cf155f428
--- /dev/null
+++ b/tests/ui/issues/issue-14541.stderr
@@ -0,0 +1,11 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-14541.rs:5:9
+ |
+LL | let Vec3 { y: _, z: _ } = v;
+ | ^^^^^^^^^^^^^^^^^^^ - this expression has type `Vec2`
+ | |
+ | expected struct `Vec2`, found struct `Vec3`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-1460.rs b/tests/ui/issues/issue-1460.rs
new file mode 100644
index 000000000..e663f7fd4
--- /dev/null
+++ b/tests/ui/issues/issue-1460.rs
@@ -0,0 +1,7 @@
+// run-pass
+
+// pretty-expanded FIXME #23616
+
+pub fn main() {
+ {|i: u32| if 1 == i { }}; //~ WARN unused closure that must be used
+}
diff --git a/tests/ui/issues/issue-1460.stderr b/tests/ui/issues/issue-1460.stderr
new file mode 100644
index 000000000..eb7661fad
--- /dev/null
+++ b/tests/ui/issues/issue-1460.stderr
@@ -0,0 +1,11 @@
+warning: unused closure that must be used
+ --> $DIR/issue-1460.rs:6:5
+ |
+LL | {|i: u32| if 1 == i { }};
+ | ^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: closures are lazy and do nothing unless called
+ = note: `#[warn(unused_must_use)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/issues/issue-14721.rs b/tests/ui/issues/issue-14721.rs
new file mode 100644
index 000000000..a5c47dd8c
--- /dev/null
+++ b/tests/ui/issues/issue-14721.rs
@@ -0,0 +1,4 @@
+fn main() {
+ let foo = "str";
+ println!("{}", foo.desc); //~ no field `desc` on type `&str`
+}
diff --git a/tests/ui/issues/issue-14721.stderr b/tests/ui/issues/issue-14721.stderr
new file mode 100644
index 000000000..49ebb2976
--- /dev/null
+++ b/tests/ui/issues/issue-14721.stderr
@@ -0,0 +1,9 @@
+error[E0609]: no field `desc` on type `&str`
+ --> $DIR/issue-14721.rs:3:24
+ |
+LL | println!("{}", foo.desc);
+ | ^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0609`.
diff --git a/tests/ui/issues/issue-1476.rs b/tests/ui/issues/issue-1476.rs
new file mode 100644
index 000000000..138570a93
--- /dev/null
+++ b/tests/ui/issues/issue-1476.rs
@@ -0,0 +1,3 @@
+fn main() {
+ println!("{}", x); //~ ERROR cannot find value `x` in this scope
+}
diff --git a/tests/ui/issues/issue-1476.stderr b/tests/ui/issues/issue-1476.stderr
new file mode 100644
index 000000000..670bd5463
--- /dev/null
+++ b/tests/ui/issues/issue-1476.stderr
@@ -0,0 +1,9 @@
+error[E0425]: cannot find value `x` in this scope
+ --> $DIR/issue-1476.rs:2:20
+ |
+LL | println!("{}", x);
+ | ^ not found in this scope
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0425`.
diff --git a/tests/ui/issues/issue-14821.rs b/tests/ui/issues/issue-14821.rs
new file mode 100644
index 000000000..00b2e3607
--- /dev/null
+++ b/tests/ui/issues/issue-14821.rs
@@ -0,0 +1,21 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(unused_variables)]
+trait SomeTrait {}
+struct Meow;
+impl SomeTrait for Meow {}
+
+struct Foo<'a> {
+ x: &'a dyn SomeTrait,
+ y: &'a dyn SomeTrait,
+}
+
+impl<'a> Foo<'a> {
+ pub fn new<'b>(x: &'b dyn SomeTrait, y: &'b dyn SomeTrait) -> Foo<'b> { Foo { x: x, y: y } }
+}
+
+fn main() {
+ let r = Meow;
+ let s = Meow;
+ let q = Foo::new(&r as &dyn SomeTrait, &s as &dyn SomeTrait);
+}
diff --git a/tests/ui/issues/issue-14845.rs b/tests/ui/issues/issue-14845.rs
new file mode 100644
index 000000000..d9b20e1f6
--- /dev/null
+++ b/tests/ui/issues/issue-14845.rs
@@ -0,0 +1,11 @@
+struct X {
+ a: [u8; 1]
+}
+
+fn main() {
+ let x = X { a: [0] };
+ let _f = &x.a as *mut u8; //~ ERROR casting
+
+ let local: [u8; 1] = [0];
+ let _v = &local as *mut u8; //~ ERROR casting
+}
diff --git a/tests/ui/issues/issue-14845.stderr b/tests/ui/issues/issue-14845.stderr
new file mode 100644
index 000000000..2fa9fbaa8
--- /dev/null
+++ b/tests/ui/issues/issue-14845.stderr
@@ -0,0 +1,15 @@
+error[E0606]: casting `&[u8; 1]` as `*mut u8` is invalid
+ --> $DIR/issue-14845.rs:7:14
+ |
+LL | let _f = &x.a as *mut u8;
+ | ^^^^^^^^^^^^^^^
+
+error[E0606]: casting `&[u8; 1]` as `*mut u8` is invalid
+ --> $DIR/issue-14845.rs:10:14
+ |
+LL | let _v = &local as *mut u8;
+ | ^^^^^^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0606`.
diff --git a/tests/ui/issues/issue-14853.rs b/tests/ui/issues/issue-14853.rs
new file mode 100644
index 000000000..4ce6e3174
--- /dev/null
+++ b/tests/ui/issues/issue-14853.rs
@@ -0,0 +1,20 @@
+use std::fmt::Debug;
+
+trait Str {}
+
+trait Something: Sized {
+ fn yay<T: Debug>(_: Option<Self>, thing: &[T]);
+}
+
+struct X { data: u32 }
+
+impl Something for X {
+ fn yay<T: Str>(_:Option<X>, thing: &[T]) {
+ //~^ ERROR E0276
+ }
+}
+
+fn main() {
+ let arr = &["one", "two", "three"];
+ println!("{:?}", Something::yay(None::<X>, arr));
+}
diff --git a/tests/ui/issues/issue-14853.stderr b/tests/ui/issues/issue-14853.stderr
new file mode 100644
index 000000000..2adcf55ec
--- /dev/null
+++ b/tests/ui/issues/issue-14853.stderr
@@ -0,0 +1,12 @@
+error[E0276]: impl has stricter requirements than trait
+ --> $DIR/issue-14853.rs:12:15
+ |
+LL | fn yay<T: Debug>(_: Option<Self>, thing: &[T]);
+ | ----------------------------------------------- definition of `yay` from trait
+...
+LL | fn yay<T: Str>(_:Option<X>, thing: &[T]) {
+ | ^^^ impl has extra requirement `T: Str`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0276`.
diff --git a/tests/ui/issues/issue-14865.rs b/tests/ui/issues/issue-14865.rs
new file mode 100644
index 000000000..56e78e78f
--- /dev/null
+++ b/tests/ui/issues/issue-14865.rs
@@ -0,0 +1,23 @@
+// run-pass
+#![allow(dead_code)]
+
+enum X {
+ Foo(usize),
+ Bar(bool)
+}
+
+fn main() {
+ let x = match X::Foo(42) {
+ X::Foo(..) => 1,
+ _ if true => 0,
+ X::Bar(..) => panic!("Oh dear")
+ };
+ assert_eq!(x, 1);
+
+ let x = match X::Foo(42) {
+ _ if true => 0,
+ X::Foo(..) => 1,
+ X::Bar(..) => panic!("Oh dear")
+ };
+ assert_eq!(x, 0);
+}
diff --git a/tests/ui/issues/issue-14875.rs b/tests/ui/issues/issue-14875.rs
new file mode 100644
index 000000000..fca330915
--- /dev/null
+++ b/tests/ui/issues/issue-14875.rs
@@ -0,0 +1,35 @@
+// run-pass
+// needs-unwind
+
+// Check that values are not leaked when a dtor panics (#14875)
+
+use std::panic::{self, UnwindSafe};
+
+struct SetInnerOnDrop<'a>(&'a mut bool);
+
+impl<'a> UnwindSafe for SetInnerOnDrop<'a> {}
+
+impl<'a> Drop for SetInnerOnDrop<'a> {
+ fn drop(&mut self) {
+ *self.0 = true;
+ }
+}
+
+struct PanicOnDrop;
+impl Drop for PanicOnDrop {
+ fn drop(&mut self) {
+ panic!("test panic");
+ }
+}
+
+fn main() {
+ let mut set_on_drop = false;
+ {
+ let set_inner_on_drop = SetInnerOnDrop(&mut set_on_drop);
+ let _ = panic::catch_unwind(|| {
+ let _set_inner_on_drop = set_inner_on_drop;
+ let _panic_on_drop = PanicOnDrop;
+ });
+ }
+ assert!(set_on_drop);
+}
diff --git a/tests/ui/issues/issue-14901.rs b/tests/ui/issues/issue-14901.rs
new file mode 100644
index 000000000..5319abbdf
--- /dev/null
+++ b/tests/ui/issues/issue-14901.rs
@@ -0,0 +1,18 @@
+// check-pass
+pub trait Reader {}
+
+enum Wrapper<'a> {
+ WrapReader(&'a (dyn Reader + 'a))
+}
+
+trait Wrap<'a> {
+ fn wrap(self) -> Wrapper<'a>;
+}
+
+impl<'a, R: Reader> Wrap<'a> for &'a mut R {
+ fn wrap(self) -> Wrapper<'a> {
+ Wrapper::WrapReader(self as &'a mut dyn Reader)
+ }
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-14915.rs b/tests/ui/issues/issue-14915.rs
new file mode 100644
index 000000000..127b909dd
--- /dev/null
+++ b/tests/ui/issues/issue-14915.rs
@@ -0,0 +1,6 @@
+fn main() {
+ let x: Box<isize> = Box::new(0);
+
+ println!("{}", x + 1);
+ //~^ ERROR cannot add `{integer}` to `Box<isize>`
+}
diff --git a/tests/ui/issues/issue-14915.stderr b/tests/ui/issues/issue-14915.stderr
new file mode 100644
index 000000000..6e6326929
--- /dev/null
+++ b/tests/ui/issues/issue-14915.stderr
@@ -0,0 +1,11 @@
+error[E0369]: cannot add `{integer}` to `Box<isize>`
+ --> $DIR/issue-14915.rs:4:22
+ |
+LL | println!("{}", x + 1);
+ | - ^ - {integer}
+ | |
+ | Box<isize>
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0369`.
diff --git a/tests/ui/issues/issue-14919.rs b/tests/ui/issues/issue-14919.rs
new file mode 100644
index 000000000..943615433
--- /dev/null
+++ b/tests/ui/issues/issue-14919.rs
@@ -0,0 +1,55 @@
+// run-pass
+#![allow(unused_must_use)]
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+trait Matcher {
+ fn next_match(&mut self) -> Option<(usize, usize)>;
+}
+
+struct CharPredMatcher<'a, 'b> {
+ str: &'a str,
+ pred: Box<dyn FnMut(char) -> bool + 'b>,
+}
+
+impl<'a, 'b> Matcher for CharPredMatcher<'a, 'b> {
+ fn next_match(&mut self) -> Option<(usize, usize)> {
+ None
+ }
+}
+
+trait IntoMatcher<'a, T> {
+ fn into_matcher(self, _: &'a str) -> T;
+}
+
+impl<'a, 'b, F> IntoMatcher<'a, CharPredMatcher<'a, 'b>> for F where F: FnMut(char) -> bool + 'b {
+ fn into_matcher(self, s: &'a str) -> CharPredMatcher<'a, 'b> {
+ CharPredMatcher {
+ str: s,
+ pred: Box::new(self),
+ }
+ }
+}
+
+struct MatchIndices<M> {
+ matcher: M
+}
+
+impl<M: Matcher> Iterator for MatchIndices<M> {
+ type Item = (usize, usize);
+
+ fn next(&mut self) -> Option<(usize, usize)> {
+ self.matcher.next_match()
+ }
+}
+
+fn match_indices<'a, M, T: IntoMatcher<'a, M>>(s: &'a str, from: T) -> MatchIndices<M> {
+ let string_matcher = from.into_matcher(s);
+ MatchIndices { matcher: string_matcher }
+}
+
+fn main() {
+ let s = "abcbdef";
+ match_indices(s, |c: char| c == 'b')
+ .collect::<Vec<_>>();
+}
diff --git a/tests/ui/issues/issue-14959.rs b/tests/ui/issues/issue-14959.rs
new file mode 100644
index 000000000..e31a94315
--- /dev/null
+++ b/tests/ui/issues/issue-14959.rs
@@ -0,0 +1,55 @@
+// check-pass
+// pretty-expanded FIXME #23616
+
+#![feature(fn_traits, unboxed_closures)]
+
+use std::ops::Fn;
+
+trait Response { fn dummy(&self) { } }
+trait Request { fn dummy(&self) { } }
+trait Ingot<R, S> {
+ fn enter(&mut self, _: &mut R, _: &mut S, a: &mut Alloy) -> Status;
+}
+
+#[allow(dead_code)]
+struct HelloWorld;
+
+struct SendFile;
+struct Alloy;
+enum Status {
+ Continue
+}
+
+impl Alloy {
+ fn find<T>(&self) -> Option<T> {
+ None
+ }
+}
+
+impl<'b> Fn<(&'b mut (dyn Response + 'b),)> for SendFile {
+ extern "rust-call" fn call(&self, (_res,): (&'b mut (dyn Response + 'b),)) {}
+}
+
+impl<'b> FnMut<(&'b mut (dyn Response + 'b),)> for SendFile {
+ extern "rust-call" fn call_mut(&mut self, (_res,): (&'b mut (dyn Response+'b),)) {
+ self.call((_res,))
+ }
+}
+
+impl<'b> FnOnce<(&'b mut (dyn Response + 'b),)> for SendFile {
+ type Output = ();
+
+ extern "rust-call" fn call_once(self, (_res,): (&'b mut (dyn Response+'b),)) {
+ self.call((_res,))
+ }
+}
+
+impl<Rq: Request, Rs: Response> Ingot<Rq, Rs> for HelloWorld {
+ fn enter(&mut self, _req: &mut Rq, res: &mut Rs, alloy: &mut Alloy) -> Status {
+ let send_file = alloy.find::<SendFile>().unwrap();
+ send_file(res);
+ Status::Continue
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-15034.rs b/tests/ui/issues/issue-15034.rs
new file mode 100644
index 000000000..9ea6ed89c
--- /dev/null
+++ b/tests/ui/issues/issue-15034.rs
@@ -0,0 +1,22 @@
+pub struct Lexer<'a> {
+ input: &'a str,
+}
+
+impl<'a> Lexer<'a> {
+ pub fn new(input: &'a str) -> Lexer<'a> {
+ Lexer { input: input }
+ }
+}
+
+struct Parser<'a> {
+ lexer: &'a mut Lexer<'a>,
+}
+
+impl<'a> Parser<'a> {
+ pub fn new(lexer: &'a mut Lexer) -> Parser<'a> {
+ Parser { lexer: lexer }
+ //~^ ERROR explicit lifetime required in the type of `lexer` [E0621]
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-15034.stderr b/tests/ui/issues/issue-15034.stderr
new file mode 100644
index 000000000..f142e260a
--- /dev/null
+++ b/tests/ui/issues/issue-15034.stderr
@@ -0,0 +1,11 @@
+error[E0621]: explicit lifetime required in the type of `lexer`
+ --> $DIR/issue-15034.rs:17:9
+ |
+LL | pub fn new(lexer: &'a mut Lexer) -> Parser<'a> {
+ | ------------- help: add explicit lifetime `'a` to the type of `lexer`: `&'a mut Lexer<'a>`
+LL | Parser { lexer: lexer }
+ | ^^^^^^^^^^^^^^^^^^^^^^^ lifetime `'a` required
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0621`.
diff --git a/tests/ui/issues/issue-15043.rs b/tests/ui/issues/issue-15043.rs
new file mode 100644
index 000000000..53748be8a
--- /dev/null
+++ b/tests/ui/issues/issue-15043.rs
@@ -0,0 +1,14 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+#![allow(warnings)]
+
+struct S<T>(T);
+
+static s1: S<S<usize>>=S(S(0));
+static s2: S<usize>=S(0);
+
+fn main() {
+ let foo: S<S<usize>>=S(S(0));
+ let foo: S<usize>=S(0);
+}
diff --git a/tests/ui/issues/issue-15063.rs b/tests/ui/issues/issue-15063.rs
new file mode 100644
index 000000000..408267512
--- /dev/null
+++ b/tests/ui/issues/issue-15063.rs
@@ -0,0 +1,12 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(unused_variables)]
+enum Two { A, B}
+impl Drop for Two {
+ fn drop(&mut self) {
+ println!("Dropping!");
+ }
+}
+fn main() {
+ let k = Two::A;
+}
diff --git a/tests/ui/issues/issue-15094.rs b/tests/ui/issues/issue-15094.rs
new file mode 100644
index 000000000..cb27e2bcf
--- /dev/null
+++ b/tests/ui/issues/issue-15094.rs
@@ -0,0 +1,26 @@
+#![feature(fn_traits, unboxed_closures)]
+
+use std::{fmt, ops};
+
+struct Debuger<T> {
+ x: T
+}
+
+impl<T: fmt::Debug> ops::FnOnce<(),> for Debuger<T> {
+ type Output = ();
+ fn call_once(self, _args: ()) {
+ //~^ ERROR `call_once` has an incompatible type for trait
+ //~| expected signature `extern "rust-call" fn
+ //~| found signature `fn
+ println!("{:?}", self.x);
+ }
+}
+
+fn make_shower<T>(x: T) -> Debuger<T> {
+ Debuger { x: x }
+}
+
+pub fn main() {
+ let show3 = make_shower(3);
+ show3();
+}
diff --git a/tests/ui/issues/issue-15094.stderr b/tests/ui/issues/issue-15094.stderr
new file mode 100644
index 000000000..b7c950892
--- /dev/null
+++ b/tests/ui/issues/issue-15094.stderr
@@ -0,0 +1,12 @@
+error[E0053]: method `call_once` has an incompatible type for trait
+ --> $DIR/issue-15094.rs:11:5
+ |
+LL | fn call_once(self, _args: ()) {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected "rust-call" fn, found "Rust" fn
+ |
+ = note: expected signature `extern "rust-call" fn(Debuger<_>, ())`
+ found signature `fn(Debuger<_>, ())`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0053`.
diff --git a/tests/ui/issues/issue-15104.rs b/tests/ui/issues/issue-15104.rs
new file mode 100644
index 000000000..47b207ea9
--- /dev/null
+++ b/tests/ui/issues/issue-15104.rs
@@ -0,0 +1,13 @@
+// run-pass
+
+fn main() {
+ assert_eq!(count_members(&[1, 2, 3, 4]), 4);
+}
+
+fn count_members(v: &[usize]) -> usize {
+ match *v {
+ [] => 0,
+ [_] => 1,
+ [_, ref xs @ ..] => 1 + count_members(xs)
+ }
+}
diff --git a/tests/ui/issues/issue-15129-rpass.rs b/tests/ui/issues/issue-15129-rpass.rs
new file mode 100644
index 000000000..522d0209c
--- /dev/null
+++ b/tests/ui/issues/issue-15129-rpass.rs
@@ -0,0 +1,25 @@
+// run-pass
+
+pub enum T {
+ T1(()),
+ T2(())
+}
+
+pub enum V {
+ V1(isize),
+ V2(bool)
+}
+
+fn foo(x: (T, V)) -> String {
+ match x {
+ (T::T1(()), V::V1(i)) => format!("T1(()), V1({})", i),
+ (T::T2(()), V::V2(b)) => format!("T2(()), V2({})", b),
+ _ => String::new()
+ }
+}
+
+
+fn main() {
+ assert_eq!(foo((T::T1(()), V::V1(99))), "T1(()), V1(99)".to_string());
+ assert_eq!(foo((T::T2(()), V::V2(true))), "T2(()), V2(true)".to_string());
+}
diff --git a/tests/ui/issues/issue-15155.rs b/tests/ui/issues/issue-15155.rs
new file mode 100644
index 000000000..7b137b4af
--- /dev/null
+++ b/tests/ui/issues/issue-15155.rs
@@ -0,0 +1,21 @@
+// run-pass
+trait TraitWithSend: Send {}
+trait IndirectTraitWithSend: TraitWithSend {}
+
+// Check struct instantiation (Box<TraitWithSend> will only have Send if TraitWithSend has Send)
+#[allow(dead_code)]
+struct Blah { x: Box<dyn TraitWithSend> }
+impl TraitWithSend for Blah {}
+
+// Struct instantiation 2-levels deep
+#[allow(dead_code)]
+struct IndirectBlah { x: Box<dyn IndirectTraitWithSend> }
+impl TraitWithSend for IndirectBlah {}
+impl IndirectTraitWithSend for IndirectBlah {}
+
+fn test_trait<T: Send + ?Sized>() { println!("got here!") }
+
+fn main() {
+ test_trait::<dyn TraitWithSend>();
+ test_trait::<dyn IndirectTraitWithSend>();
+}
diff --git a/tests/ui/issues/issue-15167.rs b/tests/ui/issues/issue-15167.rs
new file mode 100644
index 000000000..a2653c10e
--- /dev/null
+++ b/tests/ui/issues/issue-15167.rs
@@ -0,0 +1,26 @@
+// macro f should not be able to inject a reference to 'n'.
+
+macro_rules! f { () => (n) }
+//~^ ERROR cannot find value `n` in this scope
+//~| ERROR cannot find value `n` in this scope
+//~| ERROR cannot find value `n` in this scope
+//~| ERROR cannot find value `n` in this scope
+
+fn main() -> (){
+ for n in 0..1 {
+ println!("{}", f!());
+ }
+
+ if let Some(n) = None {
+ println!("{}", f!());
+ }
+
+ if false {
+ } else if let Some(n) = None {
+ println!("{}", f!());
+ }
+
+ while let Some(n) = None {
+ println!("{}", f!());
+ }
+}
diff --git a/tests/ui/issues/issue-15167.stderr b/tests/ui/issues/issue-15167.stderr
new file mode 100644
index 000000000..53082ea0e
--- /dev/null
+++ b/tests/ui/issues/issue-15167.stderr
@@ -0,0 +1,47 @@
+error[E0425]: cannot find value `n` in this scope
+ --> $DIR/issue-15167.rs:3:25
+ |
+LL | macro_rules! f { () => (n) }
+ | ^ not found in this scope
+...
+LL | println!("{}", f!());
+ | ---- in this macro invocation
+ |
+ = note: this error originates in the macro `f` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0425]: cannot find value `n` in this scope
+ --> $DIR/issue-15167.rs:3:25
+ |
+LL | macro_rules! f { () => (n) }
+ | ^ not found in this scope
+...
+LL | println!("{}", f!());
+ | ---- in this macro invocation
+ |
+ = note: this error originates in the macro `f` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0425]: cannot find value `n` in this scope
+ --> $DIR/issue-15167.rs:3:25
+ |
+LL | macro_rules! f { () => (n) }
+ | ^ not found in this scope
+...
+LL | println!("{}", f!());
+ | ---- in this macro invocation
+ |
+ = note: this error originates in the macro `f` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0425]: cannot find value `n` in this scope
+ --> $DIR/issue-15167.rs:3:25
+ |
+LL | macro_rules! f { () => (n) }
+ | ^ not found in this scope
+...
+LL | println!("{}", f!());
+ | ---- in this macro invocation
+ |
+ = note: this error originates in the macro `f` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0425`.
diff --git a/tests/ui/issues/issue-15189.rs b/tests/ui/issues/issue-15189.rs
new file mode 100644
index 000000000..a9c884bdc
--- /dev/null
+++ b/tests/ui/issues/issue-15189.rs
@@ -0,0 +1,10 @@
+// run-pass
+macro_rules! third {
+ ($e:expr) => ({let x = 2; $e[x]})
+}
+
+fn main() {
+ let x = vec![10_usize,11_usize,12_usize,13_usize];
+ let t = third!(x);
+ assert_eq!(t,12_usize);
+}
diff --git a/tests/ui/issues/issue-15207.rs b/tests/ui/issues/issue-15207.rs
new file mode 100644
index 000000000..356e55ac9
--- /dev/null
+++ b/tests/ui/issues/issue-15207.rs
@@ -0,0 +1,6 @@
+fn main() {
+ loop {
+ break.push(1) //~ ERROR no method named `push` found for type `!`
+ ;
+ }
+}
diff --git a/tests/ui/issues/issue-15207.stderr b/tests/ui/issues/issue-15207.stderr
new file mode 100644
index 000000000..25ce7cb5c
--- /dev/null
+++ b/tests/ui/issues/issue-15207.stderr
@@ -0,0 +1,9 @@
+error[E0599]: no method named `push` found for type `!` in the current scope
+ --> $DIR/issue-15207.rs:3:15
+ |
+LL | break.push(1)
+ | ^^^^ method not found in `!`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-15260.rs b/tests/ui/issues/issue-15260.rs
new file mode 100644
index 000000000..64fc3df3d
--- /dev/null
+++ b/tests/ui/issues/issue-15260.rs
@@ -0,0 +1,25 @@
+struct Foo {
+ a: usize,
+}
+
+fn main() {
+ let Foo {
+ a: _,
+ a: _
+ //~^ ERROR field `a` bound multiple times in the pattern
+ } = Foo { a: 29 };
+
+ let Foo {
+ a,
+ a: _
+ //~^ ERROR field `a` bound multiple times in the pattern
+ } = Foo { a: 29 };
+
+ let Foo {
+ a,
+ a: _,
+ //~^ ERROR field `a` bound multiple times in the pattern
+ a: x
+ //~^ ERROR field `a` bound multiple times in the pattern
+ } = Foo { a: 29 };
+}
diff --git a/tests/ui/issues/issue-15260.stderr b/tests/ui/issues/issue-15260.stderr
new file mode 100644
index 000000000..4a3041122
--- /dev/null
+++ b/tests/ui/issues/issue-15260.stderr
@@ -0,0 +1,36 @@
+error[E0025]: field `a` bound multiple times in the pattern
+ --> $DIR/issue-15260.rs:8:9
+ |
+LL | a: _,
+ | ---- first use of `a`
+LL | a: _
+ | ^^^^ multiple uses of `a` in pattern
+
+error[E0025]: field `a` bound multiple times in the pattern
+ --> $DIR/issue-15260.rs:14:9
+ |
+LL | a,
+ | - first use of `a`
+LL | a: _
+ | ^^^^ multiple uses of `a` in pattern
+
+error[E0025]: field `a` bound multiple times in the pattern
+ --> $DIR/issue-15260.rs:20:9
+ |
+LL | a,
+ | - first use of `a`
+LL | a: _,
+ | ^^^^ multiple uses of `a` in pattern
+
+error[E0025]: field `a` bound multiple times in the pattern
+ --> $DIR/issue-15260.rs:22:9
+ |
+LL | a,
+ | - first use of `a`
+...
+LL | a: x
+ | ^^^^ multiple uses of `a` in pattern
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0025`.
diff --git a/tests/ui/issues/issue-15381.rs b/tests/ui/issues/issue-15381.rs
new file mode 100644
index 000000000..23b266bef
--- /dev/null
+++ b/tests/ui/issues/issue-15381.rs
@@ -0,0 +1,9 @@
+fn main() {
+ let values: Vec<u8> = vec![1,2,3,4,5,6,7,8];
+
+ for &[x,y,z] in values.chunks(3).filter(|&xs| xs.len() == 3) {
+ //~^ ERROR refutable pattern in `for` loop binding
+ //~| patterns `&[]`, `&[_]`, `&[_, _]` and 1 more not covered
+ println!("y={}", y);
+ }
+}
diff --git a/tests/ui/issues/issue-15381.stderr b/tests/ui/issues/issue-15381.stderr
new file mode 100644
index 000000000..085958411
--- /dev/null
+++ b/tests/ui/issues/issue-15381.stderr
@@ -0,0 +1,11 @@
+error[E0005]: refutable pattern in `for` loop binding
+ --> $DIR/issue-15381.rs:4:9
+ |
+LL | for &[x,y,z] in values.chunks(3).filter(|&xs| xs.len() == 3) {
+ | ^^^^^^^^ patterns `&[]`, `&[_]`, `&[_, _]` and 1 more not covered
+ |
+ = note: the matched value is of type `&[u8]`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0005`.
diff --git a/tests/ui/issues/issue-15444.rs b/tests/ui/issues/issue-15444.rs
new file mode 100644
index 000000000..e94afee96
--- /dev/null
+++ b/tests/ui/issues/issue-15444.rs
@@ -0,0 +1,23 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+trait MyTrait {
+ fn foo(&self);
+}
+
+impl<A, B, C> MyTrait for fn(A, B) -> C {
+ fn foo(&self) {}
+}
+
+fn bar<T: MyTrait>(t: &T) {
+ t.foo()
+}
+
+fn thing(a: isize, b: isize) -> isize {
+ a + b
+}
+
+fn main() {
+ let thing: fn(isize, isize) -> isize = thing; // coerce to fn type
+ bar(&thing);
+}
diff --git a/tests/ui/issues/issue-15523-big.rs b/tests/ui/issues/issue-15523-big.rs
new file mode 100644
index 000000000..05414f1db
--- /dev/null
+++ b/tests/ui/issues/issue-15523-big.rs
@@ -0,0 +1,39 @@
+// run-pass
+// Issue 15523: derive(PartialOrd) should use the provided
+// discriminant values for the derived ordering.
+//
+// This test is checking corner cases that arise when you have
+// 64-bit values in the variants.
+
+#[derive(PartialEq, PartialOrd)]
+#[repr(u64)]
+enum Eu64 {
+ Pos2 = 2,
+ PosMax = !0,
+ Pos1 = 1,
+}
+
+#[derive(PartialEq, PartialOrd)]
+#[repr(i64)]
+enum Ei64 {
+ Pos2 = 2,
+ Neg1 = -1,
+ NegMin = 1 << 63,
+ PosMax = !(1 << 63),
+ Pos1 = 1,
+}
+
+fn main() {
+ assert!(Eu64::Pos2 > Eu64::Pos1);
+ assert!(Eu64::Pos2 < Eu64::PosMax);
+ assert!(Eu64::Pos1 < Eu64::PosMax);
+
+
+ assert!(Ei64::Pos2 > Ei64::Pos1);
+ assert!(Ei64::Pos2 > Ei64::Neg1);
+ assert!(Ei64::Pos1 > Ei64::Neg1);
+ assert!(Ei64::Pos2 > Ei64::NegMin);
+ assert!(Ei64::Pos1 > Ei64::NegMin);
+ assert!(Ei64::Pos2 < Ei64::PosMax);
+ assert!(Ei64::Pos1 < Ei64::PosMax);
+}
diff --git a/tests/ui/issues/issue-15523.rs b/tests/ui/issues/issue-15523.rs
new file mode 100644
index 000000000..220a34b9b
--- /dev/null
+++ b/tests/ui/issues/issue-15523.rs
@@ -0,0 +1,42 @@
+// run-pass
+// Issue 15523: derive(PartialOrd) should use the provided
+// discriminant values for the derived ordering.
+//
+// This is checking the basic functionality.
+
+#[derive(PartialEq, PartialOrd)]
+enum E1 {
+ Pos2 = 2,
+ Neg1 = -1,
+ Pos1 = 1,
+}
+
+#[derive(PartialEq, PartialOrd)]
+#[repr(u8)]
+enum E2 {
+ Pos2 = 2,
+ PosMax = !0 as u8,
+ Pos1 = 1,
+}
+
+#[derive(PartialEq, PartialOrd)]
+#[repr(i8)]
+enum E3 {
+ Pos2 = 2,
+ Neg1 = -1_i8,
+ Pos1 = 1,
+}
+
+fn main() {
+ assert!(E1::Pos2 > E1::Pos1);
+ assert!(E1::Pos1 > E1::Neg1);
+ assert!(E1::Pos2 > E1::Neg1);
+
+ assert!(E2::Pos2 > E2::Pos1);
+ assert!(E2::Pos1 < E2::PosMax);
+ assert!(E2::Pos2 < E2::PosMax);
+
+ assert!(E3::Pos2 > E3::Pos1);
+ assert!(E3::Pos1 > E3::Neg1);
+ assert!(E3::Pos2 > E3::Neg1);
+}
diff --git a/tests/ui/issues/issue-15562.rs b/tests/ui/issues/issue-15562.rs
new file mode 100644
index 000000000..dc0ecd365
--- /dev/null
+++ b/tests/ui/issues/issue-15562.rs
@@ -0,0 +1,19 @@
+// run-pass
+// aux-build:issue-15562.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_15562 as i;
+
+pub fn main() {
+ unsafe {
+ transmute();
+ i::transmute();
+ }
+}
+
+// We declare this so we don't run into unresolved symbol errors
+// The above extern is NOT `extern "rust-intrinsic"` and thus
+// means it'll try to find a corresponding symbol to link to.
+#[no_mangle]
+pub extern "C" fn transmute() {}
diff --git a/tests/ui/issues/issue-15571.rs b/tests/ui/issues/issue-15571.rs
new file mode 100644
index 000000000..5f228b286
--- /dev/null
+++ b/tests/ui/issues/issue-15571.rs
@@ -0,0 +1,57 @@
+// run-pass
+
+fn match_on_local() {
+ let mut foo: Option<Box<_>> = Some(Box::new(5));
+ match foo {
+ None => {},
+ Some(x) => {
+ foo = Some(x);
+ }
+ }
+ println!("'{}'", foo.unwrap());
+}
+
+fn match_on_arg(mut foo: Option<Box<i32>>) {
+ match foo {
+ None => {}
+ Some(x) => {
+ foo = Some(x);
+ }
+ }
+ println!("'{}'", foo.unwrap());
+}
+
+fn match_on_binding() {
+ match Some(Box::new(7)) {
+ mut foo => {
+ match foo {
+ None => {},
+ Some(x) => {
+ foo = Some(x);
+ }
+ }
+ println!("'{}'", foo.unwrap());
+ }
+ }
+}
+
+fn match_on_upvar() {
+ let mut foo: Option<Box<_>> = Some(Box::new(8));
+ let f = move|| {
+ match foo {
+ None => {},
+ Some(x) => {
+ foo = Some(x);
+ }
+ }
+ println!("'{}'", foo.unwrap());
+ };
+ f();
+}
+
+fn main() {
+ match_on_local();
+ match_on_arg(Some(Box::new(6)));
+ match_on_binding();
+ match_on_upvar();
+}
diff --git a/tests/ui/issues/issue-15673.rs b/tests/ui/issues/issue-15673.rs
new file mode 100644
index 000000000..a8733d7f1
--- /dev/null
+++ b/tests/ui/issues/issue-15673.rs
@@ -0,0 +1,9 @@
+// run-pass
+#![allow(stable_features)]
+
+#![feature(iter_arith)]
+
+fn main() {
+ let x: [u64; 3] = [1, 2, 3];
+ assert_eq!(6, (0..3).map(|i| x[i]).sum::<u64>());
+}
diff --git a/tests/ui/issues/issue-15689-1.rs b/tests/ui/issues/issue-15689-1.rs
new file mode 100644
index 000000000..d143926b2
--- /dev/null
+++ b/tests/ui/issues/issue-15689-1.rs
@@ -0,0 +1,10 @@
+// run-pass
+
+#[derive(PartialEq, Debug)]
+enum Test<'a> {
+ Slice(&'a isize)
+}
+
+fn main() {
+ assert_eq!(Test::Slice(&1), Test::Slice(&1))
+}
diff --git a/tests/ui/issues/issue-15689-2.rs b/tests/ui/issues/issue-15689-2.rs
new file mode 100644
index 000000000..83dcb1406
--- /dev/null
+++ b/tests/ui/issues/issue-15689-2.rs
@@ -0,0 +1,10 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+#[derive(Clone)]
+enum Test<'a> {
+ Slice(&'a isize)
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-15734.rs b/tests/ui/issues/issue-15734.rs
new file mode 100644
index 000000000..be5820606
--- /dev/null
+++ b/tests/ui/issues/issue-15734.rs
@@ -0,0 +1,58 @@
+// run-pass
+// If `Index` used an associated type for its output, this test would
+// work more smoothly.
+
+use std::ops::Index;
+
+struct Mat<T> { data: Vec<T>, cols: usize, }
+
+impl<T> Mat<T> {
+ fn new(data: Vec<T>, cols: usize) -> Mat<T> {
+ Mat { data: data, cols: cols }
+ }
+ fn row<'a>(&'a self, row: usize) -> Row<&'a Mat<T>> {
+ Row { mat: self, row: row, }
+ }
+}
+
+impl<T> Index<(usize, usize)> for Mat<T> {
+ type Output = T;
+
+ fn index<'a>(&'a self, (row, col): (usize, usize)) -> &'a T {
+ &self.data[row * self.cols + col]
+ }
+}
+
+impl<'a, T> Index<(usize, usize)> for &'a Mat<T> {
+ type Output = T;
+
+ fn index<'b>(&'b self, index: (usize, usize)) -> &'b T {
+ (*self).index(index)
+ }
+}
+
+struct Row<M> { mat: M, row: usize, }
+
+impl<T, M: Index<(usize, usize), Output=T>> Index<usize> for Row<M> {
+ type Output = T;
+
+ fn index<'a>(&'a self, col: usize) -> &'a T {
+ &self.mat[(self.row, col)]
+ }
+}
+
+fn main() {
+ let m = Mat::new(vec![1, 2, 3, 4, 5, 6], 3);
+ let r = m.row(1);
+
+ assert_eq!(r.index(2), &6);
+ assert_eq!(r[2], 6);
+ assert_eq!(r[2], 6);
+ assert_eq!(6, r[2]);
+
+ let e = r[2];
+ assert_eq!(e, 6);
+
+ let e: usize = r[2];
+ assert_eq!(e, 6);
+}
diff --git a/tests/ui/issues/issue-15735.rs b/tests/ui/issues/issue-15735.rs
new file mode 100644
index 000000000..f9ba34405
--- /dev/null
+++ b/tests/ui/issues/issue-15735.rs
@@ -0,0 +1,17 @@
+// check-pass
+#![allow(dead_code)]
+struct A<'a> {
+ a: &'a i32,
+ b: &'a i32,
+}
+
+impl <'a> A<'a> {
+ fn foo<'b>(&'b self) {
+ A {
+ a: self.a,
+ b: self.b,
+ };
+ }
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-15756.rs b/tests/ui/issues/issue-15756.rs
new file mode 100644
index 000000000..e0861dee6
--- /dev/null
+++ b/tests/ui/issues/issue-15756.rs
@@ -0,0 +1,14 @@
+use std::slice::Chunks;
+use std::slice::ChunksMut;
+
+fn dft_iter<'a, T>(arg1: Chunks<'a,T>, arg2: ChunksMut<'a,T>)
+{
+ for
+ &mut something
+ //~^ ERROR the size for values of type
+ in arg2
+ {
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-15756.stderr b/tests/ui/issues/issue-15756.stderr
new file mode 100644
index 000000000..d9bdc69ad
--- /dev/null
+++ b/tests/ui/issues/issue-15756.stderr
@@ -0,0 +1,13 @@
+error[E0277]: the size for values of type `[T]` cannot be known at compilation time
+ --> $DIR/issue-15756.rs:7:10
+ |
+LL | &mut something
+ | ^^^^^^^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `[T]`
+ = note: all local variables must have a statically known size
+ = help: unsized locals are gated as an unstable feature
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-15763.rs b/tests/ui/issues/issue-15763.rs
new file mode 100644
index 000000000..ae0863615
--- /dev/null
+++ b/tests/ui/issues/issue-15763.rs
@@ -0,0 +1,88 @@
+// run-pass
+#![allow(unreachable_code)]
+
+#[derive(PartialEq, Debug)]
+struct Bar {
+ x: isize
+}
+impl Drop for Bar {
+ fn drop(&mut self) {
+ assert_eq!(self.x, 22);
+ }
+}
+
+#[derive(PartialEq, Debug)]
+struct Foo {
+ x: Bar,
+ a: isize
+}
+
+fn foo() -> Result<Foo, isize> {
+ return Ok(Foo {
+ x: Bar { x: 22 },
+ a: return Err(32)
+ });
+}
+
+fn baz() -> Result<Foo, isize> {
+ Ok(Foo {
+ x: Bar { x: 22 },
+ a: return Err(32)
+ })
+}
+
+// explicit immediate return
+fn aa() -> isize {
+ return 3;
+}
+
+// implicit immediate return
+fn bb() -> isize {
+ 3
+}
+
+// implicit outptr return
+fn cc() -> Result<isize, isize> {
+ Ok(3)
+}
+
+// explicit outptr return
+fn dd() -> Result<isize, isize> {
+ return Ok(3);
+}
+
+trait A {
+ fn aaa(&self) -> isize {
+ 3
+ }
+ fn bbb(&self) -> isize {
+ return 3;
+ }
+ fn ccc(&self) -> Result<isize, isize> {
+ Ok(3)
+ }
+ fn ddd(&self) -> Result<isize, isize> {
+ return Ok(3);
+ }
+}
+
+impl A for isize {}
+
+fn main() {
+ assert_eq!(foo(), Err(32));
+ assert_eq!(baz(), Err(32));
+
+ assert_eq!(aa(), 3);
+ assert_eq!(bb(), 3);
+ assert_eq!(cc().unwrap(), 3);
+ assert_eq!(dd().unwrap(), 3);
+
+ let i = Box::new(32isize) as Box<dyn A>;
+ assert_eq!(i.aaa(), 3);
+ let i = Box::new(32isize) as Box<dyn A>;
+ assert_eq!(i.bbb(), 3);
+ let i = Box::new(32isize) as Box<dyn A>;
+ assert_eq!(i.ccc().unwrap(), 3);
+ let i = Box::new(32isize) as Box<dyn A>;
+ assert_eq!(i.ddd().unwrap(), 3);
+}
diff --git a/tests/ui/issues/issue-15774.rs b/tests/ui/issues/issue-15774.rs
new file mode 100644
index 000000000..ed2235758
--- /dev/null
+++ b/tests/ui/issues/issue-15774.rs
@@ -0,0 +1,25 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+#![deny(warnings)]
+#![allow(unused_imports)]
+
+pub enum Foo { A }
+mod bar {
+ pub fn normal(x: ::Foo) {
+ use Foo::A;
+ match x {
+ A => {}
+ }
+ }
+ pub fn wrong(x: ::Foo) {
+ match x {
+ ::Foo::A => {}
+ }
+ }
+}
+
+pub fn main() {
+ bar::normal(Foo::A);
+ bar::wrong(Foo::A);
+}
diff --git a/tests/ui/issues/issue-15783.rs b/tests/ui/issues/issue-15783.rs
new file mode 100644
index 000000000..0b1f4545e
--- /dev/null
+++ b/tests/ui/issues/issue-15783.rs
@@ -0,0 +1,14 @@
+pub fn foo(params: Option<&[&str]>) -> usize {
+ params.unwrap().first().unwrap().len()
+}
+
+fn main() {
+ let name = "Foo";
+ let x = Some(&[name]);
+ let msg = foo(x);
+ //~^ ERROR mismatched types
+ //~| expected enum `Option<&[&str]>`
+ //~| found enum `Option<&[&str; 1]>`
+ //~| expected slice `[&str]`, found array `[&str; 1]`
+ assert_eq!(msg, 3);
+}
diff --git a/tests/ui/issues/issue-15783.stderr b/tests/ui/issues/issue-15783.stderr
new file mode 100644
index 000000000..660dfe9ed
--- /dev/null
+++ b/tests/ui/issues/issue-15783.stderr
@@ -0,0 +1,19 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-15783.rs:8:19
+ |
+LL | let msg = foo(x);
+ | --- ^ expected slice `[&str]`, found array `[&str; 1]`
+ | |
+ | arguments to this function are incorrect
+ |
+ = note: expected enum `Option<&[&str]>`
+ found enum `Option<&[&str; 1]>`
+note: function defined here
+ --> $DIR/issue-15783.rs:1:8
+ |
+LL | pub fn foo(params: Option<&[&str]>) -> usize {
+ | ^^^ -----------------------
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-15793.rs b/tests/ui/issues/issue-15793.rs
new file mode 100644
index 000000000..769012b1b
--- /dev/null
+++ b/tests/ui/issues/issue-15793.rs
@@ -0,0 +1,27 @@
+// run-pass
+#![allow(dead_code)]
+
+enum NestedEnum {
+ First,
+ Second,
+ Third
+}
+enum Enum {
+ Variant1(bool),
+ Variant2(NestedEnum)
+}
+
+#[inline(never)]
+fn foo(x: Enum) -> isize {
+ match x {
+ Enum::Variant1(true) => 1,
+ Enum::Variant1(false) => 2,
+ Enum::Variant2(NestedEnum::Second) => 3,
+ Enum::Variant2(NestedEnum::Third) => 4,
+ Enum::Variant2(NestedEnum::First) => 5
+ }
+}
+
+fn main() {
+ assert_eq!(foo(Enum::Variant2(NestedEnum::Third)), 4);
+}
diff --git a/tests/ui/issues/issue-15858.rs b/tests/ui/issues/issue-15858.rs
new file mode 100644
index 000000000..8d65afc48
--- /dev/null
+++ b/tests/ui/issues/issue-15858.rs
@@ -0,0 +1,33 @@
+// run-pass
+static mut DROP_RAN: bool = false;
+
+trait Bar {
+ fn do_something(&mut self);
+}
+
+struct BarImpl;
+
+impl Bar for BarImpl {
+ fn do_something(&mut self) {}
+}
+
+
+struct Foo<B: Bar>(#[allow(unused_tuple_struct_fields)] B);
+
+impl<B: Bar> Drop for Foo<B> {
+ fn drop(&mut self) {
+ unsafe {
+ DROP_RAN = true;
+ }
+ }
+}
+
+
+fn main() {
+ {
+ let _x: Foo<BarImpl> = Foo(BarImpl);
+ }
+ unsafe {
+ assert_eq!(DROP_RAN, true);
+ }
+}
diff --git a/tests/ui/issues/issue-15896.rs b/tests/ui/issues/issue-15896.rs
new file mode 100644
index 000000000..d3153b516
--- /dev/null
+++ b/tests/ui/issues/issue-15896.rs
@@ -0,0 +1,15 @@
+// Regression test for #15896. It used to ICE rustc.
+
+fn main() {
+ enum R { REB(()) }
+ struct Tau { t: usize }
+ enum E { B(R, Tau) }
+
+ let e = E::B(R::REB(()), Tau { t: 3 });
+ let u = match e {
+ E::B(
+ Tau{t: x},
+ //~^ ERROR mismatched types
+ _) => x,
+ };
+}
diff --git a/tests/ui/issues/issue-15896.stderr b/tests/ui/issues/issue-15896.stderr
new file mode 100644
index 000000000..038337f5a
--- /dev/null
+++ b/tests/ui/issues/issue-15896.stderr
@@ -0,0 +1,12 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-15896.rs:11:11
+ |
+LL | let u = match e {
+ | - this expression has type `E`
+LL | E::B(
+LL | Tau{t: x},
+ | ^^^^^^^^^ expected enum `R`, found struct `Tau`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-15965.rs b/tests/ui/issues/issue-15965.rs
new file mode 100644
index 000000000..eef4900d4
--- /dev/null
+++ b/tests/ui/issues/issue-15965.rs
@@ -0,0 +1,7 @@
+fn main() {
+ return
+ { return () }
+//~^ ERROR type annotations needed [E0282]
+ ()
+ ;
+}
diff --git a/tests/ui/issues/issue-15965.stderr b/tests/ui/issues/issue-15965.stderr
new file mode 100644
index 000000000..fe06810b8
--- /dev/null
+++ b/tests/ui/issues/issue-15965.stderr
@@ -0,0 +1,11 @@
+error[E0282]: type annotations needed
+ --> $DIR/issue-15965.rs:3:9
+ |
+LL | / { return () }
+LL | |
+LL | | ()
+ | |______^ cannot infer type
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-16048.rs b/tests/ui/issues/issue-16048.rs
new file mode 100644
index 000000000..eaf6acff2
--- /dev/null
+++ b/tests/ui/issues/issue-16048.rs
@@ -0,0 +1,30 @@
+trait NoLifetime {
+ fn get<'p, T : Test<'p>>(&self) -> T;
+ //~^ NOTE lifetimes in impl do not match this method in trait
+}
+
+trait Test<'p> {
+ fn new(buf: &'p mut [u8]) -> Self;
+}
+
+struct Foo<'a> {
+ buf: &'a mut [u8],
+}
+
+impl<'a> Test<'a> for Foo<'a> {
+ fn new(buf: &'a mut [u8]) -> Foo<'a> {
+ Foo { buf: buf }
+ }
+}
+
+impl<'a> NoLifetime for Foo<'a> {
+ fn get<'p, T: Test<'a> + From<Foo<'a>>>(&self) -> T {
+ //~^ ERROR E0195
+ //~| NOTE lifetimes do not match method in trait
+ return *self as T;
+ //~^ ERROR non-primitive cast: `Foo<'a>` as `T`
+ //~| NOTE an `as` expression can only be used to convert between primitive types
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-16048.stderr b/tests/ui/issues/issue-16048.stderr
new file mode 100644
index 000000000..73610942d
--- /dev/null
+++ b/tests/ui/issues/issue-16048.stderr
@@ -0,0 +1,21 @@
+error[E0195]: lifetime parameters or bounds on method `get` do not match the trait declaration
+ --> $DIR/issue-16048.rs:21:11
+ |
+LL | fn get<'p, T : Test<'p>>(&self) -> T;
+ | ------------------ lifetimes in impl do not match this method in trait
+...
+LL | fn get<'p, T: Test<'a> + From<Foo<'a>>>(&self) -> T {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ lifetimes do not match method in trait
+
+error[E0605]: non-primitive cast: `Foo<'a>` as `T`
+ --> $DIR/issue-16048.rs:24:16
+ |
+LL | return *self as T;
+ | ^^^^^^^^^^ help: consider using the `From` trait instead: `T::from(*self)`
+ |
+ = note: an `as` expression can only be used to convert between primitive types or to coerce to a specific trait object
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0195, E0605.
+For more information about an error, try `rustc --explain E0195`.
diff --git a/tests/ui/issues/issue-16149.rs b/tests/ui/issues/issue-16149.rs
new file mode 100644
index 000000000..51b60725c
--- /dev/null
+++ b/tests/ui/issues/issue-16149.rs
@@ -0,0 +1,11 @@
+extern "C" {
+ static externalValue: isize;
+}
+
+fn main() {
+ let boolValue = match 42 {
+ externalValue => true,
+ //~^ ERROR match bindings cannot shadow statics
+ _ => false,
+ };
+}
diff --git a/tests/ui/issues/issue-16149.stderr b/tests/ui/issues/issue-16149.stderr
new file mode 100644
index 000000000..bb809840b
--- /dev/null
+++ b/tests/ui/issues/issue-16149.stderr
@@ -0,0 +1,12 @@
+error[E0530]: match bindings cannot shadow statics
+ --> $DIR/issue-16149.rs:7:9
+ |
+LL | static externalValue: isize;
+ | ---------------------------- the static `externalValue` is defined here
+...
+LL | externalValue => true,
+ | ^^^^^^^^^^^^^ cannot be named the same as a static
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0530`.
diff --git a/tests/ui/issues/issue-16151.rs b/tests/ui/issues/issue-16151.rs
new file mode 100644
index 000000000..48a14b2af
--- /dev/null
+++ b/tests/ui/issues/issue-16151.rs
@@ -0,0 +1,29 @@
+// run-pass
+
+use std::mem;
+
+static mut DROP_COUNT: usize = 0;
+
+struct Fragment;
+
+impl Drop for Fragment {
+ fn drop(&mut self) {
+ unsafe {
+ DROP_COUNT += 1;
+ }
+ }
+}
+
+fn main() {
+ {
+ let mut fragments = vec![Fragment, Fragment, Fragment];
+ let _new_fragments: Vec<Fragment> = mem::replace(&mut fragments, vec![])
+ .into_iter()
+ .skip_while(|_fragment| {
+ true
+ }).collect();
+ }
+ unsafe {
+ assert_eq!(DROP_COUNT, 3);
+ }
+}
diff --git a/tests/ui/issues/issue-16250.rs b/tests/ui/issues/issue-16250.rs
new file mode 100644
index 000000000..436e2a6ce
--- /dev/null
+++ b/tests/ui/issues/issue-16250.rs
@@ -0,0 +1,9 @@
+#![deny(warnings)]
+
+pub struct Foo;
+
+extern "C" {
+ pub fn foo(x: (Foo)); //~ ERROR `extern` block uses type `Foo`
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-16250.stderr b/tests/ui/issues/issue-16250.stderr
new file mode 100644
index 000000000..5eb5e0864
--- /dev/null
+++ b/tests/ui/issues/issue-16250.stderr
@@ -0,0 +1,22 @@
+error: `extern` block uses type `Foo`, which is not FFI-safe
+ --> $DIR/issue-16250.rs:6:20
+ |
+LL | pub fn foo(x: (Foo));
+ | ^^^ not FFI-safe
+ |
+ = help: consider adding a `#[repr(C)]` or `#[repr(transparent)]` attribute to this struct
+ = note: this struct has unspecified layout
+note: the type is defined here
+ --> $DIR/issue-16250.rs:3:1
+ |
+LL | pub struct Foo;
+ | ^^^^^^^^^^^^^^
+note: the lint level is defined here
+ --> $DIR/issue-16250.rs:1:9
+ |
+LL | #![deny(warnings)]
+ | ^^^^^^^^
+ = note: `#[deny(improper_ctypes)]` implied by `#[deny(warnings)]`
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-16256.rs b/tests/ui/issues/issue-16256.rs
new file mode 100644
index 000000000..eec23437b
--- /dev/null
+++ b/tests/ui/issues/issue-16256.rs
@@ -0,0 +1,7 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+fn main() {
+ let mut buf = Vec::new();
+ |c: u8| buf.push(c); //~ WARN unused closure that must be used
+}
diff --git a/tests/ui/issues/issue-16256.stderr b/tests/ui/issues/issue-16256.stderr
new file mode 100644
index 000000000..d920530b5
--- /dev/null
+++ b/tests/ui/issues/issue-16256.stderr
@@ -0,0 +1,11 @@
+warning: unused closure that must be used
+ --> $DIR/issue-16256.rs:6:5
+ |
+LL | |c: u8| buf.push(c);
+ | ^^^^^^^^^^^^^^^^^^^
+ |
+ = note: closures are lazy and do nothing unless called
+ = note: `#[warn(unused_must_use)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/issues/issue-16278.rs b/tests/ui/issues/issue-16278.rs
new file mode 100644
index 000000000..2f47b694a
--- /dev/null
+++ b/tests/ui/issues/issue-16278.rs
@@ -0,0 +1,10 @@
+// run-pass
+// ignore-tidy-cr
+
+// this file has some special \r\n endings (use xxd to see them)
+
+fn main() {assert_eq!(b"", b"\
+ ");
+assert_eq!(b"\n", b"
+");
+}
diff --git a/tests/ui/issues/issue-16338.rs b/tests/ui/issues/issue-16338.rs
new file mode 100644
index 000000000..321b3576c
--- /dev/null
+++ b/tests/ui/issues/issue-16338.rs
@@ -0,0 +1,10 @@
+struct Slice<T> {
+ data: *const T,
+ len: usize,
+}
+
+fn main() {
+ let Slice { data: data, len: len } = "foo";
+ //~^ ERROR mismatched types
+ //~| found struct `Slice<_>`
+}
diff --git a/tests/ui/issues/issue-16338.stderr b/tests/ui/issues/issue-16338.stderr
new file mode 100644
index 000000000..6878600b0
--- /dev/null
+++ b/tests/ui/issues/issue-16338.stderr
@@ -0,0 +1,14 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-16338.rs:7:9
+ |
+LL | let Slice { data: data, len: len } = "foo";
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ----- this expression has type `&str`
+ | |
+ | expected `str`, found struct `Slice`
+ |
+ = note: expected type `str`
+ found struct `Slice<_>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-16401.rs b/tests/ui/issues/issue-16401.rs
new file mode 100644
index 000000000..332352ca7
--- /dev/null
+++ b/tests/ui/issues/issue-16401.rs
@@ -0,0 +1,15 @@
+struct Slice<T> {
+ data: *const T,
+ len: usize,
+}
+
+fn main() {
+ match () {
+ Slice { data: data, len: len } => (),
+ //~^ ERROR mismatched types
+ //~| expected unit type `()`
+ //~| found struct `Slice<_>`
+ //~| expected `()`, found struct `Slice`
+ _ => unreachable!()
+ }
+}
diff --git a/tests/ui/issues/issue-16401.stderr b/tests/ui/issues/issue-16401.stderr
new file mode 100644
index 000000000..f8ea09070
--- /dev/null
+++ b/tests/ui/issues/issue-16401.stderr
@@ -0,0 +1,14 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-16401.rs:8:9
+ |
+LL | match () {
+ | -- this expression has type `()`
+LL | Slice { data: data, len: len } => (),
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `()`, found struct `Slice`
+ |
+ = note: expected unit type `()`
+ found struct `Slice<_>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-16441.rs b/tests/ui/issues/issue-16441.rs
new file mode 100644
index 000000000..bafa204e0
--- /dev/null
+++ b/tests/ui/issues/issue-16441.rs
@@ -0,0 +1,12 @@
+// run-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+struct Empty;
+
+// This used to cause an ICE
+#[allow(improper_ctypes_definitions)]
+extern "C" fn ice(_a: Empty) {}
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-16452.rs b/tests/ui/issues/issue-16452.rs
new file mode 100644
index 000000000..faf9edd3b
--- /dev/null
+++ b/tests/ui/issues/issue-16452.rs
@@ -0,0 +1,10 @@
+// run-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+fn main() {
+ if true { return }
+ match () {
+ () => { static MAGIC: usize = 0; }
+ }
+}
diff --git a/tests/ui/issues/issue-16492.rs b/tests/ui/issues/issue-16492.rs
new file mode 100644
index 000000000..7fa808237
--- /dev/null
+++ b/tests/ui/issues/issue-16492.rs
@@ -0,0 +1,67 @@
+// run-pass
+#![allow(non_snake_case)]
+
+use std::rc::Rc;
+use std::cell::Cell;
+
+struct Field {
+ number: usize,
+ state: Rc<Cell<usize>>
+}
+
+impl Field {
+ fn new(number: usize, state: Rc<Cell<usize>>) -> Field {
+ Field {
+ number: number,
+ state: state
+ }
+ }
+}
+
+impl Drop for Field {
+ fn drop(&mut self) {
+ println!("Dropping field {}", self.number);
+ assert_eq!(self.state.get(), self.number);
+ self.state.set(self.state.get()+1);
+ }
+}
+
+struct NoDropImpl {
+ _one: Field,
+ _two: Field,
+ _three: Field
+}
+
+struct HasDropImpl {
+ _one: Field,
+ _two: Field,
+ _three: Field
+}
+
+impl Drop for HasDropImpl {
+ fn drop(&mut self) {
+ println!("HasDropImpl.drop()");
+ assert_eq!(self._one.state.get(), 0);
+ self._one.state.set(1);
+ }
+}
+
+pub fn main() {
+ let state = Rc::new(Cell::new(1));
+ let noImpl = NoDropImpl {
+ _one: Field::new(1, state.clone()),
+ _two: Field::new(2, state.clone()),
+ _three: Field::new(3, state.clone())
+ };
+ drop(noImpl);
+ assert_eq!(state.get(), 4);
+
+ state.set(0);
+ let hasImpl = HasDropImpl {
+ _one: Field::new(1, state.clone()),
+ _two: Field::new(2, state.clone()),
+ _three: Field::new(3, state.clone())
+ };
+ drop(hasImpl);
+ assert_eq!(state.get(), 4);
+}
diff --git a/tests/ui/issues/issue-16530.rs b/tests/ui/issues/issue-16530.rs
new file mode 100644
index 000000000..25817a2a6
--- /dev/null
+++ b/tests/ui/issues/issue-16530.rs
@@ -0,0 +1,15 @@
+// run-pass
+#![allow(deprecated)]
+
+use std::hash::{SipHasher, Hasher, Hash};
+
+#[derive(Hash)]
+struct Empty;
+
+pub fn main() {
+ let mut s1 = SipHasher::new();
+ Empty.hash(&mut s1);
+ let mut s2 = SipHasher::new();
+ Empty.hash(&mut s2);
+ assert_eq!(s1.finish(), s2.finish());
+}
diff --git a/tests/ui/issues/issue-16538.mir.stderr b/tests/ui/issues/issue-16538.mir.stderr
new file mode 100644
index 000000000..e320df4b7
--- /dev/null
+++ b/tests/ui/issues/issue-16538.mir.stderr
@@ -0,0 +1,29 @@
+error[E0015]: cannot call non-const fn `Y::foo` in statics
+ --> $DIR/issue-16538.rs:14:23
+ |
+LL | static foo: &Y::X = &*Y::foo(Y::x as *const Y::X);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: calls in statics are limited to constant functions, tuple structs and tuple variants
+ = note: consider wrapping this expression in `Lazy::new(|| ...)` from the `once_cell` crate: https://crates.io/crates/once_cell
+
+error[E0133]: use of extern static is unsafe and requires unsafe function or block
+ --> $DIR/issue-16538.rs:14:30
+ |
+LL | static foo: &Y::X = &*Y::foo(Y::x as *const Y::X);
+ | ^^^^ use of extern static
+ |
+ = note: extern statics are not controlled by the Rust type system: invalid data, aliasing violations or data races will cause undefined behavior
+
+error[E0133]: dereference of raw pointer is unsafe and requires unsafe function or block
+ --> $DIR/issue-16538.rs:14:21
+ |
+LL | static foo: &Y::X = &*Y::foo(Y::x as *const Y::X);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ dereference of raw pointer
+ |
+ = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
+
+error: aborting due to 3 previous errors
+
+Some errors have detailed explanations: E0015, E0133.
+For more information about an error, try `rustc --explain E0015`.
diff --git a/tests/ui/issues/issue-16538.rs b/tests/ui/issues/issue-16538.rs
new file mode 100644
index 000000000..270fa3014
--- /dev/null
+++ b/tests/ui/issues/issue-16538.rs
@@ -0,0 +1,19 @@
+// revisions: mir thir
+// [thir]compile-flags: -Z thir-unsafeck
+
+mod Y {
+ pub type X = usize;
+ extern "C" {
+ pub static x: *const usize;
+ }
+ pub fn foo(value: *const X) -> *const X {
+ value
+ }
+}
+
+static foo: &Y::X = &*Y::foo(Y::x as *const Y::X);
+//~^ ERROR dereference of raw pointer
+//~| ERROR E0015
+//~| ERROR use of extern static is unsafe and requires
+
+fn main() {}
diff --git a/tests/ui/issues/issue-16538.thir.stderr b/tests/ui/issues/issue-16538.thir.stderr
new file mode 100644
index 000000000..4a8628692
--- /dev/null
+++ b/tests/ui/issues/issue-16538.thir.stderr
@@ -0,0 +1,29 @@
+error[E0133]: dereference of raw pointer is unsafe and requires unsafe function or block
+ --> $DIR/issue-16538.rs:14:22
+ |
+LL | static foo: &Y::X = &*Y::foo(Y::x as *const Y::X);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ dereference of raw pointer
+ |
+ = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
+
+error[E0133]: use of extern static is unsafe and requires unsafe function or block
+ --> $DIR/issue-16538.rs:14:30
+ |
+LL | static foo: &Y::X = &*Y::foo(Y::x as *const Y::X);
+ | ^^^^ use of extern static
+ |
+ = note: extern statics are not controlled by the Rust type system: invalid data, aliasing violations or data races will cause undefined behavior
+
+error[E0015]: cannot call non-const fn `Y::foo` in statics
+ --> $DIR/issue-16538.rs:14:23
+ |
+LL | static foo: &Y::X = &*Y::foo(Y::x as *const Y::X);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: calls in statics are limited to constant functions, tuple structs and tuple variants
+ = note: consider wrapping this expression in `Lazy::new(|| ...)` from the `once_cell` crate: https://crates.io/crates/once_cell
+
+error: aborting due to 3 previous errors
+
+Some errors have detailed explanations: E0015, E0133.
+For more information about an error, try `rustc --explain E0015`.
diff --git a/tests/ui/issues/issue-16560.rs b/tests/ui/issues/issue-16560.rs
new file mode 100644
index 000000000..d5fffc7ef
--- /dev/null
+++ b/tests/ui/issues/issue-16560.rs
@@ -0,0 +1,18 @@
+// run-pass
+#![allow(unused_variables)]
+// ignore-emscripten no threads support
+
+use std::thread;
+use std::mem;
+
+fn main() {
+ let y = 0u8;
+ let closure = move |x: u8| y + x;
+
+ // Check that both closures are capturing by value
+ assert_eq!(1, mem::size_of_val(&closure));
+
+ thread::spawn(move|| {
+ let ok = closure;
+ }).join().ok().unwrap();
+}
diff --git a/tests/ui/issues/issue-16562.rs b/tests/ui/issues/issue-16562.rs
new file mode 100644
index 000000000..e16a35158
--- /dev/null
+++ b/tests/ui/issues/issue-16562.rs
@@ -0,0 +1,17 @@
+trait MatrixShape {}
+
+struct Col<D, C> {
+ data: D,
+ col: C,
+}
+
+trait Collection { fn len(&self) -> usize; }
+
+impl<T, M: MatrixShape> Collection for Col<M, usize> {
+//~^ ERROR type parameter `T` is not constrained
+ fn len(&self) -> usize {
+ unimplemented!()
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-16562.stderr b/tests/ui/issues/issue-16562.stderr
new file mode 100644
index 000000000..3fe7507e8
--- /dev/null
+++ b/tests/ui/issues/issue-16562.stderr
@@ -0,0 +1,9 @@
+error[E0207]: the type parameter `T` is not constrained by the impl trait, self type, or predicates
+ --> $DIR/issue-16562.rs:10:6
+ |
+LL | impl<T, M: MatrixShape> Collection for Col<M, usize> {
+ | ^ unconstrained type parameter
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0207`.
diff --git a/tests/ui/issues/issue-16596.rs b/tests/ui/issues/issue-16596.rs
new file mode 100644
index 000000000..e7a096302
--- /dev/null
+++ b/tests/ui/issues/issue-16596.rs
@@ -0,0 +1,22 @@
+// check-pass
+#![allow(dead_code)]
+
+trait MatrixRow { fn dummy(&self) { }}
+
+struct Mat;
+
+impl<'a> MatrixRow for &'a Mat {}
+
+struct Rows<M: MatrixRow> {
+ mat: M,
+}
+
+impl<'a> Iterator for Rows<&'a Mat> {
+ type Item = ();
+
+ fn next(&mut self) -> Option<()> {
+ unimplemented!()
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-1660.rs b/tests/ui/issues/issue-1660.rs
new file mode 100644
index 000000000..aa60a8d8a
--- /dev/null
+++ b/tests/ui/issues/issue-1660.rs
@@ -0,0 +1,8 @@
+// run-pass
+#![allow(non_upper_case_globals)]
+
+// pretty-expanded FIXME #23616
+
+pub fn main() {
+ static _x: isize = 1<<2;
+}
diff --git a/tests/ui/issues/issue-16643.rs b/tests/ui/issues/issue-16643.rs
new file mode 100644
index 000000000..c74a554af
--- /dev/null
+++ b/tests/ui/issues/issue-16643.rs
@@ -0,0 +1,10 @@
+// run-pass
+// aux-build:issue-16643.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_16643 as i;
+
+pub fn main() {
+ i::TreeBuilder { h: 3 }.process_token();
+}
diff --git a/tests/ui/issues/issue-16648.rs b/tests/ui/issues/issue-16648.rs
new file mode 100644
index 000000000..539f015fa
--- /dev/null
+++ b/tests/ui/issues/issue-16648.rs
@@ -0,0 +1,11 @@
+// run-pass
+fn main() {
+ let x: (isize, &[isize]) = (2, &[1, 2]);
+ assert_eq!(match x {
+ (0, &[_, _]) => 0,
+ (1, _) => 1,
+ (2, &[_, _]) => 2,
+ (2, _) => 3,
+ _ => 4
+ }, 2);
+}
diff --git a/tests/ui/issues/issue-16668.rs b/tests/ui/issues/issue-16668.rs
new file mode 100644
index 000000000..92efb42fe
--- /dev/null
+++ b/tests/ui/issues/issue-16668.rs
@@ -0,0 +1,20 @@
+// check-pass
+#![allow(dead_code)]
+struct Parser<'a, I, O> {
+ parse: Box<dyn FnMut(I) -> Result<O, String> + 'a>
+}
+
+impl<'a, I: 'a, O: 'a> Parser<'a, I, O> {
+ fn compose<K: 'a>(mut self, mut rhs: Parser<'a, O, K>) -> Parser<'a, I, K> {
+ Parser {
+ parse: Box::new(move |x: I| {
+ match (self.parse)(x) {
+ Ok(r) => (rhs.parse)(r),
+ Err(e) => Err(e)
+ }
+ })
+ }
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-16671.rs b/tests/ui/issues/issue-16671.rs
new file mode 100644
index 000000000..eff8e275b
--- /dev/null
+++ b/tests/ui/issues/issue-16671.rs
@@ -0,0 +1,12 @@
+// run-pass
+
+#![deny(warnings)]
+
+fn foo<F: FnOnce()>(_f: F) { }
+
+fn main() {
+ let mut var = Vec::new();
+ foo(move|| {
+ var.push(1);
+ });
+}
diff --git a/tests/ui/issues/issue-16683.rs b/tests/ui/issues/issue-16683.rs
new file mode 100644
index 000000000..72fa21bdd
--- /dev/null
+++ b/tests/ui/issues/issue-16683.rs
@@ -0,0 +1,9 @@
+trait T<'a> {
+ fn a(&'a self) -> &'a bool;
+ fn b(&self) {
+ self.a();
+ //~^ ERROR lifetime may not live long enough
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-16683.stderr b/tests/ui/issues/issue-16683.stderr
new file mode 100644
index 000000000..fff681b2e
--- /dev/null
+++ b/tests/ui/issues/issue-16683.stderr
@@ -0,0 +1,13 @@
+error: lifetime may not live long enough
+ --> $DIR/issue-16683.rs:4:9
+ |
+LL | trait T<'a> {
+ | -- lifetime `'a` defined here
+LL | fn a(&'a self) -> &'a bool;
+LL | fn b(&self) {
+ | - let's call the lifetime of this reference `'1`
+LL | self.a();
+ | ^^^^^^^^ argument requires that `'1` must outlive `'a`
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-16725.rs b/tests/ui/issues/issue-16725.rs
new file mode 100644
index 000000000..2cf8a6069
--- /dev/null
+++ b/tests/ui/issues/issue-16725.rs
@@ -0,0 +1,8 @@
+// aux-build:issue-16725.rs
+
+extern crate issue_16725 as foo;
+
+fn main() {
+ unsafe { foo::bar(); }
+ //~^ ERROR: function `bar` is private
+}
diff --git a/tests/ui/issues/issue-16725.stderr b/tests/ui/issues/issue-16725.stderr
new file mode 100644
index 000000000..5f6eae73e
--- /dev/null
+++ b/tests/ui/issues/issue-16725.stderr
@@ -0,0 +1,15 @@
+error[E0603]: function `bar` is private
+ --> $DIR/issue-16725.rs:6:19
+ |
+LL | unsafe { foo::bar(); }
+ | ^^^ private function
+ |
+note: the function `bar` is defined here
+ --> $DIR/auxiliary/issue-16725.rs:2:5
+ |
+LL | fn bar();
+ | ^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0603`.
diff --git a/tests/ui/issues/issue-16739.rs b/tests/ui/issues/issue-16739.rs
new file mode 100644
index 000000000..b21ea4bcd
--- /dev/null
+++ b/tests/ui/issues/issue-16739.rs
@@ -0,0 +1,45 @@
+// run-pass
+#![feature(unboxed_closures, fn_traits)]
+
+// Test that unboxing shim for calling rust-call ABI methods through a
+// trait box works and does not cause an ICE.
+
+struct Foo { foo: u32 }
+
+impl FnMut<()> for Foo {
+ extern "rust-call" fn call_mut(&mut self, _: ()) -> u32 { self.foo }
+}
+
+impl FnOnce<()> for Foo {
+ type Output = u32;
+ extern "rust-call" fn call_once(mut self, _: ()) -> u32 { self.call_mut(()) }
+}
+
+impl FnMut<(u32,)> for Foo {
+ extern "rust-call" fn call_mut(&mut self, (x,): (u32,)) -> u32 { self.foo + x }
+}
+
+impl FnOnce<(u32,)> for Foo {
+ type Output = u32;
+ extern "rust-call" fn call_once(mut self, args: (u32,)) -> u32 { self.call_mut(args) }
+}
+
+impl FnMut<(u32,u32)> for Foo {
+ extern "rust-call" fn call_mut(&mut self, (x, y): (u32, u32)) -> u32 { self.foo + x + y }
+}
+
+impl FnOnce<(u32,u32)> for Foo {
+ type Output = u32;
+ extern "rust-call" fn call_once(mut self, args: (u32,u32)) -> u32 { self.call_mut(args) }
+}
+
+fn main() {
+ let mut f = Box::new(Foo { foo: 42 }) as Box<dyn FnMut() -> u32>;
+ assert_eq!(f.call_mut(()), 42);
+
+ let mut f = Box::new(Foo { foo: 40 }) as Box<dyn FnMut(u32) -> u32>;
+ assert_eq!(f.call_mut((2,)), 42);
+
+ let mut f = Box::new(Foo { foo: 40 }) as Box<dyn FnMut(u32, u32) -> u32>;
+ assert_eq!(f.call_mut((1, 1)), 42);
+}
diff --git a/tests/ui/issues/issue-16745.rs b/tests/ui/issues/issue-16745.rs
new file mode 100644
index 000000000..e9137df0f
--- /dev/null
+++ b/tests/ui/issues/issue-16745.rs
@@ -0,0 +1,11 @@
+// run-pass
+fn main() {
+ const X: u8 = 0;
+ let out: u8 = match 0u8 {
+ X => 99,
+ b'\t' => 1,
+ 1u8 => 2,
+ _ => 3,
+ };
+ assert_eq!(out, 99);
+}
diff --git a/tests/ui/issues/issue-16774.rs b/tests/ui/issues/issue-16774.rs
new file mode 100644
index 000000000..2b308ef76
--- /dev/null
+++ b/tests/ui/issues/issue-16774.rs
@@ -0,0 +1,45 @@
+// run-pass
+#![feature(box_patterns)]
+
+use std::ops::{Deref, DerefMut};
+
+struct X(Box<isize>);
+
+static mut DESTRUCTOR_RAN: bool = false;
+
+impl Drop for X {
+ fn drop(&mut self) {
+ unsafe {
+ assert!(!DESTRUCTOR_RAN);
+ DESTRUCTOR_RAN = true;
+ }
+ }
+}
+
+impl Deref for X {
+ type Target = isize;
+
+ fn deref(&self) -> &isize {
+ let &X(box ref x) = self;
+ x
+ }
+}
+
+impl DerefMut for X {
+ fn deref_mut(&mut self) -> &mut isize {
+ let &mut X(box ref mut x) = self;
+ x
+ }
+}
+
+fn main() {
+ {
+ let mut test = X(Box::new(5));
+ {
+ let mut change = || { *test = 10 };
+ change();
+ }
+ assert_eq!(*test, 10);
+ }
+ assert!(unsafe { DESTRUCTOR_RAN });
+}
diff --git a/tests/ui/issues/issue-16783.rs b/tests/ui/issues/issue-16783.rs
new file mode 100644
index 000000000..4af4031d2
--- /dev/null
+++ b/tests/ui/issues/issue-16783.rs
@@ -0,0 +1,8 @@
+// run-pass
+#![allow(unused_variables)]
+// pretty-expanded FIXME #23616
+
+pub fn main() {
+ let x = [1, 2, 3];
+ let y = x;
+}
diff --git a/tests/ui/issues/issue-16819.rs b/tests/ui/issues/issue-16819.rs
new file mode 100644
index 000000000..cc0200904
--- /dev/null
+++ b/tests/ui/issues/issue-16819.rs
@@ -0,0 +1,12 @@
+// run-pass
+#![allow(unused_variables)]
+// `#[cfg]` on struct field permits empty unusable struct
+
+struct S {
+ #[cfg(untrue)]
+ a: int,
+}
+
+fn main() {
+ let s = S {};
+}
diff --git a/tests/ui/issues/issue-16922-rpass.rs b/tests/ui/issues/issue-16922-rpass.rs
new file mode 100644
index 000000000..c3c6ff304
--- /dev/null
+++ b/tests/ui/issues/issue-16922-rpass.rs
@@ -0,0 +1,11 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+use std::any::Any;
+
+fn foo(_: &u8) {
+}
+
+fn main() {
+ let _ = &foo as &dyn Any;
+}
diff --git a/tests/ui/issues/issue-16922.rs b/tests/ui/issues/issue-16922.rs
new file mode 100644
index 000000000..bbbbf72db
--- /dev/null
+++ b/tests/ui/issues/issue-16922.rs
@@ -0,0 +1,10 @@
+use std::any::Any;
+
+fn foo<T: Any>(value: &T) -> Box<dyn Any> {
+ Box::new(value) as Box<dyn Any>
+ //~^ ERROR lifetime may not live long enough
+}
+
+fn main() {
+ let _ = foo(&5);
+}
diff --git a/tests/ui/issues/issue-16922.stderr b/tests/ui/issues/issue-16922.stderr
new file mode 100644
index 000000000..9d9f32a97
--- /dev/null
+++ b/tests/ui/issues/issue-16922.stderr
@@ -0,0 +1,15 @@
+error: lifetime may not live long enough
+ --> $DIR/issue-16922.rs:4:5
+ |
+LL | fn foo<T: Any>(value: &T) -> Box<dyn Any> {
+ | - let's call the lifetime of this reference `'1`
+LL | Box::new(value) as Box<dyn Any>
+ | ^^^^^^^^^^^^^^^ cast requires that `'1` must outlive `'static`
+ |
+help: to declare that the trait object captures data from argument `value`, you can add an explicit `'_` lifetime bound
+ |
+LL | fn foo<T: Any>(value: &T) -> Box<dyn Any + '_> {
+ | ++++
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-16939.rs b/tests/ui/issues/issue-16939.rs
new file mode 100644
index 000000000..ad7248343
--- /dev/null
+++ b/tests/ui/issues/issue-16939.rs
@@ -0,0 +1,8 @@
+// Make sure we don't ICE when making an overloaded call with the
+// wrong arity.
+
+fn _foo<F: Fn()> (f: F) {
+ |t| f(t); //~ ERROR E0057
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-16939.stderr b/tests/ui/issues/issue-16939.stderr
new file mode 100644
index 000000000..766456454
--- /dev/null
+++ b/tests/ui/issues/issue-16939.stderr
@@ -0,0 +1,19 @@
+error[E0057]: this function takes 0 arguments but 1 argument was supplied
+ --> $DIR/issue-16939.rs:5:9
+ |
+LL | |t| f(t);
+ | ^ - argument unexpected
+ |
+note: callable defined here
+ --> $DIR/issue-16939.rs:4:12
+ |
+LL | fn _foo<F: Fn()> (f: F) {
+ | ^^^^
+help: remove the extra argument
+ |
+LL | |t| f();
+ | ~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0057`.
diff --git a/tests/ui/issues/issue-1696.rs b/tests/ui/issues/issue-1696.rs
new file mode 100644
index 000000000..b5d77df3a
--- /dev/null
+++ b/tests/ui/issues/issue-1696.rs
@@ -0,0 +1,8 @@
+// run-pass
+use std::collections::HashMap;
+
+pub fn main() {
+ let mut m = HashMap::new();
+ m.insert(b"foo".to_vec(), b"bar".to_vec());
+ println!("{:?}", m);
+}
diff --git a/tests/ui/issues/issue-16966.rs b/tests/ui/issues/issue-16966.rs
new file mode 100644
index 000000000..9c6188350
--- /dev/null
+++ b/tests/ui/issues/issue-16966.rs
@@ -0,0 +1,4 @@
+fn main() {
+ panic!(std::default::Default::default());
+ //~^ ERROR type annotations needed
+}
diff --git a/tests/ui/issues/issue-16966.stderr b/tests/ui/issues/issue-16966.stderr
new file mode 100644
index 000000000..60f5190db
--- /dev/null
+++ b/tests/ui/issues/issue-16966.stderr
@@ -0,0 +1,11 @@
+error[E0282]: type annotations needed
+ --> $DIR/issue-16966.rs:2:5
+ |
+LL | panic!(std::default::Default::default());
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer type of the type parameter `M` declared on the function `begin_panic`
+ |
+ = note: this error originates in the macro `$crate::panic::panic_2015` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-16994.rs b/tests/ui/issues/issue-16994.rs
new file mode 100644
index 000000000..8d3074bce
--- /dev/null
+++ b/tests/ui/issues/issue-16994.rs
@@ -0,0 +1,9 @@
+// check-pass
+
+fn cb<'a,T>(_x: Box<dyn Fn((&'a i32, &'a (Vec<&'static i32>, bool))) -> T>) -> T {
+ panic!()
+}
+
+fn main() {
+ cb(Box::new(|(k, &(ref v, b))| (*k, v.clone(), b)));
+}
diff --git a/tests/ui/issues/issue-17001.rs b/tests/ui/issues/issue-17001.rs
new file mode 100644
index 000000000..68cb2865f
--- /dev/null
+++ b/tests/ui/issues/issue-17001.rs
@@ -0,0 +1,5 @@
+mod foo {}
+
+fn main() {
+ let p = foo { x: () }; //~ ERROR expected struct, variant or union type, found module `foo`
+}
diff --git a/tests/ui/issues/issue-17001.stderr b/tests/ui/issues/issue-17001.stderr
new file mode 100644
index 000000000..d7e606997
--- /dev/null
+++ b/tests/ui/issues/issue-17001.stderr
@@ -0,0 +1,9 @@
+error[E0574]: expected struct, variant or union type, found module `foo`
+ --> $DIR/issue-17001.rs:4:13
+ |
+LL | let p = foo { x: () };
+ | ^^^ not a struct, variant or union type
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0574`.
diff --git a/tests/ui/issues/issue-17033.rs b/tests/ui/issues/issue-17033.rs
new file mode 100644
index 000000000..72a8cd982
--- /dev/null
+++ b/tests/ui/issues/issue-17033.rs
@@ -0,0 +1,6 @@
+fn f<'r>(p: &'r mut fn(p: &mut ())) {
+ (*p)(()) //~ ERROR mismatched types
+ //~| expected `&mut ()`, found `()`
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-17033.stderr b/tests/ui/issues/issue-17033.stderr
new file mode 100644
index 000000000..f26bee5ff
--- /dev/null
+++ b/tests/ui/issues/issue-17033.stderr
@@ -0,0 +1,13 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-17033.rs:2:10
+ |
+LL | (*p)(())
+ | ---- ^^
+ | | |
+ | | expected `&mut ()`, found `()`
+ | | help: consider mutably borrowing here: `&mut ()`
+ | arguments to this function are incorrect
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-17068.rs b/tests/ui/issues/issue-17068.rs
new file mode 100644
index 000000000..fe2c1a34b
--- /dev/null
+++ b/tests/ui/issues/issue-17068.rs
@@ -0,0 +1,12 @@
+// run-pass
+// Test that regionck creates the right region links in the pattern
+// binding of a for loop
+
+fn foo<'a>(v: &'a [usize]) -> &'a usize {
+ for &ref x in v { return x; }
+ unreachable!()
+}
+
+fn main() {
+ assert_eq!(foo(&[0]), &0);
+}
diff --git a/tests/ui/issues/issue-17121.rs b/tests/ui/issues/issue-17121.rs
new file mode 100644
index 000000000..1e7b9f015
--- /dev/null
+++ b/tests/ui/issues/issue-17121.rs
@@ -0,0 +1,31 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+use std::fs::File;
+use std::io::{self, BufReader, Read};
+
+struct Lexer<R: Read>
+{
+ reader: BufReader<R>,
+}
+
+impl<R: Read> Lexer<R>
+{
+ pub fn new_from_reader(r: R) -> Lexer<R>
+ {
+ Lexer{reader: BufReader::new(r)}
+ }
+
+ pub fn new_from_file(p: &str) -> io::Result<Lexer<File>>
+ {
+ Ok(Lexer::new_from_reader(File::open(p)?))
+ }
+
+ pub fn new_from_str<'a>(s: &'a str) -> Lexer<&'a [u8]>
+ {
+ Lexer::new_from_reader(s.as_bytes())
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-17216.rs b/tests/ui/issues/issue-17216.rs
new file mode 100644
index 000000000..05baa1bff
--- /dev/null
+++ b/tests/ui/issues/issue-17216.rs
@@ -0,0 +1,21 @@
+// run-pass
+#![allow(unused_variables)]
+struct Leak<'a> {
+ dropped: &'a mut bool
+}
+
+impl<'a> Drop for Leak<'a> {
+ fn drop(&mut self) {
+ *self.dropped = true;
+ }
+}
+
+fn main() {
+ let mut dropped = false;
+ {
+ let leak = Leak { dropped: &mut dropped };
+ for ((), leaked) in Some(((), leak)).into_iter() {}
+ }
+
+ assert!(dropped);
+}
diff --git a/tests/ui/issues/issue-17252.rs b/tests/ui/issues/issue-17252.rs
new file mode 100644
index 000000000..7141e4874
--- /dev/null
+++ b/tests/ui/issues/issue-17252.rs
@@ -0,0 +1,10 @@
+const FOO: usize = FOO; //~ ERROR E0391
+
+fn main() {
+ let _x: [u8; FOO]; // caused stack overflow prior to fix
+ let _y: usize = 1 + {
+ const BAR: usize = BAR;
+ let _z: [u8; BAR]; // caused stack overflow prior to fix
+ 1
+ };
+}
diff --git a/tests/ui/issues/issue-17252.stderr b/tests/ui/issues/issue-17252.stderr
new file mode 100644
index 000000000..aca5242b2
--- /dev/null
+++ b/tests/ui/issues/issue-17252.stderr
@@ -0,0 +1,16 @@
+error[E0391]: cycle detected when const-evaluating + checking `FOO`
+ --> $DIR/issue-17252.rs:1:20
+ |
+LL | const FOO: usize = FOO;
+ | ^^^
+ |
+ = note: ...which immediately requires const-evaluating + checking `FOO` again
+note: cycle used when const-evaluating + checking `main::{constant#0}`
+ --> $DIR/issue-17252.rs:4:18
+ |
+LL | let _x: [u8; FOO]; // caused stack overflow prior to fix
+ | ^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0391`.
diff --git a/tests/ui/issues/issue-17302.rs b/tests/ui/issues/issue-17302.rs
new file mode 100644
index 000000000..cf7a2f1b0
--- /dev/null
+++ b/tests/ui/issues/issue-17302.rs
@@ -0,0 +1,26 @@
+// run-pass
+
+static mut DROPPED: [bool; 2] = [false, false];
+
+struct A(usize);
+struct Foo { _a: A, _b: isize }
+
+impl Drop for A {
+ fn drop(&mut self) {
+ let A(i) = *self;
+ unsafe { DROPPED[i] = true; }
+ }
+}
+
+fn main() {
+ {
+ Foo {
+ _a: A(0),
+ ..Foo { _a: A(1), _b: 2 }
+ };
+ }
+ unsafe {
+ assert!(DROPPED[0]);
+ assert!(DROPPED[1]);
+ }
+}
diff --git a/tests/ui/issues/issue-17322.rs b/tests/ui/issues/issue-17322.rs
new file mode 100644
index 000000000..b4fc40c3f
--- /dev/null
+++ b/tests/ui/issues/issue-17322.rs
@@ -0,0 +1,13 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+use std::io::{self, Write};
+
+fn f(wr: &mut dyn Write) {
+ wr.write_all(b"hello").ok().expect("failed");
+}
+
+fn main() {
+ let mut wr = Box::new(io::stdout()) as Box<dyn Write>;
+ f(&mut wr);
+}
diff --git a/tests/ui/issues/issue-17336.rs b/tests/ui/issues/issue-17336.rs
new file mode 100644
index 000000000..89ce59b11
--- /dev/null
+++ b/tests/ui/issues/issue-17336.rs
@@ -0,0 +1,9 @@
+// build-pass
+#![allow(unused_must_use)]
+#[allow(dead_code)]
+fn check(a: &str) {
+ let x = a as *const str;
+ x == x;
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-17337.rs b/tests/ui/issues/issue-17337.rs
new file mode 100644
index 000000000..193f89f83
--- /dev/null
+++ b/tests/ui/issues/issue-17337.rs
@@ -0,0 +1,17 @@
+#![feature(staged_api)]
+#![deny(deprecated)]
+
+#![unstable(feature = "unstable_test_feature", issue = "none")]
+
+struct Foo;
+
+impl Foo {
+ #[unstable(feature = "unstable_test_feature", issue = "none")]
+ #[deprecated(since = "1.0.0", note = "text")]
+ fn foo(self) {}
+}
+
+fn main() {
+ Foo
+ .foo(); //~ ERROR use of deprecated
+}
diff --git a/tests/ui/issues/issue-17337.stderr b/tests/ui/issues/issue-17337.stderr
new file mode 100644
index 000000000..34c2eb05f
--- /dev/null
+++ b/tests/ui/issues/issue-17337.stderr
@@ -0,0 +1,14 @@
+error: use of deprecated associated function `Foo::foo`: text
+ --> $DIR/issue-17337.rs:16:6
+ |
+LL | .foo();
+ | ^^^
+ |
+note: the lint level is defined here
+ --> $DIR/issue-17337.rs:2:9
+ |
+LL | #![deny(deprecated)]
+ | ^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-17351.rs b/tests/ui/issues/issue-17351.rs
new file mode 100644
index 000000000..62f6bcf15
--- /dev/null
+++ b/tests/ui/issues/issue-17351.rs
@@ -0,0 +1,10 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+trait Str { fn foo(&self) {} }
+impl Str for str {}
+impl<'a, S: ?Sized> Str for &'a S where S: Str {}
+
+fn main() {
+ let _: &dyn Str = &"x";
+}
diff --git a/tests/ui/issues/issue-17361.rs b/tests/ui/issues/issue-17361.rs
new file mode 100644
index 000000000..e97fc3afd
--- /dev/null
+++ b/tests/ui/issues/issue-17361.rs
@@ -0,0 +1,9 @@
+// run-pass
+// Test that astconv doesn't forget about mutability of &mut str
+
+// pretty-expanded FIXME #23616
+
+fn main() {
+ fn foo<T: ?Sized>(_: &mut T) {}
+ let _f: fn(&mut str) = foo;
+}
diff --git a/tests/ui/issues/issue-17373.rs b/tests/ui/issues/issue-17373.rs
new file mode 100644
index 000000000..dc3be48a7
--- /dev/null
+++ b/tests/ui/issues/issue-17373.rs
@@ -0,0 +1,4 @@
+fn main() {
+ *return //~ ERROR type `!` cannot be dereferenced
+ ;
+}
diff --git a/tests/ui/issues/issue-17373.stderr b/tests/ui/issues/issue-17373.stderr
new file mode 100644
index 000000000..5c429d111
--- /dev/null
+++ b/tests/ui/issues/issue-17373.stderr
@@ -0,0 +1,9 @@
+error[E0614]: type `!` cannot be dereferenced
+ --> $DIR/issue-17373.rs:2:5
+ |
+LL | *return
+ | ^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0614`.
diff --git a/tests/ui/issues/issue-17385.rs b/tests/ui/issues/issue-17385.rs
new file mode 100644
index 000000000..7400aadb0
--- /dev/null
+++ b/tests/ui/issues/issue-17385.rs
@@ -0,0 +1,29 @@
+struct X(isize);
+
+enum Enum {
+ Variant1,
+ Variant2
+}
+
+impl Drop for X {
+ fn drop(&mut self) {}
+}
+impl Drop for Enum {
+ fn drop(&mut self) {}
+}
+
+fn main() {
+ let foo = X(1);
+ drop(foo);
+ match foo { //~ ERROR use of moved value
+ X(1) => (),
+ _ => unreachable!()
+ }
+
+ let e = Enum::Variant2;
+ drop(e);
+ match e { //~ ERROR use of moved value
+ Enum::Variant1 => unreachable!(),
+ Enum::Variant2 => ()
+ }
+}
diff --git a/tests/ui/issues/issue-17385.stderr b/tests/ui/issues/issue-17385.stderr
new file mode 100644
index 000000000..77aa201b3
--- /dev/null
+++ b/tests/ui/issues/issue-17385.stderr
@@ -0,0 +1,23 @@
+error[E0382]: use of moved value: `foo`
+ --> $DIR/issue-17385.rs:18:5
+ |
+LL | let foo = X(1);
+ | --- move occurs because `foo` has type `X`, which does not implement the `Copy` trait
+LL | drop(foo);
+ | --- value moved here
+LL | match foo {
+ | ^^^^^^^^^ value used here after move
+
+error[E0382]: use of moved value: `e`
+ --> $DIR/issue-17385.rs:25:11
+ |
+LL | let e = Enum::Variant2;
+ | - move occurs because `e` has type `Enum`, which does not implement the `Copy` trait
+LL | drop(e);
+ | - value moved here
+LL | match e {
+ | ^ value used here after move
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0382`.
diff --git a/tests/ui/issues/issue-17405.rs b/tests/ui/issues/issue-17405.rs
new file mode 100644
index 000000000..14781a7d3
--- /dev/null
+++ b/tests/ui/issues/issue-17405.rs
@@ -0,0 +1,9 @@
+enum Foo {
+ Bar(isize)
+}
+
+fn main() {
+ match Foo::Bar(1) {
+ Foo { i } => () //~ ERROR expected struct, variant or union type, found enum `Foo`
+ }
+}
diff --git a/tests/ui/issues/issue-17405.stderr b/tests/ui/issues/issue-17405.stderr
new file mode 100644
index 000000000..37274e239
--- /dev/null
+++ b/tests/ui/issues/issue-17405.stderr
@@ -0,0 +1,9 @@
+error[E0574]: expected struct, variant or union type, found enum `Foo`
+ --> $DIR/issue-17405.rs:7:9
+ |
+LL | Foo { i } => ()
+ | ^^^ not a struct, variant or union type
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0574`.
diff --git a/tests/ui/issues/issue-17431-1.rs b/tests/ui/issues/issue-17431-1.rs
new file mode 100644
index 000000000..3b692cc0e
--- /dev/null
+++ b/tests/ui/issues/issue-17431-1.rs
@@ -0,0 +1,6 @@
+struct Foo { foo: Option<Option<Foo>> }
+//~^ ERROR recursive type `Foo` has infinite size
+
+impl Foo { fn bar(&self) {} }
+
+fn main() {}
diff --git a/tests/ui/issues/issue-17431-1.stderr b/tests/ui/issues/issue-17431-1.stderr
new file mode 100644
index 000000000..e3af8976c
--- /dev/null
+++ b/tests/ui/issues/issue-17431-1.stderr
@@ -0,0 +1,14 @@
+error[E0072]: recursive type `Foo` has infinite size
+ --> $DIR/issue-17431-1.rs:1:1
+ |
+LL | struct Foo { foo: Option<Option<Foo>> }
+ | ^^^^^^^^^^ --- recursive without indirection
+ |
+help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle
+ |
+LL | struct Foo { foo: Option<Option<Box<Foo>>> }
+ | ++++ +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0072`.
diff --git a/tests/ui/issues/issue-17431-2.rs b/tests/ui/issues/issue-17431-2.rs
new file mode 100644
index 000000000..f7b9c6a55
--- /dev/null
+++ b/tests/ui/issues/issue-17431-2.rs
@@ -0,0 +1,8 @@
+struct Baz { q: Option<Foo> }
+//~^ ERROR recursive types `Baz` and `Foo` have infinite size
+
+struct Foo { q: Option<Baz> }
+
+impl Foo { fn bar(&self) {} }
+
+fn main() {}
diff --git a/tests/ui/issues/issue-17431-2.stderr b/tests/ui/issues/issue-17431-2.stderr
new file mode 100644
index 000000000..39a99ec1e
--- /dev/null
+++ b/tests/ui/issues/issue-17431-2.stderr
@@ -0,0 +1,20 @@
+error[E0072]: recursive types `Baz` and `Foo` have infinite size
+ --> $DIR/issue-17431-2.rs:1:1
+ |
+LL | struct Baz { q: Option<Foo> }
+ | ^^^^^^^^^^ --- recursive without indirection
+...
+LL | struct Foo { q: Option<Baz> }
+ | ^^^^^^^^^^ --- recursive without indirection
+ |
+help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle
+ |
+LL ~ struct Baz { q: Option<Box<Foo>> }
+LL |
+LL |
+LL ~ struct Foo { q: Option<Box<Baz>> }
+ |
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0072`.
diff --git a/tests/ui/issues/issue-17431-3.rs b/tests/ui/issues/issue-17431-3.rs
new file mode 100644
index 000000000..83a63a88b
--- /dev/null
+++ b/tests/ui/issues/issue-17431-3.rs
@@ -0,0 +1,8 @@
+use std::sync::Mutex;
+
+struct Foo { foo: Mutex<Option<Foo>> }
+//~^ ERROR recursive type `Foo` has infinite size
+
+impl Foo { fn bar(&self) {} }
+
+fn main() {}
diff --git a/tests/ui/issues/issue-17431-3.stderr b/tests/ui/issues/issue-17431-3.stderr
new file mode 100644
index 000000000..394134c78
--- /dev/null
+++ b/tests/ui/issues/issue-17431-3.stderr
@@ -0,0 +1,14 @@
+error[E0072]: recursive type `Foo` has infinite size
+ --> $DIR/issue-17431-3.rs:3:1
+ |
+LL | struct Foo { foo: Mutex<Option<Foo>> }
+ | ^^^^^^^^^^ --- recursive without indirection
+ |
+help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle
+ |
+LL | struct Foo { foo: Mutex<Option<Box<Foo>>> }
+ | ++++ +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0072`.
diff --git a/tests/ui/issues/issue-17431-4.rs b/tests/ui/issues/issue-17431-4.rs
new file mode 100644
index 000000000..48f0dba2a
--- /dev/null
+++ b/tests/ui/issues/issue-17431-4.rs
@@ -0,0 +1,8 @@
+use std::marker;
+
+struct Foo<T> { foo: Option<Option<Foo<T>>>, marker: marker::PhantomData<T> }
+//~^ ERROR recursive type `Foo` has infinite size
+
+impl<T> Foo<T> { fn bar(&self) {} }
+
+fn main() {}
diff --git a/tests/ui/issues/issue-17431-4.stderr b/tests/ui/issues/issue-17431-4.stderr
new file mode 100644
index 000000000..3d141e44b
--- /dev/null
+++ b/tests/ui/issues/issue-17431-4.stderr
@@ -0,0 +1,14 @@
+error[E0072]: recursive type `Foo` has infinite size
+ --> $DIR/issue-17431-4.rs:3:1
+ |
+LL | struct Foo<T> { foo: Option<Option<Foo<T>>>, marker: marker::PhantomData<T> }
+ | ^^^^^^^^^^^^^ ------ recursive without indirection
+ |
+help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle
+ |
+LL | struct Foo<T> { foo: Option<Option<Box<Foo<T>>>>, marker: marker::PhantomData<T> }
+ | ++++ +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0072`.
diff --git a/tests/ui/issues/issue-17431-5.rs b/tests/ui/issues/issue-17431-5.rs
new file mode 100644
index 000000000..0fd6ee611
--- /dev/null
+++ b/tests/ui/issues/issue-17431-5.rs
@@ -0,0 +1,11 @@
+use std::marker;
+
+struct Foo { foo: Bar<Foo> }
+
+struct Bar<T> { x: Bar<Foo> , marker: marker::PhantomData<T> }
+//~^ ERROR recursive type `Bar` has infinite size
+
+impl Foo { fn foo(&self) {} }
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-17431-5.stderr b/tests/ui/issues/issue-17431-5.stderr
new file mode 100644
index 000000000..44a90a6fe
--- /dev/null
+++ b/tests/ui/issues/issue-17431-5.stderr
@@ -0,0 +1,14 @@
+error[E0072]: recursive type `Bar` has infinite size
+ --> $DIR/issue-17431-5.rs:5:1
+ |
+LL | struct Bar<T> { x: Bar<Foo> , marker: marker::PhantomData<T> }
+ | ^^^^^^^^^^^^^ -------- recursive without indirection
+ |
+help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle
+ |
+LL | struct Bar<T> { x: Box<Bar<Foo>> , marker: marker::PhantomData<T> }
+ | ++++ +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0072`.
diff --git a/tests/ui/issues/issue-17431-6.rs b/tests/ui/issues/issue-17431-6.rs
new file mode 100644
index 000000000..b7e49873d
--- /dev/null
+++ b/tests/ui/issues/issue-17431-6.rs
@@ -0,0 +1,8 @@
+use std::sync::Mutex;
+
+enum Foo { X(Mutex<Option<Foo>>) }
+//~^ ERROR recursive type `Foo` has infinite size
+
+impl Foo { fn bar(self) {} }
+
+fn main() {}
diff --git a/tests/ui/issues/issue-17431-6.stderr b/tests/ui/issues/issue-17431-6.stderr
new file mode 100644
index 000000000..e0a822550
--- /dev/null
+++ b/tests/ui/issues/issue-17431-6.stderr
@@ -0,0 +1,14 @@
+error[E0072]: recursive type `Foo` has infinite size
+ --> $DIR/issue-17431-6.rs:3:1
+ |
+LL | enum Foo { X(Mutex<Option<Foo>>) }
+ | ^^^^^^^^ --- recursive without indirection
+ |
+help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle
+ |
+LL | enum Foo { X(Mutex<Option<Box<Foo>>>) }
+ | ++++ +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0072`.
diff --git a/tests/ui/issues/issue-17431-7.rs b/tests/ui/issues/issue-17431-7.rs
new file mode 100644
index 000000000..4fd786278
--- /dev/null
+++ b/tests/ui/issues/issue-17431-7.rs
@@ -0,0 +1,6 @@
+enum Foo { Voo(Option<Option<Foo>>) }
+//~^ ERROR recursive type `Foo` has infinite size
+
+impl Foo { fn bar(&self) {} }
+
+fn main() { }
diff --git a/tests/ui/issues/issue-17431-7.stderr b/tests/ui/issues/issue-17431-7.stderr
new file mode 100644
index 000000000..ecf072b8e
--- /dev/null
+++ b/tests/ui/issues/issue-17431-7.stderr
@@ -0,0 +1,14 @@
+error[E0072]: recursive type `Foo` has infinite size
+ --> $DIR/issue-17431-7.rs:1:1
+ |
+LL | enum Foo { Voo(Option<Option<Foo>>) }
+ | ^^^^^^^^ --- recursive without indirection
+ |
+help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle
+ |
+LL | enum Foo { Voo(Option<Option<Box<Foo>>>) }
+ | ++++ +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0072`.
diff --git a/tests/ui/issues/issue-17441.rs b/tests/ui/issues/issue-17441.rs
new file mode 100644
index 000000000..e5f83c4eb
--- /dev/null
+++ b/tests/ui/issues/issue-17441.rs
@@ -0,0 +1,13 @@
+fn main() {
+ let _foo = &[1_usize, 2] as [usize];
+ //~^ ERROR cast to unsized type: `&[usize; 2]` as `[usize]`
+
+ let _bar = Box::new(1_usize) as dyn std::fmt::Debug;
+ //~^ ERROR cast to unsized type: `Box<usize>` as `dyn Debug`
+
+ let _baz = 1_usize as dyn std::fmt::Debug;
+ //~^ ERROR cast to unsized type: `usize` as `dyn Debug`
+
+ let _quux = [1_usize, 2] as [usize];
+ //~^ ERROR cast to unsized type: `[usize; 2]` as `[usize]`
+}
diff --git a/tests/ui/issues/issue-17441.stderr b/tests/ui/issues/issue-17441.stderr
new file mode 100644
index 000000000..4dbe50178
--- /dev/null
+++ b/tests/ui/issues/issue-17441.stderr
@@ -0,0 +1,47 @@
+error[E0620]: cast to unsized type: `&[usize; 2]` as `[usize]`
+ --> $DIR/issue-17441.rs:2:16
+ |
+LL | let _foo = &[1_usize, 2] as [usize];
+ | ^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+help: consider using an implicit coercion to `&[usize]` instead
+ --> $DIR/issue-17441.rs:2:16
+ |
+LL | let _foo = &[1_usize, 2] as [usize];
+ | ^^^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0620]: cast to unsized type: `Box<usize>` as `dyn Debug`
+ --> $DIR/issue-17441.rs:5:16
+ |
+LL | let _bar = Box::new(1_usize) as dyn std::fmt::Debug;
+ | ^^^^^^^^^^^^^^^^^^^^^-------------------
+ | |
+ | help: you can cast to a `Box` instead: `Box<dyn std::fmt::Debug>`
+
+error[E0620]: cast to unsized type: `usize` as `dyn Debug`
+ --> $DIR/issue-17441.rs:8:16
+ |
+LL | let _baz = 1_usize as dyn std::fmt::Debug;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+help: consider using a box or reference as appropriate
+ --> $DIR/issue-17441.rs:8:16
+ |
+LL | let _baz = 1_usize as dyn std::fmt::Debug;
+ | ^^^^^^^
+
+error[E0620]: cast to unsized type: `[usize; 2]` as `[usize]`
+ --> $DIR/issue-17441.rs:11:17
+ |
+LL | let _quux = [1_usize, 2] as [usize];
+ | ^^^^^^^^^^^^^^^^^^^^^^^
+ |
+help: consider using a box or reference as appropriate
+ --> $DIR/issue-17441.rs:11:17
+ |
+LL | let _quux = [1_usize, 2] as [usize];
+ | ^^^^^^^^^^^^
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0620`.
diff --git a/tests/ui/issues/issue-17450.rs b/tests/ui/issues/issue-17450.rs
new file mode 100644
index 000000000..1ac0af175
--- /dev/null
+++ b/tests/ui/issues/issue-17450.rs
@@ -0,0 +1,7 @@
+// build-pass
+#![allow(dead_code, warnings)]
+
+static mut x: isize = 3;
+static mut y: isize = unsafe { x };
+
+fn main() {}
diff --git a/tests/ui/issues/issue-17503.rs b/tests/ui/issues/issue-17503.rs
new file mode 100644
index 000000000..9a92c06e1
--- /dev/null
+++ b/tests/ui/issues/issue-17503.rs
@@ -0,0 +1,10 @@
+// run-pass
+fn main() {
+ let s: &[isize] = &[0, 1, 2, 3, 4];
+ let ss: &&[isize] = &s;
+ let sss: &&&[isize] = &ss;
+
+ println!("{:?}", &s[..3]);
+ println!("{:?}", &ss[3..]);
+ println!("{:?}", &sss[2..4]);
+}
diff --git a/tests/ui/issues/issue-17546.rs b/tests/ui/issues/issue-17546.rs
new file mode 100644
index 000000000..6c62010f1
--- /dev/null
+++ b/tests/ui/issues/issue-17546.rs
@@ -0,0 +1,42 @@
+// ignore-sgx std::os::fortanix_sgx::usercalls::raw::Result changes compiler suggestions
+
+use foo::MyEnum::Result;
+use foo::NoResult; // Through a re-export
+
+mod foo {
+ pub use self::MyEnum::NoResult;
+
+ pub enum MyEnum {
+ Result,
+ NoResult
+ }
+
+ fn new() -> NoResult<MyEnum, String> {
+ //~^ ERROR expected type, found variant `NoResult`
+ unimplemented!()
+ }
+}
+
+mod bar {
+ use foo::MyEnum::Result;
+ use foo;
+
+ fn new() -> Result<foo::MyEnum, String> {
+ //~^ ERROR expected type, found variant `Result`
+ unimplemented!()
+ }
+}
+
+fn new() -> Result<foo::MyEnum, String> {
+ //~^ ERROR expected type, found variant `Result`
+ unimplemented!()
+}
+
+fn newer() -> NoResult<foo::MyEnum, String> {
+ //~^ ERROR expected type, found variant `NoResult`
+ unimplemented!()
+}
+
+fn main() {
+ let _ = new();
+}
diff --git a/tests/ui/issues/issue-17546.stderr b/tests/ui/issues/issue-17546.stderr
new file mode 100644
index 000000000..81592320a
--- /dev/null
+++ b/tests/ui/issues/issue-17546.stderr
@@ -0,0 +1,73 @@
+error[E0573]: expected type, found variant `NoResult`
+ --> $DIR/issue-17546.rs:14:17
+ |
+LL | fn new() -> NoResult<MyEnum, String> {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^
+ --> $SRC_DIR/core/src/result.rs:LL:COL
+ |
+ = note: similarly named enum `Result` defined here
+ |
+help: try using the variant's enum
+ |
+LL | fn new() -> foo::MyEnum {
+ | ~~~~~~~~~~~
+help: an enum with a similar name exists
+ |
+LL | fn new() -> Result<MyEnum, String> {
+ | ~~~~~~
+
+error[E0573]: expected type, found variant `Result`
+ --> $DIR/issue-17546.rs:24:17
+ |
+LL | fn new() -> Result<foo::MyEnum, String> {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ not a type
+ |
+help: consider importing one of these items instead
+ |
+LL | use std::fmt::Result;
+ |
+LL | use std::io::Result;
+ |
+LL | use std::result::Result;
+ |
+LL | use std::thread::Result;
+ |
+
+error[E0573]: expected type, found variant `Result`
+ --> $DIR/issue-17546.rs:30:13
+ |
+LL | fn new() -> Result<foo::MyEnum, String> {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ not a type
+ |
+help: consider importing one of these items instead
+ |
+LL | use std::fmt::Result;
+ |
+LL | use std::io::Result;
+ |
+LL | use std::result::Result;
+ |
+LL | use std::thread::Result;
+ |
+
+error[E0573]: expected type, found variant `NoResult`
+ --> $DIR/issue-17546.rs:35:15
+ |
+LL | fn newer() -> NoResult<foo::MyEnum, String> {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ --> $SRC_DIR/core/src/result.rs:LL:COL
+ |
+ = note: similarly named enum `Result` defined here
+ |
+help: try using the variant's enum
+ |
+LL | fn newer() -> foo::MyEnum {
+ | ~~~~~~~~~~~
+help: an enum with a similar name exists
+ |
+LL | fn newer() -> Result<foo::MyEnum, String> {
+ | ~~~~~~
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0573`.
diff --git a/tests/ui/issues/issue-17551.rs b/tests/ui/issues/issue-17551.rs
new file mode 100644
index 000000000..a65957ce0
--- /dev/null
+++ b/tests/ui/issues/issue-17551.rs
@@ -0,0 +1,8 @@
+use std::marker;
+
+struct B<T>(marker::PhantomData<T>);
+
+fn main() {
+ let foo = B(marker::PhantomData); //~ ERROR type annotations needed
+ let closure = || foo;
+}
diff --git a/tests/ui/issues/issue-17551.stderr b/tests/ui/issues/issue-17551.stderr
new file mode 100644
index 000000000..5f45a2f84
--- /dev/null
+++ b/tests/ui/issues/issue-17551.stderr
@@ -0,0 +1,14 @@
+error[E0282]: type annotations needed for `B<T>`
+ --> $DIR/issue-17551.rs:6:9
+ |
+LL | let foo = B(marker::PhantomData);
+ | ^^^
+ |
+help: consider giving `foo` an explicit type, where the type for type parameter `T` is specified
+ |
+LL | let foo: B<T> = B(marker::PhantomData);
+ | ++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-17651.rs b/tests/ui/issues/issue-17651.rs
new file mode 100644
index 000000000..7629a5a3b
--- /dev/null
+++ b/tests/ui/issues/issue-17651.rs
@@ -0,0 +1,7 @@
+// Test that moves of unsized values within closures are caught
+// and rejected.
+
+fn main() {
+ (|| Box::new(*(&[0][..])))();
+ //~^ ERROR the size for values of type
+}
diff --git a/tests/ui/issues/issue-17651.stderr b/tests/ui/issues/issue-17651.stderr
new file mode 100644
index 000000000..b37811e19
--- /dev/null
+++ b/tests/ui/issues/issue-17651.stderr
@@ -0,0 +1,15 @@
+error[E0277]: the size for values of type `[{integer}]` cannot be known at compilation time
+ --> $DIR/issue-17651.rs:5:18
+ |
+LL | (|| Box::new(*(&[0][..])))();
+ | -------- ^^^^^^^^^^^ doesn't have a size known at compile-time
+ | |
+ | required by a bound introduced by this call
+ |
+ = help: the trait `Sized` is not implemented for `[{integer}]`
+note: required by a bound in `Box::<T>::new`
+ --> $SRC_DIR/alloc/src/boxed.rs:LL:COL
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-17662.rs b/tests/ui/issues/issue-17662.rs
new file mode 100644
index 000000000..a2683808b
--- /dev/null
+++ b/tests/ui/issues/issue-17662.rs
@@ -0,0 +1,17 @@
+// run-pass
+// aux-build:issue-17662.rs
+
+
+extern crate issue_17662 as i;
+
+use std::marker;
+
+struct Bar<'a> { m: marker::PhantomData<&'a ()> }
+
+impl<'a> i::Foo<'a, usize> for Bar<'a> {
+ fn foo(&self) -> usize { 5 }
+}
+
+pub fn main() {
+ assert_eq!(i::foo(&Bar { m: marker::PhantomData }), 5);
+}
diff --git a/tests/ui/issues/issue-17732.rs b/tests/ui/issues/issue-17732.rs
new file mode 100644
index 000000000..8f63d5bae
--- /dev/null
+++ b/tests/ui/issues/issue-17732.rs
@@ -0,0 +1,13 @@
+// check-pass
+#![allow(dead_code)]
+#![allow(non_camel_case_types)]
+// pretty-expanded FIXME #23616
+
+trait Person {
+ type string;
+ fn dummy(&self) { }
+}
+
+struct Someone<P: Person>(std::marker::PhantomData<P>);
+
+fn main() {}
diff --git a/tests/ui/issues/issue-17734.rs b/tests/ui/issues/issue-17734.rs
new file mode 100644
index 000000000..ba8d6c21c
--- /dev/null
+++ b/tests/ui/issues/issue-17734.rs
@@ -0,0 +1,15 @@
+// run-pass
+// Test that generating drop glue for Box<str> doesn't ICE
+
+
+fn f(s: Box<str>) -> Box<str> {
+ s
+}
+
+fn main() {
+ // There is currently no safe way to construct a `Box<str>`, so improvise
+ let box_arr: Box<[u8]> = Box::new(['h' as u8, 'e' as u8, 'l' as u8, 'l' as u8, 'o' as u8]);
+ let box_str: Box<str> = unsafe { std::mem::transmute(box_arr) };
+ assert_eq!(&*box_str, "hello");
+ f(box_str);
+}
diff --git a/tests/ui/issues/issue-17740.rs b/tests/ui/issues/issue-17740.rs
new file mode 100644
index 000000000..3b868555f
--- /dev/null
+++ b/tests/ui/issues/issue-17740.rs
@@ -0,0 +1,18 @@
+struct Foo<'a> {
+ data: &'a[u8],
+}
+
+impl <'a> Foo<'a>{
+ fn bar(self: &mut Foo) {
+ //~^ mismatched `self` parameter type
+ //~| expected struct `Foo<'a>`
+ //~| found struct `Foo<'_>`
+ //~| lifetime mismatch
+ //~| mismatched `self` parameter type
+ //~| expected struct `Foo<'a>`
+ //~| found struct `Foo<'_>`
+ //~| lifetime mismatch
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-17740.stderr b/tests/ui/issues/issue-17740.stderr
new file mode 100644
index 000000000..d17738041
--- /dev/null
+++ b/tests/ui/issues/issue-17740.stderr
@@ -0,0 +1,41 @@
+error[E0308]: mismatched `self` parameter type
+ --> $DIR/issue-17740.rs:6:18
+ |
+LL | fn bar(self: &mut Foo) {
+ | ^^^^^^^^ lifetime mismatch
+ |
+ = note: expected struct `Foo<'a>`
+ found struct `Foo<'_>`
+note: the anonymous lifetime defined here...
+ --> $DIR/issue-17740.rs:6:23
+ |
+LL | fn bar(self: &mut Foo) {
+ | ^^^
+note: ...does not necessarily outlive the lifetime `'a` as defined here
+ --> $DIR/issue-17740.rs:5:7
+ |
+LL | impl <'a> Foo<'a>{
+ | ^^
+
+error[E0308]: mismatched `self` parameter type
+ --> $DIR/issue-17740.rs:6:18
+ |
+LL | fn bar(self: &mut Foo) {
+ | ^^^^^^^^ lifetime mismatch
+ |
+ = note: expected struct `Foo<'a>`
+ found struct `Foo<'_>`
+note: the lifetime `'a` as defined here...
+ --> $DIR/issue-17740.rs:5:7
+ |
+LL | impl <'a> Foo<'a>{
+ | ^^
+note: ...does not necessarily outlive the anonymous lifetime defined here
+ --> $DIR/issue-17740.rs:6:23
+ |
+LL | fn bar(self: &mut Foo) {
+ | ^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-17746.rs b/tests/ui/issues/issue-17746.rs
new file mode 100644
index 000000000..bab64a4b5
--- /dev/null
+++ b/tests/ui/issues/issue-17746.rs
@@ -0,0 +1,25 @@
+// check-pass
+#![allow(dead_code)]
+// Regression test for #17746
+
+fn main() {}
+
+struct A;
+
+impl A {
+ fn b(&mut self) {
+ self.a()
+ }
+}
+
+trait Foo {
+ fn dummy(&self) {}
+}
+trait Bar {
+ fn a(&self);
+}
+
+impl Foo for A {}
+impl<T> Bar for T where T: Foo {
+ fn a(&self) {}
+}
diff --git a/tests/ui/issues/issue-17758.rs b/tests/ui/issues/issue-17758.rs
new file mode 100644
index 000000000..e2ee84694
--- /dev/null
+++ b/tests/ui/issues/issue-17758.rs
@@ -0,0 +1,12 @@
+// Test that regionck suggestions in a provided method of a trait
+// don't ICE
+
+trait Foo<'a> {
+ fn foo(&'a self);
+ fn bar(&self) {
+ self.foo();
+ //~^ ERROR lifetime may not live long enough
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-17758.stderr b/tests/ui/issues/issue-17758.stderr
new file mode 100644
index 000000000..613ef6b90
--- /dev/null
+++ b/tests/ui/issues/issue-17758.stderr
@@ -0,0 +1,13 @@
+error: lifetime may not live long enough
+ --> $DIR/issue-17758.rs:7:9
+ |
+LL | trait Foo<'a> {
+ | -- lifetime `'a` defined here
+LL | fn foo(&'a self);
+LL | fn bar(&self) {
+ | - let's call the lifetime of this reference `'1`
+LL | self.foo();
+ | ^^^^^^^^^^ argument requires that `'1` must outlive `'a`
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-17771.rs b/tests/ui/issues/issue-17771.rs
new file mode 100644
index 000000000..2f6464668
--- /dev/null
+++ b/tests/ui/issues/issue-17771.rs
@@ -0,0 +1,21 @@
+// run-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+trait Aaa { fn dummy(&self) { } }
+
+impl<'a> Aaa for &'a mut (dyn Aaa + 'a) {}
+
+struct Bar<'a> {
+ writer: &'a mut (dyn Aaa + 'a),
+}
+
+fn baz(_: &mut dyn Aaa) {
+}
+
+fn foo<'a>(mut bar: Bar<'a>) {
+ baz(&mut bar.writer);
+}
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-17800.rs b/tests/ui/issues/issue-17800.rs
new file mode 100644
index 000000000..5254f45d7
--- /dev/null
+++ b/tests/ui/issues/issue-17800.rs
@@ -0,0 +1,12 @@
+enum MyOption<T> {
+ MySome(T),
+ MyNone,
+}
+
+fn main() {
+ match MyOption::MySome(42) {
+ MyOption::MySome { x: 42 } => (),
+ //~^ ERROR tuple variant `MyOption::MySome` written as struct variant
+ _ => (),
+ }
+}
diff --git a/tests/ui/issues/issue-17800.stderr b/tests/ui/issues/issue-17800.stderr
new file mode 100644
index 000000000..baab67583
--- /dev/null
+++ b/tests/ui/issues/issue-17800.stderr
@@ -0,0 +1,14 @@
+error[E0769]: tuple variant `MyOption::MySome` written as struct variant
+ --> $DIR/issue-17800.rs:8:9
+ |
+LL | MyOption::MySome { x: 42 } => (),
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+help: use the tuple variant pattern syntax instead
+ |
+LL | MyOption::MySome(42) => (),
+ | ~~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0769`.
diff --git a/tests/ui/issues/issue-17816.rs b/tests/ui/issues/issue-17816.rs
new file mode 100644
index 000000000..7ca47d503
--- /dev/null
+++ b/tests/ui/issues/issue-17816.rs
@@ -0,0 +1,10 @@
+// run-pass
+#![allow(unused_variables)]
+use std::marker::PhantomData;
+
+fn main() {
+ struct Symbol<'a, F: Fn(Vec<&'a str>) -> &'a str> { function: F, marker: PhantomData<&'a ()> }
+ let f = |x: Vec<&str>| -> &str { "foobar" };
+ let sym = Symbol { function: f, marker: PhantomData };
+ (sym.function)(vec![]);
+}
diff --git a/tests/ui/issues/issue-17877.rs b/tests/ui/issues/issue-17877.rs
new file mode 100644
index 000000000..126e01de5
--- /dev/null
+++ b/tests/ui/issues/issue-17877.rs
@@ -0,0 +1,13 @@
+// run-pass
+
+fn main() {
+ assert_eq!(match [0u8; 1024] {
+ _ => 42_usize,
+ }, 42_usize);
+
+ assert_eq!(match [0u8; 1024] {
+ [1, ..] => 0_usize,
+ [0, ..] => 1_usize,
+ _ => 2_usize
+ }, 1_usize);
+}
diff --git a/tests/ui/issues/issue-17897.rs b/tests/ui/issues/issue-17897.rs
new file mode 100644
index 000000000..6873c7ccb
--- /dev/null
+++ b/tests/ui/issues/issue-17897.rs
@@ -0,0 +1,8 @@
+// run-pass
+fn action(mut cb: Box<dyn FnMut(usize) -> usize>) -> usize {
+ cb(1)
+}
+
+pub fn main() {
+ println!("num: {}", action(Box::new(move |u| u)));
+}
diff --git a/tests/ui/issues/issue-17904-2.rs b/tests/ui/issues/issue-17904-2.rs
new file mode 100644
index 000000000..9603da097
--- /dev/null
+++ b/tests/ui/issues/issue-17904-2.rs
@@ -0,0 +1,6 @@
+// Test that we can parse a unit struct with a where clause, even if
+// it leads to an error later on since `T` is unused.
+
+struct Foo<T> where T: Copy; //~ ERROR parameter `T` is never used
+
+fn main() {}
diff --git a/tests/ui/issues/issue-17904-2.stderr b/tests/ui/issues/issue-17904-2.stderr
new file mode 100644
index 000000000..62b7b7953
--- /dev/null
+++ b/tests/ui/issues/issue-17904-2.stderr
@@ -0,0 +1,11 @@
+error[E0392]: parameter `T` is never used
+ --> $DIR/issue-17904-2.rs:4:12
+ |
+LL | struct Foo<T> where T: Copy;
+ | ^ unused parameter
+ |
+ = help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0392`.
diff --git a/tests/ui/issues/issue-17904.rs b/tests/ui/issues/issue-17904.rs
new file mode 100644
index 000000000..c3f504ac1
--- /dev/null
+++ b/tests/ui/issues/issue-17904.rs
@@ -0,0 +1,14 @@
+// check-pass
+#![allow(dead_code)]
+// Test that we can parse where clauses on various forms of tuple
+// structs.
+
+// pretty-expanded FIXME #23616
+
+struct Bar<T>(T) where T: Copy;
+struct Bleh<T, U>(T, U) where T: Copy, U: Sized;
+struct Baz<T> where T: Copy {
+ field: T
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-17905-2.rs b/tests/ui/issues/issue-17905-2.rs
new file mode 100644
index 000000000..44279cc86
--- /dev/null
+++ b/tests/ui/issues/issue-17905-2.rs
@@ -0,0 +1,18 @@
+#[derive(Debug)]
+struct Pair<T, V> (T, V);
+
+impl Pair<
+ &str,
+ isize
+> {
+ fn say(self: &Pair<&str, isize>) {
+//~^ ERROR mismatched `self` parameter type
+//~| ERROR mismatched `self` parameter type
+ println!("{:?}", self);
+ }
+}
+
+fn main() {
+ let result = &Pair("shane", 1);
+ result.say();
+}
diff --git a/tests/ui/issues/issue-17905-2.stderr b/tests/ui/issues/issue-17905-2.stderr
new file mode 100644
index 000000000..88b5fbec6
--- /dev/null
+++ b/tests/ui/issues/issue-17905-2.stderr
@@ -0,0 +1,41 @@
+error[E0308]: mismatched `self` parameter type
+ --> $DIR/issue-17905-2.rs:8:18
+ |
+LL | fn say(self: &Pair<&str, isize>) {
+ | ^^^^^^^^^^^^^^^^^^ lifetime mismatch
+ |
+ = note: expected struct `Pair<&str, _>`
+ found struct `Pair<&str, _>`
+note: the anonymous lifetime defined here...
+ --> $DIR/issue-17905-2.rs:8:24
+ |
+LL | fn say(self: &Pair<&str, isize>) {
+ | ^^^^
+note: ...does not necessarily outlive the anonymous lifetime as defined here
+ --> $DIR/issue-17905-2.rs:5:5
+ |
+LL | &str,
+ | ^
+
+error[E0308]: mismatched `self` parameter type
+ --> $DIR/issue-17905-2.rs:8:18
+ |
+LL | fn say(self: &Pair<&str, isize>) {
+ | ^^^^^^^^^^^^^^^^^^ lifetime mismatch
+ |
+ = note: expected struct `Pair<&str, _>`
+ found struct `Pair<&str, _>`
+note: the anonymous lifetime as defined here...
+ --> $DIR/issue-17905-2.rs:5:5
+ |
+LL | &str,
+ | ^
+note: ...does not necessarily outlive the anonymous lifetime defined here
+ --> $DIR/issue-17905-2.rs:8:24
+ |
+LL | fn say(self: &Pair<&str, isize>) {
+ | ^^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-17905.rs b/tests/ui/issues/issue-17905.rs
new file mode 100644
index 000000000..dae9648b9
--- /dev/null
+++ b/tests/ui/issues/issue-17905.rs
@@ -0,0 +1,19 @@
+// run-pass
+
+#[derive(Debug)]
+#[allow(unused_tuple_struct_fields)]
+struct Pair<T, V> (T, V);
+
+impl Pair<
+ &str,
+ isize
+> {
+ fn say(&self) {
+ println!("{:?}", self);
+ }
+}
+
+fn main() {
+ let result = &Pair("shane", 1);
+ result.say();
+}
diff --git a/tests/ui/issues/issue-17933.rs b/tests/ui/issues/issue-17933.rs
new file mode 100644
index 000000000..6da4e6e15
--- /dev/null
+++ b/tests/ui/issues/issue-17933.rs
@@ -0,0 +1,9 @@
+pub static X: usize = 1;
+
+fn main() {
+ match 1 {
+ self::X => { },
+ //~^ ERROR expected unit struct, unit variant or constant, found static `self::X`
+ _ => { },
+ }
+}
diff --git a/tests/ui/issues/issue-17933.stderr b/tests/ui/issues/issue-17933.stderr
new file mode 100644
index 000000000..33534d3f8
--- /dev/null
+++ b/tests/ui/issues/issue-17933.stderr
@@ -0,0 +1,9 @@
+error[E0532]: expected unit struct, unit variant or constant, found static `self::X`
+ --> $DIR/issue-17933.rs:5:9
+ |
+LL | self::X => { },
+ | ^^^^^^^ not a unit struct, unit variant or constant
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0532`.
diff --git a/tests/ui/issues/issue-17954.rs b/tests/ui/issues/issue-17954.rs
new file mode 100644
index 000000000..eb6a3d70f
--- /dev/null
+++ b/tests/ui/issues/issue-17954.rs
@@ -0,0 +1,15 @@
+#![feature(thread_local)]
+
+#[thread_local]
+static FOO: u8 = 3;
+
+fn main() {
+ let a = &FOO;
+ //~^ ERROR thread-local variable borrowed past end of function
+ //~| NOTE thread-local variables cannot be borrowed beyond the end of the function
+
+ std::thread::spawn(move || {
+ println!("{}", a);
+ });
+}
+//~^ NOTE end of enclosing function is here
diff --git a/tests/ui/issues/issue-17954.stderr b/tests/ui/issues/issue-17954.stderr
new file mode 100644
index 000000000..e08375fee
--- /dev/null
+++ b/tests/ui/issues/issue-17954.stderr
@@ -0,0 +1,12 @@
+error[E0712]: thread-local variable borrowed past end of function
+ --> $DIR/issue-17954.rs:7:13
+ |
+LL | let a = &FOO;
+ | ^^^^ thread-local variables cannot be borrowed beyond the end of the function
+...
+LL | }
+ | - end of enclosing function is here
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0712`.
diff --git a/tests/ui/issues/issue-17959.rs b/tests/ui/issues/issue-17959.rs
new file mode 100644
index 000000000..8bf9e6236
--- /dev/null
+++ b/tests/ui/issues/issue-17959.rs
@@ -0,0 +1,21 @@
+extern crate core;
+
+use core::ops::Drop;
+
+trait Bar {}
+
+struct G<T: ?Sized> {
+ _ptr: *const T
+}
+
+impl<T> Drop for G<T> {
+//~^ ERROR `Drop` impl requires `T: Sized`
+ fn drop(&mut self) {
+ if !self._ptr.is_null() {
+ }
+ }
+}
+
+fn main() {
+ let x:G<dyn Bar>;
+}
diff --git a/tests/ui/issues/issue-17959.stderr b/tests/ui/issues/issue-17959.stderr
new file mode 100644
index 000000000..fb795febf
--- /dev/null
+++ b/tests/ui/issues/issue-17959.stderr
@@ -0,0 +1,15 @@
+error[E0367]: `Drop` impl requires `T: Sized` but the struct it is implemented for does not
+ --> $DIR/issue-17959.rs:11:6
+ |
+LL | impl<T> Drop for G<T> {
+ | ^
+ |
+note: the implementor must specify the same requirement
+ --> $DIR/issue-17959.rs:7:1
+ |
+LL | struct G<T: ?Sized> {
+ | ^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0367`.
diff --git a/tests/ui/issues/issue-17994.rs b/tests/ui/issues/issue-17994.rs
new file mode 100644
index 000000000..39b0a7ebe
--- /dev/null
+++ b/tests/ui/issues/issue-17994.rs
@@ -0,0 +1,3 @@
+trait Tr {}
+type Huh<T> where T: Tr = isize; //~ ERROR type parameter `T` is unused
+fn main() {}
diff --git a/tests/ui/issues/issue-17994.stderr b/tests/ui/issues/issue-17994.stderr
new file mode 100644
index 000000000..61e1e496f
--- /dev/null
+++ b/tests/ui/issues/issue-17994.stderr
@@ -0,0 +1,9 @@
+error[E0091]: type parameter `T` is unused
+ --> $DIR/issue-17994.rs:2:10
+ |
+LL | type Huh<T> where T: Tr = isize;
+ | ^ unused type parameter
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0091`.
diff --git a/tests/ui/issues/issue-17999.rs b/tests/ui/issues/issue-17999.rs
new file mode 100644
index 000000000..941f1e775
--- /dev/null
+++ b/tests/ui/issues/issue-17999.rs
@@ -0,0 +1,10 @@
+#![deny(unused_variables)]
+
+fn main() {
+ for _ in 1..101 {
+ let x = (); //~ ERROR: unused variable: `x`
+ match () {
+ a => {} //~ ERROR: unused variable: `a`
+ }
+ }
+}
diff --git a/tests/ui/issues/issue-17999.stderr b/tests/ui/issues/issue-17999.stderr
new file mode 100644
index 000000000..4a1ef7350
--- /dev/null
+++ b/tests/ui/issues/issue-17999.stderr
@@ -0,0 +1,20 @@
+error: unused variable: `x`
+ --> $DIR/issue-17999.rs:5:13
+ |
+LL | let x = ();
+ | ^ help: if this is intentional, prefix it with an underscore: `_x`
+ |
+note: the lint level is defined here
+ --> $DIR/issue-17999.rs:1:9
+ |
+LL | #![deny(unused_variables)]
+ | ^^^^^^^^^^^^^^^^
+
+error: unused variable: `a`
+ --> $DIR/issue-17999.rs:7:13
+ |
+LL | a => {}
+ | ^ help: if this is intentional, prefix it with an underscore: `_a`
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/issues/issue-18058.rs b/tests/ui/issues/issue-18058.rs
new file mode 100644
index 000000000..cced66717
--- /dev/null
+++ b/tests/ui/issues/issue-18058.rs
@@ -0,0 +1,4 @@
+impl Undefined {}
+//~^ ERROR cannot find type `Undefined` in this scope
+
+fn main() {}
diff --git a/tests/ui/issues/issue-18058.stderr b/tests/ui/issues/issue-18058.stderr
new file mode 100644
index 000000000..18159ffc2
--- /dev/null
+++ b/tests/ui/issues/issue-18058.stderr
@@ -0,0 +1,9 @@
+error[E0412]: cannot find type `Undefined` in this scope
+ --> $DIR/issue-18058.rs:1:6
+ |
+LL | impl Undefined {}
+ | ^^^^^^^^^ not found in this scope
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0412`.
diff --git a/tests/ui/issues/issue-18088.rs b/tests/ui/issues/issue-18088.rs
new file mode 100644
index 000000000..c557b5a65
--- /dev/null
+++ b/tests/ui/issues/issue-18088.rs
@@ -0,0 +1,8 @@
+// check-pass
+
+pub trait Indexable<T>: std::ops::Index<usize, Output = T> {
+ fn index2(&self, i: usize) -> &T {
+ &self[i]
+ }
+}
+fn main() {}
diff --git a/tests/ui/issues/issue-18107.rs b/tests/ui/issues/issue-18107.rs
new file mode 100644
index 000000000..4bf5b6c0f
--- /dev/null
+++ b/tests/ui/issues/issue-18107.rs
@@ -0,0 +1,13 @@
+pub trait AbstractRenderer {}
+
+fn _create_render(_: &()) ->
+ dyn AbstractRenderer
+//~^ ERROR return type cannot have an unboxed trait object
+{
+ match 0 {
+ _ => unimplemented!()
+ }
+}
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-18107.stderr b/tests/ui/issues/issue-18107.stderr
new file mode 100644
index 000000000..1669b550a
--- /dev/null
+++ b/tests/ui/issues/issue-18107.stderr
@@ -0,0 +1,18 @@
+error[E0746]: return type cannot have an unboxed trait object
+ --> $DIR/issue-18107.rs:4:5
+ |
+LL | dyn AbstractRenderer
+ | ^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
+ |
+help: use `impl AbstractRenderer` as the return type if all return paths have the same type but you want to expose only the trait in the signature
+ |
+LL | impl AbstractRenderer
+ |
+help: use a boxed trait object if all return paths implement trait `AbstractRenderer`
+ |
+LL | Box<dyn AbstractRenderer>
+ | ++++ +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0746`.
diff --git a/tests/ui/issues/issue-18110.rs b/tests/ui/issues/issue-18110.rs
new file mode 100644
index 000000000..41c29e77d
--- /dev/null
+++ b/tests/ui/issues/issue-18110.rs
@@ -0,0 +1,7 @@
+// run-pass
+#![allow(unreachable_code)]
+// pretty-expanded FIXME #23616
+
+fn main() {
+ ({return},);
+}
diff --git a/tests/ui/issues/issue-18119.rs b/tests/ui/issues/issue-18119.rs
new file mode 100644
index 000000000..e48dc51a2
--- /dev/null
+++ b/tests/ui/issues/issue-18119.rs
@@ -0,0 +1,12 @@
+const X: u8 = 1;
+static Y: u8 = 1;
+fn foo() {}
+
+impl X {}
+//~^ ERROR expected type, found constant `X`
+impl Y {}
+//~^ ERROR expected type, found static `Y`
+impl foo {}
+//~^ ERROR expected type, found function `foo`
+
+fn main() {}
diff --git a/tests/ui/issues/issue-18119.stderr b/tests/ui/issues/issue-18119.stderr
new file mode 100644
index 000000000..ddee5a9da
--- /dev/null
+++ b/tests/ui/issues/issue-18119.stderr
@@ -0,0 +1,21 @@
+error[E0573]: expected type, found constant `X`
+ --> $DIR/issue-18119.rs:5:6
+ |
+LL | impl X {}
+ | ^ not a type
+
+error[E0573]: expected type, found static `Y`
+ --> $DIR/issue-18119.rs:7:6
+ |
+LL | impl Y {}
+ | ^ not a type
+
+error[E0573]: expected type, found function `foo`
+ --> $DIR/issue-18119.rs:9:6
+ |
+LL | impl foo {}
+ | ^^^ not a type
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0573`.
diff --git a/tests/ui/issues/issue-18159.rs b/tests/ui/issues/issue-18159.rs
new file mode 100644
index 000000000..bd347d632
--- /dev/null
+++ b/tests/ui/issues/issue-18159.rs
@@ -0,0 +1,3 @@
+fn main() {
+ let x; //~ ERROR type annotations needed
+}
diff --git a/tests/ui/issues/issue-18159.stderr b/tests/ui/issues/issue-18159.stderr
new file mode 100644
index 000000000..5e0589eed
--- /dev/null
+++ b/tests/ui/issues/issue-18159.stderr
@@ -0,0 +1,14 @@
+error[E0282]: type annotations needed
+ --> $DIR/issue-18159.rs:2:9
+ |
+LL | let x;
+ | ^
+ |
+help: consider giving `x` an explicit type
+ |
+LL | let x: /* Type */;
+ | ++++++++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-18173.rs b/tests/ui/issues/issue-18173.rs
new file mode 100644
index 000000000..11468040e
--- /dev/null
+++ b/tests/ui/issues/issue-18173.rs
@@ -0,0 +1,12 @@
+// run-pass
+trait Foo {
+ type T;
+}
+
+// should be able to use a trait with an associated type without specifying it as an argument
+trait Bar<F: Foo> {
+ fn bar(foo: &F);
+}
+
+pub fn main() {
+}
diff --git a/tests/ui/issues/issue-18183.rs b/tests/ui/issues/issue-18183.rs
new file mode 100644
index 000000000..64476d1c1
--- /dev/null
+++ b/tests/ui/issues/issue-18183.rs
@@ -0,0 +1,3 @@
+pub struct Foo<Bar=Bar>(Bar); //~ ERROR E0128
+pub struct Baz(Foo);
+fn main() {}
diff --git a/tests/ui/issues/issue-18183.stderr b/tests/ui/issues/issue-18183.stderr
new file mode 100644
index 000000000..a7dc64708
--- /dev/null
+++ b/tests/ui/issues/issue-18183.stderr
@@ -0,0 +1,9 @@
+error[E0128]: generic parameters with a default cannot use forward declared identifiers
+ --> $DIR/issue-18183.rs:1:20
+ |
+LL | pub struct Foo<Bar=Bar>(Bar);
+ | ^^^ defaulted generic parameters cannot be forward declared
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0128`.
diff --git a/tests/ui/issues/issue-18188.rs b/tests/ui/issues/issue-18188.rs
new file mode 100644
index 000000000..ce166724a
--- /dev/null
+++ b/tests/ui/issues/issue-18188.rs
@@ -0,0 +1,22 @@
+// check-pass
+// pretty-expanded FIXME #23616
+
+pub trait Promisable: Send + Sync {}
+impl<T: Send + Sync> Promisable for T {}
+
+pub fn propagate<'a, T, E, F, G>(mut action: F)
+ -> Box<dyn FnMut(Result<T, E>) -> Result<T, E> + 'a>
+ where
+ T: Promisable + Clone + 'a,
+ E: Promisable + Clone + 'a,
+ F: FnMut(&T) -> Result<T, E> + Send + 'a,
+ G: FnMut(Result<T, E>) -> Result<T, E> + 'a {
+ Box::new(move |result: Result<T, E>| {
+ match result {
+ Ok(ref t) => action(t),
+ Err(ref e) => Err(e.clone()),
+ }
+ })
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-1821.rs b/tests/ui/issues/issue-1821.rs
new file mode 100644
index 000000000..76ee9c3ed
--- /dev/null
+++ b/tests/ui/issues/issue-1821.rs
@@ -0,0 +1,13 @@
+// check-pass
+#![allow(dead_code)]
+#![allow(non_camel_case_types)]
+
+// Issue #1821 - Don't recurse trying to typecheck this
+
+
+// pretty-expanded FIXME #23616
+
+enum t {
+ foo(Vec<t>)
+}
+pub fn main() {}
diff --git a/tests/ui/issues/issue-18232.rs b/tests/ui/issues/issue-18232.rs
new file mode 100644
index 000000000..7e6f6ef0f
--- /dev/null
+++ b/tests/ui/issues/issue-18232.rs
@@ -0,0 +1,22 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+struct Cursor<'a>(::std::marker::PhantomData<&'a ()>);
+
+trait CursorNavigator {
+ fn init_cursor<'a, 'b:'a>(&'a self, cursor: &mut Cursor<'b>) -> bool;
+}
+
+struct SimpleNavigator;
+
+impl CursorNavigator for SimpleNavigator {
+ fn init_cursor<'a, 'b: 'a>(&'a self, _cursor: &mut Cursor<'b>) -> bool {
+ false
+ }
+}
+
+fn main() {
+ let mut c = Cursor(::std::marker::PhantomData);
+ let n = SimpleNavigator;
+ n.init_cursor(&mut c);
+}
diff --git a/tests/ui/issues/issue-18352.rs b/tests/ui/issues/issue-18352.rs
new file mode 100644
index 000000000..5d93ed064
--- /dev/null
+++ b/tests/ui/issues/issue-18352.rs
@@ -0,0 +1,14 @@
+// run-pass
+
+const X: &'static str = "12345";
+
+fn test(s: String) -> bool {
+ match &*s {
+ X => true,
+ _ => false
+ }
+}
+
+fn main() {
+ assert!(test("12345".to_string()));
+}
diff --git a/tests/ui/issues/issue-18353.rs b/tests/ui/issues/issue-18353.rs
new file mode 100644
index 000000000..3d15c9980
--- /dev/null
+++ b/tests/ui/issues/issue-18353.rs
@@ -0,0 +1,15 @@
+// run-pass
+#![allow(dead_code)]
+// Test that wrapping an unsized struct in an enum which gets optimised does
+// not ICE.
+
+// pretty-expanded FIXME #23616
+
+struct Str {
+ f: [u8]
+}
+
+fn main() {
+ let str: Option<&Str> = None;
+ let _ = str.is_some();
+}
diff --git a/tests/ui/issues/issue-18389.rs b/tests/ui/issues/issue-18389.rs
new file mode 100644
index 000000000..654dfb63b
--- /dev/null
+++ b/tests/ui/issues/issue-18389.rs
@@ -0,0 +1,18 @@
+use std::any::Any;
+use std::any::TypeId;
+
+trait Private<P, R> {
+ fn call(&self, p: P, r: R);
+}
+pub trait Public: Private<
+//~^ ERROR private trait `Private<<Self as Public>::P, <Self as Public>::R>` in public interface
+ <Self as Public>::P,
+ <Self as Public>::R
+> {
+ type P;
+ type R;
+
+ fn call_inner(&self);
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-18389.stderr b/tests/ui/issues/issue-18389.stderr
new file mode 100644
index 000000000..6ce78c45d
--- /dev/null
+++ b/tests/ui/issues/issue-18389.stderr
@@ -0,0 +1,16 @@
+error[E0445]: private trait `Private<<Self as Public>::P, <Self as Public>::R>` in public interface
+ --> $DIR/issue-18389.rs:7:1
+ |
+LL | trait Private<P, R> {
+ | ------------------- `Private<<Self as Public>::P, <Self as Public>::R>` declared as private
+...
+LL | / pub trait Public: Private<
+LL | |
+LL | | <Self as Public>::P,
+LL | | <Self as Public>::R
+LL | | > {
+ | |_^ can't leak private trait
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0445`.
diff --git a/tests/ui/issues/issue-18423.rs b/tests/ui/issues/issue-18423.rs
new file mode 100644
index 000000000..a81b32f05
--- /dev/null
+++ b/tests/ui/issues/issue-18423.rs
@@ -0,0 +1,8 @@
+// Test that `Box` cannot be used with a lifetime argument.
+
+struct Foo<'a> {
+ x: Box<'a, isize>
+ //~^ ERROR this struct takes 0 lifetime arguments but 1 lifetime argument was supplied
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-18423.stderr b/tests/ui/issues/issue-18423.stderr
new file mode 100644
index 000000000..bbf793662
--- /dev/null
+++ b/tests/ui/issues/issue-18423.stderr
@@ -0,0 +1,11 @@
+error[E0107]: this struct takes 0 lifetime arguments but 1 lifetime argument was supplied
+ --> $DIR/issue-18423.rs:4:8
+ |
+LL | x: Box<'a, isize>
+ | ^^^ -- help: remove this lifetime argument
+ | |
+ | expected 0 lifetime arguments
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0107`.
diff --git a/tests/ui/issues/issue-18446-2.rs b/tests/ui/issues/issue-18446-2.rs
new file mode 100644
index 000000000..85422d4d2
--- /dev/null
+++ b/tests/ui/issues/issue-18446-2.rs
@@ -0,0 +1,13 @@
+// check-pass
+#![allow(dead_code)]
+// Test that methods in trait impls should override default methods.
+
+trait T {
+ fn foo(&self) -> i32 { 0 }
+}
+
+impl<'a> dyn T + 'a {
+ fn foo(&self) -> i32 { 1 }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-18446.rs b/tests/ui/issues/issue-18446.rs
new file mode 100644
index 000000000..a2e238da0
--- /dev/null
+++ b/tests/ui/issues/issue-18446.rs
@@ -0,0 +1,19 @@
+// Test that name clashes between the method in an impl for the type
+// and the method in the trait when both are in the same scope.
+
+trait T {
+ fn foo(&self);
+}
+
+impl<'a> dyn T + 'a {
+ fn foo(&self) {}
+}
+
+impl T for i32 {
+ fn foo(&self) {}
+}
+
+fn main() {
+ let x: &dyn T = &0i32;
+ x.foo(); //~ ERROR multiple applicable items in scope [E0034]
+}
diff --git a/tests/ui/issues/issue-18446.stderr b/tests/ui/issues/issue-18446.stderr
new file mode 100644
index 000000000..939cf0292
--- /dev/null
+++ b/tests/ui/issues/issue-18446.stderr
@@ -0,0 +1,24 @@
+error[E0034]: multiple applicable items in scope
+ --> $DIR/issue-18446.rs:18:7
+ |
+LL | x.foo();
+ | ^^^ multiple `foo` found
+ |
+note: candidate #1 is defined in an impl for the type `(dyn T + 'a)`
+ --> $DIR/issue-18446.rs:9:5
+ |
+LL | fn foo(&self) {}
+ | ^^^^^^^^^^^^^
+note: candidate #2 is defined in the trait `T`
+ --> $DIR/issue-18446.rs:5:5
+ |
+LL | fn foo(&self);
+ | ^^^^^^^^^^^^^^
+help: disambiguate the associated function for candidate #2
+ |
+LL | T::foo(&x);
+ | ~~~~~~~~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0034`.
diff --git a/tests/ui/issues/issue-18464.rs b/tests/ui/issues/issue-18464.rs
new file mode 100644
index 000000000..14d2d0a6c
--- /dev/null
+++ b/tests/ui/issues/issue-18464.rs
@@ -0,0 +1,12 @@
+// run-pass
+#![deny(dead_code)]
+
+const LOW_RANGE: char = '0';
+const HIGH_RANGE: char = '9';
+
+fn main() {
+ match '5' {
+ LOW_RANGE..=HIGH_RANGE => (),
+ _ => ()
+ };
+}
diff --git a/tests/ui/issues/issue-18501.rs b/tests/ui/issues/issue-18501.rs
new file mode 100644
index 000000000..0ca23074c
--- /dev/null
+++ b/tests/ui/issues/issue-18501.rs
@@ -0,0 +1,13 @@
+// run-pass
+// Test that we don't ICE when inlining a function from another
+// crate that uses a trait method as a value due to incorrectly
+// translating the def ID of the trait during AST decoding.
+
+// aux-build:issue-18501.rs
+// pretty-expanded FIXME #23616
+
+extern crate issue_18501 as issue;
+
+fn main() {
+ issue::pass_method();
+}
diff --git a/tests/ui/issues/issue-18514.rs b/tests/ui/issues/issue-18514.rs
new file mode 100644
index 000000000..48e7f0741
--- /dev/null
+++ b/tests/ui/issues/issue-18514.rs
@@ -0,0 +1,16 @@
+// run-pass
+// Test that we don't ICE when codegenning a generic impl method from
+// an extern crate that contains a match expression on a local
+// variable place where one of the match case bodies contains an
+// expression that autoderefs through an overloaded generic deref
+// impl.
+
+// aux-build:issue-18514.rs
+
+extern crate issue_18514 as ice;
+use ice::{Tr, St};
+
+fn main() {
+ let st: St<()> = St(vec![]);
+ st.tr();
+}
diff --git a/tests/ui/issues/issue-18532.rs b/tests/ui/issues/issue-18532.rs
new file mode 100644
index 000000000..31fd87961
--- /dev/null
+++ b/tests/ui/issues/issue-18532.rs
@@ -0,0 +1,7 @@
+// Test that overloaded call parameter checking does not ICE
+// when a type error or unconstrained type variable propagates
+// into it.
+
+fn main() {
+ (return)((),()); //~ ERROR expected function, found `!`
+}
diff --git a/tests/ui/issues/issue-18532.stderr b/tests/ui/issues/issue-18532.stderr
new file mode 100644
index 000000000..4c224eb2d
--- /dev/null
+++ b/tests/ui/issues/issue-18532.stderr
@@ -0,0 +1,11 @@
+error[E0618]: expected function, found `!`
+ --> $DIR/issue-18532.rs:6:5
+ |
+LL | (return)((),());
+ | ^^^^^^^^-------
+ | |
+ | call expression requires function
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0618`.
diff --git a/tests/ui/issues/issue-18539.rs b/tests/ui/issues/issue-18539.rs
new file mode 100644
index 000000000..745df26e3
--- /dev/null
+++ b/tests/ui/issues/issue-18539.rs
@@ -0,0 +1,16 @@
+// run-pass
+// Test that coercing bare fn's that return a zero sized type to
+// a closure doesn't cause an LLVM ERROR
+
+// pretty-expanded FIXME #23616
+
+struct Foo;
+
+fn uint_to_foo(_: usize) -> Foo {
+ Foo
+}
+
+#[allow(unused_must_use)]
+fn main() {
+ (0..10).map(uint_to_foo);
+}
diff --git a/tests/ui/issues/issue-18566.rs b/tests/ui/issues/issue-18566.rs
new file mode 100644
index 000000000..9da904acf
--- /dev/null
+++ b/tests/ui/issues/issue-18566.rs
@@ -0,0 +1,25 @@
+use std::ops::Deref;
+
+struct MyPtr<'a>(&'a mut usize);
+impl<'a> Deref for MyPtr<'a> {
+ type Target = usize;
+
+ fn deref<'b>(&'b self) -> &'b usize { self.0 }
+}
+
+trait Tr {
+ fn poke(&self, s: &mut usize);
+}
+
+impl Tr for usize {
+ fn poke(&self, s: &mut usize) {
+ *s = 2;
+ }
+}
+
+fn main() {
+ let s = &mut 1;
+
+ MyPtr(s).poke(s);
+ //~^ ERROR cannot borrow `*s` as mutable more than once at a time
+}
diff --git a/tests/ui/issues/issue-18566.stderr b/tests/ui/issues/issue-18566.stderr
new file mode 100644
index 000000000..8db78935f
--- /dev/null
+++ b/tests/ui/issues/issue-18566.stderr
@@ -0,0 +1,12 @@
+error[E0499]: cannot borrow `*s` as mutable more than once at a time
+ --> $DIR/issue-18566.rs:23:19
+ |
+LL | MyPtr(s).poke(s);
+ | - ---- ^ second mutable borrow occurs here
+ | | |
+ | | first borrow later used by call
+ | first mutable borrow occurs here
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0499`.
diff --git a/tests/ui/issues/issue-18576.rs b/tests/ui/issues/issue-18576.rs
new file mode 100644
index 000000000..389cf108b
--- /dev/null
+++ b/tests/ui/issues/issue-18576.rs
@@ -0,0 +1,16 @@
+// run-fail
+// error-pattern:stop
+// ignore-emscripten no processes
+
+// #18576
+// Make sure that calling an extern function pointer in an unreachable
+// context doesn't cause an LLVM assertion
+
+#[allow(unreachable_code)]
+fn main() {
+ panic!("stop");
+ let pointer = other;
+ pointer();
+}
+
+extern "C" fn other() {}
diff --git a/tests/ui/issues/issue-18611.rs b/tests/ui/issues/issue-18611.rs
new file mode 100644
index 000000000..91a765f34
--- /dev/null
+++ b/tests/ui/issues/issue-18611.rs
@@ -0,0 +1,9 @@
+fn add_state(op: <isize as HasState>::State) {
+//~^ ERROR `isize: HasState` is not satisfied
+}
+
+trait HasState {
+ type State;
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-18611.stderr b/tests/ui/issues/issue-18611.stderr
new file mode 100644
index 000000000..bd18d4622
--- /dev/null
+++ b/tests/ui/issues/issue-18611.stderr
@@ -0,0 +1,9 @@
+error[E0277]: the trait bound `isize: HasState` is not satisfied
+ --> $DIR/issue-18611.rs:1:18
+ |
+LL | fn add_state(op: <isize as HasState>::State) {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `HasState` is not implemented for `isize`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-18685.rs b/tests/ui/issues/issue-18685.rs
new file mode 100644
index 000000000..bfe24b663
--- /dev/null
+++ b/tests/ui/issues/issue-18685.rs
@@ -0,0 +1,21 @@
+// run-pass
+// Test that the self param space is not used in a conflicting
+// manner by unboxed closures within a default method on a trait
+
+// pretty-expanded FIXME #23616
+
+trait Tr {
+ fn foo(&self);
+
+ fn bar(&self) {
+ (|| { self.foo() })()
+ }
+}
+
+impl Tr for () {
+ fn foo(&self) {}
+}
+
+fn main() {
+ ().bar();
+}
diff --git a/tests/ui/issues/issue-1871.rs b/tests/ui/issues/issue-1871.rs
new file mode 100644
index 000000000..f7a2bdd56
--- /dev/null
+++ b/tests/ui/issues/issue-1871.rs
@@ -0,0 +1,12 @@
+// Tests that we don't generate a spurious error about f.honk's type
+// being undeterminable
+fn main() {
+ let f = 42;
+
+ let _g = if f < 5 {
+ f.honk() //~ ERROR no method named `honk` found
+ }
+ else {
+ ()
+ };
+}
diff --git a/tests/ui/issues/issue-1871.stderr b/tests/ui/issues/issue-1871.stderr
new file mode 100644
index 000000000..b774ca22d
--- /dev/null
+++ b/tests/ui/issues/issue-1871.stderr
@@ -0,0 +1,9 @@
+error[E0599]: no method named `honk` found for type `{integer}` in the current scope
+ --> $DIR/issue-1871.rs:7:9
+ |
+LL | f.honk()
+ | ^^^^ method not found in `{integer}`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-18711.rs b/tests/ui/issues/issue-18711.rs
new file mode 100644
index 000000000..435841877
--- /dev/null
+++ b/tests/ui/issues/issue-18711.rs
@@ -0,0 +1,12 @@
+// run-pass
+// Test that we don't panic on a RefCell borrow conflict in certain
+// code paths involving unboxed closures.
+
+// pretty-expanded FIXME #23616
+
+// aux-build:issue-18711.rs
+extern crate issue_18711 as issue;
+
+fn main() {
+ (|| issue::inner(()))();
+}
diff --git a/tests/ui/issues/issue-18738.rs b/tests/ui/issues/issue-18738.rs
new file mode 100644
index 000000000..bcc1ec03f
--- /dev/null
+++ b/tests/ui/issues/issue-18738.rs
@@ -0,0 +1,17 @@
+// check-pass
+#![allow(dead_code)]
+#[derive(Eq, PartialEq, PartialOrd, Ord)]
+enum Test<'a> {
+ Int(&'a isize),
+ Slice(&'a [u8]),
+}
+
+#[derive(Eq, PartialEq, PartialOrd, Ord)]
+struct Version {
+ vendor_info: &'static str
+}
+
+#[derive(Eq, PartialEq, PartialOrd, Ord)]
+struct Foo(&'static str);
+
+fn main() {}
diff --git a/tests/ui/issues/issue-18767.rs b/tests/ui/issues/issue-18767.rs
new file mode 100644
index 000000000..2a5721b72
--- /dev/null
+++ b/tests/ui/issues/issue-18767.rs
@@ -0,0 +1,10 @@
+// run-pass
+// Test that regionck uses the right memcat for patterns in for loops
+// and doesn't ICE.
+
+
+fn main() {
+ for &&x in Some(&0_usize).iter() {
+ assert_eq!(x, 0)
+ }
+}
diff --git a/tests/ui/issues/issue-18783.rs b/tests/ui/issues/issue-18783.rs
new file mode 100644
index 000000000..d4851ac14
--- /dev/null
+++ b/tests/ui/issues/issue-18783.rs
@@ -0,0 +1,28 @@
+use std::cell::RefCell;
+
+fn main() {
+ let mut y = 1;
+ let c = RefCell::new(vec![]);
+ c.push(Box::new(|| y = 0));
+ c.push(Box::new(|| y = 0));
+//~^ ERROR cannot borrow `y` as mutable more than once at a time
+}
+
+fn ufcs() {
+ let mut y = 1;
+ let c = RefCell::new(vec![]);
+
+ Push::push(&c, Box::new(|| y = 0));
+ Push::push(&c, Box::new(|| y = 0));
+//~^ ERROR cannot borrow `y` as mutable more than once at a time
+}
+
+trait Push<'c> {
+ fn push<'f: 'c>(&self, push: Box<dyn FnMut() + 'f>);
+}
+
+impl<'c> Push<'c> for RefCell<Vec<Box<dyn FnMut() + 'c>>> {
+ fn push<'f: 'c>(&self, fun: Box<dyn FnMut() + 'f>) {
+ self.borrow_mut().push(fun)
+ }
+}
diff --git a/tests/ui/issues/issue-18783.stderr b/tests/ui/issues/issue-18783.stderr
new file mode 100644
index 000000000..cc223ac46
--- /dev/null
+++ b/tests/ui/issues/issue-18783.stderr
@@ -0,0 +1,33 @@
+error[E0499]: cannot borrow `y` as mutable more than once at a time
+ --> $DIR/issue-18783.rs:7:21
+ |
+LL | c.push(Box::new(|| y = 0));
+ | -- - first borrow occurs due to use of `y` in closure
+ | |
+ | first mutable borrow occurs here
+LL | c.push(Box::new(|| y = 0));
+ | ^^ - second borrow occurs due to use of `y` in closure
+ | |
+ | second mutable borrow occurs here
+LL |
+LL | }
+ | - first borrow might be used here, when `c` is dropped and runs the destructor for type `RefCell<Vec<Box<dyn FnMut()>>>`
+
+error[E0499]: cannot borrow `y` as mutable more than once at a time
+ --> $DIR/issue-18783.rs:16:29
+ |
+LL | Push::push(&c, Box::new(|| y = 0));
+ | -- - first borrow occurs due to use of `y` in closure
+ | |
+ | first mutable borrow occurs here
+LL | Push::push(&c, Box::new(|| y = 0));
+ | ^^ - second borrow occurs due to use of `y` in closure
+ | |
+ | second mutable borrow occurs here
+LL |
+LL | }
+ | - first borrow might be used here, when `c` is dropped and runs the destructor for type `RefCell<Vec<Box<dyn FnMut()>>>`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0499`.
diff --git a/tests/ui/issues/issue-18804/auxiliary/lib.rs b/tests/ui/issues/issue-18804/auxiliary/lib.rs
new file mode 100644
index 000000000..e29d48285
--- /dev/null
+++ b/tests/ui/issues/issue-18804/auxiliary/lib.rs
@@ -0,0 +1,10 @@
+#![crate_type = "rlib"]
+#![feature(linkage)]
+
+pub fn foo<T>() -> *const () {
+ extern "C" {
+ #[linkage = "extern_weak"]
+ static FOO: *const ();
+ }
+ unsafe { FOO }
+}
diff --git a/tests/ui/issues/issue-18804/main.rs b/tests/ui/issues/issue-18804/main.rs
new file mode 100644
index 000000000..c36048ea5
--- /dev/null
+++ b/tests/ui/issues/issue-18804/main.rs
@@ -0,0 +1,19 @@
+// run-pass
+// Test for issue #18804, #[linkage] does not propagate through generic
+// functions. Failure results in a linker error.
+
+// ignore-asmjs no weak symbol support
+// ignore-emscripten no weak symbol support
+// ignore-windows no extern_weak linkage
+// ignore-macos no extern_weak linkage
+
+// aux-build:lib.rs
+
+// rust-lang/rust#56772: nikic says we need this to be proper test.
+// compile-flags: -C no-prepopulate-passes -C passes=name-anon-globals
+
+extern crate lib;
+
+fn main() {
+ lib::foo::<i32>();
+}
diff --git a/tests/ui/issues/issue-18809.rs b/tests/ui/issues/issue-18809.rs
new file mode 100644
index 000000000..cc5b4a64c
--- /dev/null
+++ b/tests/ui/issues/issue-18809.rs
@@ -0,0 +1,12 @@
+// check-pass
+trait Tup {
+ type T0;
+ type T1;
+}
+
+impl Tup for isize {
+ type T0 = f32;
+ type T1 = ();
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-18819.rs b/tests/ui/issues/issue-18819.rs
new file mode 100644
index 000000000..e634c55f8
--- /dev/null
+++ b/tests/ui/issues/issue-18819.rs
@@ -0,0 +1,18 @@
+trait Foo {
+ type Item;
+}
+
+struct X;
+
+impl Foo for X {
+ type Item = bool;
+}
+
+fn print_x(_: &dyn Foo<Item=bool>, extra: &str) {
+ println!("{}", extra);
+}
+
+fn main() {
+ print_x(X);
+ //~^ ERROR E0061
+}
diff --git a/tests/ui/issues/issue-18819.stderr b/tests/ui/issues/issue-18819.stderr
new file mode 100644
index 000000000..767fdd5ca
--- /dev/null
+++ b/tests/ui/issues/issue-18819.stderr
@@ -0,0 +1,30 @@
+error[E0061]: this function takes 2 arguments but 1 argument was supplied
+ --> $DIR/issue-18819.rs:16:5
+ |
+LL | print_x(X);
+ | ^^^^^^^--- an argument of type `&str` is missing
+ |
+note: expected reference, found struct `X`
+ --> $DIR/issue-18819.rs:16:13
+ |
+LL | print_x(X);
+ | ^
+ = note: expected reference `&dyn Foo<Item = bool>`
+ found struct `X`
+note: function defined here
+ --> $DIR/issue-18819.rs:11:4
+ |
+LL | fn print_x(_: &dyn Foo<Item=bool>, extra: &str) {
+ | ^^^^^^^ ---------------------- -----------
+help: consider borrowing here
+ |
+LL | print_x(&X);
+ | ~~
+help: provide the argument
+ |
+LL | print_x(/* &dyn Foo<Item = bool> */, /* &str */);
+ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0061`.
diff --git a/tests/ui/issues/issue-18845.rs b/tests/ui/issues/issue-18845.rs
new file mode 100644
index 000000000..83fab4b5e
--- /dev/null
+++ b/tests/ui/issues/issue-18845.rs
@@ -0,0 +1,16 @@
+// run-pass
+// This used to generate invalid IR in that even if we took the
+// `false` branch we'd still try to free the Box from the other
+// arm. This was due to treating `*Box::new(9)` as an rvalue datum
+// instead of as a place.
+
+fn test(foo: bool) -> u8 {
+ match foo {
+ true => *Box::new(9),
+ false => 0
+ }
+}
+
+fn main() {
+ assert_eq!(9, test(true));
+}
diff --git a/tests/ui/issues/issue-18859.rs b/tests/ui/issues/issue-18859.rs
new file mode 100644
index 000000000..c4575bce9
--- /dev/null
+++ b/tests/ui/issues/issue-18859.rs
@@ -0,0 +1,16 @@
+// run-pass
+
+mod foo {
+ pub mod bar {
+ pub mod baz {
+ pub fn name() -> &'static str {
+ module_path!()
+ }
+ }
+ }
+}
+
+fn main() {
+ assert_eq!(module_path!(), "issue_18859");
+ assert_eq!(foo::bar::baz::name(), "issue_18859::foo::bar::baz");
+}
diff --git a/tests/ui/issues/issue-18906.rs b/tests/ui/issues/issue-18906.rs
new file mode 100644
index 000000000..976a9f49b
--- /dev/null
+++ b/tests/ui/issues/issue-18906.rs
@@ -0,0 +1,30 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+pub trait Borrow<Borrowed: ?Sized> {
+ fn borrow(&self) -> &Borrowed;
+}
+
+impl<T: Sized> Borrow<T> for T {
+ fn borrow(&self) -> &T { self }
+}
+
+trait Foo {
+ fn foo(&self, other: &Self);
+}
+
+fn bar<K, Q>(k: &K, q: &Q) where K: Borrow<Q>, Q: Foo {
+ q.foo(k.borrow())
+}
+
+struct MyTree<K>(K);
+
+impl<K> MyTree<K> {
+ // This caused a failure in #18906
+ fn bar<Q>(k: &K, q: &Q) where K: Borrow<Q>, Q: Foo {
+ q.foo(k.borrow())
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-18913.rs b/tests/ui/issues/issue-18913.rs
new file mode 100644
index 000000000..27fae6d77
--- /dev/null
+++ b/tests/ui/issues/issue-18913.rs
@@ -0,0 +1,9 @@
+// run-pass
+// aux-build:issue-18913-1.rs
+// aux-build:issue-18913-2.rs
+
+extern crate foo;
+
+fn main() {
+ assert_eq!(foo::foo(), 1);
+}
diff --git a/tests/ui/issues/issue-18919.rs b/tests/ui/issues/issue-18919.rs
new file mode 100644
index 000000000..f06771e9e
--- /dev/null
+++ b/tests/ui/issues/issue-18919.rs
@@ -0,0 +1,12 @@
+type FuncType<'f> = dyn Fn(&isize) -> isize + 'f;
+
+fn ho_func(f: Option<FuncType>) {
+ //~^ ERROR the size for values of type
+}
+
+enum Option<T> {
+ Some(T),
+ None,
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-18919.stderr b/tests/ui/issues/issue-18919.stderr
new file mode 100644
index 000000000..b0b03a0ee
--- /dev/null
+++ b/tests/ui/issues/issue-18919.stderr
@@ -0,0 +1,23 @@
+error[E0277]: the size for values of type `dyn for<'a> Fn(&'a isize) -> isize` cannot be known at compilation time
+ --> $DIR/issue-18919.rs:3:15
+ |
+LL | fn ho_func(f: Option<FuncType>) {
+ | ^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `dyn for<'a> Fn(&'a isize) -> isize`
+note: required by a bound in `Option`
+ --> $DIR/issue-18919.rs:7:13
+ |
+LL | enum Option<T> {
+ | ^ required by this bound in `Option`
+help: you could relax the implicit `Sized` bound on `T` if it were used through indirection like `&T` or `Box<T>`
+ --> $DIR/issue-18919.rs:7:13
+ |
+LL | enum Option<T> {
+ | ^ this could be changed to `T: ?Sized`...
+LL | Some(T),
+ | - ...if indirection were used here: `Box<T>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-18952.rs b/tests/ui/issues/issue-18952.rs
new file mode 100644
index 000000000..56378b59e
--- /dev/null
+++ b/tests/ui/issues/issue-18952.rs
@@ -0,0 +1,56 @@
+// This issue tests fn_traits overloading on arity.
+// run-pass
+
+#![feature(fn_traits)]
+#![feature(unboxed_closures)]
+
+struct Foo;
+
+impl Fn<(isize, isize)> for Foo {
+ extern "rust-call" fn call(&self, args: (isize, isize)) -> Self::Output {
+ println!("{:?}", args);
+ (args.0 + 1, args.1 + 1)
+ }
+}
+
+impl FnMut<(isize, isize)> for Foo {
+ extern "rust-call" fn call_mut(&mut self, args: (isize, isize)) -> Self::Output {
+ println!("{:?}", args);
+ (args.0 + 1, args.1 + 1)
+ }
+}
+
+impl FnOnce<(isize, isize)> for Foo {
+ type Output = (isize, isize);
+ extern "rust-call" fn call_once(self, args: (isize, isize)) -> Self::Output {
+ println!("{:?}", args);
+ (args.0 + 1, args.1 + 1)
+ }
+}
+
+impl Fn<(isize, isize, isize)> for Foo {
+ extern "rust-call" fn call(&self, args: (isize, isize, isize)) -> Self::Output {
+ println!("{:?}", args);
+ (args.0 + 3, args.1 + 3, args.2 + 3)
+ }
+}
+
+impl FnMut<(isize, isize, isize)> for Foo {
+ extern "rust-call" fn call_mut(&mut self, args: (isize, isize, isize)) -> Self::Output {
+ println!("{:?}", args);
+ (args.0 + 3, args.1 + 3, args.2 + 3)
+ }
+}
+impl FnOnce<(isize, isize, isize)> for Foo {
+ type Output = (isize, isize, isize);
+ extern "rust-call" fn call_once(self, args: (isize, isize, isize)) -> Self::Output {
+ println!("{:?}", args);
+ (args.0 + 3, args.1 + 3, args.2 + 3)
+ }
+}
+
+fn main() {
+ let foo = Foo;
+ assert_eq!(foo(1, 1), (2, 2));
+ assert_eq!(foo(1, 1, 1), (4, 4, 4));
+}
diff --git a/tests/ui/issues/issue-18959.rs b/tests/ui/issues/issue-18959.rs
new file mode 100644
index 000000000..4b6f04e25
--- /dev/null
+++ b/tests/ui/issues/issue-18959.rs
@@ -0,0 +1,20 @@
+pub trait Foo { fn foo<T>(&self, ext_thing: &T); }
+pub trait Bar: Foo { }
+impl<T: Foo> Bar for T { }
+
+pub struct Thing;
+impl Foo for Thing {
+ fn foo<T>(&self, _: &T) {}
+}
+
+#[inline(never)]
+fn foo(b: &dyn Bar) {
+ //~^ ERROR E0038
+ b.foo(&0)
+}
+
+fn main() {
+ let mut thing = Thing;
+ let test: &dyn Bar = &mut thing;
+ foo(test);
+}
diff --git a/tests/ui/issues/issue-18959.stderr b/tests/ui/issues/issue-18959.stderr
new file mode 100644
index 000000000..b9e278736
--- /dev/null
+++ b/tests/ui/issues/issue-18959.stderr
@@ -0,0 +1,18 @@
+error[E0038]: the trait `Bar` cannot be made into an object
+ --> $DIR/issue-18959.rs:11:12
+ |
+LL | fn foo(b: &dyn Bar) {
+ | ^^^^^^^ `Bar` cannot be made into an object
+ |
+note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
+ --> $DIR/issue-18959.rs:1:20
+ |
+LL | pub trait Foo { fn foo<T>(&self, ext_thing: &T); }
+ | ^^^ ...because method `foo` has generic type parameters
+LL | pub trait Bar: Foo { }
+ | --- this trait cannot be made into an object...
+ = help: consider moving `foo` to another trait
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0038`.
diff --git a/tests/ui/issues/issue-18988.rs b/tests/ui/issues/issue-18988.rs
new file mode 100644
index 000000000..708965d81
--- /dev/null
+++ b/tests/ui/issues/issue-18988.rs
@@ -0,0 +1,11 @@
+// check-pass
+#![allow(dead_code)]
+pub trait Foo : Send { }
+
+pub struct MyFoo {
+ children: Vec<Box<dyn Foo>>,
+}
+
+impl Foo for MyFoo { }
+
+pub fn main() { }
diff --git a/tests/ui/issues/issue-1900.rs b/tests/ui/issues/issue-1900.rs
new file mode 100644
index 000000000..761bd3170
--- /dev/null
+++ b/tests/ui/issues/issue-1900.rs
@@ -0,0 +1,2 @@
+fn main<T>() { }
+//~^ ERROR `main` function is not allowed to have generic parameters
diff --git a/tests/ui/issues/issue-1900.stderr b/tests/ui/issues/issue-1900.stderr
new file mode 100644
index 000000000..ce413662f
--- /dev/null
+++ b/tests/ui/issues/issue-1900.stderr
@@ -0,0 +1,9 @@
+error[E0131]: `main` function is not allowed to have generic parameters
+ --> $DIR/issue-1900.rs:1:8
+ |
+LL | fn main<T>() { }
+ | ^^^ `main` cannot have generic parameters
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0131`.
diff --git a/tests/ui/issues/issue-19001.rs b/tests/ui/issues/issue-19001.rs
new file mode 100644
index 000000000..76c380c2f
--- /dev/null
+++ b/tests/ui/issues/issue-19001.rs
@@ -0,0 +1,11 @@
+// run-pass
+#![allow(dead_code)]
+// check that we handle recursive arrays correctly in `type_of`
+
+struct Loopy {
+ ptr: *mut [Loopy; 1]
+}
+
+fn main() {
+ let _t = Loopy { ptr: core::ptr::null_mut() };
+}
diff --git a/tests/ui/issues/issue-19037.rs b/tests/ui/issues/issue-19037.rs
new file mode 100644
index 000000000..74623da14
--- /dev/null
+++ b/tests/ui/issues/issue-19037.rs
@@ -0,0 +1,20 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+struct Str([u8]);
+
+#[derive(Clone)]
+struct CharSplits<'a, Sep> {
+ string: &'a Str,
+ sep: Sep,
+ allow_trailing_empty: bool,
+ only_ascii: bool,
+ finished: bool,
+}
+
+fn clone(s: &Str) -> &Str {
+ Clone::clone(&s)
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-19086.rs b/tests/ui/issues/issue-19086.rs
new file mode 100644
index 000000000..42148c5f5
--- /dev/null
+++ b/tests/ui/issues/issue-19086.rs
@@ -0,0 +1,13 @@
+use Foo::FooB;
+
+enum Foo {
+ FooB { x: i32, y: i32 }
+}
+
+fn main() {
+ let f = FooB { x: 3, y: 4 };
+ match f {
+ FooB(a, b) => println!("{} {}", a, b),
+ //~^ ERROR expected tuple struct or tuple variant, found variant `FooB`
+ }
+}
diff --git a/tests/ui/issues/issue-19086.stderr b/tests/ui/issues/issue-19086.stderr
new file mode 100644
index 000000000..a3c06a725
--- /dev/null
+++ b/tests/ui/issues/issue-19086.stderr
@@ -0,0 +1,12 @@
+error[E0532]: expected tuple struct or tuple variant, found variant `FooB`
+ --> $DIR/issue-19086.rs:10:9
+ |
+LL | FooB { x: i32, y: i32 }
+ | ----------------------- `FooB` defined here
+...
+LL | FooB(a, b) => println!("{} {}", a, b),
+ | ^^^^^^^^^^ help: use struct pattern syntax instead: `FooB { x, y }`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0532`.
diff --git a/tests/ui/issues/issue-19097.rs b/tests/ui/issues/issue-19097.rs
new file mode 100644
index 000000000..2f4b0d575
--- /dev/null
+++ b/tests/ui/issues/issue-19097.rs
@@ -0,0 +1,14 @@
+// check-pass
+#![allow(dead_code)]
+// regression test for #19097
+
+struct Foo<T>(T);
+
+impl<'a, T> Foo<&'a T> {
+ fn foo(&self) {}
+}
+impl<'a, T> Foo<&'a mut T> {
+ fn foo(&self) {}
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-19098.rs b/tests/ui/issues/issue-19098.rs
new file mode 100644
index 000000000..3d05f11b6
--- /dev/null
+++ b/tests/ui/issues/issue-19098.rs
@@ -0,0 +1,12 @@
+// check-pass
+pub trait Handler {
+ fn handle(&self, _: &mut String);
+}
+
+impl<F> Handler for F where F: for<'a, 'b> Fn(&'a mut String) {
+ fn handle(&self, st: &mut String) {
+ self(st)
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-19100.fixed b/tests/ui/issues/issue-19100.fixed
new file mode 100644
index 000000000..029855de2
--- /dev/null
+++ b/tests/ui/issues/issue-19100.fixed
@@ -0,0 +1,29 @@
+// run-rustfix
+
+#![allow(non_snake_case)]
+#![allow(dead_code)]
+#![allow(unused_variables)]
+
+#[derive(Copy, Clone)]
+enum Foo {
+ Bar,
+ Baz
+}
+
+impl Foo {
+ fn foo(&self) {
+ match self {
+ &
+Foo::Bar if true
+//~^ ERROR pattern binding `Bar` is named the same as one of the variants of the type `Foo`
+=> println!("bar"),
+ &
+Foo::Baz if false
+//~^ ERROR pattern binding `Baz` is named the same as one of the variants of the type `Foo`
+=> println!("baz"),
+_ => ()
+ }
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-19100.rs b/tests/ui/issues/issue-19100.rs
new file mode 100644
index 000000000..bd9e4ea5b
--- /dev/null
+++ b/tests/ui/issues/issue-19100.rs
@@ -0,0 +1,29 @@
+// run-rustfix
+
+#![allow(non_snake_case)]
+#![allow(dead_code)]
+#![allow(unused_variables)]
+
+#[derive(Copy, Clone)]
+enum Foo {
+ Bar,
+ Baz
+}
+
+impl Foo {
+ fn foo(&self) {
+ match self {
+ &
+Bar if true
+//~^ ERROR pattern binding `Bar` is named the same as one of the variants of the type `Foo`
+=> println!("bar"),
+ &
+Baz if false
+//~^ ERROR pattern binding `Baz` is named the same as one of the variants of the type `Foo`
+=> println!("baz"),
+_ => ()
+ }
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-19100.stderr b/tests/ui/issues/issue-19100.stderr
new file mode 100644
index 000000000..ebbf083b7
--- /dev/null
+++ b/tests/ui/issues/issue-19100.stderr
@@ -0,0 +1,17 @@
+error[E0170]: pattern binding `Bar` is named the same as one of the variants of the type `Foo`
+ --> $DIR/issue-19100.rs:17:1
+ |
+LL | Bar if true
+ | ^^^ help: to match on the variant, qualify the path: `Foo::Bar`
+ |
+ = note: `#[deny(bindings_with_variant_name)]` on by default
+
+error[E0170]: pattern binding `Baz` is named the same as one of the variants of the type `Foo`
+ --> $DIR/issue-19100.rs:21:1
+ |
+LL | Baz if false
+ | ^^^ help: to match on the variant, qualify the path: `Foo::Baz`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0170`.
diff --git a/tests/ui/issues/issue-19102.rs b/tests/ui/issues/issue-19102.rs
new file mode 100644
index 000000000..1f32d10b6
--- /dev/null
+++ b/tests/ui/issues/issue-19102.rs
@@ -0,0 +1,12 @@
+// check-pass
+#![allow(unused_imports)]
+#![deny(unused_qualifications)]
+
+use self::A::B;
+
+#[derive(PartialEq)]
+pub enum A {
+ B,
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-19127.rs b/tests/ui/issues/issue-19127.rs
new file mode 100644
index 000000000..c847ac9e4
--- /dev/null
+++ b/tests/ui/issues/issue-19127.rs
@@ -0,0 +1,10 @@
+// run-pass
+#![allow(unused_variables)]
+// pretty-expanded FIXME #23616
+
+fn foo<T, F: FnOnce(T) -> T>(f: F) {}
+fn id<'a>(input: &'a u8) -> &'a u8 { input }
+
+fn main() {
+ foo(id);
+}
diff --git a/tests/ui/issues/issue-19129-1.rs b/tests/ui/issues/issue-19129-1.rs
new file mode 100644
index 000000000..03a969101
--- /dev/null
+++ b/tests/ui/issues/issue-19129-1.rs
@@ -0,0 +1,16 @@
+// check-pass
+// pretty-expanded FIXME #23616
+
+trait Trait<Input> {
+ type Output;
+
+ fn method() -> <Self as Trait<Input>>::Output;
+}
+
+impl<T> Trait<T> for () {
+ type Output = ();
+
+ fn method() {}
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-19129-2.rs b/tests/ui/issues/issue-19129-2.rs
new file mode 100644
index 000000000..991d79d41
--- /dev/null
+++ b/tests/ui/issues/issue-19129-2.rs
@@ -0,0 +1,11 @@
+// check-pass
+#![allow(unused_variables)]
+// pretty-expanded FIXME #23616
+
+trait Trait<Input> {
+ type Output;
+
+ fn method(&self, i: Input) -> bool { false }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-19135.rs b/tests/ui/issues/issue-19135.rs
new file mode 100644
index 000000000..84540a3ff
--- /dev/null
+++ b/tests/ui/issues/issue-19135.rs
@@ -0,0 +1,13 @@
+// run-pass
+use std::marker::PhantomData;
+
+#[derive(Debug)]
+struct LifetimeStruct<'a>(PhantomData<&'a ()>);
+
+fn main() {
+ takes_hrtb_closure(|lts| println!("{:?}", lts));
+}
+
+fn takes_hrtb_closure<F: for<'a>FnMut(LifetimeStruct<'a>)>(mut f: F) {
+ f(LifetimeStruct(PhantomData));
+}
diff --git a/tests/ui/issues/issue-1920-1.rs b/tests/ui/issues/issue-1920-1.rs
new file mode 100644
index 000000000..26553f56b
--- /dev/null
+++ b/tests/ui/issues/issue-1920-1.rs
@@ -0,0 +1,14 @@
+//! Test that absolute path names are correct when a crate is not linked into the root namespace
+
+// aux-build:issue-1920.rs
+
+mod foo {
+ pub extern crate issue_1920;
+}
+
+fn assert_clone<T>() where T : Clone { }
+
+fn main() {
+ assert_clone::<foo::issue_1920::S>();
+ //~^ ERROR `S: Clone` is not satisfied
+}
diff --git a/tests/ui/issues/issue-1920-1.stderr b/tests/ui/issues/issue-1920-1.stderr
new file mode 100644
index 000000000..a54692425
--- /dev/null
+++ b/tests/ui/issues/issue-1920-1.stderr
@@ -0,0 +1,15 @@
+error[E0277]: the trait bound `S: Clone` is not satisfied
+ --> $DIR/issue-1920-1.rs:12:20
+ |
+LL | assert_clone::<foo::issue_1920::S>();
+ | ^^^^^^^^^^^^^^^^^^ the trait `Clone` is not implemented for `S`
+ |
+note: required by a bound in `assert_clone`
+ --> $DIR/issue-1920-1.rs:9:32
+ |
+LL | fn assert_clone<T>() where T : Clone { }
+ | ^^^^^ required by this bound in `assert_clone`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-1920-2.rs b/tests/ui/issues/issue-1920-2.rs
new file mode 100644
index 000000000..8d4a5f663
--- /dev/null
+++ b/tests/ui/issues/issue-1920-2.rs
@@ -0,0 +1,12 @@
+//! Test that when a crate is linked under another name that name is used in global paths
+
+// aux-build:issue-1920.rs
+
+extern crate issue_1920 as bar;
+
+fn assert_clone<T>() where T : Clone { }
+
+fn main() {
+ assert_clone::<bar::S>();
+ //~^ ERROR `S: Clone` is not satisfied
+}
diff --git a/tests/ui/issues/issue-1920-2.stderr b/tests/ui/issues/issue-1920-2.stderr
new file mode 100644
index 000000000..1083b0112
--- /dev/null
+++ b/tests/ui/issues/issue-1920-2.stderr
@@ -0,0 +1,15 @@
+error[E0277]: the trait bound `S: Clone` is not satisfied
+ --> $DIR/issue-1920-2.rs:10:20
+ |
+LL | assert_clone::<bar::S>();
+ | ^^^^^^ the trait `Clone` is not implemented for `S`
+ |
+note: required by a bound in `assert_clone`
+ --> $DIR/issue-1920-2.rs:7:32
+ |
+LL | fn assert_clone<T>() where T : Clone { }
+ | ^^^^^ required by this bound in `assert_clone`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-1920-3.rs b/tests/ui/issues/issue-1920-3.rs
new file mode 100644
index 000000000..520db50f9
--- /dev/null
+++ b/tests/ui/issues/issue-1920-3.rs
@@ -0,0 +1,16 @@
+//! Test that when a crate is linked multiple times that the shortest absolute path name is used
+
+// aux-build:issue-1920.rs
+
+mod foo {
+ pub extern crate issue_1920;
+}
+
+extern crate issue_1920;
+
+fn assert_clone<T>() where T : Clone { }
+
+fn main() {
+ assert_clone::<foo::issue_1920::S>();
+ //~^ ERROR `S: Clone` is not satisfied
+}
diff --git a/tests/ui/issues/issue-1920-3.stderr b/tests/ui/issues/issue-1920-3.stderr
new file mode 100644
index 000000000..3f0787c88
--- /dev/null
+++ b/tests/ui/issues/issue-1920-3.stderr
@@ -0,0 +1,15 @@
+error[E0277]: the trait bound `S: Clone` is not satisfied
+ --> $DIR/issue-1920-3.rs:14:20
+ |
+LL | assert_clone::<foo::issue_1920::S>();
+ | ^^^^^^^^^^^^^^^^^^ the trait `Clone` is not implemented for `S`
+ |
+note: required by a bound in `assert_clone`
+ --> $DIR/issue-1920-3.rs:11:32
+ |
+LL | fn assert_clone<T>() where T : Clone { }
+ | ^^^^^ required by this bound in `assert_clone`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-19244-1.rs b/tests/ui/issues/issue-19244-1.rs
new file mode 100644
index 000000000..77fab7cfa
--- /dev/null
+++ b/tests/ui/issues/issue-19244-1.rs
@@ -0,0 +1,6 @@
+const TUP: (usize,) = (42,);
+
+fn main() {
+ let a: [isize; TUP.1];
+ //~^ ERROR no field `1` on type `(usize,)`
+}
diff --git a/tests/ui/issues/issue-19244-1.stderr b/tests/ui/issues/issue-19244-1.stderr
new file mode 100644
index 000000000..1eb530542
--- /dev/null
+++ b/tests/ui/issues/issue-19244-1.stderr
@@ -0,0 +1,9 @@
+error[E0609]: no field `1` on type `(usize,)`
+ --> $DIR/issue-19244-1.rs:4:24
+ |
+LL | let a: [isize; TUP.1];
+ | ^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0609`.
diff --git a/tests/ui/issues/issue-19244-2.rs b/tests/ui/issues/issue-19244-2.rs
new file mode 100644
index 000000000..c9a68b05c
--- /dev/null
+++ b/tests/ui/issues/issue-19244-2.rs
@@ -0,0 +1,7 @@
+struct MyStruct { field: usize }
+const STRUCT: MyStruct = MyStruct { field: 42 };
+
+fn main() {
+ let a: [isize; STRUCT.nonexistent_field];
+ //~^ no field `nonexistent_field` on type `MyStruct`
+}
diff --git a/tests/ui/issues/issue-19244-2.stderr b/tests/ui/issues/issue-19244-2.stderr
new file mode 100644
index 000000000..54529fdf5
--- /dev/null
+++ b/tests/ui/issues/issue-19244-2.stderr
@@ -0,0 +1,11 @@
+error[E0609]: no field `nonexistent_field` on type `MyStruct`
+ --> $DIR/issue-19244-2.rs:5:27
+ |
+LL | let a: [isize; STRUCT.nonexistent_field];
+ | ^^^^^^^^^^^^^^^^^ unknown field
+ |
+ = note: available fields are: `field`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0609`.
diff --git a/tests/ui/issues/issue-19293.rs b/tests/ui/issues/issue-19293.rs
new file mode 100644
index 000000000..b6e9e3d06
--- /dev/null
+++ b/tests/ui/issues/issue-19293.rs
@@ -0,0 +1,10 @@
+// run-pass
+// aux-build:issue-19293.rs
+// pretty-expanded FIXME #23616
+
+extern crate issue_19293;
+use issue_19293::{Foo, MyEnum};
+
+fn main() {
+ MyEnum::Foo(Foo(5));
+}
diff --git a/tests/ui/issues/issue-19340-1.rs b/tests/ui/issues/issue-19340-1.rs
new file mode 100644
index 000000000..e3cc2daae
--- /dev/null
+++ b/tests/ui/issues/issue-19340-1.rs
@@ -0,0 +1,17 @@
+// run-pass
+#![allow(unused_variables)]
+// aux-build:issue-19340-1.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_19340_1 as lib;
+
+use lib::Homura;
+
+fn main() {
+ let homura = Homura::Madoka { name: "Kaname".to_string() };
+
+ match homura {
+ Homura::Madoka { name } => (),
+ };
+}
diff --git a/tests/ui/issues/issue-19340-2.rs b/tests/ui/issues/issue-19340-2.rs
new file mode 100644
index 000000000..a222e9e46
--- /dev/null
+++ b/tests/ui/issues/issue-19340-2.rs
@@ -0,0 +1,24 @@
+// run-pass
+#![allow(unused_variables)]
+// pretty-expanded FIXME #23616
+
+enum Homura {
+ Madoka {
+ name: String,
+ age: u32,
+ },
+}
+
+fn main() {
+ let homura = Homura::Madoka {
+ name: "Akemi".to_string(),
+ age: 14,
+ };
+
+ match homura {
+ Homura::Madoka {
+ name,
+ age,
+ } => (),
+ };
+}
diff --git a/tests/ui/issues/issue-19367.rs b/tests/ui/issues/issue-19367.rs
new file mode 100644
index 000000000..0699533e7
--- /dev/null
+++ b/tests/ui/issues/issue-19367.rs
@@ -0,0 +1,32 @@
+// run-pass
+struct S {
+ o: Option<String>
+}
+
+// Make sure we don't reuse the same alloca when matching
+// on field of struct or tuple which we reassign in the match body.
+
+fn main() {
+ let mut a = (0, Some("right".to_string()));
+ let b = match a.1 {
+ Some(v) => {
+ a.1 = Some("wrong".to_string());
+ v
+ }
+ None => String::new()
+ };
+ println!("{}", b);
+ assert_eq!(b, "right");
+
+
+ let mut s = S{ o: Some("right".to_string()) };
+ let b = match s.o {
+ Some(v) => {
+ s.o = Some("wrong".to_string());
+ v
+ }
+ None => String::new(),
+ };
+ println!("{}", b);
+ assert_eq!(b, "right");
+}
diff --git a/tests/ui/issues/issue-19380.rs b/tests/ui/issues/issue-19380.rs
new file mode 100644
index 000000000..5c10e2067
--- /dev/null
+++ b/tests/ui/issues/issue-19380.rs
@@ -0,0 +1,18 @@
+trait Qiz {
+ fn qiz();
+}
+
+struct Foo;
+impl Qiz for Foo {
+ fn qiz() {}
+}
+
+struct Bar {
+ foos: &'static [&'static (dyn Qiz + 'static)]
+//~^ ERROR E0038
+}
+
+const FOO : Foo = Foo;
+const BAR : Bar = Bar { foos: &[&FOO]};
+
+fn main() { }
diff --git a/tests/ui/issues/issue-19380.stderr b/tests/ui/issues/issue-19380.stderr
new file mode 100644
index 000000000..b2aeb5edf
--- /dev/null
+++ b/tests/ui/issues/issue-19380.stderr
@@ -0,0 +1,25 @@
+error[E0038]: the trait `Qiz` cannot be made into an object
+ --> $DIR/issue-19380.rs:11:29
+ |
+LL | foos: &'static [&'static (dyn Qiz + 'static)]
+ | ^^^^^^^^^^^^^^^^^ `Qiz` cannot be made into an object
+ |
+note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
+ --> $DIR/issue-19380.rs:2:6
+ |
+LL | trait Qiz {
+ | --- this trait cannot be made into an object...
+LL | fn qiz();
+ | ^^^ ...because associated function `qiz` has no `self` parameter
+help: consider turning `qiz` into a method by giving it a `&self` argument
+ |
+LL | fn qiz(&self);
+ | +++++
+help: alternatively, consider constraining `qiz` so it does not apply to trait objects
+ |
+LL | fn qiz() where Self: Sized;
+ | +++++++++++++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0038`.
diff --git a/tests/ui/issues/issue-19398.rs b/tests/ui/issues/issue-19398.rs
new file mode 100644
index 000000000..a9d0acaa2
--- /dev/null
+++ b/tests/ui/issues/issue-19398.rs
@@ -0,0 +1,12 @@
+// check-pass
+// pretty-expanded FIXME #23616
+
+trait T {
+ unsafe extern "Rust" fn foo(&self);
+}
+
+impl T for () {
+ unsafe extern "Rust" fn foo(&self) {}
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-19404.rs b/tests/ui/issues/issue-19404.rs
new file mode 100644
index 000000000..f1cf1feb0
--- /dev/null
+++ b/tests/ui/issues/issue-19404.rs
@@ -0,0 +1,37 @@
+// build-pass
+#![allow(dead_code)]
+#![allow(unused_variables)]
+use std::any::TypeId;
+use std::rc::Rc;
+
+type Fp<T> = Rc<T>;
+
+struct Engine;
+
+trait Component: 'static {}
+impl Component for Engine {}
+
+trait Env {
+ fn get_component_type_id(&self, type_id: TypeId) -> Option<Fp<dyn Component>>;
+}
+
+impl<'a> dyn Env + 'a {
+ fn get_component<T: Component>(&self) -> Option<Fp<T>> {
+ let x = self.get_component_type_id(TypeId::of::<T>());
+ None
+ }
+}
+
+trait Figment {
+ fn init(&mut self, env: &dyn Env);
+}
+
+struct MyFigment;
+
+impl Figment for MyFigment {
+ fn init(&mut self, env: &dyn Env) {
+ let engine = env.get_component::<Engine>();
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-19479.rs b/tests/ui/issues/issue-19479.rs
new file mode 100644
index 000000000..70bfe7213
--- /dev/null
+++ b/tests/ui/issues/issue-19479.rs
@@ -0,0 +1,19 @@
+// check-pass
+// pretty-expanded FIXME #23616
+
+trait Base {
+ fn dummy(&self) { }
+}
+trait AssocA {
+ type X: Base;
+ fn dummy(&self) { }
+}
+trait AssocB {
+ type Y: Base;
+ fn dummy(&self) { }
+}
+impl<T: AssocA> AssocB for T {
+ type Y = <T as AssocA>::X;
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-19482.rs b/tests/ui/issues/issue-19482.rs
new file mode 100644
index 000000000..3f3c5de9b
--- /dev/null
+++ b/tests/ui/issues/issue-19482.rs
@@ -0,0 +1,13 @@
+// Test that a partially specified trait object with unspecified associated
+// type does not type-check.
+
+trait Foo {
+ type A;
+
+ fn dummy(&self) { }
+}
+
+fn bar(x: &dyn Foo) {}
+//~^ ERROR the associated type `A` (from trait `Foo`) must be specified
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-19482.stderr b/tests/ui/issues/issue-19482.stderr
new file mode 100644
index 000000000..d51cc1f08
--- /dev/null
+++ b/tests/ui/issues/issue-19482.stderr
@@ -0,0 +1,12 @@
+error[E0191]: the value of the associated type `A` (from trait `Foo`) must be specified
+ --> $DIR/issue-19482.rs:10:16
+ |
+LL | type A;
+ | ------ `A` defined here
+...
+LL | fn bar(x: &dyn Foo) {}
+ | ^^^ help: specify the associated type: `Foo<A = Type>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0191`.
diff --git a/tests/ui/issues/issue-19499.rs b/tests/ui/issues/issue-19499.rs
new file mode 100644
index 000000000..d09056ce3
--- /dev/null
+++ b/tests/ui/issues/issue-19499.rs
@@ -0,0 +1,15 @@
+// run-pass
+#![allow(path_statements)]
+#![allow(unused_variables)]
+// Regression test for issue #19499. Due to incorrect caching of trait
+// results for closures with upvars whose types were not fully
+// computed, this rather bizarre little program (along with many more
+// reasonable examples) let to ambiguity errors about not being able
+// to infer sufficient type information.
+
+// pretty-expanded FIXME #23616
+
+fn main() {
+ let n = 0;
+ let it = Some(1_usize).into_iter().inspect(|_| {n;});
+}
diff --git a/tests/ui/issues/issue-19521.rs b/tests/ui/issues/issue-19521.rs
new file mode 100644
index 000000000..a2a32a21a
--- /dev/null
+++ b/tests/ui/issues/issue-19521.rs
@@ -0,0 +1,3 @@
+fn main() {
+ "".homura()(); //~ ERROR no method named `homura` found
+}
diff --git a/tests/ui/issues/issue-19521.stderr b/tests/ui/issues/issue-19521.stderr
new file mode 100644
index 000000000..b6847cd75
--- /dev/null
+++ b/tests/ui/issues/issue-19521.stderr
@@ -0,0 +1,9 @@
+error[E0599]: no method named `homura` found for reference `&'static str` in the current scope
+ --> $DIR/issue-19521.rs:2:8
+ |
+LL | "".homura()();
+ | ^^^^^^ method not found in `&'static str`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-19601.rs b/tests/ui/issues/issue-19601.rs
new file mode 100644
index 000000000..176e6ba41
--- /dev/null
+++ b/tests/ui/issues/issue-19601.rs
@@ -0,0 +1,6 @@
+// check-pass
+
+trait A<T> {}
+struct B<T> where B<T>: A<B<T>> { t: T }
+
+fn main() {}
diff --git a/tests/ui/issues/issue-1962.fixed b/tests/ui/issues/issue-1962.fixed
new file mode 100644
index 000000000..897fd172b
--- /dev/null
+++ b/tests/ui/issues/issue-1962.fixed
@@ -0,0 +1,10 @@
+// compile-flags: -D while-true
+// run-rustfix
+
+fn main() {
+ let mut i = 0;
+ 'a: loop { //~ ERROR denote infinite loops with `loop
+ i += 1;
+ if i == 5 { break 'a; }
+ }
+}
diff --git a/tests/ui/issues/issue-1962.rs b/tests/ui/issues/issue-1962.rs
new file mode 100644
index 000000000..71e874100
--- /dev/null
+++ b/tests/ui/issues/issue-1962.rs
@@ -0,0 +1,10 @@
+// compile-flags: -D while-true
+// run-rustfix
+
+fn main() {
+ let mut i = 0;
+ 'a: while true { //~ ERROR denote infinite loops with `loop
+ i += 1;
+ if i == 5 { break 'a; }
+ }
+}
diff --git a/tests/ui/issues/issue-1962.stderr b/tests/ui/issues/issue-1962.stderr
new file mode 100644
index 000000000..4c32a4cf3
--- /dev/null
+++ b/tests/ui/issues/issue-1962.stderr
@@ -0,0 +1,10 @@
+error: denote infinite loops with `loop { ... }`
+ --> $DIR/issue-1962.rs:6:5
+ |
+LL | 'a: while true {
+ | ^^^^^^^^^^^^^^ help: use `loop`
+ |
+ = note: requested on the command line with `-D while-true`
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-19631.rs b/tests/ui/issues/issue-19631.rs
new file mode 100644
index 000000000..694e6dcd1
--- /dev/null
+++ b/tests/ui/issues/issue-19631.rs
@@ -0,0 +1,16 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+trait PoolManager {
+ type C;
+ fn dummy(&self) { }
+}
+
+struct InnerPool<M> {
+ manager: M,
+}
+
+impl<M> InnerPool<M> where M: PoolManager {}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-19632.rs b/tests/ui/issues/issue-19632.rs
new file mode 100644
index 000000000..203976079
--- /dev/null
+++ b/tests/ui/issues/issue-19632.rs
@@ -0,0 +1,14 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+trait PoolManager {
+ type C;
+ fn dummy(&self) { }
+}
+
+struct InnerPool<M: PoolManager> {
+ manager: M,
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-19692.rs b/tests/ui/issues/issue-19692.rs
new file mode 100644
index 000000000..99eccc8a8
--- /dev/null
+++ b/tests/ui/issues/issue-19692.rs
@@ -0,0 +1,8 @@
+struct Homura;
+
+fn akemi(homura: Homura) {
+ let Some(ref madoka) = Some(homura.kaname()); //~ ERROR no method named `kaname` found
+ madoka.clone();
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-19692.stderr b/tests/ui/issues/issue-19692.stderr
new file mode 100644
index 000000000..9e888ed75
--- /dev/null
+++ b/tests/ui/issues/issue-19692.stderr
@@ -0,0 +1,12 @@
+error[E0599]: no method named `kaname` found for struct `Homura` in the current scope
+ --> $DIR/issue-19692.rs:4:40
+ |
+LL | struct Homura;
+ | ------------- method `kaname` not found for this struct
+...
+LL | let Some(ref madoka) = Some(homura.kaname());
+ | ^^^^^^ method not found in `Homura`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-19707.rs b/tests/ui/issues/issue-19707.rs
new file mode 100644
index 000000000..6bc7132af
--- /dev/null
+++ b/tests/ui/issues/issue-19707.rs
@@ -0,0 +1,7 @@
+#![allow(dead_code)]
+
+type Foo = fn(&u8, &u8) -> &u8; //~ ERROR missing lifetime specifier
+
+fn bar<F: Fn(&u8, &u8) -> &u8>(f: &F) {} //~ ERROR missing lifetime specifier
+
+fn main() {}
diff --git a/tests/ui/issues/issue-19707.stderr b/tests/ui/issues/issue-19707.stderr
new file mode 100644
index 000000000..3e1bb32c1
--- /dev/null
+++ b/tests/ui/issues/issue-19707.stderr
@@ -0,0 +1,36 @@
+error[E0106]: missing lifetime specifier
+ --> $DIR/issue-19707.rs:3:28
+ |
+LL | type Foo = fn(&u8, &u8) -> &u8;
+ | --- --- ^ expected named lifetime parameter
+ |
+ = help: this function's return type contains a borrowed value, but the signature does not say whether it is borrowed from argument 1 or argument 2
+ = note: for more information on higher-ranked polymorphism, visit https://doc.rust-lang.org/nomicon/hrtb.html
+help: consider making the type lifetime-generic with a new `'a` lifetime
+ |
+LL | type Foo = for<'a> fn(&'a u8, &'a u8) -> &'a u8;
+ | +++++++ ++ ++ ++
+help: consider introducing a named lifetime parameter
+ |
+LL | type Foo<'a> = fn(&'a u8, &'a u8) -> &'a u8;
+ | ++++ ++ ++ ++
+
+error[E0106]: missing lifetime specifier
+ --> $DIR/issue-19707.rs:5:27
+ |
+LL | fn bar<F: Fn(&u8, &u8) -> &u8>(f: &F) {}
+ | --- --- ^ expected named lifetime parameter
+ |
+ = help: this function's return type contains a borrowed value, but the signature does not say whether it is borrowed from argument 1 or argument 2
+help: consider making the bound lifetime-generic with a new `'a` lifetime
+ |
+LL | fn bar<F: for<'a> Fn(&'a u8, &'a u8) -> &'a u8>(f: &F) {}
+ | +++++++ ++ ++ ++
+help: consider introducing a named lifetime parameter
+ |
+LL | fn bar<'a, F: Fn(&'a u8, &'a u8) -> &'a u8>(f: &F) {}
+ | +++ ++ ++ ++
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0106`.
diff --git a/tests/ui/issues/issue-19734.rs b/tests/ui/issues/issue-19734.rs
new file mode 100644
index 000000000..fe4a327ae
--- /dev/null
+++ b/tests/ui/issues/issue-19734.rs
@@ -0,0 +1,8 @@
+fn main() {}
+
+struct Type;
+
+impl Type {
+ undef!();
+ //~^ ERROR cannot find macro `undef` in this scope
+}
diff --git a/tests/ui/issues/issue-19734.stderr b/tests/ui/issues/issue-19734.stderr
new file mode 100644
index 000000000..81757974d
--- /dev/null
+++ b/tests/ui/issues/issue-19734.stderr
@@ -0,0 +1,8 @@
+error: cannot find macro `undef` in this scope
+ --> $DIR/issue-19734.rs:6:5
+ |
+LL | undef!();
+ | ^^^^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-1974.rs b/tests/ui/issues/issue-1974.rs
new file mode 100644
index 000000000..74a54a602
--- /dev/null
+++ b/tests/ui/issues/issue-1974.rs
@@ -0,0 +1,11 @@
+// run-pass
+// Issue 1974
+// Don't double free the condition allocation
+// pretty-expanded FIXME #23616
+
+pub fn main() {
+ let s = "hej".to_string();
+ while s != "".to_string() {
+ return;
+ }
+}
diff --git a/tests/ui/issues/issue-19811-escape-unicode.rs b/tests/ui/issues/issue-19811-escape-unicode.rs
new file mode 100644
index 000000000..a2c50bc02
--- /dev/null
+++ b/tests/ui/issues/issue-19811-escape-unicode.rs
@@ -0,0 +1,9 @@
+// run-pass
+
+fn main() {
+ let mut escaped = String::from("");
+ for c in '\u{10401}'.escape_unicode() {
+ escaped.push(c);
+ }
+ assert_eq!("\\u{10401}", escaped);
+}
diff --git a/tests/ui/issues/issue-19850.rs b/tests/ui/issues/issue-19850.rs
new file mode 100644
index 000000000..4a578c398
--- /dev/null
+++ b/tests/ui/issues/issue-19850.rs
@@ -0,0 +1,22 @@
+// check-pass
+#![allow(unused_variables)]
+// Test that `<Type as Trait>::Output` and `Self::Output` are accepted as type annotations in let
+// bindings
+
+// pretty-expanded FIXME #23616
+
+trait Int {
+ fn one() -> Self;
+ fn leading_zeros(self) -> usize;
+}
+
+trait Foo {
+ type T : Int;
+
+ fn test(&self) {
+ let r: <Self as Foo>::T = Int::one();
+ let r: Self::T = Int::one();
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-19922.rs b/tests/ui/issues/issue-19922.rs
new file mode 100644
index 000000000..fede86f22
--- /dev/null
+++ b/tests/ui/issues/issue-19922.rs
@@ -0,0 +1,8 @@
+enum Homura {
+ Akemi { madoka: () }
+}
+
+fn main() {
+ let homura = Homura::Akemi { kaname: () };
+ //~^ ERROR variant `Homura::Akemi` has no field named `kaname`
+}
diff --git a/tests/ui/issues/issue-19922.stderr b/tests/ui/issues/issue-19922.stderr
new file mode 100644
index 000000000..826b2ac04
--- /dev/null
+++ b/tests/ui/issues/issue-19922.stderr
@@ -0,0 +1,11 @@
+error[E0559]: variant `Homura::Akemi` has no field named `kaname`
+ --> $DIR/issue-19922.rs:6:34
+ |
+LL | let homura = Homura::Akemi { kaname: () };
+ | ^^^^^^ `Homura::Akemi` does not have this field
+ |
+ = note: available fields are: `madoka`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0559`.
diff --git a/tests/ui/issues/issue-19982.rs b/tests/ui/issues/issue-19982.rs
new file mode 100644
index 000000000..12419c109
--- /dev/null
+++ b/tests/ui/issues/issue-19982.rs
@@ -0,0 +1,22 @@
+// check-pass
+
+#![feature(fn_traits, unboxed_closures)]
+
+#[allow(dead_code)]
+struct Foo;
+
+impl Fn<(&(),)> for Foo {
+ extern "rust-call" fn call(&self, (_,): (&(),)) {}
+}
+
+impl FnMut<(&(),)> for Foo {
+ extern "rust-call" fn call_mut(&mut self, (_,): (&(),)) {}
+}
+
+impl FnOnce<(&(),)> for Foo {
+ type Output = ();
+
+ extern "rust-call" fn call_once(self, (_,): (&(),)) {}
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-19991.rs b/tests/ui/issues/issue-19991.rs
new file mode 100644
index 000000000..dd0efa972
--- /dev/null
+++ b/tests/ui/issues/issue-19991.rs
@@ -0,0 +1,9 @@
+// Test if the sugared `if let` construct correctly prints "missing an else clause" when an else
+// clause does not exist, instead of the unsympathetic "`match` arms have incompatible types"
+
+fn main() {
+ if let Some(homura) = Some("madoka") { //~ ERROR missing an `else` clause
+ //~| expected integer, found `()`
+ 765
+ };
+}
diff --git a/tests/ui/issues/issue-19991.stderr b/tests/ui/issues/issue-19991.stderr
new file mode 100644
index 000000000..57b0882b6
--- /dev/null
+++ b/tests/ui/issues/issue-19991.stderr
@@ -0,0 +1,16 @@
+error[E0317]: `if` may be missing an `else` clause
+ --> $DIR/issue-19991.rs:5:5
+ |
+LL | / if let Some(homura) = Some("madoka") {
+LL | |
+LL | | 765
+ | | --- found here
+LL | | };
+ | |_____^ expected integer, found `()`
+ |
+ = note: `if` expressions without `else` evaluate to `()`
+ = help: consider adding an `else` block that evaluates to the expected type
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0317`.
diff --git a/tests/ui/issues/issue-20009.rs b/tests/ui/issues/issue-20009.rs
new file mode 100644
index 000000000..f289e58c5
--- /dev/null
+++ b/tests/ui/issues/issue-20009.rs
@@ -0,0 +1,13 @@
+// check-pass
+// Check that associated types are `Sized`
+
+// pretty-expanded FIXME #23616
+
+trait Trait {
+ type Output;
+
+ fn is_sized(&self) -> Self::Output;
+ fn wasnt_sized(&self) -> Self::Output { loop {} }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-20055-box-trait.rs b/tests/ui/issues/issue-20055-box-trait.rs
new file mode 100644
index 000000000..772cd9d7e
--- /dev/null
+++ b/tests/ui/issues/issue-20055-box-trait.rs
@@ -0,0 +1,41 @@
+// run-pass
+// See Issues #20055 and #21695.
+
+// We are checking here that the temporaries `Box<[i8, k]>`, for `k`
+// in 1, 2, 3, 4, that are induced by the match expression are
+// properly handled, in that only *one* will be initialized by
+// whichever arm is run, and subsequently dropped at the end of the
+// statement surrounding the `match`.
+
+trait Boo {
+ fn dummy(&self) { }
+}
+
+impl Boo for [i8; 1] { }
+impl Boo for [i8; 2] { }
+impl Boo for [i8; 3] { }
+impl Boo for [i8; 4] { }
+
+pub fn foo(box_1: fn () -> Box<[i8; 1]>,
+ box_2: fn () -> Box<[i8; 2]>,
+ box_3: fn () -> Box<[i8; 3]>,
+ box_4: fn () -> Box<[i8; 4]>,
+ ) {
+ println!("Hello World 1");
+ let _: Box<dyn Boo> = match 3 {
+ 1 => box_1(),
+ 2 => box_2(),
+ 3 => box_3(),
+ _ => box_4(),
+ };
+ println!("Hello World 2");
+}
+
+pub fn main() {
+ fn box_1() -> Box<[i8; 1]> { Box::new( [1; 1] ) }
+ fn box_2() -> Box<[i8; 2]> { Box::new( [1; 2] ) }
+ fn box_3() -> Box<[i8; 3]> { Box::new( [1; 3] ) }
+ fn box_4() -> Box<[i8; 4]> { Box::new( [1; 4] ) }
+
+ foo(box_1, box_2, box_3, box_4);
+}
diff --git a/tests/ui/issues/issue-20055-box-unsized-array.rs b/tests/ui/issues/issue-20055-box-unsized-array.rs
new file mode 100644
index 000000000..1246c8065
--- /dev/null
+++ b/tests/ui/issues/issue-20055-box-unsized-array.rs
@@ -0,0 +1,29 @@
+// run-pass
+// Issue #2005: Check that boxed fixed-size arrays are properly
+// accounted for (namely, only deallocated if they were actually
+// created) when they appear as temporaries in unused arms of a match
+// expression.
+
+pub fn foo(box_1: fn () -> Box<[i8; 1]>,
+ box_2: fn () -> Box<[i8; 20]>,
+ box_3: fn () -> Box<[i8; 300]>,
+ box_4: fn () -> Box<[i8; 4000]>,
+ ) {
+ println!("Hello World 1");
+ let _: Box<[i8]> = match 3 {
+ 1 => box_1(),
+ 2 => box_2(),
+ 3 => box_3(),
+ _ => box_4(),
+ };
+ println!("Hello World 2");
+}
+
+pub fn main() {
+ fn box_1() -> Box<[i8; 1]> { Box::new( [1] ) }
+ fn box_2() -> Box<[i8; 20]> { Box::new( [1; 20] ) }
+ fn box_3() -> Box<[i8; 300]> { Box::new( [1; 300] ) }
+ fn box_4() -> Box<[i8; 4000]> { Box::new( [1; 4000] ) }
+
+ foo(box_1, box_2, box_3, box_4);
+}
diff --git a/tests/ui/issues/issue-20162.rs b/tests/ui/issues/issue-20162.rs
new file mode 100644
index 000000000..b491bc37f
--- /dev/null
+++ b/tests/ui/issues/issue-20162.rs
@@ -0,0 +1,7 @@
+struct X { x: i32 }
+
+fn main() {
+ let mut b: Vec<X> = vec![];
+ b.sort();
+ //~^ ERROR `X: Ord` is not satisfied
+}
diff --git a/tests/ui/issues/issue-20162.stderr b/tests/ui/issues/issue-20162.stderr
new file mode 100644
index 000000000..1c5b76fbf
--- /dev/null
+++ b/tests/ui/issues/issue-20162.stderr
@@ -0,0 +1,16 @@
+error[E0277]: the trait bound `X: Ord` is not satisfied
+ --> $DIR/issue-20162.rs:5:7
+ |
+LL | b.sort();
+ | ^^^^ the trait `Ord` is not implemented for `X`
+ |
+note: required by a bound in `slice::<impl [T]>::sort`
+ --> $SRC_DIR/alloc/src/slice.rs:LL:COL
+help: consider annotating `X` with `#[derive(Ord)]`
+ |
+LL | #[derive(Ord)]
+ |
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-20174.rs b/tests/ui/issues/issue-20174.rs
new file mode 100644
index 000000000..4ed5a97c1
--- /dev/null
+++ b/tests/ui/issues/issue-20174.rs
@@ -0,0 +1,7 @@
+// run-pass
+struct GradFn<F: Fn() -> usize>(F);
+
+fn main() {
+ let GradFn(x_squared) : GradFn<_> = GradFn(|| -> usize { 2 });
+ let _ = x_squared();
+}
diff --git a/tests/ui/issues/issue-20186.rs b/tests/ui/issues/issue-20186.rs
new file mode 100644
index 000000000..54d68f100
--- /dev/null
+++ b/tests/ui/issues/issue-20186.rs
@@ -0,0 +1,16 @@
+// check-pass
+#![allow(dead_code)]
+#![allow(unused_variables)]
+struct Foo;
+
+impl Foo {
+ fn putc(&self, b: u8) { }
+
+ fn puts(&self, s: &str) {
+ for byte in s.bytes() {
+ self.putc(byte)
+ }
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-20225.rs b/tests/ui/issues/issue-20225.rs
new file mode 100644
index 000000000..0c8e6e402
--- /dev/null
+++ b/tests/ui/issues/issue-20225.rs
@@ -0,0 +1,22 @@
+#![feature(fn_traits, unboxed_closures)]
+
+struct Foo;
+
+impl<'a, T> Fn<(&'a T,)> for Foo {
+ extern "rust-call" fn call(&self, (_,): (T,)) {}
+ //~^ ERROR: has an incompatible type for trait
+}
+
+impl<'a, T> FnMut<(&'a T,)> for Foo {
+ extern "rust-call" fn call_mut(&mut self, (_,): (T,)) {}
+ //~^ ERROR: has an incompatible type for trait
+}
+
+impl<'a, T> FnOnce<(&'a T,)> for Foo {
+ type Output = ();
+
+ extern "rust-call" fn call_once(self, (_,): (T,)) {}
+ //~^ ERROR: has an incompatible type for trait
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-20225.stderr b/tests/ui/issues/issue-20225.stderr
new file mode 100644
index 000000000..582216010
--- /dev/null
+++ b/tests/ui/issues/issue-20225.stderr
@@ -0,0 +1,46 @@
+error[E0053]: method `call` has an incompatible type for trait
+ --> $DIR/issue-20225.rs:6:43
+ |
+LL | impl<'a, T> Fn<(&'a T,)> for Foo {
+ | - this type parameter
+LL | extern "rust-call" fn call(&self, (_,): (T,)) {}
+ | ^^^^
+ | |
+ | expected `&T`, found type parameter `T`
+ | help: change the parameter type to match the trait: `(&'a T,)`
+ |
+ = note: expected signature `extern "rust-call" fn(&Foo, (&'a T,))`
+ found signature `extern "rust-call" fn(&Foo, (T,))`
+
+error[E0053]: method `call_mut` has an incompatible type for trait
+ --> $DIR/issue-20225.rs:11:51
+ |
+LL | impl<'a, T> FnMut<(&'a T,)> for Foo {
+ | - this type parameter
+LL | extern "rust-call" fn call_mut(&mut self, (_,): (T,)) {}
+ | ^^^^
+ | |
+ | expected `&T`, found type parameter `T`
+ | help: change the parameter type to match the trait: `(&'a T,)`
+ |
+ = note: expected signature `extern "rust-call" fn(&mut Foo, (&'a T,))`
+ found signature `extern "rust-call" fn(&mut Foo, (T,))`
+
+error[E0053]: method `call_once` has an incompatible type for trait
+ --> $DIR/issue-20225.rs:18:47
+ |
+LL | impl<'a, T> FnOnce<(&'a T,)> for Foo {
+ | - this type parameter
+...
+LL | extern "rust-call" fn call_once(self, (_,): (T,)) {}
+ | ^^^^
+ | |
+ | expected `&T`, found type parameter `T`
+ | help: change the parameter type to match the trait: `(&'a T,)`
+ |
+ = note: expected signature `extern "rust-call" fn(Foo, (&'a T,))`
+ found signature `extern "rust-call" fn(Foo, (T,))`
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0053`.
diff --git a/tests/ui/issues/issue-20261.rs b/tests/ui/issues/issue-20261.rs
new file mode 100644
index 000000000..528393606
--- /dev/null
+++ b/tests/ui/issues/issue-20261.rs
@@ -0,0 +1,7 @@
+fn main() {
+ // N.B., this (almost) typechecks when default binding modes are enabled.
+ for (ref i,) in [].iter() {
+ i.clone();
+ //~^ ERROR type annotations needed
+ }
+}
diff --git a/tests/ui/issues/issue-20261.stderr b/tests/ui/issues/issue-20261.stderr
new file mode 100644
index 000000000..9ac751e4d
--- /dev/null
+++ b/tests/ui/issues/issue-20261.stderr
@@ -0,0 +1,9 @@
+error[E0282]: type annotations needed
+ --> $DIR/issue-20261.rs:4:11
+ |
+LL | i.clone();
+ | ^^^^^ cannot infer type
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-20313-rpass.rs b/tests/ui/issues/issue-20313-rpass.rs
new file mode 100644
index 000000000..591f3659e
--- /dev/null
+++ b/tests/ui/issues/issue-20313-rpass.rs
@@ -0,0 +1,11 @@
+// run-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+#![feature(link_llvm_intrinsics)]
+
+extern "C" {
+ #[link_name = "llvm.sqrt.f32"]
+ fn sqrt(x: f32) -> f32;
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-20313.rs b/tests/ui/issues/issue-20313.rs
new file mode 100644
index 000000000..a72af650c
--- /dev/null
+++ b/tests/ui/issues/issue-20313.rs
@@ -0,0 +1,6 @@
+extern "C" {
+ #[link_name = "llvm.sqrt.f32"]
+ fn sqrt(x: f32) -> f32; //~ ERROR linking to LLVM intrinsics is experimental
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-20313.stderr b/tests/ui/issues/issue-20313.stderr
new file mode 100644
index 000000000..7a0b344a5
--- /dev/null
+++ b/tests/ui/issues/issue-20313.stderr
@@ -0,0 +1,12 @@
+error[E0658]: linking to LLVM intrinsics is experimental
+ --> $DIR/issue-20313.rs:3:5
+ |
+LL | fn sqrt(x: f32) -> f32;
+ | ^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #29602 <https://github.com/rust-lang/rust/issues/29602> for more information
+ = help: add `#![feature(link_llvm_intrinsics)]` to the crate attributes to enable
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0658`.
diff --git a/tests/ui/issues/issue-20389.rs b/tests/ui/issues/issue-20389.rs
new file mode 100644
index 000000000..9bc3efcc1
--- /dev/null
+++ b/tests/ui/issues/issue-20389.rs
@@ -0,0 +1,15 @@
+// run-pass
+#![allow(dead_code)]
+// aux-build:issue-20389.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_20389;
+
+struct Foo;
+
+impl issue_20389::T for Foo {
+ type C = ();
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-20396.rs b/tests/ui/issues/issue-20396.rs
new file mode 100644
index 000000000..4a34f8b38
--- /dev/null
+++ b/tests/ui/issues/issue-20396.rs
@@ -0,0 +1,16 @@
+// check-pass
+// pretty-expanded FIXME #23616
+
+#![allow(dead_code)]
+
+trait Foo<T> {
+ fn noop(&self, _: T);
+}
+
+enum Bar<T> { Bla(T) }
+
+struct Baz<'a> {
+ inner: dyn for<'b> Foo<Bar<&'b ()>> + 'a,
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-20413.rs b/tests/ui/issues/issue-20413.rs
new file mode 100644
index 000000000..4de22f0c9
--- /dev/null
+++ b/tests/ui/issues/issue-20413.rs
@@ -0,0 +1,42 @@
+// normalize-stderr-test: "long-type-\d+" -> "long-type-hash"
+trait Foo {
+ fn answer(self);
+}
+
+struct NoData<T>;
+//~^ ERROR: parameter `T` is never used
+
+impl<T> Foo for T where NoData<T>: Foo {
+ //~^ ERROR: overflow evaluating the requirement
+ fn answer(self) {
+ let val: NoData<T> = NoData;
+ }
+}
+
+trait Bar {
+ fn answer(self);
+}
+
+trait Baz {
+ fn answer(self);
+}
+
+struct AlmostNoData<T>(Option<T>);
+
+struct EvenLessData<T>(Option<T>);
+
+impl<T> Bar for T where EvenLessData<T>: Baz {
+//~^ ERROR: overflow evaluating the requirement
+ fn answer(self) {
+ let val: EvenLessData<T> = EvenLessData(None);
+ }
+}
+
+impl<T> Baz for T where AlmostNoData<T>: Bar {
+//~^ ERROR: overflow evaluating the requirement
+ fn answer(self) {
+ let val: NoData<T> = AlmostNoData(None);
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-20413.stderr b/tests/ui/issues/issue-20413.stderr
new file mode 100644
index 000000000..202e84631
--- /dev/null
+++ b/tests/ui/issues/issue-20413.stderr
@@ -0,0 +1,73 @@
+error[E0392]: parameter `T` is never used
+ --> $DIR/issue-20413.rs:6:15
+ |
+LL | struct NoData<T>;
+ | ^ unused parameter
+ |
+ = help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
+ = help: if you intended `T` to be a const parameter, use `const T: usize` instead
+
+error[E0275]: overflow evaluating the requirement `NoData<NoData<NoData<NoData<NoData<NoData<NoData<...>>>>>>>: Foo`
+ --> $DIR/issue-20413.rs:9:36
+ |
+LL | impl<T> Foo for T where NoData<T>: Foo {
+ | ^^^
+ |
+ = help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]` attribute to your crate (`issue_20413`)
+note: required for `NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<...>>>>>>>>>>>>>` to implement `Foo`
+ --> $DIR/issue-20413.rs:9:9
+ |
+LL | impl<T> Foo for T where NoData<T>: Foo {
+ | ^^^ ^ --- unsatisfied trait bound introduced here
+ = note: the full type name has been written to '$TEST_BUILD_DIR/issues/issue-20413/issue-20413.long-type-hash.txt'
+ = note: 127 redundant requirements hidden
+ = note: required for `NoData<T>` to implement `Foo`
+
+error[E0275]: overflow evaluating the requirement `EvenLessData<AlmostNoData<EvenLessData<AlmostNoData<EvenLessData<AlmostNoData<EvenLessData<...>>>>>>>: Baz`
+ --> $DIR/issue-20413.rs:28:42
+ |
+LL | impl<T> Bar for T where EvenLessData<T>: Baz {
+ | ^^^
+ |
+ = help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]` attribute to your crate (`issue_20413`)
+note: required for `AlmostNoData<EvenLessData<AlmostNoData<EvenLessData<AlmostNoData<EvenLessData<AlmostNoData<...>>>>>>>` to implement `Bar`
+ --> $DIR/issue-20413.rs:28:9
+ |
+LL | impl<T> Bar for T where EvenLessData<T>: Baz {
+ | ^^^ ^ --- unsatisfied trait bound introduced here
+ = note: the full type name has been written to '$TEST_BUILD_DIR/issues/issue-20413/issue-20413.long-type-hash.txt'
+note: required for `EvenLessData<AlmostNoData<EvenLessData<AlmostNoData<EvenLessData<AlmostNoData<EvenLessData<...>>>>>>>` to implement `Baz`
+ --> $DIR/issue-20413.rs:35:9
+ |
+LL | impl<T> Baz for T where AlmostNoData<T>: Bar {
+ | ^^^ ^ --- unsatisfied trait bound introduced here
+ = note: the full type name has been written to '$TEST_BUILD_DIR/issues/issue-20413/issue-20413.long-type-hash.txt'
+ = note: 126 redundant requirements hidden
+ = note: required for `EvenLessData<T>` to implement `Baz`
+
+error[E0275]: overflow evaluating the requirement `AlmostNoData<EvenLessData<AlmostNoData<EvenLessData<AlmostNoData<EvenLessData<AlmostNoData<...>>>>>>>: Bar`
+ --> $DIR/issue-20413.rs:35:42
+ |
+LL | impl<T> Baz for T where AlmostNoData<T>: Bar {
+ | ^^^
+ |
+ = help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]` attribute to your crate (`issue_20413`)
+note: required for `EvenLessData<AlmostNoData<EvenLessData<AlmostNoData<EvenLessData<AlmostNoData<EvenLessData<...>>>>>>>` to implement `Baz`
+ --> $DIR/issue-20413.rs:35:9
+ |
+LL | impl<T> Baz for T where AlmostNoData<T>: Bar {
+ | ^^^ ^ --- unsatisfied trait bound introduced here
+ = note: the full type name has been written to '$TEST_BUILD_DIR/issues/issue-20413/issue-20413.long-type-hash.txt'
+note: required for `AlmostNoData<EvenLessData<AlmostNoData<EvenLessData<AlmostNoData<EvenLessData<AlmostNoData<...>>>>>>>` to implement `Bar`
+ --> $DIR/issue-20413.rs:28:9
+ |
+LL | impl<T> Bar for T where EvenLessData<T>: Baz {
+ | ^^^ ^ --- unsatisfied trait bound introduced here
+ = note: the full type name has been written to '$TEST_BUILD_DIR/issues/issue-20413/issue-20413.long-type-hash.txt'
+ = note: 126 redundant requirements hidden
+ = note: required for `AlmostNoData<T>` to implement `Bar`
+
+error: aborting due to 4 previous errors
+
+Some errors have detailed explanations: E0275, E0392.
+For more information about an error, try `rustc --explain E0275`.
diff --git a/tests/ui/issues/issue-20414.rs b/tests/ui/issues/issue-20414.rs
new file mode 100644
index 000000000..2496e342a
--- /dev/null
+++ b/tests/ui/issues/issue-20414.rs
@@ -0,0 +1,21 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+trait Trait {
+ fn method(self) -> isize;
+}
+
+struct Wrapper<T> {
+ field: T
+}
+
+impl<'a, T> Trait for &'a Wrapper<T> where &'a T: Trait {
+ fn method(self) -> isize {
+ let r: &'a T = &self.field;
+ Trait::method(r); // these should both work
+ r.method()
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-20427.rs b/tests/ui/issues/issue-20427.rs
new file mode 100644
index 000000000..cfd8b2191
--- /dev/null
+++ b/tests/ui/issues/issue-20427.rs
@@ -0,0 +1,88 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(unused_variables)]
+#![allow(unused_imports)]
+#![allow(non_upper_case_globals)]
+#![allow(non_camel_case_types)]
+#![allow(deprecated, deprecated_in_future)]
+
+// aux-build:i8.rs
+
+extern crate i8;
+use std::string as i16;
+static i32: i32 = 0;
+const i64: i64 = 0;
+fn u8(f32: f32) {}
+fn f<f64>(f64: f64) {}
+enum u32 {}
+struct u64;
+trait bool {}
+
+mod char {
+ extern crate i8;
+ static i32_: i32 = 0;
+ const i64_: i64 = 0;
+ fn u8_(f32: f32) {}
+ fn f_<f64_>(f64: f64_) {}
+ type u16_ = u16;
+ enum u32_ {}
+ struct u64_;
+ trait bool_ {}
+ mod char_ {}
+
+ mod str {
+ use super::i8 as i8;
+ use super::i32_ as i32;
+ use super::i64_ as i64;
+ use super::u8_ as u8;
+ use super::f_ as f64;
+ use super::u16_ as u16;
+ use super::u32_ as u32;
+ use super::u64_ as u64;
+ use super::bool_ as bool;
+ use super::{bool_ as str};
+ use super::char_ as char;
+ }
+}
+
+trait isize_ {
+ type isize;
+}
+
+fn usize<'usize>(usize: &'usize usize) -> &'usize usize { usize }
+
+mod reuse {
+ use std::mem::size_of;
+
+ type u8 = u64;
+ use std::string::String as i16;
+
+ pub fn check<u16>() {
+ assert_eq!(size_of::<u8>(), 8);
+ assert_eq!(size_of::<::u64>(), 0);
+ assert_eq!(size_of::<i16>(), 3 * size_of::<*const ()>());
+ assert_eq!(size_of::<u16>(), 0);
+ }
+}
+
+mod guard {
+ pub fn check() {
+ use std::u8; // bring module u8 in scope
+ fn f() -> u8 { // OK, resolves to primitive u8, not to std::u8
+ u8::max_value() // OK, resolves to associated function <u8>::max_value,
+ // not to non-existent std::u8::max_value
+ }
+ assert_eq!(f(), u8::MAX); // OK, resolves to std::u8::MAX
+ }
+}
+
+fn main() {
+ let bool = true;
+ let _ = match bool {
+ str @ true => if str { i32 as i64 } else { i64 },
+ false => i64,
+ };
+
+ reuse::check::<u64>();
+ guard::check();
+}
diff --git a/tests/ui/issues/issue-20433.rs b/tests/ui/issues/issue-20433.rs
new file mode 100644
index 000000000..a663239cc
--- /dev/null
+++ b/tests/ui/issues/issue-20433.rs
@@ -0,0 +1,8 @@
+fn main() {}
+
+struct The;
+
+impl The {
+ fn iceman(c: Vec<[i32]>) {}
+ //~^ ERROR the size for values of type
+}
diff --git a/tests/ui/issues/issue-20433.stderr b/tests/ui/issues/issue-20433.stderr
new file mode 100644
index 000000000..3ae952546
--- /dev/null
+++ b/tests/ui/issues/issue-20433.stderr
@@ -0,0 +1,13 @@
+error[E0277]: the size for values of type `[i32]` cannot be known at compilation time
+ --> $DIR/issue-20433.rs:6:18
+ |
+LL | fn iceman(c: Vec<[i32]>) {}
+ | ^^^^^^^^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `[i32]`
+note: required by a bound in `Vec`
+ --> $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-20454.rs b/tests/ui/issues/issue-20454.rs
new file mode 100644
index 000000000..46cae33f1
--- /dev/null
+++ b/tests/ui/issues/issue-20454.rs
@@ -0,0 +1,13 @@
+// check-pass
+#![allow(unused_must_use)]
+use std::thread;
+
+fn _foo() {
+ thread::spawn(move || { // no need for -> ()
+ loop {
+ println!("hello");
+ }
+ }).join();
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-20544.rs b/tests/ui/issues/issue-20544.rs
new file mode 100644
index 000000000..0f4d314f1
--- /dev/null
+++ b/tests/ui/issues/issue-20544.rs
@@ -0,0 +1,18 @@
+// run-pass
+#![feature(unboxed_closures)]
+#![feature(fn_traits)]
+
+struct Fun<F>(F);
+
+impl<F, T> FnOnce<(T,)> for Fun<F> where F: Fn(T) -> T {
+ type Output = T;
+
+ extern "rust-call" fn call_once(self, (t,): (T,)) -> T {
+ (self.0)(t)
+ }
+}
+
+fn main() {
+ let fun = Fun(|i: isize| i * 2);
+ println!("{}", fun(3));
+}
diff --git a/tests/ui/issues/issue-20575.rs b/tests/ui/issues/issue-20575.rs
new file mode 100644
index 000000000..0ca67d9dc
--- /dev/null
+++ b/tests/ui/issues/issue-20575.rs
@@ -0,0 +1,10 @@
+// run-pass
+// Test that overloaded calls work with zero arity closures
+
+// pretty-expanded FIXME #23616
+
+fn main() {
+ let functions: [Box<dyn Fn() -> Option<()>>; 1] = [Box::new(|| None)];
+
+ let _: Option<Vec<()>> = functions.iter().map(|f| (*f)()).collect();
+}
diff --git a/tests/ui/issues/issue-20605.rs b/tests/ui/issues/issue-20605.rs
new file mode 100644
index 000000000..17b7d32eb
--- /dev/null
+++ b/tests/ui/issues/issue-20605.rs
@@ -0,0 +1,6 @@
+fn changer<'a>(mut things: Box<dyn Iterator<Item=&'a mut u8>>) {
+ for item in *things { *item = 0 }
+//~^ ERROR the size for values of type
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-20605.stderr b/tests/ui/issues/issue-20605.stderr
new file mode 100644
index 000000000..e1858b639
--- /dev/null
+++ b/tests/ui/issues/issue-20605.stderr
@@ -0,0 +1,16 @@
+error[E0277]: the size for values of type `dyn Iterator<Item = &'a mut u8>` cannot be known at compilation time
+ --> $DIR/issue-20605.rs:2:17
+ |
+LL | for item in *things { *item = 0 }
+ | ^^^^^^^ the trait `IntoIterator` is not implemented for `dyn Iterator<Item = &'a mut u8>`
+ |
+ = note: the trait bound `dyn Iterator<Item = &'a mut u8>: IntoIterator` is not satisfied
+ = note: required for `dyn Iterator<Item = &'a mut u8>` to implement `IntoIterator`
+help: consider mutably borrowing here
+ |
+LL | for item in &mut *things { *item = 0 }
+ | ++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-20616.rs b/tests/ui/issues/issue-20616.rs
new file mode 100644
index 000000000..6c24d4372
--- /dev/null
+++ b/tests/ui/issues/issue-20616.rs
@@ -0,0 +1,44 @@
+// run-pass
+#![allow(dead_code)]
+type MyType<'a, T> = &'a T;
+
+// combine lifetime bounds and type arguments in usual way
+type TypeA<'a> = MyType<'a, ()>;
+
+// ensure token `>>` works fine
+type TypeB = Box<TypeA<'static>>;
+type TypeB_ = Box<TypeA<'static,>>;
+
+// trailing comma when combine lifetime bounds and type arguments
+type TypeC<'a> = MyType<'a, (),>;
+
+// normal lifetime bounds
+type TypeD = TypeA<'static>;
+
+// trailing comma on lifetime bounds
+type TypeE = TypeA<'static,>;
+
+// normal type argument
+type TypeF<T> = Box<T>;
+
+// type argument with trailing comma
+type TypeG<T> = Box<T,>;
+
+// trailing comma on lifetime defs
+type TypeH<'a,> = &'a ();
+
+// trailing comma on type argument
+type TypeI<T,> = T;
+
+static STATIC: () = ();
+
+fn main() {
+
+ // ensure token `>=` works fine
+ let _: TypeA<'static>= &STATIC;
+ let _: TypeA<'static,>= &STATIC;
+
+ // ensure token `>>=` works fine
+ let _: Box<TypeA<'static>>= Box::new(&STATIC);
+ let _: Box<TypeA<'static,>>= Box::new(&STATIC);
+}
diff --git a/tests/ui/issues/issue-2063-resource.rs b/tests/ui/issues/issue-2063-resource.rs
new file mode 100644
index 000000000..1d0527447
--- /dev/null
+++ b/tests/ui/issues/issue-2063-resource.rs
@@ -0,0 +1,14 @@
+// check-pass
+#![allow(dead_code)]
+// test that autoderef of a type like this does not
+// cause compiler to loop. Note that no instances
+// of such a type could ever be constructed.
+
+struct S {
+ x: X,
+ to_str: (),
+}
+
+struct X(Box<S>);
+
+fn main() {}
diff --git a/tests/ui/issues/issue-2063.rs b/tests/ui/issues/issue-2063.rs
new file mode 100644
index 000000000..f08f9d4cf
--- /dev/null
+++ b/tests/ui/issues/issue-2063.rs
@@ -0,0 +1,22 @@
+// run-pass
+// test that autoderef of a type like this does not
+// cause compiler to loop. Note that no instances
+// of such a type could ever be constructed.
+
+struct T(#[allow(unused_tuple_struct_fields)] Box<T>);
+
+trait ToStr2 {
+ fn my_to_string(&self) -> String;
+}
+
+impl ToStr2 for T {
+ fn my_to_string(&self) -> String { "t".to_string() }
+}
+
+#[allow(dead_code)]
+fn new_t(x: T) {
+ x.my_to_string();
+}
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-20644.rs b/tests/ui/issues/issue-20644.rs
new file mode 100644
index 000000000..1b90727fb
--- /dev/null
+++ b/tests/ui/issues/issue-20644.rs
@@ -0,0 +1,32 @@
+// build-pass
+#![allow(dead_code)]
+#![allow(unused_imports)]
+#![allow(stable_features)]
+
+// A reduced version of the rustbook ice. The problem this encountered
+// had to do with codegen ignoring binders.
+
+// pretty-expanded FIXME #23616
+
+#![feature(os)]
+
+use std::iter;
+use std::os;
+use std::fs::File;
+use std::io::prelude::*;
+use std::env;
+use std::path::Path;
+
+pub fn parse_summary<R: Read>(_: R, _: &Path) {
+ let path_from_root = Path::new("");
+ Path::new(&"../".repeat(path_from_root.components().count() - 1));
+ }
+
+fn foo() {
+ let cwd = env::current_dir().unwrap();
+ let src = cwd.clone();
+ let summary = File::open(&src.join("SUMMARY.md")).unwrap();
+ let _ = parse_summary(summary, &src);
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-20676.rs b/tests/ui/issues/issue-20676.rs
new file mode 100644
index 000000000..2bc503496
--- /dev/null
+++ b/tests/ui/issues/issue-20676.rs
@@ -0,0 +1,12 @@
+// run-pass
+// Regression test for #20676. Error was that we didn't support
+// UFCS-style calls to a method in `Trait` where `Self` was bound to a
+// trait object of type `Trait`. See also `ufcs-trait-object.rs`.
+
+
+use std::fmt;
+
+fn main() {
+ let a: &dyn fmt::Debug = &1;
+ format!("{:?}", a);
+}
diff --git a/tests/ui/issues/issue-20714.rs b/tests/ui/issues/issue-20714.rs
new file mode 100644
index 000000000..3aa39bb73
--- /dev/null
+++ b/tests/ui/issues/issue-20714.rs
@@ -0,0 +1,5 @@
+struct G;
+
+fn main() {
+ let g = G(); //~ ERROR: expected function, found struct `G`
+}
diff --git a/tests/ui/issues/issue-20714.stderr b/tests/ui/issues/issue-20714.stderr
new file mode 100644
index 000000000..a3447aa68
--- /dev/null
+++ b/tests/ui/issues/issue-20714.stderr
@@ -0,0 +1,20 @@
+error[E0618]: expected function, found struct `G`
+ --> $DIR/issue-20714.rs:4:13
+ |
+LL | struct G;
+ | -------- struct `G` defined here
+...
+LL | let g = G();
+ | ^--
+ | |
+ | call expression requires function
+ |
+help: `G` is a unit struct, and does not take parentheses to be constructed
+ |
+LL - let g = G();
+LL + let g = G;
+ |
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0618`.
diff --git a/tests/ui/issues/issue-2074.rs b/tests/ui/issues/issue-2074.rs
new file mode 100644
index 000000000..a6bea3858
--- /dev/null
+++ b/tests/ui/issues/issue-2074.rs
@@ -0,0 +1,16 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+#![allow(non_camel_case_types)]
+
+pub fn main() {
+ let one = || {
+ enum r { a }
+ r::a as usize
+ };
+ let two = || {
+ enum r { a }
+ r::a as usize
+ };
+ one(); two();
+}
diff --git a/tests/ui/issues/issue-20763-1.rs b/tests/ui/issues/issue-20763-1.rs
new file mode 100644
index 000000000..858d313fc
--- /dev/null
+++ b/tests/ui/issues/issue-20763-1.rs
@@ -0,0 +1,29 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+trait T0 {
+ type O;
+ fn dummy(&self) { }
+}
+
+struct S<A>(A);
+impl<A> T0 for S<A> { type O = A; }
+
+trait T1: T0 {
+ // this looks okay but as we see below, `f` is unusable
+ fn m0<F: Fn(<Self as T0>::O) -> bool>(self, f: F) -> bool;
+}
+
+// complains about the bounds on F here not being required by the trait
+impl<A> T1 for S<A> {
+ fn m0<F: Fn(A) -> bool>(self, f: F) -> bool { f(self.0) }
+}
+
+// // complains about mismatched types: <S<A> as T0>::O vs. A
+// impl<A> T1 for S<A>
+// {
+// fn m0<F: Fn(<Self as T0>::O) -> bool>(self, f: F) -> bool { f(self.0) }
+// }
+
+fn main() { }
diff --git a/tests/ui/issues/issue-20763-2.rs b/tests/ui/issues/issue-20763-2.rs
new file mode 100644
index 000000000..aa5bed209
--- /dev/null
+++ b/tests/ui/issues/issue-20763-2.rs
@@ -0,0 +1,24 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+trait T0 {
+ type O;
+ fn dummy(&self) { }
+}
+
+struct S<A>(A);
+impl<A> T0 for S<A> { type O = A; }
+
+trait T1: T0 {
+ // this looks okay but as we see below, `f` is unusable
+ fn m0<F: Fn(<Self as T0>::O) -> bool>(self, f: F) -> bool;
+}
+
+// complains about mismatched types: <S<A> as T0>::O vs. A
+impl<A> T1 for S<A>
+{
+ fn m0<F: Fn(<Self as T0>::O) -> bool>(self, f: F) -> bool { f(self.0) }
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-20772.rs b/tests/ui/issues/issue-20772.rs
new file mode 100644
index 000000000..1500bc831
--- /dev/null
+++ b/tests/ui/issues/issue-20772.rs
@@ -0,0 +1,5 @@
+trait T : Iterator<Item=Self::Item>
+//~^ ERROR cycle detected
+{}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-20772.stderr b/tests/ui/issues/issue-20772.stderr
new file mode 100644
index 000000000..22b9f5bd4
--- /dev/null
+++ b/tests/ui/issues/issue-20772.stderr
@@ -0,0 +1,16 @@
+error[E0391]: cycle detected when computing the super traits of `T` with associated type name `Item`
+ --> $DIR/issue-20772.rs:1:1
+ |
+LL | trait T : Iterator<Item=Self::Item>
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: ...which immediately requires computing the super traits of `T` with associated type name `Item` again
+note: cycle used when computing the super traits of `T`
+ --> $DIR/issue-20772.rs:1:1
+ |
+LL | trait T : Iterator<Item=Self::Item>
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0391`.
diff --git a/tests/ui/issues/issue-20797.rs b/tests/ui/issues/issue-20797.rs
new file mode 100644
index 000000000..ef0e72571
--- /dev/null
+++ b/tests/ui/issues/issue-20797.rs
@@ -0,0 +1,93 @@
+// build-pass
+
+// Regression test for #20797.
+
+use std::default::Default;
+use std::io;
+use std::fs;
+use std::path::PathBuf;
+
+pub trait PathExtensions {
+ fn is_dir(&self) -> bool { false }
+}
+
+impl PathExtensions for PathBuf {}
+
+/// A strategy for acquiring more subpaths to walk.
+pub trait Strategy {
+ type P: PathExtensions;
+ /// Gets additional subpaths from a given path.
+ fn get_more(&self, item: &Self::P) -> io::Result<Vec<Self::P>>;
+ /// Determine whether a path should be walked further.
+ /// This is run against each item from `get_more()`.
+ fn prune(&self, p: &Self::P) -> bool;
+}
+
+/// The basic fully-recursive strategy. Nothing is pruned.
+#[derive(Copy, Clone, Default)]
+pub struct Recursive;
+
+impl Strategy for Recursive {
+ type P = PathBuf;
+ fn get_more(&self, p: &PathBuf) -> io::Result<Vec<PathBuf>> {
+ Ok(fs::read_dir(p).unwrap().map(|s| s.unwrap().path()).collect())
+ }
+
+ fn prune(&self, _: &PathBuf) -> bool { false }
+}
+
+/// A directory walker of `P` using strategy `S`.
+pub struct Subpaths<S: Strategy> {
+ stack: Vec<S::P>,
+ strategy: S,
+}
+
+impl<S: Strategy> Subpaths<S> {
+ /// Creates a directory walker with a root path and strategy.
+ pub fn new(p: &S::P, strategy: S) -> io::Result<Subpaths<S>> {
+ let stack = strategy.get_more(p)?;
+ Ok(Subpaths { stack: stack, strategy: strategy })
+ }
+}
+
+impl<S: Default + Strategy> Subpaths<S> {
+ /// Creates a directory walker with a root path and a default strategy.
+ pub fn walk(p: &S::P) -> io::Result<Subpaths<S>> {
+ Subpaths::new(p, Default::default())
+ }
+}
+
+impl<S: Default + Strategy> Default for Subpaths<S> {
+ fn default() -> Subpaths<S> {
+ Subpaths { stack: Vec::new(), strategy: Default::default() }
+ }
+}
+
+impl<S: Strategy> Iterator for Subpaths<S> {
+ type Item = S::P;
+ fn next (&mut self) -> Option<S::P> {
+ let mut opt_path = self.stack.pop();
+ while opt_path.is_some() && self.strategy.prune(opt_path.as_ref().unwrap()) {
+ opt_path = self.stack.pop();
+ }
+ match opt_path {
+ Some(path) => {
+ if path.is_dir() {
+ let result = self.strategy.get_more(&path);
+ match result {
+ Ok(dirs) => { self.stack.extend(dirs); },
+ Err(..) => { }
+ }
+ }
+ Some(path)
+ }
+ None => None,
+ }
+ }
+}
+
+fn _foo() {
+ let _walker: Subpaths<Recursive> = Subpaths::walk(&PathBuf::from("/home")).unwrap();
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-20803.rs b/tests/ui/issues/issue-20803.rs
new file mode 100644
index 000000000..f657cf6cd
--- /dev/null
+++ b/tests/ui/issues/issue-20803.rs
@@ -0,0 +1,10 @@
+// run-pass
+use std::ops::Add;
+
+fn foo<T>(x: T) -> <i32 as Add<T>>::Output where i32: Add<T> {
+ 42i32 + x
+}
+
+fn main() {
+ println!("{}", foo(0i32));
+}
diff --git a/tests/ui/issues/issue-20831-debruijn.rs b/tests/ui/issues/issue-20831-debruijn.rs
new file mode 100644
index 000000000..20d980763
--- /dev/null
+++ b/tests/ui/issues/issue-20831-debruijn.rs
@@ -0,0 +1,39 @@
+// Regression test for #20831: debruijn index account was thrown off
+// by the (anonymous) lifetime in `<Self as Publisher>::Output`
+// below. Note that changing to a named lifetime made the problem go
+// away.
+
+use std::cell::RefCell;
+use std::ops::{Shl, Shr};
+
+pub trait Subscriber {
+ type Input;
+}
+
+pub trait Publisher<'a> {
+ type Output;
+ fn subscribe(&mut self, _: Box<dyn Subscriber<Input=Self::Output> + 'a>);
+}
+
+pub trait Processor<'a> : Subscriber + Publisher<'a> { }
+
+impl<'a, P> Processor<'a> for P where P : Subscriber + Publisher<'a> { }
+
+struct MyStruct<'a> {
+ sub: Box<dyn Subscriber<Input=u64> + 'a>
+}
+
+impl<'a> Publisher<'a> for MyStruct<'a> {
+ type Output = u64;
+ fn subscribe(&mut self, t : Box<dyn Subscriber<Input=<Self as Publisher>::Output> + 'a>) {
+ // Not obvious, but there is an implicit lifetime here -------^
+ //~^^ ERROR cannot infer
+ //
+ // The fact that `Publisher` is using an implicit lifetime is
+ // what was causing the debruijn accounting to be off, so
+ // leave it that way!
+ self.sub = t;
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-20831-debruijn.stderr b/tests/ui/issues/issue-20831-debruijn.stderr
new file mode 100644
index 000000000..c3af1f678
--- /dev/null
+++ b/tests/ui/issues/issue-20831-debruijn.stderr
@@ -0,0 +1,27 @@
+error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'a` due to conflicting requirements
+ --> $DIR/issue-20831-debruijn.rs:28:33
+ |
+LL | fn subscribe(&mut self, t : Box<dyn Subscriber<Input=<Self as Publisher>::Output> + 'a>) {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: first, the lifetime cannot outlive the anonymous lifetime defined here...
+ --> $DIR/issue-20831-debruijn.rs:28:58
+ |
+LL | fn subscribe(&mut self, t : Box<dyn Subscriber<Input=<Self as Publisher>::Output> + 'a>) {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+note: ...but the lifetime must also be valid for the lifetime `'a` as defined here...
+ --> $DIR/issue-20831-debruijn.rs:26:6
+ |
+LL | impl<'a> Publisher<'a> for MyStruct<'a> {
+ | ^^
+note: ...so that the types are compatible
+ --> $DIR/issue-20831-debruijn.rs:28:33
+ |
+LL | fn subscribe(&mut self, t : Box<dyn Subscriber<Input=<Self as Publisher>::Output> + 'a>) {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ = note: expected `<MyStruct<'a> as Publisher<'_>>`
+ found `<MyStruct<'_> as Publisher<'_>>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0495`.
diff --git a/tests/ui/issues/issue-20847.rs b/tests/ui/issues/issue-20847.rs
new file mode 100644
index 000000000..0cd7edf89
--- /dev/null
+++ b/tests/ui/issues/issue-20847.rs
@@ -0,0 +1,12 @@
+// run-pass
+#![feature(fn_traits)]
+
+use std::ops::Fn;
+
+fn say(x: u32, y: u32) {
+ println!("{} {}", x, y);
+}
+
+fn main() {
+ Fn::call(&say, (1, 2));
+}
diff --git a/tests/ui/issues/issue-20939.rs b/tests/ui/issues/issue-20939.rs
new file mode 100644
index 000000000..c0c222978
--- /dev/null
+++ b/tests/ui/issues/issue-20939.rs
@@ -0,0 +1,6 @@
+trait Foo {}
+
+impl<'a> Foo for dyn Foo + 'a {}
+//~^ ERROR the object type `(dyn Foo + 'a)` automatically implements the trait `Foo`
+
+fn main() {}
diff --git a/tests/ui/issues/issue-20939.stderr b/tests/ui/issues/issue-20939.stderr
new file mode 100644
index 000000000..3819a21a2
--- /dev/null
+++ b/tests/ui/issues/issue-20939.stderr
@@ -0,0 +1,9 @@
+error[E0371]: the object type `(dyn Foo + 'a)` automatically implements the trait `Foo`
+ --> $DIR/issue-20939.rs:3:1
+ |
+LL | impl<'a> Foo for dyn Foo + 'a {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `(dyn Foo + 'a)` automatically implements trait `Foo`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0371`.
diff --git a/tests/ui/issues/issue-20953.rs b/tests/ui/issues/issue-20953.rs
new file mode 100644
index 000000000..4ec7e3195
--- /dev/null
+++ b/tests/ui/issues/issue-20953.rs
@@ -0,0 +1,12 @@
+// run-pass
+#![allow(unused_mut)]
+#![allow(unused_variables)]
+fn main() {
+ let mut shrinker: Box<dyn Iterator<Item=i32>> = Box::new(vec![1].into_iter());
+ println!("{:?}", shrinker.next());
+ for v in shrinker { assert!(false); }
+
+ let mut shrinker: &mut dyn Iterator<Item=i32> = &mut vec![1].into_iter();
+ println!("{:?}", shrinker.next());
+ for v in shrinker { assert!(false); }
+}
diff --git a/tests/ui/issues/issue-20971.rs b/tests/ui/issues/issue-20971.rs
new file mode 100644
index 000000000..2e1041817
--- /dev/null
+++ b/tests/ui/issues/issue-20971.rs
@@ -0,0 +1,23 @@
+// Regression test for Issue #20971.
+
+// run-fail
+// error-pattern:Hello, world!
+// ignore-emscripten no processes
+
+pub trait Parser {
+ type Input;
+ fn parse(&mut self, input: <Self as Parser>::Input);
+}
+
+impl Parser for () {
+ type Input = ();
+ fn parse(&mut self, input: ()) {}
+}
+
+pub fn many() -> Box<dyn Parser<Input = <() as Parser>::Input> + 'static> {
+ panic!("Hello, world!")
+}
+
+fn main() {
+ many().parse(());
+}
diff --git a/tests/ui/issues/issue-21033.rs b/tests/ui/issues/issue-21033.rs
new file mode 100644
index 000000000..91f72eb36
--- /dev/null
+++ b/tests/ui/issues/issue-21033.rs
@@ -0,0 +1,48 @@
+// run-pass
+#![allow(unused_mut)]
+#![allow(unused_variables)]
+// pretty-expanded FIXME #23616
+
+#![feature(box_patterns)]
+
+enum E {
+ StructVar { boxed: Box<i32> }
+}
+
+fn main() {
+
+ // Test matching each shorthand notation for field patterns.
+ let mut a = E::StructVar { boxed: Box::new(3) };
+ match a {
+ E::StructVar { box boxed } => { }
+ }
+ match a {
+ E::StructVar { box ref boxed } => { }
+ }
+ match a {
+ E::StructVar { box mut boxed } => { }
+ }
+ match a {
+ E::StructVar { box ref mut boxed } => { }
+ }
+ match a {
+ E::StructVar { ref boxed } => { }
+ }
+ match a {
+ E::StructVar { ref mut boxed } => { }
+ }
+ match a {
+ E::StructVar { mut boxed } => { }
+ }
+
+ // Test matching non shorthand notation. Recreate a since last test
+ // moved `boxed`
+ let mut a = E::StructVar { boxed: Box::new(3) };
+ match a {
+ E::StructVar { boxed: box ref mut num } => { }
+ }
+ match a {
+ E::StructVar { boxed: ref mut num } => { }
+ }
+
+}
diff --git a/tests/ui/issues/issue-21140.rs b/tests/ui/issues/issue-21140.rs
new file mode 100644
index 000000000..01de90111
--- /dev/null
+++ b/tests/ui/issues/issue-21140.rs
@@ -0,0 +1,6 @@
+// check-pass
+pub trait Trait where Self::Out: std::fmt::Display {
+ type Out;
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-21160.rs b/tests/ui/issues/issue-21160.rs
new file mode 100644
index 000000000..10136ba11
--- /dev/null
+++ b/tests/ui/issues/issue-21160.rs
@@ -0,0 +1,11 @@
+struct Bar;
+
+impl Bar {
+ fn hash<T>(&self, _: T) {}
+}
+
+#[derive(Hash)]
+struct Foo(Bar);
+//~^ error: `Bar: Hash` is not satisfied
+
+fn main() {}
diff --git a/tests/ui/issues/issue-21160.stderr b/tests/ui/issues/issue-21160.stderr
new file mode 100644
index 000000000..266749376
--- /dev/null
+++ b/tests/ui/issues/issue-21160.stderr
@@ -0,0 +1,17 @@
+error[E0277]: the trait bound `Bar: Hash` is not satisfied
+ --> $DIR/issue-21160.rs:8:12
+ |
+LL | #[derive(Hash)]
+ | ---- in this derive macro expansion
+LL | struct Foo(Bar);
+ | ^^^ the trait `Hash` is not implemented for `Bar`
+ |
+ = note: this error originates in the derive macro `Hash` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: consider annotating `Bar` with `#[derive(Hash)]`
+ |
+LL | #[derive(Hash)]
+ |
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-21174-2.rs b/tests/ui/issues/issue-21174-2.rs
new file mode 100644
index 000000000..c90f91f6a
--- /dev/null
+++ b/tests/ui/issues/issue-21174-2.rs
@@ -0,0 +1,13 @@
+// check-pass
+#![allow(dead_code)]
+#![allow(unused_variables)]
+trait Trait<'a> {
+ type A;
+ type B;
+}
+
+fn foo<'a, T: Trait<'a>>(value: T::A) {
+ let new: T::B = unsafe { std::mem::transmute_copy(&value) };
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-21174.rs b/tests/ui/issues/issue-21174.rs
new file mode 100644
index 000000000..078274251
--- /dev/null
+++ b/tests/ui/issues/issue-21174.rs
@@ -0,0 +1,11 @@
+trait Trait<'a> {
+ type A;
+ type B;
+}
+
+fn foo<'a, T: Trait<'a>>(value: T::A) {
+ let new: T::B = unsafe { std::mem::transmute(value) };
+//~^ ERROR: cannot transmute between types of different sizes, or dependently-sized types
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-21174.stderr b/tests/ui/issues/issue-21174.stderr
new file mode 100644
index 000000000..5981d9dc7
--- /dev/null
+++ b/tests/ui/issues/issue-21174.stderr
@@ -0,0 +1,12 @@
+error[E0512]: cannot transmute between types of different sizes, or dependently-sized types
+ --> $DIR/issue-21174.rs:7:30
+ |
+LL | let new: T::B = unsafe { std::mem::transmute(value) };
+ | ^^^^^^^^^^^^^^^^^^^
+ |
+ = note: source type: `<T as Trait<'_>>::A` (this type does not have a fixed size)
+ = note: target type: `<T as Trait<'_>>::B` (this type does not have a fixed size)
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0512`.
diff --git a/tests/ui/issues/issue-21177.rs b/tests/ui/issues/issue-21177.rs
new file mode 100644
index 000000000..258e362d1
--- /dev/null
+++ b/tests/ui/issues/issue-21177.rs
@@ -0,0 +1,9 @@
+trait Trait {
+ type A;
+ type B;
+}
+
+fn foo<T: Trait<A = T::B>>() { }
+//~^ ERROR cycle detected
+
+fn main() { }
diff --git a/tests/ui/issues/issue-21177.stderr b/tests/ui/issues/issue-21177.stderr
new file mode 100644
index 000000000..6877a1846
--- /dev/null
+++ b/tests/ui/issues/issue-21177.stderr
@@ -0,0 +1,16 @@
+error[E0391]: cycle detected when computing the bounds for type parameter `T`
+ --> $DIR/issue-21177.rs:6:21
+ |
+LL | fn foo<T: Trait<A = T::B>>() { }
+ | ^^^^
+ |
+ = note: ...which immediately requires computing the bounds for type parameter `T` again
+note: cycle used when computing explicit predicates of `foo`
+ --> $DIR/issue-21177.rs:6:21
+ |
+LL | fn foo<T: Trait<A = T::B>>() { }
+ | ^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0391`.
diff --git a/tests/ui/issues/issue-21202.rs b/tests/ui/issues/issue-21202.rs
new file mode 100644
index 000000000..f62de7ce7
--- /dev/null
+++ b/tests/ui/issues/issue-21202.rs
@@ -0,0 +1,15 @@
+// aux-build:issue-21202.rs
+
+extern crate issue_21202 as crate1;
+
+use crate1::A;
+
+mod B {
+ use crate1::A::Foo;
+ fn bar(f: Foo) {
+ Foo::foo(&f);
+ //~^ ERROR: associated function `foo` is private
+ }
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-21202.stderr b/tests/ui/issues/issue-21202.stderr
new file mode 100644
index 000000000..1d2816fed
--- /dev/null
+++ b/tests/ui/issues/issue-21202.stderr
@@ -0,0 +1,14 @@
+error[E0624]: associated function `foo` is private
+ --> $DIR/issue-21202.rs:10:14
+ |
+LL | Foo::foo(&f);
+ | ^^^ private associated function
+ |
+ ::: $DIR/auxiliary/issue-21202.rs:4:9
+ |
+LL | fn foo(&self) { }
+ | ------------- private associated function defined here
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0624`.
diff --git a/tests/ui/issues/issue-21245.rs b/tests/ui/issues/issue-21245.rs
new file mode 100644
index 000000000..c8e55a0cc
--- /dev/null
+++ b/tests/ui/issues/issue-21245.rs
@@ -0,0 +1,56 @@
+// check-pass
+#![allow(dead_code)]
+// Regression test for issue #21245. Check that we are able to infer
+// the types in these examples correctly. It used to be that
+// insufficient type propagation caused the type of the iterator to be
+// incorrectly unified with the `*const` type to which it is coerced.
+
+// pretty-expanded FIXME #23616
+
+use std::ptr;
+
+trait IntoIterator {
+ type Iter: Iterator;
+
+ fn into_iter2(self) -> Self::Iter;
+}
+
+impl<I> IntoIterator for I where I: Iterator {
+ type Iter = I;
+
+ fn into_iter2(self) -> I {
+ self
+ }
+}
+
+fn desugared_for_loop_bad<T>(v: Vec<T>) {
+ match IntoIterator::into_iter2(v.iter()) {
+ mut iter => {
+ loop {
+ match ::std::iter::Iterator::next(&mut iter) {
+ ::std::option::Option::Some(x) => {
+ unsafe { ptr::read(x); }
+ },
+ ::std::option::Option::None => break
+ }
+ }
+ }
+ }
+}
+
+fn desugared_for_loop_good<T>(v: Vec<T>) {
+ match v.iter().into_iter() {
+ mut iter => {
+ loop {
+ match ::std::iter::Iterator::next(&mut iter) {
+ ::std::option::Option::Some(x) => {
+ unsafe { ptr::read(x); }
+ },
+ ::std::option::Option::None => break
+ }
+ }
+ }
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-21291.rs b/tests/ui/issues/issue-21291.rs
new file mode 100644
index 000000000..b351e22d8
--- /dev/null
+++ b/tests/ui/issues/issue-21291.rs
@@ -0,0 +1,10 @@
+// run-pass
+// ignore-emscripten no threads support
+
+// Regression test for unwrapping the result of `join`, issue #21291
+
+use std::thread;
+
+fn main() {
+ thread::spawn(|| {}).join().unwrap()
+}
diff --git a/tests/ui/issues/issue-21306.rs b/tests/ui/issues/issue-21306.rs
new file mode 100644
index 000000000..b06a475e4
--- /dev/null
+++ b/tests/ui/issues/issue-21306.rs
@@ -0,0 +1,9 @@
+// run-pass
+
+use std::sync::Arc;
+
+fn main() {
+ let x = 5;
+ let command = Arc::new(Box::new(|| { x*2 }));
+ assert_eq!(command(), 10);
+}
diff --git a/tests/ui/issues/issue-21332.rs b/tests/ui/issues/issue-21332.rs
new file mode 100644
index 000000000..6547f3a9b
--- /dev/null
+++ b/tests/ui/issues/issue-21332.rs
@@ -0,0 +1,10 @@
+struct S;
+
+impl Iterator for S {
+ type Item = i32;
+ fn next(&mut self) -> Result<i32, i32> { Ok(7) }
+ //~^ ERROR method `next` has an incompatible type for trait
+ //~| expected enum `Option`, found enum `Result`
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-21332.stderr b/tests/ui/issues/issue-21332.stderr
new file mode 100644
index 000000000..0e1beebf2
--- /dev/null
+++ b/tests/ui/issues/issue-21332.stderr
@@ -0,0 +1,15 @@
+error[E0053]: method `next` has an incompatible type for trait
+ --> $DIR/issue-21332.rs:5:27
+ |
+LL | fn next(&mut self) -> Result<i32, i32> { Ok(7) }
+ | ^^^^^^^^^^^^^^^^
+ | |
+ | expected enum `Option`, found enum `Result`
+ | help: change the output type to match the trait: `Option<i32>`
+ |
+ = note: expected signature `fn(&mut S) -> Option<i32>`
+ found signature `fn(&mut S) -> Result<i32, i32>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0053`.
diff --git a/tests/ui/issues/issue-21361.rs b/tests/ui/issues/issue-21361.rs
new file mode 100644
index 000000000..c970e77ab
--- /dev/null
+++ b/tests/ui/issues/issue-21361.rs
@@ -0,0 +1,11 @@
+// run-pass
+
+fn main() {
+ let v = vec![1, 2, 3];
+ let boxed: Box<dyn Iterator<Item=i32>> = Box::new(v.into_iter());
+ assert_eq!(boxed.max(), Some(3));
+
+ let v = vec![1, 2, 3];
+ let boxed: &mut dyn Iterator<Item=i32> = &mut v.into_iter();
+ assert_eq!(boxed.max(), Some(3));
+}
diff --git a/tests/ui/issues/issue-21384.rs b/tests/ui/issues/issue-21384.rs
new file mode 100644
index 000000000..caa99a159
--- /dev/null
+++ b/tests/ui/issues/issue-21384.rs
@@ -0,0 +1,21 @@
+// run-pass
+
+use ::std::ops::RangeFull;
+
+fn test<T : Clone>(arg: T) -> T {
+ arg.clone()
+}
+
+#[derive(PartialEq, Debug)]
+struct Test(isize);
+
+fn main() {
+ // Check that ranges implement clone
+ assert_eq!(test(1..5), (1..5));
+ assert_eq!(test(..5), (..5));
+ assert_eq!(test(1..), (1..));
+ assert_eq!(test(RangeFull), (RangeFull));
+
+ // Check that ranges can still be used with non-clone limits
+ assert_eq!((Test(1)..Test(5)), (Test(1)..Test(5)));
+}
diff --git a/tests/ui/issues/issue-21400.rs b/tests/ui/issues/issue-21400.rs
new file mode 100644
index 000000000..4a85158d9
--- /dev/null
+++ b/tests/ui/issues/issue-21400.rs
@@ -0,0 +1,56 @@
+// run-pass
+// Regression test for #21400 which itself was extracted from
+// stackoverflow.com/questions/28031155/is-my-borrow-checker-drunk/28031580
+
+fn main() {
+ let mut t = Test;
+ assert_eq!(t.method1("one"), Ok(1));
+ assert_eq!(t.method2("two"), Ok(2));
+ assert_eq!(t.test(), Ok(2));
+}
+
+struct Test;
+
+impl Test {
+ fn method1(&mut self, _arg: &str) -> Result<usize, &str> {
+ Ok(1)
+ }
+
+ fn method2(self: &mut Test, _arg: &str) -> Result<usize, &str> {
+ Ok(2)
+ }
+
+ fn test(self: &mut Test) -> Result<usize, &str> {
+ let s = format!("abcde");
+ // (Originally, this invocation of method2 was saying that `s`
+ // does not live long enough.)
+ let data = match self.method2(&*s) {
+ Ok(r) => r,
+ Err(e) => return Err(e)
+ };
+ Ok(data)
+ }
+}
+
+// Below is a closer match for the original test that was failing to compile
+
+pub struct GitConnect;
+
+impl GitConnect {
+ fn command(self: &mut GitConnect, _s: &str) -> Result<Vec<Vec<u8>>, &str> {
+ unimplemented!()
+ }
+
+ pub fn git_upload_pack(self: &mut GitConnect) -> Result<String, &str> {
+ let c = format!("git-upload-pack");
+
+ let mut out = String::new();
+ let data = self.command(&c)?;
+
+ for line in data.iter() {
+ out.push_str(&format!("{:?}", line));
+ }
+
+ Ok(out)
+ }
+}
diff --git a/tests/ui/issues/issue-21402.rs b/tests/ui/issues/issue-21402.rs
new file mode 100644
index 000000000..d140b6162
--- /dev/null
+++ b/tests/ui/issues/issue-21402.rs
@@ -0,0 +1,12 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+#[derive(Hash)]
+struct Foo {
+ a: Vec<bool>,
+ b: (bool, bool),
+ c: [bool; 2],
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-21449.rs b/tests/ui/issues/issue-21449.rs
new file mode 100644
index 000000000..00ce2b7ff
--- /dev/null
+++ b/tests/ui/issues/issue-21449.rs
@@ -0,0 +1,6 @@
+mod MyMod {}
+
+fn main() {
+ let myVar = MyMod { T: 0 };
+ //~^ ERROR expected struct, variant or union type, found module `MyMod`
+}
diff --git a/tests/ui/issues/issue-21449.stderr b/tests/ui/issues/issue-21449.stderr
new file mode 100644
index 000000000..ecaf6faba
--- /dev/null
+++ b/tests/ui/issues/issue-21449.stderr
@@ -0,0 +1,9 @@
+error[E0574]: expected struct, variant or union type, found module `MyMod`
+ --> $DIR/issue-21449.rs:4:17
+ |
+LL | let myVar = MyMod { T: 0 };
+ | ^^^^^ not a struct, variant or union type
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0574`.
diff --git a/tests/ui/issues/issue-2150.rs b/tests/ui/issues/issue-2150.rs
new file mode 100644
index 000000000..baa1dde0f
--- /dev/null
+++ b/tests/ui/issues/issue-2150.rs
@@ -0,0 +1,12 @@
+#![deny(unreachable_code)]
+#![allow(unused_variables)]
+#![allow(dead_code)]
+
+fn fail_len(v: Vec<isize> ) -> usize {
+ let mut i = 3;
+ panic!();
+ for x in &v { i += 1; }
+ //~^ ERROR: unreachable statement
+ return i;
+}
+fn main() {}
diff --git a/tests/ui/issues/issue-2150.stderr b/tests/ui/issues/issue-2150.stderr
new file mode 100644
index 000000000..26874faa2
--- /dev/null
+++ b/tests/ui/issues/issue-2150.stderr
@@ -0,0 +1,16 @@
+error: unreachable statement
+ --> $DIR/issue-2150.rs:8:5
+ |
+LL | panic!();
+ | -------- any code following this expression is unreachable
+LL | for x in &v { i += 1; }
+ | ^^^^^^^^^^^^^^^^^^^^^^^ unreachable statement
+ |
+note: the lint level is defined here
+ --> $DIR/issue-2150.rs:1:9
+ |
+LL | #![deny(unreachable_code)]
+ | ^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-2151.rs b/tests/ui/issues/issue-2151.rs
new file mode 100644
index 000000000..82cf49de8
--- /dev/null
+++ b/tests/ui/issues/issue-2151.rs
@@ -0,0 +1,4 @@
+fn main() {
+ let x = panic!(); //~ ERROR type annotations needed
+ x.clone();
+}
diff --git a/tests/ui/issues/issue-2151.stderr b/tests/ui/issues/issue-2151.stderr
new file mode 100644
index 000000000..c75038b61
--- /dev/null
+++ b/tests/ui/issues/issue-2151.stderr
@@ -0,0 +1,16 @@
+error[E0282]: type annotations needed
+ --> $DIR/issue-2151.rs:2:9
+ |
+LL | let x = panic!();
+ | ^
+LL | x.clone();
+ | - type must be known at this point
+ |
+help: consider giving `x` an explicit type
+ |
+LL | let x: /* Type */ = panic!();
+ | ++++++++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-21546.rs b/tests/ui/issues/issue-21546.rs
new file mode 100644
index 000000000..9f3974b43
--- /dev/null
+++ b/tests/ui/issues/issue-21546.rs
@@ -0,0 +1,49 @@
+// Also works as a test for #14564
+
+#[allow(non_snake_case)]
+mod Foo { }
+
+#[allow(dead_code)]
+struct Foo;
+//~^ ERROR the name `Foo` is defined multiple times
+
+#[allow(non_snake_case)]
+mod Bar { }
+
+#[allow(dead_code)]
+struct Bar(i32);
+//~^ ERROR the name `Bar` is defined multiple times
+
+
+#[allow(dead_code)]
+struct Baz(i32);
+
+#[allow(non_snake_case)]
+mod Baz { }
+//~^ ERROR the name `Baz` is defined multiple times
+
+
+#[allow(dead_code)]
+struct Qux { x: bool }
+
+#[allow(non_snake_case)]
+mod Qux { }
+//~^ ERROR the name `Qux` is defined multiple times
+
+
+#[allow(dead_code)]
+struct Quux;
+
+#[allow(non_snake_case)]
+mod Quux { }
+//~^ ERROR the name `Quux` is defined multiple times
+
+
+#[allow(dead_code)]
+enum Corge { A, B }
+
+#[allow(non_snake_case)]
+mod Corge { }
+//~^ ERROR the name `Corge` is defined multiple times
+
+fn main() { }
diff --git a/tests/ui/issues/issue-21546.stderr b/tests/ui/issues/issue-21546.stderr
new file mode 100644
index 000000000..5fd06fc67
--- /dev/null
+++ b/tests/ui/issues/issue-21546.stderr
@@ -0,0 +1,69 @@
+error[E0428]: the name `Foo` is defined multiple times
+ --> $DIR/issue-21546.rs:7:1
+ |
+LL | mod Foo { }
+ | ------- previous definition of the module `Foo` here
+...
+LL | struct Foo;
+ | ^^^^^^^^^^^ `Foo` redefined here
+ |
+ = note: `Foo` must be defined only once in the type namespace of this module
+
+error[E0428]: the name `Bar` is defined multiple times
+ --> $DIR/issue-21546.rs:14:1
+ |
+LL | mod Bar { }
+ | ------- previous definition of the module `Bar` here
+...
+LL | struct Bar(i32);
+ | ^^^^^^^^^^^^^^^^ `Bar` redefined here
+ |
+ = note: `Bar` must be defined only once in the type namespace of this module
+
+error[E0428]: the name `Baz` is defined multiple times
+ --> $DIR/issue-21546.rs:22:1
+ |
+LL | struct Baz(i32);
+ | ---------------- previous definition of the type `Baz` here
+...
+LL | mod Baz { }
+ | ^^^^^^^ `Baz` redefined here
+ |
+ = note: `Baz` must be defined only once in the type namespace of this module
+
+error[E0428]: the name `Qux` is defined multiple times
+ --> $DIR/issue-21546.rs:30:1
+ |
+LL | struct Qux { x: bool }
+ | ---------- previous definition of the type `Qux` here
+...
+LL | mod Qux { }
+ | ^^^^^^^ `Qux` redefined here
+ |
+ = note: `Qux` must be defined only once in the type namespace of this module
+
+error[E0428]: the name `Quux` is defined multiple times
+ --> $DIR/issue-21546.rs:38:1
+ |
+LL | struct Quux;
+ | ------------ previous definition of the type `Quux` here
+...
+LL | mod Quux { }
+ | ^^^^^^^^ `Quux` redefined here
+ |
+ = note: `Quux` must be defined only once in the type namespace of this module
+
+error[E0428]: the name `Corge` is defined multiple times
+ --> $DIR/issue-21546.rs:46:1
+ |
+LL | enum Corge { A, B }
+ | ---------- previous definition of the type `Corge` here
+...
+LL | mod Corge { }
+ | ^^^^^^^^^ `Corge` redefined here
+ |
+ = note: `Corge` must be defined only once in the type namespace of this module
+
+error: aborting due to 6 previous errors
+
+For more information about this error, try `rustc --explain E0428`.
diff --git a/tests/ui/issues/issue-21554.rs b/tests/ui/issues/issue-21554.rs
new file mode 100644
index 000000000..c176b1247
--- /dev/null
+++ b/tests/ui/issues/issue-21554.rs
@@ -0,0 +1,6 @@
+struct Inches(i32);
+
+fn main() {
+ Inches as f32;
+ //~^ ERROR casting
+}
diff --git a/tests/ui/issues/issue-21554.stderr b/tests/ui/issues/issue-21554.stderr
new file mode 100644
index 000000000..6ea552a26
--- /dev/null
+++ b/tests/ui/issues/issue-21554.stderr
@@ -0,0 +1,9 @@
+error[E0606]: casting `fn(i32) -> Inches {Inches}` as `f32` is invalid
+ --> $DIR/issue-21554.rs:4:5
+ |
+LL | Inches as f32;
+ | ^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0606`.
diff --git a/tests/ui/issues/issue-21596.rs b/tests/ui/issues/issue-21596.rs
new file mode 100644
index 000000000..79f6c91d9
--- /dev/null
+++ b/tests/ui/issues/issue-21596.rs
@@ -0,0 +1,5 @@
+fn main() {
+ let x = 8u8;
+ let z: *const u8 = &x;
+ println!("{}", z.to_string()); //~ ERROR E0599
+}
diff --git a/tests/ui/issues/issue-21596.stderr b/tests/ui/issues/issue-21596.stderr
new file mode 100644
index 000000000..a336d1b0e
--- /dev/null
+++ b/tests/ui/issues/issue-21596.stderr
@@ -0,0 +1,15 @@
+error[E0599]: `*const u8` doesn't implement `std::fmt::Display`
+ --> $DIR/issue-21596.rs:4:22
+ |
+LL | println!("{}", z.to_string());
+ | ^^^^^^^^^ `*const u8` cannot be formatted with the default formatter
+ |
+ = note: try using `<*const T>::as_ref()` to get a reference to the type behind the pointer: https://doc.rust-lang.org/std/primitive.pointer.html#method.as_ref
+ = note: using `<*const T>::as_ref()` on a pointer which is unaligned or points to invalid or uninitialized memory is undefined behavior
+ = note: the following trait bounds were not satisfied:
+ `*const u8: std::fmt::Display`
+ which is required by `*const u8: ToString`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-21600.rs b/tests/ui/issues/issue-21600.rs
new file mode 100644
index 000000000..2e22e5e6f
--- /dev/null
+++ b/tests/ui/issues/issue-21600.rs
@@ -0,0 +1,18 @@
+fn call_it<F>(f: F) where F: Fn() { f(); }
+
+struct A;
+
+impl A {
+ fn gen(&self) {}
+ fn gen_mut(&mut self) {}
+}
+
+fn main() {
+ let mut x = A;
+ call_it(|| {
+ call_it(|| x.gen());
+ call_it(|| x.gen_mut());
+ //~^ ERROR cannot borrow `x` as mutable, as it is a captured variable in a `Fn` closure
+ //~| ERROR cannot borrow `x` as mutable, as it is a captured variable in a `Fn` closure
+ });
+}
diff --git a/tests/ui/issues/issue-21600.stderr b/tests/ui/issues/issue-21600.stderr
new file mode 100644
index 000000000..ea304f936
--- /dev/null
+++ b/tests/ui/issues/issue-21600.stderr
@@ -0,0 +1,31 @@
+error[E0596]: cannot borrow `x` as mutable, as it is a captured variable in a `Fn` closure
+ --> $DIR/issue-21600.rs:14:20
+ |
+LL | fn call_it<F>(f: F) where F: Fn() { f(); }
+ | - change this to accept `FnMut` instead of `Fn`
+...
+LL | call_it(|| x.gen_mut());
+ | ------- -- ^^^^^^^^^^^ cannot borrow as mutable
+ | | |
+ | | in this closure
+ | expects `Fn` instead of `FnMut`
+
+error[E0596]: cannot borrow `x` as mutable, as it is a captured variable in a `Fn` closure
+ --> $DIR/issue-21600.rs:14:17
+ |
+LL | fn call_it<F>(f: F) where F: Fn() { f(); }
+ | - change this to accept `FnMut` instead of `Fn`
+...
+LL | call_it(|| {
+ | ------- -- in this closure
+ | |
+ | expects `Fn` instead of `FnMut`
+LL | call_it(|| x.gen());
+LL | call_it(|| x.gen_mut());
+ | ^^ - mutable borrow occurs due to use of `x` in closure
+ | |
+ | cannot borrow as mutable
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0596`.
diff --git a/tests/ui/issues/issue-21622.rs b/tests/ui/issues/issue-21622.rs
new file mode 100644
index 000000000..2d4cddac9
--- /dev/null
+++ b/tests/ui/issues/issue-21622.rs
@@ -0,0 +1,21 @@
+// check-pass
+#![allow(dead_code)]
+#![allow(unused_variables)]
+
+struct Index;
+
+impl Index {
+ fn new() -> Self { Index }
+}
+
+fn user() {
+ let new = Index::new;
+
+ fn inner() {
+ let index = Index::new();
+ }
+
+ let index2 = new();
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-21634.rs b/tests/ui/issues/issue-21634.rs
new file mode 100644
index 000000000..2731bfd76
--- /dev/null
+++ b/tests/ui/issues/issue-21634.rs
@@ -0,0 +1,20 @@
+// run-pass
+#![allow(stable_features)]
+
+#![feature(cfg_target_feature)]
+
+#[cfg(any(not(target_arch = "x86"), target_feature = "sse2"))]
+fn main() {
+ if let Ok(x) = "3.1415".parse::<f64>() {
+ assert_eq!(false, x <= 0.0);
+ }
+ if let Ok(x) = "3.1415".parse::<f64>() {
+ assert_eq!(3.1415, x + 0.0);
+ }
+ if let Ok(mut x) = "3.1415".parse::<f64>() {
+ assert_eq!(8.1415, { x += 5.0; x });
+ }
+}
+
+#[cfg(all(target_arch = "x86", not(target_feature = "sse2")))]
+fn main() {}
diff --git a/tests/ui/issues/issue-21655.rs b/tests/ui/issues/issue-21655.rs
new file mode 100644
index 000000000..d1cd4ec7b
--- /dev/null
+++ b/tests/ui/issues/issue-21655.rs
@@ -0,0 +1,12 @@
+// run-pass
+
+fn test(it: &mut dyn Iterator<Item=i32>) {
+ for x in it {
+ assert_eq!(x, 1)
+ }
+}
+
+fn main() {
+ let v = vec![1];
+ test(&mut v.into_iter())
+}
diff --git a/tests/ui/issues/issue-2170-exe.rs b/tests/ui/issues/issue-2170-exe.rs
new file mode 100644
index 000000000..a89579706
--- /dev/null
+++ b/tests/ui/issues/issue-2170-exe.rs
@@ -0,0 +1,9 @@
+// run-pass
+// aux-build:issue-2170-lib.rs
+// pretty-expanded FIXME #23616
+
+extern crate issue_2170_lib;
+
+pub fn main() {
+ // let _ = issue_2170_lib::rsrc(2);
+}
diff --git a/tests/ui/issues/issue-21701.rs b/tests/ui/issues/issue-21701.rs
new file mode 100644
index 000000000..bfa03c5e4
--- /dev/null
+++ b/tests/ui/issues/issue-21701.rs
@@ -0,0 +1,15 @@
+fn foo<U>(t: U) {
+ let y = t();
+//~^ ERROR: expected function, found `U`
+}
+
+struct Bar;
+
+pub fn some_func() {
+ let f = Bar();
+//~^ ERROR: expected function, found struct `Bar`
+}
+
+fn main() {
+ foo(|| { 1 });
+}
diff --git a/tests/ui/issues/issue-21701.stderr b/tests/ui/issues/issue-21701.stderr
new file mode 100644
index 000000000..9f1fe7dde
--- /dev/null
+++ b/tests/ui/issues/issue-21701.stderr
@@ -0,0 +1,30 @@
+error[E0618]: expected function, found `U`
+ --> $DIR/issue-21701.rs:2:13
+ |
+LL | fn foo<U>(t: U) {
+ | - `t` has type `U`
+LL | let y = t();
+ | ^--
+ | |
+ | call expression requires function
+
+error[E0618]: expected function, found struct `Bar`
+ --> $DIR/issue-21701.rs:9:13
+ |
+LL | struct Bar;
+ | ---------- struct `Bar` defined here
+...
+LL | let f = Bar();
+ | ^^^--
+ | |
+ | call expression requires function
+ |
+help: `Bar` is a unit struct, and does not take parentheses to be constructed
+ |
+LL - let f = Bar();
+LL + let f = Bar;
+ |
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0618`.
diff --git a/tests/ui/issues/issue-21763.rs b/tests/ui/issues/issue-21763.rs
new file mode 100644
index 000000000..5beb1d8b8
--- /dev/null
+++ b/tests/ui/issues/issue-21763.rs
@@ -0,0 +1,11 @@
+// Regression test for HashMap only impl'ing Send/Sync if its contents do
+
+use std::collections::HashMap;
+use std::rc::Rc;
+
+fn foo<T: Send>() {}
+
+fn main() {
+ foo::<HashMap<Rc<()>, Rc<()>>>();
+ //~^ ERROR `Rc<()>` cannot be sent between threads safely
+}
diff --git a/tests/ui/issues/issue-21763.stderr b/tests/ui/issues/issue-21763.stderr
new file mode 100644
index 000000000..04379f07b
--- /dev/null
+++ b/tests/ui/issues/issue-21763.stderr
@@ -0,0 +1,20 @@
+error[E0277]: `Rc<()>` cannot be sent between threads safely
+ --> $DIR/issue-21763.rs:9:11
+ |
+LL | foo::<HashMap<Rc<()>, Rc<()>>>();
+ | ^^^^^^^^^^^^^^^^^^^^^^^ `Rc<()>` cannot be sent between threads safely
+ |
+ = help: within `(Rc<()>, Rc<()>)`, the trait `Send` is not implemented for `Rc<()>`
+ = note: required because it appears within the type `(Rc<()>, Rc<()>)`
+ = note: required for `hashbrown::raw::RawTable<(Rc<()>, Rc<()>)>` to implement `Send`
+ = note: required because it appears within the type `HashMap<Rc<()>, Rc<()>, RandomState>`
+ = note: required because it appears within the type `HashMap<Rc<()>, Rc<()>>`
+note: required by a bound in `foo`
+ --> $DIR/issue-21763.rs:6:11
+ |
+LL | fn foo<T: Send>() {}
+ | ^^^^ required by this bound in `foo`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-21837.rs b/tests/ui/issues/issue-21837.rs
new file mode 100644
index 000000000..213119bd2
--- /dev/null
+++ b/tests/ui/issues/issue-21837.rs
@@ -0,0 +1,10 @@
+pub trait Bound {}
+pub struct Foo<T: Bound>(T);
+
+pub trait Trait1 {}
+impl<T: Bound> Trait1 for Foo<T> {}
+
+pub trait Trait2 {}
+impl<T> Trait2 for Foo<T> {} //~ ERROR the trait bound `T: Bound` is not satisfied
+
+fn main() {}
diff --git a/tests/ui/issues/issue-21837.stderr b/tests/ui/issues/issue-21837.stderr
new file mode 100644
index 000000000..3d3852664
--- /dev/null
+++ b/tests/ui/issues/issue-21837.stderr
@@ -0,0 +1,19 @@
+error[E0277]: the trait bound `T: Bound` is not satisfied
+ --> $DIR/issue-21837.rs:8:20
+ |
+LL | impl<T> Trait2 for Foo<T> {}
+ | ^^^^^^ the trait `Bound` is not implemented for `T`
+ |
+note: required by a bound in `Foo`
+ --> $DIR/issue-21837.rs:2:19
+ |
+LL | pub struct Foo<T: Bound>(T);
+ | ^^^^^ required by this bound in `Foo`
+help: consider restricting type parameter `T`
+ |
+LL | impl<T: Bound> Trait2 for Foo<T> {}
+ | +++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-21891.rs b/tests/ui/issues/issue-21891.rs
new file mode 100644
index 000000000..576f0253e
--- /dev/null
+++ b/tests/ui/issues/issue-21891.rs
@@ -0,0 +1,12 @@
+// build-pass
+#![allow(dead_code)]
+#![allow(non_upper_case_globals)]
+
+// pretty-expanded FIXME #23616
+
+static foo: [usize; 3] = [1, 2, 3];
+
+static slice_1: &'static [usize] = &foo;
+static slice_2: &'static [usize] = &foo;
+
+fn main() {}
diff --git a/tests/ui/issues/issue-2190-1.rs b/tests/ui/issues/issue-2190-1.rs
new file mode 100644
index 000000000..e67a924b9
--- /dev/null
+++ b/tests/ui/issues/issue-2190-1.rs
@@ -0,0 +1,26 @@
+// run-pass
+#![allow(unused_must_use)]
+#![allow(non_upper_case_globals)]
+
+// pretty-expanded FIXME #23616
+// ignore-emscripten no threads
+
+use std::thread::Builder;
+
+static generations: usize = 1024+256+128+49;
+
+fn spawn(mut f: Box<dyn FnMut() + 'static + Send>) {
+ Builder::new().stack_size(32 * 1024).spawn(move|| f());
+}
+
+fn child_no(x: usize) -> Box<dyn FnMut() + 'static + Send> {
+ Box::new(move|| {
+ if x < generations {
+ spawn(child_no(x+1));
+ }
+ })
+}
+
+pub fn main() {
+ spawn(child_no(0));
+}
diff --git a/tests/ui/issues/issue-21909.rs b/tests/ui/issues/issue-21909.rs
new file mode 100644
index 000000000..7cb558d9a
--- /dev/null
+++ b/tests/ui/issues/issue-21909.rs
@@ -0,0 +1,15 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+trait A<X> {
+ fn dummy(&self, arg: X);
+}
+
+trait B {
+ type X;
+ type Y: A<Self::X>;
+
+ fn dummy(&self);
+}
+
+fn main () { }
diff --git a/tests/ui/issues/issue-21922.rs b/tests/ui/issues/issue-21922.rs
new file mode 100644
index 000000000..9727b2efe
--- /dev/null
+++ b/tests/ui/issues/issue-21922.rs
@@ -0,0 +1,17 @@
+// run-pass
+use std::ops::Add;
+fn show(z: i32) {
+ println!("{}", z)
+}
+fn main() {
+ let x = 23;
+ let y = 42;
+ show(Add::add( x, y));
+ show(Add::add( x, &y));
+ show(Add::add(&x, y));
+ show(Add::add(&x, &y));
+ show( x + y);
+ show( x + &y);
+ show(&x + y);
+ show(&x + &y);
+}
diff --git a/tests/ui/issues/issue-21946.rs b/tests/ui/issues/issue-21946.rs
new file mode 100644
index 000000000..d0c052cb2
--- /dev/null
+++ b/tests/ui/issues/issue-21946.rs
@@ -0,0 +1,12 @@
+trait Foo {
+ type A;
+}
+
+struct FooStruct;
+
+impl Foo for FooStruct {
+ type A = <FooStruct as Foo>::A;
+ //~^ ERROR overflow evaluating the requirement `<FooStruct as Foo>::A == _`
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-21946.stderr b/tests/ui/issues/issue-21946.stderr
new file mode 100644
index 000000000..67f6b3081
--- /dev/null
+++ b/tests/ui/issues/issue-21946.stderr
@@ -0,0 +1,9 @@
+error[E0275]: overflow evaluating the requirement `<FooStruct as Foo>::A == _`
+ --> $DIR/issue-21946.rs:8:14
+ |
+LL | type A = <FooStruct as Foo>::A;
+ | ^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0275`.
diff --git a/tests/ui/issues/issue-21950.rs b/tests/ui/issues/issue-21950.rs
new file mode 100644
index 000000000..72a98bd8d
--- /dev/null
+++ b/tests/ui/issues/issue-21950.rs
@@ -0,0 +1,13 @@
+trait Add<Rhs=Self> {
+ type Output;
+}
+
+impl Add for i32 {
+ type Output = i32;
+}
+
+fn main() {
+ let x = &10 as &dyn Add;
+ //~^ ERROR E0393
+ //~| ERROR E0191
+}
diff --git a/tests/ui/issues/issue-21950.stderr b/tests/ui/issues/issue-21950.stderr
new file mode 100644
index 000000000..731615a6b
--- /dev/null
+++ b/tests/ui/issues/issue-21950.stderr
@@ -0,0 +1,24 @@
+error[E0191]: the value of the associated type `Output` (from trait `Add`) must be specified
+ --> $DIR/issue-21950.rs:10:25
+ |
+LL | type Output;
+ | ----------- `Output` defined here
+...
+LL | let x = &10 as &dyn Add;
+ | ^^^ help: specify the associated type: `Add<Output = Type>`
+
+error[E0393]: the type parameter `Rhs` must be explicitly specified
+ --> $DIR/issue-21950.rs:10:25
+ |
+LL | trait Add<Rhs=Self> {
+ | ------------------- type parameter `Rhs` must be specified for this
+...
+LL | let x = &10 as &dyn Add;
+ | ^^^ help: set the type parameter to the desired type: `Add<Rhs>`
+ |
+ = note: because of the default `Self` reference, type parameters must be specified on object types
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0191, E0393.
+For more information about an error, try `rustc --explain E0191`.
diff --git a/tests/ui/issues/issue-21974.rs b/tests/ui/issues/issue-21974.rs
new file mode 100644
index 000000000..f7c659be1
--- /dev/null
+++ b/tests/ui/issues/issue-21974.rs
@@ -0,0 +1,18 @@
+// Test that (for now) we report an ambiguity error here, because
+// specific trait relationships are ignored for the purposes of trait
+// matching. This behavior should likely be improved such that this
+// test passes. See #21974 for more details.
+
+trait Foo {
+ fn foo(self);
+}
+
+fn foo<'a,'b,T>(x: &'a T, y: &'b T)
+ where &'a T : Foo, //~ ERROR type annotations needed
+ &'b T : Foo
+{
+ x.foo();
+ y.foo();
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-21974.stderr b/tests/ui/issues/issue-21974.stderr
new file mode 100644
index 000000000..2d60b18b1
--- /dev/null
+++ b/tests/ui/issues/issue-21974.stderr
@@ -0,0 +1,17 @@
+error[E0283]: type annotations needed: cannot satisfy `&'a T: Foo`
+ --> $DIR/issue-21974.rs:11:19
+ |
+LL | where &'a T : Foo,
+ | ^^^
+ |
+note: multiple `impl`s or `where` clauses satisfying `&'a T: Foo` found
+ --> $DIR/issue-21974.rs:11:19
+ |
+LL | where &'a T : Foo,
+ | ^^^
+LL | &'b T : Foo
+ | ^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0283`.
diff --git a/tests/ui/issues/issue-22008.rs b/tests/ui/issues/issue-22008.rs
new file mode 100644
index 000000000..004255822
--- /dev/null
+++ b/tests/ui/issues/issue-22008.rs
@@ -0,0 +1,9 @@
+// run-pass
+pub fn main() {
+ let command = "a";
+
+ match command {
+ "foo" => println!("foo"),
+ _ => println!("{}", command),
+ }
+}
diff --git a/tests/ui/issues/issue-22034.rs b/tests/ui/issues/issue-22034.rs
new file mode 100644
index 000000000..405ffd089
--- /dev/null
+++ b/tests/ui/issues/issue-22034.rs
@@ -0,0 +1,11 @@
+#![feature(rustc_private)]
+
+extern crate libc;
+
+fn main() {
+ let ptr: *mut () = core::ptr::null_mut();
+ let _: &mut dyn Fn() = unsafe {
+ &mut *(ptr as *mut dyn Fn())
+ //~^ ERROR expected a `Fn<()>` closure, found `()`
+ };
+}
diff --git a/tests/ui/issues/issue-22034.stderr b/tests/ui/issues/issue-22034.stderr
new file mode 100644
index 000000000..b32de5b24
--- /dev/null
+++ b/tests/ui/issues/issue-22034.stderr
@@ -0,0 +1,13 @@
+error[E0277]: expected a `Fn<()>` closure, found `()`
+ --> $DIR/issue-22034.rs:8:16
+ |
+LL | &mut *(ptr as *mut dyn Fn())
+ | ^^^ expected an `Fn<()>` closure, found `()`
+ |
+ = help: the trait `Fn<()>` is not implemented for `()`
+ = note: wrap the `()` in a closure with no arguments: `|| { /* code */ }`
+ = note: required for the cast from `()` to the object type `dyn Fn()`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-22036.rs b/tests/ui/issues/issue-22036.rs
new file mode 100644
index 000000000..30da2130a
--- /dev/null
+++ b/tests/ui/issues/issue-22036.rs
@@ -0,0 +1,25 @@
+// run-pass
+
+trait DigitCollection: Sized {
+ type Iter: Iterator<Item = u8>;
+ fn digit_iter(self) -> Self::Iter;
+
+ fn digit_sum(self) -> u32 {
+ self.digit_iter()
+ .map(|digit: u8| digit as u32)
+ .fold(0, |sum, digit| sum + digit)
+ }
+}
+
+impl<I> DigitCollection for I where I: Iterator<Item=u8> {
+ type Iter = I;
+
+ fn digit_iter(self) -> I {
+ self
+ }
+}
+
+fn main() {
+ let xs = vec![1, 2, 3, 4, 5];
+ assert_eq!(xs.into_iter().digit_sum(), 15);
+}
diff --git a/tests/ui/issues/issue-2214.rs b/tests/ui/issues/issue-2214.rs
new file mode 100644
index 000000000..1994c3515
--- /dev/null
+++ b/tests/ui/issues/issue-2214.rs
@@ -0,0 +1,41 @@
+// run-pass
+// ignore-wasm32-bare no libc to test ffi with
+// ignore-sgx no libc
+#![feature(rustc_private)]
+
+extern crate libc;
+
+use libc::{c_double, c_int};
+use std::mem;
+
+fn to_c_int(v: &mut isize) -> &mut c_int {
+ unsafe { mem::transmute_copy(&v) }
+}
+
+fn lgamma(n: c_double, value: &mut isize) -> c_double {
+ unsafe {
+ return m::lgamma(n, to_c_int(value));
+ }
+}
+
+mod m {
+ use libc::{c_double, c_int};
+
+ extern "C" {
+ #[cfg(all(unix, not(target_os = "vxworks")))]
+ #[link_name="lgamma_r"]
+ pub fn lgamma(n: c_double, sign: &mut c_int) -> c_double;
+ #[cfg(windows)]
+ #[link_name = "lgamma"]
+ pub fn lgamma(n: c_double, sign: &mut c_int) -> c_double;
+ #[cfg(target_os = "vxworks")]
+ #[link_name = "lgamma"]
+ pub fn lgamma(n: c_double, sign: &mut c_int) -> c_double;
+ }
+}
+
+pub fn main() {
+ let mut y: isize = 5;
+ let x: &mut isize = &mut y;
+ assert_eq!(lgamma(1.0 as c_double, x), 0.0 as c_double);
+}
diff --git a/tests/ui/issues/issue-22258.rs b/tests/ui/issues/issue-22258.rs
new file mode 100644
index 000000000..93ead5818
--- /dev/null
+++ b/tests/ui/issues/issue-22258.rs
@@ -0,0 +1,10 @@
+// run-pass
+use std::ops::Add;
+
+fn f<T: Add>(a: T, b: T) -> <T as Add>::Output {
+ a + b
+}
+
+fn main() {
+ println!("a + b is {}", f::<f32>(100f32, 200f32));
+}
diff --git a/tests/ui/issues/issue-22289.rs b/tests/ui/issues/issue-22289.rs
new file mode 100644
index 000000000..e1b3dfe5b
--- /dev/null
+++ b/tests/ui/issues/issue-22289.rs
@@ -0,0 +1,3 @@
+fn main() {
+ 0 as &dyn std::any::Any; //~ ERROR non-primitive cast
+}
diff --git a/tests/ui/issues/issue-22289.stderr b/tests/ui/issues/issue-22289.stderr
new file mode 100644
index 000000000..b594e8b7a
--- /dev/null
+++ b/tests/ui/issues/issue-22289.stderr
@@ -0,0 +1,14 @@
+error[E0605]: non-primitive cast: `i32` as `&(dyn Any + 'static)`
+ --> $DIR/issue-22289.rs:2:5
+ |
+LL | 0 as &dyn std::any::Any;
+ | ^^^^^^^^^^^^^^^^^^^^^^^ invalid cast
+ |
+help: consider borrowing the value
+ |
+LL | &0 as &dyn std::any::Any;
+ | +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0605`.
diff --git a/tests/ui/issues/issue-22312.rs b/tests/ui/issues/issue-22312.rs
new file mode 100644
index 000000000..4e359b341
--- /dev/null
+++ b/tests/ui/issues/issue-22312.rs
@@ -0,0 +1,17 @@
+use std::ops::Index;
+
+pub trait Array2D: Index<usize> + Sized {
+ fn rows(&self) -> usize;
+ fn columns(&self) -> usize;
+ fn get<'a>(&'a self, y: usize, x: usize) -> Option<&'a <Self as Index<usize>>::Output> {
+ if y >= self.rows() || x >= self.columns() {
+ return None;
+ }
+ let i = y * self.columns() + x;
+ let indexer = &(*self as &dyn Index<usize, Output = <Self as Index<usize>>::Output>);
+ //~^ERROR non-primitive cast
+ Some(indexer.index(i))
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-22312.stderr b/tests/ui/issues/issue-22312.stderr
new file mode 100644
index 000000000..da15c092f
--- /dev/null
+++ b/tests/ui/issues/issue-22312.stderr
@@ -0,0 +1,14 @@
+error[E0605]: non-primitive cast: `Self` as `&dyn Index<usize, Output = <Self as Index<usize>>::Output>`
+ --> $DIR/issue-22312.rs:11:24
+ |
+LL | let indexer = &(*self as &dyn Index<usize, Output = <Self as Index<usize>>::Output>);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invalid cast
+ |
+help: consider borrowing the value
+ |
+LL | let indexer = &(&*self as &dyn Index<usize, Output = <Self as Index<usize>>::Output>);
+ | +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0605`.
diff --git a/tests/ui/issues/issue-22346.rs b/tests/ui/issues/issue-22346.rs
new file mode 100644
index 000000000..5f6d9dcc9
--- /dev/null
+++ b/tests/ui/issues/issue-22346.rs
@@ -0,0 +1,11 @@
+// run-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+// This used to cause an ICE because the retslot for the "return" had the wrong type
+fn testcase<'a>() -> Box<dyn Iterator<Item=usize> + 'a> {
+ return Box::new((0..3).map(|i| { return i; }));
+}
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-22356.rs b/tests/ui/issues/issue-22356.rs
new file mode 100644
index 000000000..47fad3bb9
--- /dev/null
+++ b/tests/ui/issues/issue-22356.rs
@@ -0,0 +1,34 @@
+// check-pass
+#![allow(type_alias_bounds)]
+
+// pretty-expanded FIXME #23616
+
+use std::marker::PhantomData;
+
+pub struct Handle<T, I>(T, I);
+
+impl<T, I> Handle<T, I> {
+ pub fn get_info(&self) -> &I {
+ let Handle(_, ref info) = *self;
+ info
+ }
+}
+
+pub struct BufferHandle<D: Device, T> {
+ raw: RawBufferHandle<D>,
+ _marker: PhantomData<T>,
+}
+
+impl<D: Device, T> BufferHandle<D, T> {
+ pub fn get_info(&self) -> &String {
+ self.raw.get_info()
+ }
+}
+
+pub type RawBufferHandle<D: Device> = Handle<<D as Device>::Buffer, String>;
+
+pub trait Device {
+ type Buffer;
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-22370.rs b/tests/ui/issues/issue-22370.rs
new file mode 100644
index 000000000..bab0469c0
--- /dev/null
+++ b/tests/ui/issues/issue-22370.rs
@@ -0,0 +1,6 @@
+trait A<T=Self> {}
+
+fn f(a: &dyn A) {}
+//~^ ERROR E0393
+
+fn main() {}
diff --git a/tests/ui/issues/issue-22370.stderr b/tests/ui/issues/issue-22370.stderr
new file mode 100644
index 000000000..cd27c4e4e
--- /dev/null
+++ b/tests/ui/issues/issue-22370.stderr
@@ -0,0 +1,14 @@
+error[E0393]: the type parameter `T` must be explicitly specified
+ --> $DIR/issue-22370.rs:3:14
+ |
+LL | trait A<T=Self> {}
+ | --------------- type parameter `T` must be specified for this
+LL |
+LL | fn f(a: &dyn A) {}
+ | ^ help: set the type parameter to the desired type: `A<T>`
+ |
+ = note: because of the default `Self` reference, type parameters must be specified on object types
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0393`.
diff --git a/tests/ui/issues/issue-22384.rs b/tests/ui/issues/issue-22384.rs
new file mode 100644
index 000000000..98988f27e
--- /dev/null
+++ b/tests/ui/issues/issue-22384.rs
@@ -0,0 +1,8 @@
+trait Trait {
+ fn foo();
+}
+
+fn main() {
+ <<i32 as Copy>::foobar as Trait>::foo();
+ //~^ ERROR cannot find associated type `foobar` in trait `Copy`
+}
diff --git a/tests/ui/issues/issue-22384.stderr b/tests/ui/issues/issue-22384.stderr
new file mode 100644
index 000000000..1f767a443
--- /dev/null
+++ b/tests/ui/issues/issue-22384.stderr
@@ -0,0 +1,9 @@
+error[E0576]: cannot find associated type `foobar` in trait `Copy`
+ --> $DIR/issue-22384.rs:6:21
+ |
+LL | <<i32 as Copy>::foobar as Trait>::foo();
+ | ^^^^^^ not found in `Copy`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0576`.
diff --git a/tests/ui/issues/issue-22403.rs b/tests/ui/issues/issue-22403.rs
new file mode 100644
index 000000000..8d8559094
--- /dev/null
+++ b/tests/ui/issues/issue-22403.rs
@@ -0,0 +1,6 @@
+// run-pass
+fn main() {
+ let x = Box::new([1, 2, 3]);
+ let y = x as Box<[i32]>;
+ println!("y: {:?}", y);
+}
diff --git a/tests/ui/issues/issue-22426.rs b/tests/ui/issues/issue-22426.rs
new file mode 100644
index 000000000..adf060a82
--- /dev/null
+++ b/tests/ui/issues/issue-22426.rs
@@ -0,0 +1,9 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+fn main() {
+ match 42 {
+ x if x < 7 => (),
+ _ => ()
+ }
+}
diff --git a/tests/ui/issues/issue-22434.rs b/tests/ui/issues/issue-22434.rs
new file mode 100644
index 000000000..34057b46e
--- /dev/null
+++ b/tests/ui/issues/issue-22434.rs
@@ -0,0 +1,8 @@
+pub trait Foo {
+ type A;
+}
+
+type I<'a> = &'a (dyn Foo + 'a);
+//~^ ERROR the value of the associated type `A` (from trait `Foo`) must be specified
+
+fn main() {}
diff --git a/tests/ui/issues/issue-22434.stderr b/tests/ui/issues/issue-22434.stderr
new file mode 100644
index 000000000..b97fa2503
--- /dev/null
+++ b/tests/ui/issues/issue-22434.stderr
@@ -0,0 +1,12 @@
+error[E0191]: the value of the associated type `A` (from trait `Foo`) must be specified
+ --> $DIR/issue-22434.rs:5:23
+ |
+LL | type A;
+ | ------ `A` defined here
+...
+LL | type I<'a> = &'a (dyn Foo + 'a);
+ | ^^^ help: specify the associated type: `Foo<A = Type>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0191`.
diff --git a/tests/ui/issues/issue-22468.rs b/tests/ui/issues/issue-22468.rs
new file mode 100644
index 000000000..197a19c03
--- /dev/null
+++ b/tests/ui/issues/issue-22468.rs
@@ -0,0 +1,9 @@
+fn main() {
+ let foo = "bar";
+ let x = foo("baz");
+ //~^ ERROR: expected function, found `&str`
+}
+
+fn foo(file: &str) -> bool {
+ true
+}
diff --git a/tests/ui/issues/issue-22468.stderr b/tests/ui/issues/issue-22468.stderr
new file mode 100644
index 000000000..3fff91acb
--- /dev/null
+++ b/tests/ui/issues/issue-22468.stderr
@@ -0,0 +1,13 @@
+error[E0618]: expected function, found `&str`
+ --> $DIR/issue-22468.rs:3:13
+ |
+LL | let foo = "bar";
+ | --- `foo` has type `&str`
+LL | let x = foo("baz");
+ | ^^^-------
+ | |
+ | call expression requires function
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0618`.
diff --git a/tests/ui/issues/issue-22471.rs b/tests/ui/issues/issue-22471.rs
new file mode 100644
index 000000000..69879ab7f
--- /dev/null
+++ b/tests/ui/issues/issue-22471.rs
@@ -0,0 +1,7 @@
+// check-pass
+#![allow(dead_code)]
+#![allow(type_alias_bounds)]
+
+type Foo<T> where T: Copy = Box<T>;
+
+fn main(){}
diff --git a/tests/ui/issues/issue-22536-copy-mustnt-zero.rs b/tests/ui/issues/issue-22536-copy-mustnt-zero.rs
new file mode 100644
index 000000000..017f36484
--- /dev/null
+++ b/tests/ui/issues/issue-22536-copy-mustnt-zero.rs
@@ -0,0 +1,28 @@
+// run-pass
+// Regression test for Issue #22536: If a type implements Copy, then
+// moving it must not zero the original memory.
+
+
+trait Resources {
+ type Buffer: Copy;
+ fn foo(&self) {}
+}
+
+struct BufferHandle<R: Resources> {
+ raw: <R as Resources>::Buffer,
+}
+impl<R: Resources> Copy for BufferHandle<R> {}
+impl<R: Resources> Clone for BufferHandle<R> {
+ fn clone(&self) -> BufferHandle<R> { *self }
+}
+
+enum Res {}
+impl Resources for Res {
+ type Buffer = u32;
+}
+
+fn main() {
+ let b: BufferHandle<Res> = BufferHandle { raw: 1 };
+ let c = b;
+ assert_eq!(c.raw, b.raw)
+}
diff --git a/tests/ui/issues/issue-22577.rs b/tests/ui/issues/issue-22577.rs
new file mode 100644
index 000000000..8aca21bf1
--- /dev/null
+++ b/tests/ui/issues/issue-22577.rs
@@ -0,0 +1,26 @@
+// run-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+use std::{fs, net};
+
+fn assert_both<T: Send + Sync>() {}
+fn assert_send<T: Send>() {}
+
+fn main() {
+ assert_both::<fs::File>();
+ assert_both::<fs::Metadata>();
+ assert_both::<fs::ReadDir>();
+ assert_both::<fs::DirEntry>();
+ assert_both::<fs::OpenOptions>();
+ assert_both::<fs::Permissions>();
+
+ assert_both::<net::TcpStream>();
+ assert_both::<net::TcpListener>();
+ assert_both::<net::UdpSocket>();
+ assert_both::<net::SocketAddr>();
+ assert_both::<net::SocketAddrV4>();
+ assert_both::<net::SocketAddrV6>();
+ assert_both::<net::Ipv4Addr>();
+ assert_both::<net::Ipv6Addr>();
+}
diff --git a/tests/ui/issues/issue-22599.rs b/tests/ui/issues/issue-22599.rs
new file mode 100644
index 000000000..05096e5c1
--- /dev/null
+++ b/tests/ui/issues/issue-22599.rs
@@ -0,0 +1,10 @@
+#![deny(unused_variables)]
+
+fn f(_: i32) {}
+
+fn main() {
+ let mut v = 0;
+ f(v);
+ v = match 0 { a => 0 }; //~ ERROR: unused variable: `a`
+ f(v);
+}
diff --git a/tests/ui/issues/issue-22599.stderr b/tests/ui/issues/issue-22599.stderr
new file mode 100644
index 000000000..2b34830d0
--- /dev/null
+++ b/tests/ui/issues/issue-22599.stderr
@@ -0,0 +1,14 @@
+error: unused variable: `a`
+ --> $DIR/issue-22599.rs:8:19
+ |
+LL | v = match 0 { a => 0 };
+ | ^ help: if this is intentional, prefix it with an underscore: `_a`
+ |
+note: the lint level is defined here
+ --> $DIR/issue-22599.rs:1:9
+ |
+LL | #![deny(unused_variables)]
+ | ^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-22603.rs b/tests/ui/issues/issue-22603.rs
new file mode 100644
index 000000000..a83e291f9
--- /dev/null
+++ b/tests/ui/issues/issue-22603.rs
@@ -0,0 +1,15 @@
+// check-pass
+
+#![feature(unboxed_closures, fn_traits)]
+
+struct Foo;
+
+impl<A> FnOnce<(A,)> for Foo {
+ type Output = ();
+ extern "rust-call" fn call_once(self, (_,): (A,)) {
+ }
+}
+
+fn main() {
+ println!("{:?}", Foo("bar"));
+}
diff --git a/tests/ui/issues/issue-22629.rs b/tests/ui/issues/issue-22629.rs
new file mode 100644
index 000000000..7beeb126e
--- /dev/null
+++ b/tests/ui/issues/issue-22629.rs
@@ -0,0 +1,14 @@
+// run-pass
+#![allow(unused_imports)]
+// Test transitive analysis for associated types. Collected types
+// should be normalized and new obligations generated.
+
+// pretty-expanded FIXME #23616
+
+use std::borrow::{ToOwned, Cow};
+
+fn assert_send<T: Send>(_: T) {}
+
+fn main() {
+ assert_send(Cow::Borrowed("foo"));
+}
diff --git a/tests/ui/issues/issue-22638.polonius.stderr b/tests/ui/issues/issue-22638.polonius.stderr
new file mode 100644
index 000000000..87a7c00e4
--- /dev/null
+++ b/tests/ui/issues/issue-22638.polonius.stderr
@@ -0,0 +1,15 @@
+error: reached the recursion limit while instantiating `A::matches::$CLOSURE`
+ --> $DIR/issue-22638.rs:56:9
+ |
+LL | a.matches(f)
+ | ^^^^^^^^^^^^
+ |
+note: `A::matches` defined here
+ --> $DIR/issue-22638.rs:15:5
+ |
+LL | pub fn matches<F: Fn()>(&self, f: &F) {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ = note: the full type name has been written to '$TEST_BUILD_DIR/issues/issue-22638.polonius/issue-22638.long-type.txt'
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-22638.rs b/tests/ui/issues/issue-22638.rs
new file mode 100644
index 000000000..198ceccc2
--- /dev/null
+++ b/tests/ui/issues/issue-22638.rs
@@ -0,0 +1,63 @@
+// build-fail
+// normalize-stderr-test: "<\[closure@.+`" -> "$$CLOSURE`"
+// normalize-stderr-test: ".nll/" -> "/"
+
+#![allow(unused)]
+
+#![recursion_limit = "20"]
+#![type_length_limit = "20000000"]
+#![crate_type = "rlib"]
+
+#[derive(Clone)]
+struct A (B);
+
+impl A {
+ pub fn matches<F: Fn()>(&self, f: &F) {
+ let &A(ref term) = self;
+ term.matches(f);
+ }
+}
+
+#[derive(Clone)]
+enum B {
+ Variant1,
+ Variant2(C),
+}
+
+impl B {
+ pub fn matches<F: Fn()>(&self, f: &F) {
+ match self {
+ &B::Variant2(ref factor) => {
+ factor.matches(&|| ())
+ }
+ _ => unreachable!("")
+ }
+ }
+}
+
+#[derive(Clone)]
+struct C (D);
+
+impl C {
+ pub fn matches<F: Fn()>(&self, f: &F) {
+ let &C(ref base) = self;
+ base.matches(&|| {
+ C(base.clone()).matches(f)
+ })
+ }
+}
+
+#[derive(Clone)]
+struct D (Box<A>);
+
+impl D {
+ pub fn matches<F: Fn()>(&self, f: &F) {
+ let &D(ref a) = self;
+ a.matches(f)
+ //~^ ERROR reached the recursion limit while instantiating `A::matches::<[closure
+ }
+}
+
+pub fn matches() {
+ A(B::Variant1).matches(&(|| ()))
+}
diff --git a/tests/ui/issues/issue-22638.stderr b/tests/ui/issues/issue-22638.stderr
new file mode 100644
index 000000000..1caa4221f
--- /dev/null
+++ b/tests/ui/issues/issue-22638.stderr
@@ -0,0 +1,14 @@
+error: reached the recursion limit while instantiating `A::matches::$CLOSURE`
+ --> $DIR/issue-22638.rs:56:9
+ |
+LL | a.matches(f)
+ | ^^^^^^^^^^^^
+ |
+note: `A::matches` defined here
+ --> $DIR/issue-22638.rs:15:5
+ |
+LL | pub fn matches<F: Fn()>(&self, f: &F) {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-22644.rs b/tests/ui/issues/issue-22644.rs
new file mode 100644
index 000000000..b1d69dcd8
--- /dev/null
+++ b/tests/ui/issues/issue-22644.rs
@@ -0,0 +1,35 @@
+#![feature(type_ascription)]
+
+fn main() {
+ let a : usize = 0;
+ let long_name : usize = 0;
+
+ println!("{}", a as usize > long_name);
+ println!("{}", a as usize < long_name); //~ ERROR `<` is interpreted as a start of generic
+ println!("{}{}", a as usize < long_name, long_name);
+ //~^ ERROR `<` is interpreted as a start of generic
+ println!("{}", a as usize < 4); //~ ERROR `<` is interpreted as a start of generic
+ println!("{}", a: usize > long_name);
+ println!("{}{}", a: usize < long_name, long_name);
+ //~^ ERROR `<` is interpreted as a start of generic
+ println!("{}", a: usize < 4); //~ ERROR `<` is interpreted as a start of generic
+
+ println!("{}", a
+ as
+ usize
+ < //~ ERROR `<` is interpreted as a start of generic
+ 4);
+ println!("{}", a
+
+
+ as
+
+
+ usize
+ < //~ ERROR `<` is interpreted as a start of generic
+ 5);
+
+ println!("{}", a as usize << long_name); //~ ERROR `<<` is interpreted as a start of generic
+
+ println!("{}", a: &mut 4); //~ ERROR expected type, found `4`
+}
diff --git a/tests/ui/issues/issue-22644.stderr b/tests/ui/issues/issue-22644.stderr
new file mode 100644
index 000000000..45027afa7
--- /dev/null
+++ b/tests/ui/issues/issue-22644.stderr
@@ -0,0 +1,123 @@
+error: `<` is interpreted as a start of generic arguments for `usize`, not a comparison
+ --> $DIR/issue-22644.rs:8:31
+ |
+LL | println!("{}", a as usize < long_name);
+ | ^ --------- interpreted as generic arguments
+ | |
+ | not interpreted as comparison
+ |
+help: try comparing the cast value
+ |
+LL | println!("{}", (a as usize) < long_name);
+ | + +
+
+error: `<` is interpreted as a start of generic arguments for `usize`, not a comparison
+ --> $DIR/issue-22644.rs:9:33
+ |
+LL | println!("{}{}", a as usize < long_name, long_name);
+ | ^ -------------------- interpreted as generic arguments
+ | |
+ | not interpreted as comparison
+ |
+help: try comparing the cast value
+ |
+LL | println!("{}{}", (a as usize) < long_name, long_name);
+ | + +
+
+error: `<` is interpreted as a start of generic arguments for `usize`, not a comparison
+ --> $DIR/issue-22644.rs:11:31
+ |
+LL | println!("{}", a as usize < 4);
+ | ^ - interpreted as generic arguments
+ | |
+ | not interpreted as comparison
+ |
+help: try comparing the cast value
+ |
+LL | println!("{}", (a as usize) < 4);
+ | + +
+
+error: `<` is interpreted as a start of generic arguments for `usize`, not a comparison
+ --> $DIR/issue-22644.rs:13:31
+ |
+LL | println!("{}{}", a: usize < long_name, long_name);
+ | ^ -------------------- interpreted as generic arguments
+ | |
+ | not interpreted as comparison
+ |
+help: try comparing the cast value
+ |
+LL | println!("{}{}", (a: usize) < long_name, long_name);
+ | + +
+
+error: `<` is interpreted as a start of generic arguments for `usize`, not a comparison
+ --> $DIR/issue-22644.rs:15:29
+ |
+LL | println!("{}", a: usize < 4);
+ | ^ - interpreted as generic arguments
+ | |
+ | not interpreted as comparison
+ |
+help: try comparing the cast value
+ |
+LL | println!("{}", (a: usize) < 4);
+ | + +
+
+error: `<` is interpreted as a start of generic arguments for `usize`, not a comparison
+ --> $DIR/issue-22644.rs:20:20
+ |
+LL | <
+ | ^ not interpreted as comparison
+LL | 4);
+ | - interpreted as generic arguments
+ |
+help: try comparing the cast value
+ |
+LL ~ println!("{}", (a
+LL | as
+LL ~ usize)
+ |
+
+error: `<` is interpreted as a start of generic arguments for `usize`, not a comparison
+ --> $DIR/issue-22644.rs:29:20
+ |
+LL | <
+ | ^ not interpreted as comparison
+LL | 5);
+ | - interpreted as generic arguments
+ |
+help: try comparing the cast value
+ |
+LL ~ println!("{}", (a
+LL |
+ ...
+LL |
+LL ~ usize)
+ |
+
+error: `<<` is interpreted as a start of generic arguments for `usize`, not a shift
+ --> $DIR/issue-22644.rs:32:31
+ |
+LL | println!("{}", a as usize << long_name);
+ | ^^ --------- interpreted as generic arguments
+ | |
+ | not interpreted as shift
+ |
+help: try shifting the cast value
+ |
+LL | println!("{}", (a as usize) << long_name);
+ | + +
+
+error: expected type, found `4`
+ --> $DIR/issue-22644.rs:34:28
+ |
+LL | println!("{}", a: &mut 4);
+ | - ^ expected type
+ | |
+ | tried to parse a type due to this type ascription
+ |
+ = note: `#![feature(type_ascription)]` lets you annotate an expression with a type: `<expr>: <type>`
+ = note: see issue #23416 <https://github.com/rust-lang/rust/issues/23416> for more information
+
+error: aborting due to 9 previous errors
+
diff --git a/tests/ui/issues/issue-22673.rs b/tests/ui/issues/issue-22673.rs
new file mode 100644
index 000000000..4b9b4d6b2
--- /dev/null
+++ b/tests/ui/issues/issue-22673.rs
@@ -0,0 +1,7 @@
+// check-pass
+
+trait Expr: PartialEq<Self::Item> {
+ type Item;
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-22684.rs b/tests/ui/issues/issue-22684.rs
new file mode 100644
index 000000000..a5b042706
--- /dev/null
+++ b/tests/ui/issues/issue-22684.rs
@@ -0,0 +1,18 @@
+mod foo {
+ pub struct Foo;
+ impl Foo {
+ fn bar(&self) {}
+ }
+
+ pub trait Baz {
+ fn bar(&self) -> bool { true }
+ }
+ impl Baz for Foo {}
+}
+
+fn main() {
+ use foo::Baz;
+
+ // Check that `bar` resolves to the trait method, not the inherent impl method.
+ let _: () = foo::Foo.bar(); //~ ERROR mismatched types
+}
diff --git a/tests/ui/issues/issue-22684.stderr b/tests/ui/issues/issue-22684.stderr
new file mode 100644
index 000000000..2407ece5e
--- /dev/null
+++ b/tests/ui/issues/issue-22684.stderr
@@ -0,0 +1,11 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-22684.rs:17:17
+ |
+LL | let _: () = foo::Foo.bar();
+ | -- ^^^^^^^^^^^^^^ expected `()`, found `bool`
+ | |
+ | expected due to this
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-22706.rs b/tests/ui/issues/issue-22706.rs
new file mode 100644
index 000000000..bb8a58d3d
--- /dev/null
+++ b/tests/ui/issues/issue-22706.rs
@@ -0,0 +1,3 @@
+fn is_copy<T: ::std::marker<i32>::Copy>() {}
+//~^ ERROR type arguments are not allowed on module `marker` [E0109]
+fn main() {}
diff --git a/tests/ui/issues/issue-22706.stderr b/tests/ui/issues/issue-22706.stderr
new file mode 100644
index 000000000..5366a36b1
--- /dev/null
+++ b/tests/ui/issues/issue-22706.stderr
@@ -0,0 +1,11 @@
+error[E0109]: type arguments are not allowed on module `marker`
+ --> $DIR/issue-22706.rs:1:29
+ |
+LL | fn is_copy<T: ::std::marker<i32>::Copy>() {}
+ | ------ ^^^ type argument not allowed
+ | |
+ | not allowed on module `marker`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0109`.
diff --git a/tests/ui/issues/issue-22777.rs b/tests/ui/issues/issue-22777.rs
new file mode 100644
index 000000000..486683d12
--- /dev/null
+++ b/tests/ui/issues/issue-22777.rs
@@ -0,0 +1,48 @@
+// check-pass
+// This test is reduced from librustc_ast. It is just checking that we
+// can successfully deal with a "deep" structure, which the drop-check
+// was hitting a recursion limit on at one point.
+
+// pretty-expanded FIXME #23616
+
+#![allow(non_camel_case_types)]
+
+pub fn noop_fold_impl_item() -> SmallVector<ImplItem> {
+ loop { }
+}
+
+pub struct SmallVector<T>(P<T>);
+pub struct ImplItem(P<S01_Method>);
+
+struct P<T>(Box<T>);
+
+struct S01_Method(P<S02_Generics>);
+struct S02_Generics(P<S03_TyParam>);
+struct S03_TyParam(P<S04_TyParamBound>);
+struct S04_TyParamBound(S05_PolyTraitRef);
+struct S05_PolyTraitRef(S06_TraitRef);
+struct S06_TraitRef(S07_Path);
+struct S07_Path(Vec<S08_PathSegment>);
+struct S08_PathSegment(S09_GenericArgs);
+struct S09_GenericArgs(P<S10_ParenthesizedParameterData>);
+struct S10_ParenthesizedParameterData(Option<P<S11_Ty>>);
+struct S11_Ty(P<S12_Expr>);
+struct S12_Expr(P<S13_Block>);
+struct S13_Block(Vec<P<S14_Stmt>>);
+struct S14_Stmt(P<S15_Decl>);
+struct S15_Decl(P<S16_Local>);
+struct S16_Local(P<S17_Pat>);
+struct S17_Pat(P<S18_Mac>);
+struct S18_Mac(Vec<P<S19_TokenTree>>);
+struct S19_TokenTree(P<S20_Token>);
+struct S20_Token(P<S21_Nonterminal>);
+struct S21_Nonterminal(P<S22_Item>);
+struct S22_Item(P<S23_EnumDef>);
+struct S23_EnumDef(Vec<P<S24_Variant>>);
+struct S24_Variant(P<S25_VariantKind>);
+struct S25_VariantKind(P<S26_StructDef>);
+struct S26_StructDef(Vec<P<S27_StructField>>);
+struct S27_StructField(P<S28_StructFieldKind>);
+struct S28_StructFieldKind;
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-22781.rs b/tests/ui/issues/issue-22781.rs
new file mode 100644
index 000000000..d644cec4d
--- /dev/null
+++ b/tests/ui/issues/issue-22781.rs
@@ -0,0 +1,15 @@
+// check-pass
+#![allow(unused_variables)]
+use std::collections::HashMap;
+use std::collections::hash_map::Entry::Vacant;
+
+pub fn foo() {
+ type F = Box<dyn Fn(&()) + 'static>;
+ let mut map: HashMap<(), F> = HashMap::new();
+ let x: &mut F = match map.entry(()) {
+ Vacant(_) => unimplemented!(),
+ _ => unimplemented!()
+ };
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-22789.rs b/tests/ui/issues/issue-22789.rs
new file mode 100644
index 000000000..cef407537
--- /dev/null
+++ b/tests/ui/issues/issue-22789.rs
@@ -0,0 +1,8 @@
+// check-pass
+
+#![feature(unboxed_closures, fn_traits)]
+
+fn main() {
+ let k = |x: i32| { x + 1 };
+ Fn::call(&k, (0,));
+}
diff --git a/tests/ui/issues/issue-2281-part1.rs b/tests/ui/issues/issue-2281-part1.rs
new file mode 100644
index 000000000..8340ade22
--- /dev/null
+++ b/tests/ui/issues/issue-2281-part1.rs
@@ -0,0 +1 @@
+fn main() { println!("{}", foobar); } //~ ERROR cannot find value `foobar` in this scope
diff --git a/tests/ui/issues/issue-2281-part1.stderr b/tests/ui/issues/issue-2281-part1.stderr
new file mode 100644
index 000000000..c2391a7c0
--- /dev/null
+++ b/tests/ui/issues/issue-2281-part1.stderr
@@ -0,0 +1,9 @@
+error[E0425]: cannot find value `foobar` in this scope
+ --> $DIR/issue-2281-part1.rs:1:28
+ |
+LL | fn main() { println!("{}", foobar); }
+ | ^^^^^^ not found in this scope
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0425`.
diff --git a/tests/ui/issues/issue-22814.rs b/tests/ui/issues/issue-22814.rs
new file mode 100644
index 000000000..4079adfc8
--- /dev/null
+++ b/tests/ui/issues/issue-22814.rs
@@ -0,0 +1,13 @@
+// check-pass
+trait Test {}
+
+macro_rules! test {
+( $($name:ident)+) => (
+ impl<$($name: Test),+> Test for ($($name,)+) {
+ }
+)
+}
+
+test!(A B C);
+
+fn main() {}
diff --git a/tests/ui/issues/issue-2284.rs b/tests/ui/issues/issue-2284.rs
new file mode 100644
index 000000000..6f2c95834
--- /dev/null
+++ b/tests/ui/issues/issue-2284.rs
@@ -0,0 +1,14 @@
+// run-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+trait Send {
+ fn f(&self);
+}
+
+fn f<T:Send>(t: T) {
+ t.f();
+}
+
+pub fn main() {
+}
diff --git a/tests/ui/issues/issue-22864-1.rs b/tests/ui/issues/issue-22864-1.rs
new file mode 100644
index 000000000..0fad5433d
--- /dev/null
+++ b/tests/ui/issues/issue-22864-1.rs
@@ -0,0 +1,7 @@
+// run-pass
+pub fn main() {
+ struct Fun<F>(F);
+ let f = Fun(|x| 3*x);
+ let Fun(g) = f;
+ println!("{:?}",g(4));
+}
diff --git a/tests/ui/issues/issue-22864-2.rs b/tests/ui/issues/issue-22864-2.rs
new file mode 100644
index 000000000..4aa9e3e08
--- /dev/null
+++ b/tests/ui/issues/issue-22864-2.rs
@@ -0,0 +1,7 @@
+// run-pass
+// ignore-emscripten no threads support
+
+pub fn main() {
+ let f = || || 0;
+ std::thread::spawn(f());
+}
diff --git a/tests/ui/issues/issue-22872.rs b/tests/ui/issues/issue-22872.rs
new file mode 100644
index 000000000..5db2891e6
--- /dev/null
+++ b/tests/ui/issues/issue-22872.rs
@@ -0,0 +1,24 @@
+trait Wrap<'b> {
+ fn foo(&'b mut self);
+}
+
+struct Wrapper<P>(P);
+
+impl<'b, P> Wrap<'b> for Wrapper<P>
+where P: Process<'b>,
+ <P as Process<'b>>::Item: Iterator {
+ fn foo(&mut self) {}
+}
+
+
+pub trait Process<'a> {
+ type Item;
+ fn bar(&'a self);
+}
+
+fn push_process<P>(process: P) where P: Process<'static> {
+ let _: Box<dyn for<'b> Wrap<'b>> = Box::new(Wrapper(process));
+//~^ ERROR is not an iterator
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-22872.stderr b/tests/ui/issues/issue-22872.stderr
new file mode 100644
index 000000000..951019719
--- /dev/null
+++ b/tests/ui/issues/issue-22872.stderr
@@ -0,0 +1,24 @@
+error[E0277]: `<P as Process<'_>>::Item` is not an iterator
+ --> $DIR/issue-22872.rs:20:40
+ |
+LL | let _: Box<dyn for<'b> Wrap<'b>> = Box::new(Wrapper(process));
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^ `<P as Process<'_>>::Item` is not an iterator
+ |
+ = help: the trait `Iterator` is not implemented for `<P as Process<'_>>::Item`
+note: required for `Wrapper<P>` to implement `for<'b> Wrap<'b>`
+ --> $DIR/issue-22872.rs:7:13
+ |
+LL | impl<'b, P> Wrap<'b> for Wrapper<P>
+ | ^^^^^^^^ ^^^^^^^^^^
+LL | where P: Process<'b>,
+LL | <P as Process<'b>>::Item: Iterator {
+ | -------- unsatisfied trait bound introduced here
+ = note: required for the cast from `Wrapper<P>` to the object type `dyn for<'b> Wrap<'b>`
+help: consider further restricting the associated type
+ |
+LL | fn push_process<P>(process: P) where P: Process<'static>, <P as Process<'_>>::Item: Iterator {
+ | ++++++++++++++++++++++++++++++++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-22874.rs b/tests/ui/issues/issue-22874.rs
new file mode 100644
index 000000000..37c6c8143
--- /dev/null
+++ b/tests/ui/issues/issue-22874.rs
@@ -0,0 +1,10 @@
+struct Table {
+ rows: [[String]],
+ //~^ ERROR the size for values of type
+}
+
+fn f(table: &Table) -> &[String] {
+ &table.rows[0]
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-22874.stderr b/tests/ui/issues/issue-22874.stderr
new file mode 100644
index 000000000..d64899080
--- /dev/null
+++ b/tests/ui/issues/issue-22874.stderr
@@ -0,0 +1,12 @@
+error[E0277]: the size for values of type `[String]` cannot be known at compilation time
+ --> $DIR/issue-22874.rs:2:11
+ |
+LL | rows: [[String]],
+ | ^^^^^^^^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `[String]`
+ = note: slice and array elements must have `Sized` type
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-2288.rs b/tests/ui/issues/issue-2288.rs
new file mode 100644
index 000000000..6fd690a4d
--- /dev/null
+++ b/tests/ui/issues/issue-2288.rs
@@ -0,0 +1,33 @@
+// run-pass
+#![allow(non_camel_case_types)]
+
+trait clam<A> {
+ fn chowder(&self, y: A);
+}
+
+#[derive(Copy, Clone)]
+struct foo<A> {
+ x: A,
+}
+
+impl<A> clam<A> for foo<A> {
+ fn chowder(&self, _y: A) {
+ }
+}
+
+fn foo<A>(b: A) -> foo<A> {
+ foo {
+ x: b
+ }
+}
+
+fn f<A>(x: Box<dyn clam<A>>, a: A) {
+ x.chowder(a);
+}
+
+pub fn main() {
+
+ let c = foo(42);
+ let d: Box<dyn clam<isize>> = Box::new(c) as Box<dyn clam<isize>>;
+ f(d, c.x);
+}
diff --git a/tests/ui/issues/issue-22886.rs b/tests/ui/issues/issue-22886.rs
new file mode 100644
index 000000000..f8b576e09
--- /dev/null
+++ b/tests/ui/issues/issue-22886.rs
@@ -0,0 +1,21 @@
+// Regression test for #22886.
+
+fn crash_please() {
+ let mut iter = Newtype(Some(Box::new(0)));
+ let saved = iter.next().unwrap();
+ println!("{}", saved);
+ iter.0 = None;
+ println!("{}", saved);
+}
+
+struct Newtype(Option<Box<usize>>);
+
+impl<'a> Iterator for Newtype { //~ ERROR E0207
+ type Item = &'a Box<usize>;
+
+ fn next(&mut self) -> Option<&Box<usize>> {
+ self.0.as_ref()
+ }
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-22886.stderr b/tests/ui/issues/issue-22886.stderr
new file mode 100644
index 000000000..c4b396559
--- /dev/null
+++ b/tests/ui/issues/issue-22886.stderr
@@ -0,0 +1,9 @@
+error[E0207]: the lifetime parameter `'a` is not constrained by the impl trait, self type, or predicates
+ --> $DIR/issue-22886.rs:13:6
+ |
+LL | impl<'a> Iterator for Newtype {
+ | ^^ unconstrained lifetime parameter
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0207`.
diff --git a/tests/ui/issues/issue-22894.rs b/tests/ui/issues/issue-22894.rs
new file mode 100644
index 000000000..93c1db914
--- /dev/null
+++ b/tests/ui/issues/issue-22894.rs
@@ -0,0 +1,4 @@
+// build-pass
+#[allow(dead_code)]
+static X: &'static str = &*"";
+fn main() {}
diff --git a/tests/ui/issues/issue-22933-1.rs b/tests/ui/issues/issue-22933-1.rs
new file mode 100644
index 000000000..3c9aa2669
--- /dev/null
+++ b/tests/ui/issues/issue-22933-1.rs
@@ -0,0 +1,23 @@
+// check-pass
+
+struct CNFParser {
+ token: char,
+}
+
+impl CNFParser {
+ fn is_whitespace(c: char) -> bool {
+ c == ' ' || c == '\n'
+ }
+
+ fn consume_whitespace(&mut self) {
+ self.consume_while(&(CNFParser::is_whitespace))
+ }
+
+ fn consume_while(&mut self, p: &dyn Fn(char) -> bool) {
+ while p(self.token) {
+ return
+ }
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-22933-2.rs b/tests/ui/issues/issue-22933-2.rs
new file mode 100644
index 000000000..dfd84b9a7
--- /dev/null
+++ b/tests/ui/issues/issue-22933-2.rs
@@ -0,0 +1,8 @@
+enum Delicious {
+ Pie = 0x1,
+ Apple = 0x2,
+ ApplePie = Delicious::Apple as isize | Delicious::PIE as isize,
+ //~^ ERROR no variant or associated item named `PIE` found
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-22933-2.stderr b/tests/ui/issues/issue-22933-2.stderr
new file mode 100644
index 000000000..1a0e87e15
--- /dev/null
+++ b/tests/ui/issues/issue-22933-2.stderr
@@ -0,0 +1,15 @@
+error[E0599]: no variant or associated item named `PIE` found for enum `Delicious` in the current scope
+ --> $DIR/issue-22933-2.rs:4:55
+ |
+LL | enum Delicious {
+ | -------------- variant or associated item `PIE` not found for this enum
+...
+LL | ApplePie = Delicious::Apple as isize | Delicious::PIE as isize,
+ | ^^^
+ | |
+ | variant or associated item not found in `Delicious`
+ | help: there is a variant with a similar name: `Pie`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-22992-2.rs b/tests/ui/issues/issue-22992-2.rs
new file mode 100644
index 000000000..042af40ed
--- /dev/null
+++ b/tests/ui/issues/issue-22992-2.rs
@@ -0,0 +1,18 @@
+// run-pass
+struct A(B);
+struct B;
+
+use std::ops::Deref;
+
+impl Deref for A {
+ type Target = B;
+ fn deref(&self) -> &B { &self.0 }
+}
+
+impl B {
+ fn foo(&self) {}
+}
+
+fn main() {
+ A(B).foo();
+}
diff --git a/tests/ui/issues/issue-22992.rs b/tests/ui/issues/issue-22992.rs
new file mode 100644
index 000000000..292a0ae29
--- /dev/null
+++ b/tests/ui/issues/issue-22992.rs
@@ -0,0 +1,75 @@
+// run-pass
+
+struct X { val: i32 }
+impl std::ops::Deref for X {
+ type Target = i32;
+ fn deref(&self) -> &i32 { &self.val }
+}
+
+
+trait M { fn m(self); }
+impl M for i32 { fn m(self) { println!("i32::m()"); } }
+impl M for X { fn m(self) { println!("X::m()"); } }
+impl<'a> M for &'a X { fn m(self) { println!("&X::m()"); } }
+impl<'a, 'b> M for &'a &'b X { fn m(self) { println!("&&X::m()"); } }
+impl<'a, 'b, 'c> M for &'a &'b &'c X { fn m(self) { println!("&&&X::m()"); } }
+
+trait RefM { fn refm(&self); }
+impl RefM for i32 { fn refm(&self) { println!("i32::refm()"); } }
+impl RefM for X { fn refm(&self) { println!("X::refm()"); } }
+impl<'a> RefM for &'a X { fn refm(&self) { println!("&X::refm()"); } }
+impl<'a, 'b> RefM for &'a &'b X { fn refm(&self) { println!("&&X::refm()"); } }
+impl<'a, 'b, 'c> RefM for &'a &'b &'c X { fn refm(&self) { println!("&&&X::refm()"); } }
+
+struct Y { val: i32 }
+impl std::ops::Deref for Y {
+ type Target = i32;
+ fn deref(&self) -> &i32 { &self.val }
+}
+
+struct Z { val: Y }
+impl std::ops::Deref for Z {
+ type Target = Y;
+ fn deref(&self) -> &Y { &self.val }
+}
+
+struct A;
+impl std::marker::Copy for A {}
+impl Clone for A { fn clone(&self) -> Self { *self } }
+impl M for A { fn m(self) { println!("A::m()"); } }
+impl<'a, 'b, 'c> M for &'a &'b &'c A { fn m(self) { println!("&&&A::m()"); } }
+impl RefM for A { fn refm(&self) { println!("A::refm()"); } }
+impl<'a, 'b, 'c> RefM for &'a &'b &'c A { fn refm(&self) { println!("&&&A::refm()"); } }
+
+fn main() {
+ // I'll use @ to denote left side of the dot operator
+ (*X{val:42}).m(); // i32::refm() , self == @
+ X{val:42}.m(); // X::m() , self == @
+ (&X{val:42}).m(); // &X::m() , self == @
+ (&&X{val:42}).m(); // &&X::m() , self == @
+ (&&&X{val:42}).m(); // &&&X:m() , self == @
+ (&&&&X{val:42}).m(); // &&&X::m() , self == *@
+ (&&&&&X{val:42}).m(); // &&&X::m() , self == **@
+
+ (*X{val:42}).refm(); // i32::refm() , self == @
+ X{val:42}.refm(); // X::refm() , self == @
+ (&X{val:42}).refm(); // X::refm() , self == *@
+ (&&X{val:42}).refm(); // &X::refm() , self == *@
+ (&&&X{val:42}).refm(); // &&X::refm() , self == *@
+ (&&&&X{val:42}).refm(); // &&&X::refm(), self == *@
+ (&&&&&X{val:42}).refm(); // &&&X::refm(), self == **@
+
+ Y{val:42}.refm(); // i32::refm() , self == *@
+ Z{val:Y{val:42}}.refm(); // i32::refm() , self == **@
+
+ A.m(); // A::m() , self == @
+ // without the Copy trait, (&A).m() would be a compilation error:
+ // cannot move out of borrowed content
+ (&A).m(); // A::m() , self == *@
+ (&&A).m(); // &&&A::m() , self == &@
+ (&&&A).m(); // &&&A::m() , self == @
+ A.refm(); // A::refm() , self == @
+ (&A).refm(); // A::refm() , self == *@
+ (&&A).refm(); // A::refm() , self == **@
+ (&&&A).refm(); // &&&A::refm(), self == @
+}
diff --git a/tests/ui/issues/issue-23024.rs b/tests/ui/issues/issue-23024.rs
new file mode 100644
index 000000000..010281ee3
--- /dev/null
+++ b/tests/ui/issues/issue-23024.rs
@@ -0,0 +1,12 @@
+use std::any::Any;
+
+fn main()
+{
+ fn h(x:i32) -> i32 {3*x}
+ let mut vfnfer:Vec<Box<dyn Any>> = vec![];
+ vfnfer.push(Box::new(h));
+ println!("{:?}",(vfnfer[0] as dyn Fn)(3));
+ //~^ ERROR the precise format of `Fn`-family traits'
+ //~| ERROR missing generics for trait `Fn`
+ //~| ERROR the value of the associated type `Output` (from trait `FnOnce`)
+}
diff --git a/tests/ui/issues/issue-23024.stderr b/tests/ui/issues/issue-23024.stderr
new file mode 100644
index 000000000..2c325ffcc
--- /dev/null
+++ b/tests/ui/issues/issue-23024.stderr
@@ -0,0 +1,30 @@
+error[E0658]: the precise format of `Fn`-family traits' type parameters is subject to change
+ --> $DIR/issue-23024.rs:8:39
+ |
+LL | println!("{:?}",(vfnfer[0] as dyn Fn)(3));
+ | ^^ help: use parenthetical notation instead: `Fn() -> ()`
+ |
+ = note: see issue #29625 <https://github.com/rust-lang/rust/issues/29625> for more information
+ = help: add `#![feature(unboxed_closures)]` to the crate attributes to enable
+
+error[E0107]: missing generics for trait `Fn`
+ --> $DIR/issue-23024.rs:8:39
+ |
+LL | println!("{:?}",(vfnfer[0] as dyn Fn)(3));
+ | ^^ expected 1 generic argument
+ |
+help: add missing generic argument
+ |
+LL | println!("{:?}",(vfnfer[0] as dyn Fn<Args>)(3));
+ | ++++++
+
+error[E0191]: the value of the associated type `Output` (from trait `FnOnce`) must be specified
+ --> $DIR/issue-23024.rs:8:39
+ |
+LL | println!("{:?}",(vfnfer[0] as dyn Fn)(3));
+ | ^^ help: specify the associated type: `Fn<Output = Type>`
+
+error: aborting due to 3 previous errors
+
+Some errors have detailed explanations: E0107, E0191, E0658.
+For more information about an error, try `rustc --explain E0107`.
diff --git a/tests/ui/issues/issue-23036.rs b/tests/ui/issues/issue-23036.rs
new file mode 100644
index 000000000..d67f18472
--- /dev/null
+++ b/tests/ui/issues/issue-23036.rs
@@ -0,0 +1,10 @@
+// run-pass
+
+use std::collections::HashMap;
+use std::path::Path;
+
+fn main() {
+ let mut map = HashMap::new();
+ map.insert(Path::new("a"), 0);
+ map.get(Path::new("a"));
+}
diff --git a/tests/ui/issues/issue-23041.rs b/tests/ui/issues/issue-23041.rs
new file mode 100644
index 000000000..a1371521a
--- /dev/null
+++ b/tests/ui/issues/issue-23041.rs
@@ -0,0 +1,7 @@
+use std::any::Any;
+fn main()
+{
+ fn bar(x:i32) ->i32 { 3*x };
+ let b:Box<dyn Any> = Box::new(bar as fn(_)->_);
+ b.downcast_ref::<fn(_)->_>(); //~ ERROR E0282
+}
diff --git a/tests/ui/issues/issue-23041.stderr b/tests/ui/issues/issue-23041.stderr
new file mode 100644
index 000000000..6592b76a3
--- /dev/null
+++ b/tests/ui/issues/issue-23041.stderr
@@ -0,0 +1,14 @@
+error[E0282]: type annotations needed
+ --> $DIR/issue-23041.rs:6:7
+ |
+LL | b.downcast_ref::<fn(_)->_>();
+ | ^^^^^^^^^^^^ cannot infer type of the type parameter `T` declared on the associated function `downcast_ref`
+ |
+help: consider specifying the generic argument
+ |
+LL | b.downcast_ref::<fn(_) -> _>();
+ | ~~~~~~~~~~~~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-23046.rs b/tests/ui/issues/issue-23046.rs
new file mode 100644
index 000000000..a68369616
--- /dev/null
+++ b/tests/ui/issues/issue-23046.rs
@@ -0,0 +1,20 @@
+pub enum Expr<'var, VAR> {
+ Let(Box<Expr<'var, VAR>>,
+ Box<dyn for<'v> Fn(Expr<'v, VAR>) -> Expr<'v, VAR> + 'var>)
+}
+
+pub fn add<'var, VAR>
+ (a: Expr<'var, VAR>, b: Expr<'var, VAR>) -> Expr<'var, VAR> {
+ loop {}
+}
+
+pub fn let_<'var, VAR, F: for<'v> Fn(Expr<'v, VAR>) -> Expr<'v, VAR>>
+ (a: Expr<'var, VAR>, b: F) -> Expr<'var, VAR> {
+ loop {}
+}
+
+fn main() {
+ let ex = |x| { //~ ERROR type annotations needed
+ let_(add(x,x), |y| {
+ let_(add(x, x), |x|x)})};
+}
diff --git a/tests/ui/issues/issue-23046.stderr b/tests/ui/issues/issue-23046.stderr
new file mode 100644
index 000000000..1403ecbd9
--- /dev/null
+++ b/tests/ui/issues/issue-23046.stderr
@@ -0,0 +1,14 @@
+error[E0282]: type annotations needed for `Expr<'_, VAR>`
+ --> $DIR/issue-23046.rs:17:15
+ |
+LL | let ex = |x| {
+ | ^
+ |
+help: consider giving this closure parameter an explicit type, where the type for type parameter `VAR` is specified
+ |
+LL | let ex = |x: Expr<'_, VAR>| {
+ | +++++++++++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-23073.rs b/tests/ui/issues/issue-23073.rs
new file mode 100644
index 000000000..a0ca91336
--- /dev/null
+++ b/tests/ui/issues/issue-23073.rs
@@ -0,0 +1,9 @@
+#![feature(associated_type_defaults)]
+
+trait Foo { type T; }
+trait Bar {
+ type Foo: Foo;
+ type FooT = <<Self as Bar>::Foo>::T; //~ ERROR ambiguous associated type
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-23073.stderr b/tests/ui/issues/issue-23073.stderr
new file mode 100644
index 000000000..3a9f49ef1
--- /dev/null
+++ b/tests/ui/issues/issue-23073.stderr
@@ -0,0 +1,14 @@
+error[E0223]: ambiguous associated type
+ --> $DIR/issue-23073.rs:6:17
+ |
+LL | type FooT = <<Self as Bar>::Foo>::T;
+ | ^^^^^^^^^^^^^^^^^^^^^^^
+ |
+help: if there were a trait named `Example` with associated type `T` implemented for `<Self as Bar>::Foo`, you could use the fully-qualified path
+ |
+LL | type FooT = <<Self as Bar>::Foo as Example>::T;
+ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0223`.
diff --git a/tests/ui/issues/issue-2311-2.rs b/tests/ui/issues/issue-2311-2.rs
new file mode 100644
index 000000000..760d4edaa
--- /dev/null
+++ b/tests/ui/issues/issue-2311-2.rs
@@ -0,0 +1,26 @@
+// check-pass
+#![allow(dead_code)]
+#![allow(non_camel_case_types)]
+
+
+trait clam<A> {
+ fn get(self) -> A;
+}
+
+struct foo<A> {
+ x: A,
+}
+
+impl<A> foo<A> {
+ pub fn bar<B,C:clam<A>>(&self, _c: C) -> B {
+ panic!();
+ }
+}
+
+fn foo<A>(b: A) -> foo<A> {
+ foo {
+ x: b
+ }
+}
+
+pub fn main() { }
diff --git a/tests/ui/issues/issue-2311.rs b/tests/ui/issues/issue-2311.rs
new file mode 100644
index 000000000..21ff19f7f
--- /dev/null
+++ b/tests/ui/issues/issue-2311.rs
@@ -0,0 +1,11 @@
+// check-pass
+#![allow(non_camel_case_types)]
+
+// pretty-expanded FIXME #23616
+
+trait clam<A> { fn get(self) -> A; }
+trait foo<A> {
+ fn bar<B,C:clam<A>>(&self, c: C) -> B;
+}
+
+pub fn main() { }
diff --git a/tests/ui/issues/issue-2312.rs b/tests/ui/issues/issue-2312.rs
new file mode 100644
index 000000000..8a94bcbd4
--- /dev/null
+++ b/tests/ui/issues/issue-2312.rs
@@ -0,0 +1,16 @@
+// check-pass
+#![allow(dead_code)]
+#![allow(non_camel_case_types)]
+
+// Testing that the B's are resolved
+
+
+trait clam<A> { fn get(self) -> A; }
+
+struct foo(isize);
+
+impl foo {
+ pub fn bar<B,C:clam<B>>(&self, _c: C) -> B { panic!(); }
+}
+
+pub fn main() { }
diff --git a/tests/ui/issues/issue-23122-1.rs b/tests/ui/issues/issue-23122-1.rs
new file mode 100644
index 000000000..7fe0900ed
--- /dev/null
+++ b/tests/ui/issues/issue-23122-1.rs
@@ -0,0 +1,14 @@
+trait Next {
+ type Next: Next;
+}
+
+struct GetNext<T: Next> {
+ t: T,
+}
+
+impl<T: Next> Next for GetNext<T> {
+ type Next = <GetNext<T> as Next>::Next;
+ //~^ ERROR overflow evaluating the requirement
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-23122-1.stderr b/tests/ui/issues/issue-23122-1.stderr
new file mode 100644
index 000000000..0b568b30e
--- /dev/null
+++ b/tests/ui/issues/issue-23122-1.stderr
@@ -0,0 +1,9 @@
+error[E0275]: overflow evaluating the requirement `<GetNext<T> as Next>::Next == _`
+ --> $DIR/issue-23122-1.rs:10:17
+ |
+LL | type Next = <GetNext<T> as Next>::Next;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0275`.
diff --git a/tests/ui/issues/issue-23122-2.rs b/tests/ui/issues/issue-23122-2.rs
new file mode 100644
index 000000000..338789c2e
--- /dev/null
+++ b/tests/ui/issues/issue-23122-2.rs
@@ -0,0 +1,15 @@
+// normalize-stderr-test: "long-type-\d+" -> "long-type-hash"
+trait Next {
+ type Next: Next;
+}
+
+struct GetNext<T: Next> {
+ t: T,
+}
+
+impl<T: Next> Next for GetNext<T> {
+ type Next = <GetNext<T::Next> as Next>::Next;
+ //~^ ERROR overflow evaluating the requirement
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-23122-2.stderr b/tests/ui/issues/issue-23122-2.stderr
new file mode 100644
index 000000000..06e5b711a
--- /dev/null
+++ b/tests/ui/issues/issue-23122-2.stderr
@@ -0,0 +1,19 @@
+error[E0275]: overflow evaluating the requirement `<<<<<<<... as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next: Sized`
+ --> $DIR/issue-23122-2.rs:11:17
+ |
+LL | type Next = <GetNext<T::Next> as Next>::Next;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]` attribute to your crate (`issue_23122_2`)
+note: required for `GetNext<<<<<<<... as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next>` to implement `Next`
+ --> $DIR/issue-23122-2.rs:10:15
+ |
+LL | impl<T: Next> Next for GetNext<T> {
+ | - ^^^^ ^^^^^^^^^^
+ | |
+ | unsatisfied trait bound introduced here
+ = note: the full type name has been written to '$TEST_BUILD_DIR/issues/issue-23122-2/issue-23122-2.long-type-hash.txt'
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0275`.
diff --git a/tests/ui/issues/issue-2316-c.rs b/tests/ui/issues/issue-2316-c.rs
new file mode 100644
index 000000000..d975aa695
--- /dev/null
+++ b/tests/ui/issues/issue-2316-c.rs
@@ -0,0 +1,12 @@
+// run-pass
+// aux-build:issue-2316-a.rs
+// aux-build:issue-2316-b.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_2316_b;
+use issue_2316_b::cloth;
+
+pub fn main() {
+ let _c: cloth::fabric = cloth::fabric::calico;
+}
diff --git a/tests/ui/issues/issue-23173.rs b/tests/ui/issues/issue-23173.rs
new file mode 100644
index 000000000..92f4c5464
--- /dev/null
+++ b/tests/ui/issues/issue-23173.rs
@@ -0,0 +1,13 @@
+enum Token { LeftParen, RightParen, Plus, Minus, /* etc */ }
+struct Struct {
+ a: usize,
+}
+
+fn use_token(token: &Token) { unimplemented!() }
+
+fn main() {
+ use_token(&Token::Homura); //~ ERROR no variant or associated item named `Homura`
+ Struct::method(); //~ ERROR no function or associated item named `method` found
+ Struct::method; //~ ERROR no function or associated item named `method` found
+ Struct::Assoc; //~ ERROR no associated item named `Assoc` found
+}
diff --git a/tests/ui/issues/issue-23173.stderr b/tests/ui/issues/issue-23173.stderr
new file mode 100644
index 000000000..d07d1a7ca
--- /dev/null
+++ b/tests/ui/issues/issue-23173.stderr
@@ -0,0 +1,39 @@
+error[E0599]: no variant or associated item named `Homura` found for enum `Token` in the current scope
+ --> $DIR/issue-23173.rs:9:23
+ |
+LL | enum Token { LeftParen, RightParen, Plus, Minus, /* etc */ }
+ | ---------- variant or associated item `Homura` not found for this enum
+...
+LL | use_token(&Token::Homura);
+ | ^^^^^^ variant or associated item not found in `Token`
+
+error[E0599]: no function or associated item named `method` found for struct `Struct` in the current scope
+ --> $DIR/issue-23173.rs:10:13
+ |
+LL | struct Struct {
+ | ------------- function or associated item `method` not found for this struct
+...
+LL | Struct::method();
+ | ^^^^^^ function or associated item not found in `Struct`
+
+error[E0599]: no function or associated item named `method` found for struct `Struct` in the current scope
+ --> $DIR/issue-23173.rs:11:13
+ |
+LL | struct Struct {
+ | ------------- function or associated item `method` not found for this struct
+...
+LL | Struct::method;
+ | ^^^^^^ function or associated item not found in `Struct`
+
+error[E0599]: no associated item named `Assoc` found for struct `Struct` in the current scope
+ --> $DIR/issue-23173.rs:12:13
+ |
+LL | struct Struct {
+ | ------------- associated item `Assoc` not found for this struct
+...
+LL | Struct::Assoc;
+ | ^^^^^ associated item not found in `Struct`
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-23189.rs b/tests/ui/issues/issue-23189.rs
new file mode 100644
index 000000000..e5526357c
--- /dev/null
+++ b/tests/ui/issues/issue-23189.rs
@@ -0,0 +1,5 @@
+mod module {}
+
+fn main() {
+ let _ = module { x: 0 }; //~ERROR expected struct
+}
diff --git a/tests/ui/issues/issue-23189.stderr b/tests/ui/issues/issue-23189.stderr
new file mode 100644
index 000000000..ed065212c
--- /dev/null
+++ b/tests/ui/issues/issue-23189.stderr
@@ -0,0 +1,9 @@
+error[E0574]: expected struct, variant or union type, found module `module`
+ --> $DIR/issue-23189.rs:4:13
+ |
+LL | let _ = module { x: 0 };
+ | ^^^^^^ not a struct, variant or union type
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0574`.
diff --git a/tests/ui/issues/issue-23217.rs b/tests/ui/issues/issue-23217.rs
new file mode 100644
index 000000000..09f9ebccf
--- /dev/null
+++ b/tests/ui/issues/issue-23217.rs
@@ -0,0 +1,5 @@
+pub enum SomeEnum {
+ B = SomeEnum::A, //~ ERROR no variant or associated item named `A` found
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-23217.stderr b/tests/ui/issues/issue-23217.stderr
new file mode 100644
index 000000000..5d3d8a4f8
--- /dev/null
+++ b/tests/ui/issues/issue-23217.stderr
@@ -0,0 +1,14 @@
+error[E0599]: no variant or associated item named `A` found for enum `SomeEnum` in the current scope
+ --> $DIR/issue-23217.rs:2:19
+ |
+LL | pub enum SomeEnum {
+ | ----------------- variant or associated item `A` not found for this enum
+LL | B = SomeEnum::A,
+ | ^
+ | |
+ | variant or associated item not found in `SomeEnum`
+ | help: there is a variant with a similar name: `B`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-23253.rs b/tests/ui/issues/issue-23253.rs
new file mode 100644
index 000000000..22b55c285
--- /dev/null
+++ b/tests/ui/issues/issue-23253.rs
@@ -0,0 +1,6 @@
+enum Foo { Bar }
+
+fn main() {
+ Foo::Bar.a;
+ //~^ no field `a` on type `Foo`
+}
diff --git a/tests/ui/issues/issue-23253.stderr b/tests/ui/issues/issue-23253.stderr
new file mode 100644
index 000000000..be5714cd9
--- /dev/null
+++ b/tests/ui/issues/issue-23253.stderr
@@ -0,0 +1,9 @@
+error[E0609]: no field `a` on type `Foo`
+ --> $DIR/issue-23253.rs:4:14
+ |
+LL | Foo::Bar.a;
+ | ^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0609`.
diff --git a/tests/ui/issues/issue-23261.rs b/tests/ui/issues/issue-23261.rs
new file mode 100644
index 000000000..e21f86351
--- /dev/null
+++ b/tests/ui/issues/issue-23261.rs
@@ -0,0 +1,61 @@
+// run-pass
+// Matching on a DST struct should not trigger an LLVM assertion.
+
+struct Foo<T: ?Sized> {
+ a: i32,
+ inner: T
+}
+
+trait Get {
+ fn get(&self) -> i32;
+}
+
+impl Get for i32 {
+ fn get(&self) -> i32 {
+ *self
+ }
+}
+
+fn check_val(val: &Foo<[u8]>) {
+ match *val {
+ Foo { a, .. } => {
+ assert_eq!(a, 32);
+ }
+ }
+}
+
+fn check_dst_val(val: &Foo<[u8]>) {
+ match *val {
+ Foo { ref inner, .. } => {
+ assert_eq!(inner, [1, 2, 3]);
+ }
+ }
+}
+
+fn check_both(val: &Foo<[u8]>) {
+ match *val {
+ Foo { a, ref inner } => {
+ assert_eq!(a, 32);
+ assert_eq!(inner, [1, 2, 3]);
+ }
+ }
+}
+
+fn check_trait_obj(val: &Foo<dyn Get>) {
+ match *val {
+ Foo { a, ref inner } => {
+ assert_eq!(a, 32);
+ assert_eq!(inner.get(), 32);
+ }
+ }
+}
+
+fn main() {
+ let foo: &Foo<[u8]> = &Foo { a: 32, inner: [1, 2, 3] };
+ check_val(foo);
+ check_dst_val(foo);
+ check_both(foo);
+
+ let foo: &Foo<dyn Get> = &Foo { a: 32, inner: 32 };
+ check_trait_obj(foo);
+}
diff --git a/tests/ui/issues/issue-23281.rs b/tests/ui/issues/issue-23281.rs
new file mode 100644
index 000000000..727168964
--- /dev/null
+++ b/tests/ui/issues/issue-23281.rs
@@ -0,0 +1,12 @@
+pub struct Struct;
+
+impl Struct {
+ pub fn function(funs: Vec<dyn Fn() -> ()>) {}
+ //~^ ERROR the size for values of type
+}
+
+struct Vec<T> {
+ t: T,
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-23281.stderr b/tests/ui/issues/issue-23281.stderr
new file mode 100644
index 000000000..804334c9b
--- /dev/null
+++ b/tests/ui/issues/issue-23281.stderr
@@ -0,0 +1,23 @@
+error[E0277]: the size for values of type `(dyn Fn() + 'static)` cannot be known at compilation time
+ --> $DIR/issue-23281.rs:4:27
+ |
+LL | pub fn function(funs: Vec<dyn Fn() -> ()>) {}
+ | ^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `(dyn Fn() + 'static)`
+note: required by a bound in `Vec`
+ --> $DIR/issue-23281.rs:8:12
+ |
+LL | struct Vec<T> {
+ | ^ required by this bound in `Vec`
+help: you could relax the implicit `Sized` bound on `T` if it were used through indirection like `&T` or `Box<T>`
+ --> $DIR/issue-23281.rs:8:12
+ |
+LL | struct Vec<T> {
+ | ^ this could be changed to `T: ?Sized`...
+LL | t: T,
+ | - ...if indirection were used here: `Box<T>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-23302-1.rs b/tests/ui/issues/issue-23302-1.rs
new file mode 100644
index 000000000..24e79dc58
--- /dev/null
+++ b/tests/ui/issues/issue-23302-1.rs
@@ -0,0 +1,7 @@
+// Check that an enum with recursion in the discriminant throws
+// the appropriate error (rather than, say, blowing the stack).
+enum X {
+ A = X::A as isize, //~ ERROR E0391
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-23302-1.stderr b/tests/ui/issues/issue-23302-1.stderr
new file mode 100644
index 000000000..9366050d7
--- /dev/null
+++ b/tests/ui/issues/issue-23302-1.stderr
@@ -0,0 +1,16 @@
+error[E0391]: cycle detected when const-evaluating + checking `X::A::{constant#0}`
+ --> $DIR/issue-23302-1.rs:4:9
+ |
+LL | A = X::A as isize,
+ | ^^^^^^^^^^^^^
+ |
+ = note: ...which immediately requires const-evaluating + checking `X::A::{constant#0}` again
+note: cycle used when simplifying constant for the type system `X::A::{constant#0}`
+ --> $DIR/issue-23302-1.rs:4:9
+ |
+LL | A = X::A as isize,
+ | ^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0391`.
diff --git a/tests/ui/issues/issue-23302-2.rs b/tests/ui/issues/issue-23302-2.rs
new file mode 100644
index 000000000..e89c7eab5
--- /dev/null
+++ b/tests/ui/issues/issue-23302-2.rs
@@ -0,0 +1,8 @@
+// Since `Y::B` here defaults to `Y::A+1`, this is also a
+// recursive definition.
+enum Y {
+ A = Y::B as isize, //~ ERROR E0391
+ B,
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-23302-2.stderr b/tests/ui/issues/issue-23302-2.stderr
new file mode 100644
index 000000000..b97ae287a
--- /dev/null
+++ b/tests/ui/issues/issue-23302-2.stderr
@@ -0,0 +1,16 @@
+error[E0391]: cycle detected when const-evaluating + checking `Y::A::{constant#0}`
+ --> $DIR/issue-23302-2.rs:4:9
+ |
+LL | A = Y::B as isize,
+ | ^^^^^^^^^^^^^
+ |
+ = note: ...which immediately requires const-evaluating + checking `Y::A::{constant#0}` again
+note: cycle used when simplifying constant for the type system `Y::A::{constant#0}`
+ --> $DIR/issue-23302-2.rs:4:9
+ |
+LL | A = Y::B as isize,
+ | ^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0391`.
diff --git a/tests/ui/issues/issue-23302-3.rs b/tests/ui/issues/issue-23302-3.rs
new file mode 100644
index 000000000..da75f3307
--- /dev/null
+++ b/tests/ui/issues/issue-23302-3.rs
@@ -0,0 +1,5 @@
+const A: i32 = B; //~ ERROR cycle detected
+
+const B: i32 = A;
+
+fn main() { }
diff --git a/tests/ui/issues/issue-23302-3.stderr b/tests/ui/issues/issue-23302-3.stderr
new file mode 100644
index 000000000..c6cafe575
--- /dev/null
+++ b/tests/ui/issues/issue-23302-3.stderr
@@ -0,0 +1,21 @@
+error[E0391]: cycle detected when const-evaluating + checking `A`
+ --> $DIR/issue-23302-3.rs:1:16
+ |
+LL | const A: i32 = B;
+ | ^
+ |
+note: ...which requires const-evaluating + checking `B`...
+ --> $DIR/issue-23302-3.rs:3:16
+ |
+LL | const B: i32 = A;
+ | ^
+ = note: ...which again requires const-evaluating + checking `A`, completing the cycle
+note: cycle used when simplifying constant for the type system `A`
+ --> $DIR/issue-23302-3.rs:1:1
+ |
+LL | const A: i32 = B;
+ | ^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0391`.
diff --git a/tests/ui/issues/issue-23304-1.rs b/tests/ui/issues/issue-23304-1.rs
new file mode 100644
index 000000000..1805c1c19
--- /dev/null
+++ b/tests/ui/issues/issue-23304-1.rs
@@ -0,0 +1,25 @@
+// run-pass
+#![allow(dead_code)]
+
+#[repr(u8)]
+#[allow(dead_code)]
+enum ValueType {
+ DOUBLE = 0x00,
+ INT32 = 0x01,
+}
+
+#[repr(u32)]
+enum ValueTag {
+ INT32 = 0x1FFF0u32 | (ValueType::INT32 as u32),
+ X,
+}
+
+#[repr(u64)]
+enum ValueShiftedTag {
+ INT32 = ValueTag::INT32 as u64,
+ X,
+}
+
+fn main() {
+ println!("{}", ValueTag::INT32 as u32);
+}
diff --git a/tests/ui/issues/issue-23304-2.rs b/tests/ui/issues/issue-23304-2.rs
new file mode 100644
index 000000000..6376fdb65
--- /dev/null
+++ b/tests/ui/issues/issue-23304-2.rs
@@ -0,0 +1,13 @@
+// run-pass
+#![allow(dead_code)]
+
+enum X { A = 42 as isize }
+
+enum Y { A = X::A as isize }
+
+fn main() {
+ let x = X::A;
+ let x = x as isize;
+ assert_eq!(x, 42);
+ assert_eq!(Y::A as isize, 42);
+}
diff --git a/tests/ui/issues/issue-23311.rs b/tests/ui/issues/issue-23311.rs
new file mode 100644
index 000000000..62c96840b
--- /dev/null
+++ b/tests/ui/issues/issue-23311.rs
@@ -0,0 +1,11 @@
+// run-pass
+
+// Test that we do not ICE when pattern matching an array against a slice.
+
+fn main() {
+ match "foo".as_bytes() {
+ b"food" => (),
+ &[b'f', ..] => (),
+ _ => ()
+ }
+}
diff --git a/tests/ui/issues/issue-23336.rs b/tests/ui/issues/issue-23336.rs
new file mode 100644
index 000000000..cd71d7eed
--- /dev/null
+++ b/tests/ui/issues/issue-23336.rs
@@ -0,0 +1,11 @@
+// run-pass
+pub trait Data { fn doit(&self) {} }
+impl<T> Data for T {}
+pub trait UnaryLogic { type D: Data; }
+impl UnaryLogic for () { type D = i32; }
+
+pub fn crashes<T: UnaryLogic>(t: T::D) {
+ t.doit();
+}
+
+fn main() { crashes::<()>(0); }
diff --git a/tests/ui/issues/issue-23354-2.rs b/tests/ui/issues/issue-23354-2.rs
new file mode 100644
index 000000000..c291d8a5e
--- /dev/null
+++ b/tests/ui/issues/issue-23354-2.rs
@@ -0,0 +1,9 @@
+// run-fail
+// error-pattern:panic evaluated
+// ignore-emscripten no processes
+
+#[allow(unused_variables)]
+fn main() {
+ // This used to trigger an LLVM assertion during compilation
+ let x = [panic!("panic evaluated"); 2];
+}
diff --git a/tests/ui/issues/issue-23354.rs b/tests/ui/issues/issue-23354.rs
new file mode 100644
index 000000000..8b7c2eef2
--- /dev/null
+++ b/tests/ui/issues/issue-23354.rs
@@ -0,0 +1,8 @@
+// run-fail
+// error-pattern:panic evaluated
+// ignore-emscripten no processes
+
+#[allow(unused_variables)]
+fn main() {
+ let x = [panic!("panic evaluated"); 0];
+}
diff --git a/tests/ui/issues/issue-23406.rs b/tests/ui/issues/issue-23406.rs
new file mode 100644
index 000000000..d00d5d6f9
--- /dev/null
+++ b/tests/ui/issues/issue-23406.rs
@@ -0,0 +1,15 @@
+// build-pass
+#![allow(dead_code)]
+trait Inner {
+ type T;
+}
+
+impl<'a> Inner for &'a i32 {
+ type T = i32;
+}
+
+fn f<'a>(x: &'a i32) -> <&'a i32 as Inner>::T {
+ *x
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-23433.rs b/tests/ui/issues/issue-23433.rs
new file mode 100644
index 000000000..d4fbbde62
--- /dev/null
+++ b/tests/ui/issues/issue-23433.rs
@@ -0,0 +1,13 @@
+// run-pass
+// Don't fail if we encounter a NonNull<T> where T is an unsized type
+
+use std::ptr::NonNull;
+
+fn main() {
+ let mut a = [0u8; 5];
+ let b: Option<NonNull<[u8]>> = Some(NonNull::from(&mut a));
+ match b {
+ Some(_) => println!("Got `Some`"),
+ None => panic!("Unexpected `None`"),
+ }
+}
diff --git a/tests/ui/issues/issue-23442.rs b/tests/ui/issues/issue-23442.rs
new file mode 100644
index 000000000..d1e4317e5
--- /dev/null
+++ b/tests/ui/issues/issue-23442.rs
@@ -0,0 +1,23 @@
+// check-pass
+#![allow(dead_code)]
+use std::marker::PhantomData;
+
+pub struct UnionedKeys<'a,K>
+ where K: UnifyKey + 'a
+{
+ table: &'a mut UnificationTable<K>,
+ root_key: K,
+ stack: Vec<K>,
+}
+
+pub trait UnifyKey {
+ type Value;
+}
+
+pub struct UnificationTable<K:UnifyKey> {
+ values: Delegate<K>,
+}
+
+pub struct Delegate<K>(PhantomData<K>);
+
+fn main() {}
diff --git a/tests/ui/issues/issue-23477.rs b/tests/ui/issues/issue-23477.rs
new file mode 100644
index 000000000..988ebe03c
--- /dev/null
+++ b/tests/ui/issues/issue-23477.rs
@@ -0,0 +1,16 @@
+// build-pass
+// ignore-asmjs wasm2js does not support source maps yet
+// compile-flags: -g
+
+pub struct Dst {
+ pub a: (),
+ pub b: (),
+ pub data: [u8],
+}
+
+pub unsafe fn borrow(bytes: &[u8]) -> &Dst {
+ let dst: &Dst = std::mem::transmute((bytes.as_ptr(), bytes.len()));
+ dst
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-23485.rs b/tests/ui/issues/issue-23485.rs
new file mode 100644
index 000000000..1dd3d9293
--- /dev/null
+++ b/tests/ui/issues/issue-23485.rs
@@ -0,0 +1,50 @@
+// run-pass
+#![allow(unused_imports)]
+// Test for an ICE that occurred when a default method implementation
+// was applied to a type that did not meet the prerequisites. The
+// problem occurred specifically because normalizing
+// `Self::Item::Target` was impossible in this case.
+
+use std::boxed::Box;
+use std::marker::Sized;
+use std::clone::Clone;
+use std::ops::Deref;
+use std::option::Option;
+use std::option::Option::{Some,None};
+
+trait Iterator {
+ type Item;
+
+ fn next(&mut self) -> Option<Self::Item>;
+
+ fn clone_first(mut self) -> Option<<Self::Item as Deref>::Target> where
+ Self: Sized,
+ Self::Item: Deref,
+ <Self::Item as Deref>::Target: Clone,
+ {
+ self.next().map(|x| x.clone())
+ }
+}
+
+struct Counter {
+ value: i32
+}
+
+struct Token {
+ value: i32
+}
+
+impl Iterator for Counter {
+ type Item = Token;
+
+ fn next(&mut self) -> Option<Token> {
+ let x = self.value;
+ self.value += 1;
+ Some(Token { value: x })
+ }
+}
+
+fn main() {
+ let mut x: Box<dyn Iterator<Item=Token>> = Box::new(Counter { value: 22 });
+ assert_eq!(x.next().unwrap().value, 22);
+}
diff --git a/tests/ui/issues/issue-23491.rs b/tests/ui/issues/issue-23491.rs
new file mode 100644
index 000000000..e5f9dd3ef
--- /dev/null
+++ b/tests/ui/issues/issue-23491.rs
@@ -0,0 +1,8 @@
+// run-pass
+#![allow(unused_variables)]
+
+struct Node<T: ?Sized>(#[allow(unused_tuple_struct_fields)] T);
+
+fn main() {
+ let x: Box<Node<[isize]>> = Box::new(Node([]));
+}
diff --git a/tests/ui/issues/issue-23543.rs b/tests/ui/issues/issue-23543.rs
new file mode 100644
index 000000000..843e1a8a8
--- /dev/null
+++ b/tests/ui/issues/issue-23543.rs
@@ -0,0 +1,11 @@
+pub trait A: Copy {}
+
+struct Foo;
+
+pub trait D {
+ fn f<T>(self)
+ where T<Bogus = Foo>: A;
+ //~^ ERROR associated type bindings are not allowed here [E0229]
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-23543.stderr b/tests/ui/issues/issue-23543.stderr
new file mode 100644
index 000000000..ebb70afe3
--- /dev/null
+++ b/tests/ui/issues/issue-23543.stderr
@@ -0,0 +1,9 @@
+error[E0229]: associated type bindings are not allowed here
+ --> $DIR/issue-23543.rs:7:17
+ |
+LL | where T<Bogus = Foo>: A;
+ | ^^^^^^^^^^^ associated type not allowed here
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0229`.
diff --git a/tests/ui/issues/issue-23544.rs b/tests/ui/issues/issue-23544.rs
new file mode 100644
index 000000000..6ad00b2fb
--- /dev/null
+++ b/tests/ui/issues/issue-23544.rs
@@ -0,0 +1,9 @@
+pub trait A: Copy {}
+
+pub trait D {
+ fn f<T>(self)
+ where T<Bogus = Self::AlsoBogus>: A;
+ //~^ ERROR associated type bindings are not allowed here [E0229]
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-23544.stderr b/tests/ui/issues/issue-23544.stderr
new file mode 100644
index 000000000..c912baccb
--- /dev/null
+++ b/tests/ui/issues/issue-23544.stderr
@@ -0,0 +1,9 @@
+error[E0229]: associated type bindings are not allowed here
+ --> $DIR/issue-23544.rs:5:17
+ |
+LL | where T<Bogus = Self::AlsoBogus>: A;
+ | ^^^^^^^^^^^^^^^^^^^^^^^ associated type not allowed here
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0229`.
diff --git a/tests/ui/issues/issue-23550.rs b/tests/ui/issues/issue-23550.rs
new file mode 100644
index 000000000..9cce9a0a9
--- /dev/null
+++ b/tests/ui/issues/issue-23550.rs
@@ -0,0 +1,22 @@
+// build-pass
+#![feature(core_intrinsics)]
+#![allow(warnings)]
+
+use std::intrinsics;
+
+#[derive(Copy, Clone)]
+struct Wrap(i64);
+
+// These volatile intrinsics used to cause an ICE
+
+unsafe fn test_bool(p: &mut bool, v: bool) {
+ intrinsics::volatile_load(p);
+ intrinsics::volatile_store(p, v);
+}
+
+unsafe fn test_immediate_fca(p: &mut Wrap, v: Wrap) {
+ intrinsics::volatile_load(p);
+ intrinsics::volatile_store(p, v);
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-23589.rs b/tests/ui/issues/issue-23589.rs
new file mode 100644
index 000000000..1c640af8d
--- /dev/null
+++ b/tests/ui/issues/issue-23589.rs
@@ -0,0 +1,5 @@
+fn main() {
+ let v: Vec(&str) = vec!['1', '2'];
+ //~^ ERROR parenthesized type parameters may only be used with a `Fn` trait
+ //~| ERROR mismatched types
+}
diff --git a/tests/ui/issues/issue-23589.stderr b/tests/ui/issues/issue-23589.stderr
new file mode 100644
index 000000000..1a91f5e04
--- /dev/null
+++ b/tests/ui/issues/issue-23589.stderr
@@ -0,0 +1,26 @@
+error[E0214]: parenthesized type parameters may only be used with a `Fn` trait
+ --> $DIR/issue-23589.rs:2:12
+ |
+LL | let v: Vec(&str) = vec!['1', '2'];
+ | ^^^^^^^^^ only `Fn` traits may use parentheses
+ |
+help: use angle brackets instead
+ |
+LL | let v: Vec<&str> = vec!['1', '2'];
+ | ~ ~
+
+error[E0308]: mismatched types
+ --> $DIR/issue-23589.rs:2:29
+ |
+LL | let v: Vec(&str) = vec!['1', '2'];
+ | ^^^ expected `&str`, found `char`
+ |
+help: if you meant to write a `str` literal, use double quotes
+ |
+LL | let v: Vec(&str) = vec!["1", '2'];
+ | ~~~
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0214, E0308.
+For more information about an error, try `rustc --explain E0214`.
diff --git a/tests/ui/issues/issue-23611-enum-swap-in-drop.rs b/tests/ui/issues/issue-23611-enum-swap-in-drop.rs
new file mode 100644
index 000000000..cdb130d60
--- /dev/null
+++ b/tests/ui/issues/issue-23611-enum-swap-in-drop.rs
@@ -0,0 +1,259 @@
+// run-pass
+#![allow(non_upper_case_globals)]
+
+// Issue 23611: this test is ensuring that, for an instance `X` of the
+// enum `E`, if you swap in a different variant during the execution
+// of the `<E as Drop>::drop`, then the appropriate substructure will
+// be torn down after the `<E as Drop>::drop` method returns.
+
+use std::cell::RefCell;
+use std::mem;
+
+use self::d::D;
+
+pub fn main() {
+ let log = RefCell::new(vec![]);
+ d::println("created empty log");
+ test(&log);
+
+ // println!("log: {:?}", &log.borrow()[..]);
+ assert_eq!(
+ &log.borrow()[..],
+ [
+ // created empty log
+ // +-- Make D(test_1, 10000000)
+ // | +-- Make D(g_b_5, 50000001)
+ // | | in g_B(b2b0) from E::drop, b=b4b0
+ // | +-- Drop D(g_b_5, 50000001)
+ 50000001,
+ // |
+ // | +-- Make D(drop_6, 60000002)
+ // | | +-- Make D(g_b_5, 50000003)
+ // | | | in g_B(b2b0) from E::drop, b=b4b1
+ // | | +-- Drop D(g_b_5, 50000003)
+ 50000003,
+ // | |
+ // | | +-- Make D(GaspB::drop_3, 30000004)
+ // | | | +-- Make D(g_b_5, 50000005)
+ // | | | | in g_B(b4b2) from GaspB::drop
+ // | | | +-- Drop D(g_b_5, 50000005)
+ 50000005,
+ // | | |
+ // | | +-- Drop D(GaspB::drop_3, 30000004)
+ 30000004,
+ // | |
+ // +-- Drop D(test_1, 10000000)
+ 10000000,
+ // |
+ // +-- Make D(GaspA::drop_2, 20000006)
+ // | | +-- Make D(f_a_4, 40000007)
+ // | | | in f_A(a3a0) from GaspA::drop
+ // | | +-- Drop D(f_a_4, 40000007)
+ 40000007,
+ // | |
+ // +-- Drop D(GaspA::drop_2, 20000006)
+ 20000006,
+ // |
+ // +-- Drop D(drop_6, 60000002)
+ 60000002
+ //
+ ]);
+
+ // For reference purposes, the old (incorrect) behavior would produce the following
+ // output, which you can compare to the above:
+ //
+ // created empty log
+ // +-- Make D(test_1, 10000000)
+ // | +-- Make D(g_b_5, 50000001)
+ // | | in g_B(b2b0) from E::drop, b=b4b0
+ // | +-- Drop D(g_b_5, 50000001)
+ // |
+ // | +-- Make D(drop_6, 60000002)
+ // | | +-- Make D(g_b_5, 50000003)
+ // | | | in g_B(b2b0) from E::drop, b=b4b1
+ // | | +-- Drop D(g_b_5, 50000003)
+ // | |
+ // | | +-- Make D(GaspB::drop_3, 30000004)
+ // | | | +-- Make D(g_b_5, 50000005)
+ // | | | | in g_B(b4b2) from GaspB::drop
+ // | | | +-- Drop D(g_b_5, 50000005)
+ // | | |
+ // | | +-- Drop D(GaspB::drop_3, 30000004)
+ // | |
+ // +-- Drop D(test_1, 10000000)
+ // |
+ // +-- Make D(GaspB::drop_3, 30000006)
+ // | | +-- Make D(f_a_4, 40000007)
+ // | | | in f_A(a3a0) from GaspB::drop
+ // | | +-- Drop D(f_a_4, 40000007)
+ // | |
+ // +-- Drop D(GaspB::drop_3, 30000006)
+ // |
+ // +-- Drop D(drop_6, 60000002)
+
+ // Note that this calls f_A from GaspB::drop (and thus creates a D
+ // with a uid incorporating the origin of GaspB's drop that
+ // surrounds the f_A invocation), but the code as written only
+ // ever hands f_A off to instances of GaspA, and thus one should
+ // be able to prove the invariant that f_A is *only* invoked from
+ // from an instance of GaspA (either via the GaspA drop
+ // implementation or the E drop implementation). Yet the old (bad)
+ // behavior allowed a call to f_A to leak in while we are tearing
+ // down a value of type GaspB.
+}
+
+fn test<'a>(log: d::Log<'a>) {
+ let _e = E::B(GaspB(g_b, 0xB4B0, log, D::new("test", 1, log)), true);
+}
+
+struct GaspA<'a>(for <'b> fn(u32, &'b str, d::Log<'a>), u32, d::Log<'a>, d::D<'a>);
+struct GaspB<'a>(for <'b> fn(u32, &'b str, d::Log<'a>), u32, d::Log<'a>, d::D<'a>);
+
+impl<'a> Drop for GaspA<'a> {
+ fn drop(&mut self) {
+ let _d = d::D::new("GaspA::drop", 2, self.2);
+ (self.0)(self.1, "GaspA::drop", self.2);
+ }
+}
+
+impl<'a> Drop for GaspB<'a> {
+ fn drop(&mut self) {
+ let _d = d::D::new("GaspB::drop", 3, self.2);
+ (self.0)(self.1, "GaspB::drop", self.2);
+ }
+}
+
+enum E<'a> {
+ A(GaspA<'a>, bool), B(GaspB<'a>, bool),
+}
+
+fn f_a(x: u32, ctxt: &str, log: d::Log) {
+ let _d = d::D::new("f_a", 4, log);
+ d::println(&format!("in f_A({:x}) from {}", x, ctxt));
+}
+fn g_b(y: u32, ctxt: &str, log: d::Log) {
+ let _d = d::D::new("g_b", 5, log);
+ d::println(&format!("in g_B({:x}) from {}", y, ctxt));
+}
+
+impl<'a> Drop for E<'a> {
+ fn drop(&mut self) {
+ let (do_drop, log) = match *self {
+ E::A(GaspA(ref f, ref mut val_a, log, ref _d_a), ref mut do_drop) => {
+ f(0xA1A0, &format!("E::drop, a={:x}", val_a), log);
+ *val_a += 1;
+ // swap in do_drop := false to avoid infinite dtor regress
+ (mem::replace(do_drop, false), log)
+ }
+ E::B(GaspB(ref g, ref mut val_b, log, ref _d_b), ref mut do_drop) => {
+ g(0xB2B0, &format!("E::drop, b={:x}", val_b), log);
+ *val_b += 1;
+ // swap in do_drop := false to avoid infinite dtor regress
+ (mem::replace(do_drop, false), log)
+ }
+ };
+
+ #[allow(unused_must_use)]
+ if do_drop {
+ mem::replace(self, E::A(GaspA(f_a, 0xA3A0, log, D::new("drop", 6, log)), true));
+ }
+ }
+}
+
+// This module provides simultaneous printouts of the dynamic extents
+// of all of the D values, in addition to logging the order that each
+// is dropped.
+//
+// This code is similar to a support code module embedded within
+// test/run-pass/issue-123338-ensure-param-drop-order.rs; however,
+// that (slightly simpler) code only identifies objects in the log via
+// (creation) time-stamps; this incorporates both timestamping and the
+// point of origin within the source code into the unique ID (uid).
+
+const PREF_INDENT: u32 = 20;
+
+pub mod d {
+ #![allow(unused_parens)]
+ use std::fmt;
+ use std::mem;
+ use std::cell::RefCell;
+
+ static mut counter: u16 = 0;
+ static mut trails: u64 = 0;
+
+ pub type Log<'a> = &'a RefCell<Vec<u32>>;
+
+ pub fn current_width() -> u32 {
+ unsafe { max_width() - trails.leading_zeros() }
+ }
+
+ pub fn max_width() -> u32 {
+ unsafe {
+ (mem::size_of_val(&trails)*8) as u32
+ }
+ }
+
+ pub fn indent_println(my_trails: u32, s: &str) {
+ let mut indent: String = String::new();
+ for i in 0..my_trails {
+ unsafe {
+ if trails & (1 << i) != 0 {
+ indent = indent + "| ";
+ } else {
+ indent = indent + " ";
+ }
+ }
+ }
+ println!("{}{}", indent, s);
+ }
+
+ pub fn println(s: &str) {
+ indent_println(super::PREF_INDENT, s);
+ }
+
+ fn first_avail() -> u32 {
+ unsafe {
+ for i in 0..64 {
+ if trails & (1 << i) == 0 {
+ return i;
+ }
+ }
+ }
+ panic!("exhausted trails");
+ }
+
+ pub struct D<'a> {
+ name: &'static str, i: u8, uid: u32, trail: u32, log: Log<'a>
+ }
+
+ impl<'a> fmt::Display for D<'a> {
+ fn fmt(&self, w: &mut fmt::Formatter) -> fmt::Result {
+ write!(w, "D({}_{}, {})", self.name, self.i, self.uid)
+ }
+ }
+
+ impl<'a> D<'a> {
+ pub fn new(name: &'static str, i: u8, log: Log<'a>) -> D<'a> {
+ unsafe {
+ let trail = first_avail();
+ let ctr = ((i as u32) * 10_000_000) + (counter as u32);
+ counter += 1;
+ trails |= (1 << trail);
+ let ret = D {
+ name: name, i: i, log: log, uid: ctr, trail: trail
+ };
+ indent_println(trail, &format!("+-- Make {}", ret));
+ ret
+ }
+ }
+ }
+
+ impl<'a> Drop for D<'a> {
+ fn drop(&mut self) {
+ unsafe { trails &= !(1 << self.trail); };
+ self.log.borrow_mut().push(self.uid);
+ indent_println(self.trail, &format!("+-- Drop {}", self));
+ indent_println(::PREF_INDENT, "");
+ }
+ }
+}
diff --git a/tests/ui/issues/issue-23649-1.rs b/tests/ui/issues/issue-23649-1.rs
new file mode 100644
index 000000000..fc0c9a605
--- /dev/null
+++ b/tests/ui/issues/issue-23649-1.rs
@@ -0,0 +1,12 @@
+// run-pass
+use std::mem;
+
+pub struct X([u8]);
+
+fn _f(x: &X) -> usize { match *x { X(ref x) => { x.len() } } }
+
+fn main() {
+ let b: &[u8] = &[11; 42];
+ let v: &X = unsafe { mem::transmute(b) };
+ assert_eq!(_f(v), 42);
+}
diff --git a/tests/ui/issues/issue-23649-2.rs b/tests/ui/issues/issue-23649-2.rs
new file mode 100644
index 000000000..ce7d8e3a7
--- /dev/null
+++ b/tests/ui/issues/issue-23649-2.rs
@@ -0,0 +1,10 @@
+// run-pass
+
+use std::collections::HashMap;
+use std::path::{Path, PathBuf};
+
+fn main() {
+ let m: HashMap<PathBuf, ()> = HashMap::new();
+ let k = Path::new("foo");
+ println!("{:?}", m.get(k));
+}
diff --git a/tests/ui/issues/issue-23649-3.rs b/tests/ui/issues/issue-23649-3.rs
new file mode 100644
index 000000000..8f61c71d6
--- /dev/null
+++ b/tests/ui/issues/issue-23649-3.rs
@@ -0,0 +1,5 @@
+// build-pass
+#[derive(PartialEq)]
+struct Slice { slice: [u8] }
+
+fn main() {}
diff --git a/tests/ui/issues/issue-23699.rs b/tests/ui/issues/issue-23699.rs
new file mode 100644
index 000000000..952548837
--- /dev/null
+++ b/tests/ui/issues/issue-23699.rs
@@ -0,0 +1,14 @@
+// run-pass
+#![allow(unused_variables)]
+fn gimme_a_raw_pointer<T>(_: *const T) { }
+
+fn test<T>(t: T) { }
+
+fn main() {
+ // Clearly `pointer` must be of type `*const ()`.
+ let pointer = &() as *const _;
+ gimme_a_raw_pointer(pointer);
+
+ let t = test as fn (i32);
+ t(0i32);
+}
diff --git a/tests/ui/issues/issue-23781.rs b/tests/ui/issues/issue-23781.rs
new file mode 100644
index 000000000..220ebdb18
--- /dev/null
+++ b/tests/ui/issues/issue-23781.rs
@@ -0,0 +1,29 @@
+// run-pass
+use std::fmt;
+
+struct Foo;
+impl fmt::Debug for Foo {
+ fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
+ println!("<Foo as Debug>::fmt()");
+
+ write!(fmt, "")
+ }
+}
+
+fn test1() {
+ let foo_str = format!("{:?}", Foo);
+
+ println!("{}", foo_str);
+}
+
+fn test2() {
+ println!("{:?}", Foo);
+}
+
+fn main() {
+ // This works fine
+ test1();
+
+ // This fails
+ test2();
+}
diff --git a/tests/ui/issues/issue-2380-b.rs b/tests/ui/issues/issue-2380-b.rs
new file mode 100644
index 000000000..d708c7b42
--- /dev/null
+++ b/tests/ui/issues/issue-2380-b.rs
@@ -0,0 +1,10 @@
+// run-pass
+// aux-build:issue-2380.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate a;
+
+pub fn main() {
+ a::f::<()>();
+}
diff --git a/tests/ui/issues/issue-23808.rs b/tests/ui/issues/issue-23808.rs
new file mode 100644
index 000000000..0988b09fc
--- /dev/null
+++ b/tests/ui/issues/issue-23808.rs
@@ -0,0 +1,59 @@
+// run-pass
+
+#![deny(dead_code)]
+
+// use different types / traits to test all combinations
+
+trait Const {
+ const C: ();
+}
+
+trait StaticFn {
+ fn sfn();
+}
+
+struct ConstStruct;
+struct StaticFnStruct;
+
+enum ConstEnum {}
+enum StaticFnEnum {}
+
+struct AliasedConstStruct;
+struct AliasedStaticFnStruct;
+
+enum AliasedConstEnum {}
+enum AliasedStaticFnEnum {}
+
+type AliasConstStruct = AliasedConstStruct;
+type AliasStaticFnStruct = AliasedStaticFnStruct;
+type AliasConstEnum = AliasedConstEnum;
+type AliasStaticFnEnum = AliasedStaticFnEnum;
+
+macro_rules! impl_Const {($($T:ident),*) => {$(
+ impl Const for $T {
+ const C: () = ();
+ }
+)*}}
+
+macro_rules! impl_StaticFn {($($T:ident),*) => {$(
+ impl StaticFn for $T {
+ fn sfn() {}
+ }
+)*}}
+
+impl_Const!(ConstStruct, ConstEnum, AliasedConstStruct, AliasedConstEnum);
+impl_StaticFn!(StaticFnStruct, StaticFnEnum, AliasedStaticFnStruct, AliasedStaticFnEnum);
+
+fn main() {
+ let _ = ConstStruct::C;
+ let _ = ConstEnum::C;
+
+ StaticFnStruct::sfn();
+ StaticFnEnum::sfn();
+
+ let _ = AliasConstStruct::C;
+ let _ = AliasConstEnum::C;
+
+ AliasStaticFnStruct::sfn();
+ AliasStaticFnEnum::sfn();
+}
diff --git a/tests/ui/issues/issue-2383.rs b/tests/ui/issues/issue-2383.rs
new file mode 100644
index 000000000..06e61ce68
--- /dev/null
+++ b/tests/ui/issues/issue-2383.rs
@@ -0,0 +1,9 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+use std::collections::VecDeque;
+
+pub fn main() {
+ let mut q = VecDeque::new();
+ q.push_front(10);
+}
diff --git a/tests/ui/issues/issue-23891.rs b/tests/ui/issues/issue-23891.rs
new file mode 100644
index 000000000..73467f715
--- /dev/null
+++ b/tests/ui/issues/issue-23891.rs
@@ -0,0 +1,11 @@
+// run-pass
+macro_rules! id {
+ ($s: pat) => ($s);
+}
+
+fn main() {
+ match (Some(123), Some(456)) {
+ (id!(Some(a)), _) | (_, id!(Some(a))) => println!("{}", a),
+ _ => (),
+ }
+}
diff --git a/tests/ui/issues/issue-23898.rs b/tests/ui/issues/issue-23898.rs
new file mode 100644
index 000000000..3de365675
--- /dev/null
+++ b/tests/ui/issues/issue-23898.rs
@@ -0,0 +1,11 @@
+// run-pass
+#![allow(unused_parens)]
+#![allow(non_camel_case_types)]
+
+// Note: This test was used to demonstrate #5873 (now #23898).
+
+enum State { ST_NULL, ST_WHITESPACE }
+
+fn main() {
+ [State::ST_NULL; (State::ST_WHITESPACE as usize)];
+}
diff --git a/tests/ui/issues/issue-23958.rs b/tests/ui/issues/issue-23958.rs
new file mode 100644
index 000000000..7e90d7586
--- /dev/null
+++ b/tests/ui/issues/issue-23958.rs
@@ -0,0 +1,13 @@
+// run-pass
+trait Collection where for<'a> &'a Self: IntoIterator {
+ fn my_iter(&self) -> <&Self as IntoIterator>::IntoIter {
+ self.into_iter()
+ }
+}
+
+impl<T> Collection for [T] { }
+
+fn main() {
+ let v = [0usize];
+ let _ = v.my_iter();
+}
diff --git a/tests/ui/issues/issue-23966.rs b/tests/ui/issues/issue-23966.rs
new file mode 100644
index 000000000..5fdec28ac
--- /dev/null
+++ b/tests/ui/issues/issue-23966.rs
@@ -0,0 +1,4 @@
+fn main() {
+ "".chars().fold(|_, _| (), ());
+ //~^ ERROR E0277
+}
diff --git a/tests/ui/issues/issue-23966.stderr b/tests/ui/issues/issue-23966.stderr
new file mode 100644
index 000000000..8f934481d
--- /dev/null
+++ b/tests/ui/issues/issue-23966.stderr
@@ -0,0 +1,15 @@
+error[E0277]: expected a `FnMut<(_, char)>` closure, found `()`
+ --> $DIR/issue-23966.rs:2:32
+ |
+LL | "".chars().fold(|_, _| (), ());
+ | ---- ^^ expected an `FnMut<(_, char)>` closure, found `()`
+ | |
+ | required by a bound introduced by this call
+ |
+ = help: the trait `FnMut<(_, char)>` is not implemented for `()`
+note: required by a bound in `fold`
+ --> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-23992.rs b/tests/ui/issues/issue-23992.rs
new file mode 100644
index 000000000..1ff44bd7f
--- /dev/null
+++ b/tests/ui/issues/issue-23992.rs
@@ -0,0 +1,19 @@
+// run-pass
+pub struct Outer<T: Trait>(T);
+pub struct Inner<'a> { value: &'a bool }
+
+pub trait Trait {
+ type Error;
+ fn ready(self) -> Self::Error;
+}
+
+impl<'a> Trait for Inner<'a> {
+ type Error = Outer<Inner<'a>>;
+ fn ready(self) -> Outer<Inner<'a>> { Outer(self) }
+}
+
+fn main() {
+ let value = true;
+ let inner = Inner { value: &value };
+ assert_eq!(inner.ready().0.value, &value);
+}
diff --git a/tests/ui/issues/issue-24013.rs b/tests/ui/issues/issue-24013.rs
new file mode 100644
index 000000000..c6d301671
--- /dev/null
+++ b/tests/ui/issues/issue-24013.rs
@@ -0,0 +1,7 @@
+fn main() {
+ use std::mem::{transmute, swap};
+ let a = 1;
+ let b = 2;
+ unsafe {swap::<&mut _>(transmute(&a), transmute(&b))};
+ //~^ ERROR type annotations needed
+}
diff --git a/tests/ui/issues/issue-24013.stderr b/tests/ui/issues/issue-24013.stderr
new file mode 100644
index 000000000..72102f460
--- /dev/null
+++ b/tests/ui/issues/issue-24013.stderr
@@ -0,0 +1,9 @@
+error[E0282]: type annotations needed
+ --> $DIR/issue-24013.rs:5:13
+ |
+LL | unsafe {swap::<&mut _>(transmute(&a), transmute(&b))};
+ | ^^^^^^^^^^^^^^ cannot infer type of the type parameter `T` declared on the function `swap`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-24036.rs b/tests/ui/issues/issue-24036.rs
new file mode 100644
index 000000000..7df036c8e
--- /dev/null
+++ b/tests/ui/issues/issue-24036.rs
@@ -0,0 +1,16 @@
+fn closure_to_loc() {
+ let mut x = |c| c + 1;
+ x = |c| c + 1;
+ //~^ ERROR mismatched types
+}
+
+fn closure_from_match() {
+ let x = match 1usize {
+ 1 => |c| c + 1,
+ 2 => |c| c - 1,
+ _ => |c| c - 1
+ };
+ //~^^^^ ERROR type annotations needed
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-24036.stderr b/tests/ui/issues/issue-24036.stderr
new file mode 100644
index 000000000..0e73a51fa
--- /dev/null
+++ b/tests/ui/issues/issue-24036.stderr
@@ -0,0 +1,28 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-24036.rs:3:9
+ |
+LL | let mut x = |c| c + 1;
+ | --- the expected closure
+LL | x = |c| c + 1;
+ | ^^^^^^^^^ expected closure, found a different closure
+ |
+ = note: expected closure `[closure@$DIR/issue-24036.rs:2:17: 2:20]`
+ found closure `[closure@$DIR/issue-24036.rs:3:9: 3:12]`
+ = note: no two closures, even if identical, have the same type
+ = help: consider boxing your closure and/or using it as a trait object
+
+error[E0282]: type annotations needed
+ --> $DIR/issue-24036.rs:9:15
+ |
+LL | 1 => |c| c + 1,
+ | ^
+ |
+help: consider giving this closure parameter an explicit type
+ |
+LL | 1 => |c: /* Type */| c + 1,
+ | ++++++++++++
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0282, E0308.
+For more information about an error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-24086.rs b/tests/ui/issues/issue-24086.rs
new file mode 100644
index 000000000..54622afbc
--- /dev/null
+++ b/tests/ui/issues/issue-24086.rs
@@ -0,0 +1,23 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(unused_mut)]
+#![allow(unused_variables)]
+pub struct Registry<'a> {
+ listener: &'a mut (),
+}
+
+pub struct Listener<'a> {
+ pub announce: Option<Box<dyn FnMut(&mut Registry) + 'a>>,
+ pub remove: Option<Box<dyn FnMut(&mut Registry) + 'a>>,
+}
+
+impl<'a> Drop for Registry<'a> {
+ fn drop(&mut self) {}
+}
+
+fn main() {
+ let mut registry_listener = Listener {
+ announce: None,
+ remove: None,
+ };
+}
diff --git a/tests/ui/issues/issue-2414-c.rs b/tests/ui/issues/issue-2414-c.rs
new file mode 100644
index 000000000..f6fe97980
--- /dev/null
+++ b/tests/ui/issues/issue-2414-c.rs
@@ -0,0 +1,9 @@
+// run-pass
+// aux-build:issue-2414-a.rs
+// aux-build:issue-2414-b.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate b;
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-24161.rs b/tests/ui/issues/issue-24161.rs
new file mode 100644
index 000000000..f4cdd982a
--- /dev/null
+++ b/tests/ui/issues/issue-24161.rs
@@ -0,0 +1,11 @@
+// check-pass
+#![allow(dead_code)]
+#[derive(Copy,Clone)]
+struct Functions {
+ a: fn(u32) -> u32,
+ b: extern "C" fn(u32) -> u32,
+ c: unsafe fn(u32) -> u32,
+ d: unsafe extern "C" fn(u32) -> u32
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-24227.rs b/tests/ui/issues/issue-24227.rs
new file mode 100644
index 000000000..12816c235
--- /dev/null
+++ b/tests/ui/issues/issue-24227.rs
@@ -0,0 +1,18 @@
+// check-pass
+// This resulted in an ICE. Test for future-proofing
+// Issue #24227
+
+#![allow(unused)]
+
+struct Foo<'a> {
+ x: &'a u8
+}
+
+impl<'a> Foo<'a> {
+ fn foo() {
+ let mut tmp: Self;
+ }
+
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-2428.rs b/tests/ui/issues/issue-2428.rs
new file mode 100644
index 000000000..94b830de3
--- /dev/null
+++ b/tests/ui/issues/issue-2428.rs
@@ -0,0 +1,14 @@
+// run-pass
+#![allow(non_upper_case_globals)]
+
+
+pub fn main() {
+ let _foo = 100;
+ const quux: isize = 5;
+
+ enum Stuff {
+ Bar = quux
+ }
+
+ assert_eq!(Stuff::Bar as isize, quux);
+}
diff --git a/tests/ui/issues/issue-24308.rs b/tests/ui/issues/issue-24308.rs
new file mode 100644
index 000000000..4a582c68e
--- /dev/null
+++ b/tests/ui/issues/issue-24308.rs
@@ -0,0 +1,17 @@
+// run-pass
+pub trait Foo {
+ fn method1() {}
+ fn method2();
+}
+
+struct Slice<'a, T: 'a>(#[allow(unused_tuple_struct_fields)] &'a [T]);
+
+impl<'a, T: 'a> Foo for Slice<'a, T> {
+ fn method2() {
+ <Self as Foo>::method1();
+ }
+}
+
+fn main() {
+ <Slice<()> as Foo>::method2();
+}
diff --git a/tests/ui/issues/issue-24322.rs b/tests/ui/issues/issue-24322.rs
new file mode 100644
index 000000000..6567fcab4
--- /dev/null
+++ b/tests/ui/issues/issue-24322.rs
@@ -0,0 +1,9 @@
+struct B;
+
+impl B {
+ fn func(&self) -> u32 { 42 }
+}
+
+fn main() {
+ let x: &fn(&B) -> u32 = &B::func; //~ ERROR mismatched types
+}
diff --git a/tests/ui/issues/issue-24322.stderr b/tests/ui/issues/issue-24322.stderr
new file mode 100644
index 000000000..1e4c8ac7c
--- /dev/null
+++ b/tests/ui/issues/issue-24322.stderr
@@ -0,0 +1,14 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-24322.rs:8:29
+ |
+LL | let x: &fn(&B) -> u32 = &B::func;
+ | -------------- ^^^^^^^^ expected fn pointer, found fn item
+ | |
+ | expected due to this
+ |
+ = note: expected reference `&for<'a> fn(&'a B) -> u32`
+ found reference `&for<'a> fn(&'a B) -> u32 {B::func}`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-24352.rs b/tests/ui/issues/issue-24352.rs
new file mode 100644
index 000000000..5c8246d17
--- /dev/null
+++ b/tests/ui/issues/issue-24352.rs
@@ -0,0 +1,4 @@
+fn main() {
+ 1.0f64 - 1.0;
+ 1.0f64 - 1 //~ ERROR E0277
+}
diff --git a/tests/ui/issues/issue-24352.stderr b/tests/ui/issues/issue-24352.stderr
new file mode 100644
index 000000000..1f51b6e29
--- /dev/null
+++ b/tests/ui/issues/issue-24352.stderr
@@ -0,0 +1,20 @@
+error[E0277]: cannot subtract `{integer}` from `f64`
+ --> $DIR/issue-24352.rs:3:12
+ |
+LL | 1.0f64 - 1
+ | ^ no implementation for `f64 - {integer}`
+ |
+ = help: the trait `Sub<{integer}>` is not implemented for `f64`
+ = help: the following other types implement trait `Sub<Rhs>`:
+ <&'a f64 as Sub<f64>>
+ <&f64 as Sub<&f64>>
+ <f64 as Sub<&f64>>
+ <f64 as Sub>
+help: consider using a floating-point literal by writing it with `.0`
+ |
+LL | 1.0f64 - 1.0
+ | ++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-24353.rs b/tests/ui/issues/issue-24353.rs
new file mode 100644
index 000000000..f78255b7e
--- /dev/null
+++ b/tests/ui/issues/issue-24353.rs
@@ -0,0 +1,8 @@
+// run-pass
+#![allow(unreachable_code)]
+fn main() {
+ return ();
+
+ let x = ();
+ x
+}
diff --git a/tests/ui/issues/issue-24357.rs b/tests/ui/issues/issue-24357.rs
new file mode 100644
index 000000000..152e69ebc
--- /dev/null
+++ b/tests/ui/issues/issue-24357.rs
@@ -0,0 +1,11 @@
+struct NoCopy;
+fn main() {
+ let x = NoCopy;
+ //~^ NOTE move occurs because `x` has type `NoCopy`
+ let f = move || { let y = x; };
+ //~^ NOTE value moved into closure here
+ //~| NOTE variable moved due to use in closure
+ let z = x;
+ //~^ ERROR use of moved value: `x`
+ //~| NOTE value used here after move
+}
diff --git a/tests/ui/issues/issue-24357.stderr b/tests/ui/issues/issue-24357.stderr
new file mode 100644
index 000000000..b9e15f5e2
--- /dev/null
+++ b/tests/ui/issues/issue-24357.stderr
@@ -0,0 +1,17 @@
+error[E0382]: use of moved value: `x`
+ --> $DIR/issue-24357.rs:8:12
+ |
+LL | let x = NoCopy;
+ | - move occurs because `x` has type `NoCopy`, which does not implement the `Copy` trait
+LL |
+LL | let f = move || { let y = x; };
+ | ------- - variable moved due to use in closure
+ | |
+ | value moved into closure here
+...
+LL | let z = x;
+ | ^ value used here after move
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0382`.
diff --git a/tests/ui/issues/issue-24363.rs b/tests/ui/issues/issue-24363.rs
new file mode 100644
index 000000000..34726fba9
--- /dev/null
+++ b/tests/ui/issues/issue-24363.rs
@@ -0,0 +1,6 @@
+fn main() {
+ 1.create_a_type_error[ //~ `{integer}` is a primitive type and therefore doesn't have fields
+ ()+() //~ ERROR cannot add
+ // ^ ensure that we typeck the inner expression ^
+ ];
+}
diff --git a/tests/ui/issues/issue-24363.stderr b/tests/ui/issues/issue-24363.stderr
new file mode 100644
index 000000000..16537e21a
--- /dev/null
+++ b/tests/ui/issues/issue-24363.stderr
@@ -0,0 +1,18 @@
+error[E0610]: `{integer}` is a primitive type and therefore doesn't have fields
+ --> $DIR/issue-24363.rs:2:7
+ |
+LL | 1.create_a_type_error[
+ | ^^^^^^^^^^^^^^^^^^^
+
+error[E0369]: cannot add `()` to `()`
+ --> $DIR/issue-24363.rs:3:11
+ |
+LL | ()+()
+ | --^-- ()
+ | |
+ | ()
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0369, E0610.
+For more information about an error, try `rustc --explain E0369`.
diff --git a/tests/ui/issues/issue-24365.rs b/tests/ui/issues/issue-24365.rs
new file mode 100644
index 000000000..eca104b6f
--- /dev/null
+++ b/tests/ui/issues/issue-24365.rs
@@ -0,0 +1,19 @@
+pub enum Attribute {
+ Code {attr_name_idx: u16},
+}
+
+pub enum Foo {
+ Bar
+}
+
+fn test(a: Foo) {
+ println!("{}", a.b); //~ no field `b` on type `Foo`
+}
+
+fn main() {
+ let x = Attribute::Code {
+ attr_name_idx: 42,
+ };
+ let z = (&x).attr_name_idx; //~ no field `attr_name_idx` on type `&Attribute`
+ let y = x.attr_name_idx; //~ no field `attr_name_idx` on type `Attribute`
+}
diff --git a/tests/ui/issues/issue-24365.stderr b/tests/ui/issues/issue-24365.stderr
new file mode 100644
index 000000000..f9eead8a4
--- /dev/null
+++ b/tests/ui/issues/issue-24365.stderr
@@ -0,0 +1,21 @@
+error[E0609]: no field `b` on type `Foo`
+ --> $DIR/issue-24365.rs:10:22
+ |
+LL | println!("{}", a.b);
+ | ^
+
+error[E0609]: no field `attr_name_idx` on type `&Attribute`
+ --> $DIR/issue-24365.rs:17:18
+ |
+LL | let z = (&x).attr_name_idx;
+ | ^^^^^^^^^^^^^
+
+error[E0609]: no field `attr_name_idx` on type `Attribute`
+ --> $DIR/issue-24365.rs:18:15
+ |
+LL | let y = x.attr_name_idx;
+ | ^^^^^^^^^^^^^
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0609`.
diff --git a/tests/ui/issues/issue-24389.rs b/tests/ui/issues/issue-24389.rs
new file mode 100644
index 000000000..7cc761176
--- /dev/null
+++ b/tests/ui/issues/issue-24389.rs
@@ -0,0 +1,11 @@
+// check-pass
+#![allow(dead_code)]
+
+struct Foo;
+
+impl Foo {
+ fn new() -> Self { Foo }
+ fn bar() { Self::new(); }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-24424.rs b/tests/ui/issues/issue-24424.rs
new file mode 100644
index 000000000..22bf513af
--- /dev/null
+++ b/tests/ui/issues/issue-24424.rs
@@ -0,0 +1,7 @@
+trait Trait1<'l0, T0> {}
+trait Trait0<'l0> {}
+
+impl <'l0, 'l1, T0> Trait1<'l0, T0> for bool where T0 : Trait0<'l0>, T0 : Trait0<'l1> {}
+//~^ ERROR type annotations needed
+
+fn main() {}
diff --git a/tests/ui/issues/issue-24424.stderr b/tests/ui/issues/issue-24424.stderr
new file mode 100644
index 000000000..50d7f988e
--- /dev/null
+++ b/tests/ui/issues/issue-24424.stderr
@@ -0,0 +1,15 @@
+error[E0283]: type annotations needed: cannot satisfy `T0: Trait0<'l0>`
+ --> $DIR/issue-24424.rs:4:57
+ |
+LL | impl <'l0, 'l1, T0> Trait1<'l0, T0> for bool where T0 : Trait0<'l0>, T0 : Trait0<'l1> {}
+ | ^^^^^^^^^^^
+ |
+note: multiple `impl`s or `where` clauses satisfying `T0: Trait0<'l0>` found
+ --> $DIR/issue-24424.rs:4:57
+ |
+LL | impl <'l0, 'l1, T0> Trait1<'l0, T0> for bool where T0 : Trait0<'l0>, T0 : Trait0<'l1> {}
+ | ^^^^^^^^^^^ ^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0283`.
diff --git a/tests/ui/issues/issue-24434.rs b/tests/ui/issues/issue-24434.rs
new file mode 100644
index 000000000..4c1bfc03c
--- /dev/null
+++ b/tests/ui/issues/issue-24434.rs
@@ -0,0 +1,7 @@
+// check-pass
+// compile-flags:--cfg set1
+
+#![cfg_attr(set1, feature(rustc_attrs))]
+#![rustc_dummy]
+
+fn main() {}
diff --git a/tests/ui/issues/issue-24446.rs b/tests/ui/issues/issue-24446.rs
new file mode 100644
index 000000000..9ab952ade
--- /dev/null
+++ b/tests/ui/issues/issue-24446.rs
@@ -0,0 +1,7 @@
+fn main() {
+ static foo: dyn Fn() -> u32 = || -> u32 {
+ //~^ ERROR the size for values of type
+ //~| ERROR cannot be shared between threads safely
+ 0
+ };
+}
diff --git a/tests/ui/issues/issue-24446.stderr b/tests/ui/issues/issue-24446.stderr
new file mode 100644
index 000000000..4afb87c48
--- /dev/null
+++ b/tests/ui/issues/issue-24446.stderr
@@ -0,0 +1,20 @@
+error[E0277]: the size for values of type `(dyn Fn() -> u32 + 'static)` cannot be known at compilation time
+ --> $DIR/issue-24446.rs:2:17
+ |
+LL | static foo: dyn Fn() -> u32 = || -> u32 {
+ | ^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `(dyn Fn() -> u32 + 'static)`
+
+error[E0277]: `(dyn Fn() -> u32 + 'static)` cannot be shared between threads safely
+ --> $DIR/issue-24446.rs:2:17
+ |
+LL | static foo: dyn Fn() -> u32 = || -> u32 {
+ | ^^^^^^^^^^^^^^^ `(dyn Fn() -> u32 + 'static)` cannot be shared between threads safely
+ |
+ = help: the trait `Sync` is not implemented for `(dyn Fn() -> u32 + 'static)`
+ = note: shared static variables must have a type that implements `Sync`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-2445-b.rs b/tests/ui/issues/issue-2445-b.rs
new file mode 100644
index 000000000..f369eae3a
--- /dev/null
+++ b/tests/ui/issues/issue-2445-b.rs
@@ -0,0 +1,31 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(non_camel_case_types)]
+
+// pretty-expanded FIXME #23616
+
+struct c1<T> {
+ x: T,
+}
+
+impl<T> c1<T> {
+ pub fn f1(&self, _x: isize) {
+ }
+}
+
+fn c1<T>(x: T) -> c1<T> {
+ c1 {
+ x: x
+ }
+}
+
+impl<T> c1<T> {
+ pub fn f2(&self, _x: isize) {
+ }
+}
+
+
+pub fn main() {
+ c1::<isize>(3).f1(4);
+ c1::<isize>(3).f2(4);
+}
diff --git a/tests/ui/issues/issue-2445.rs b/tests/ui/issues/issue-2445.rs
new file mode 100644
index 000000000..5730ce165
--- /dev/null
+++ b/tests/ui/issues/issue-2445.rs
@@ -0,0 +1,29 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(non_camel_case_types)]
+
+// pretty-expanded FIXME #23616
+
+struct c1<T> {
+ x: T,
+}
+
+impl<T> c1<T> {
+ pub fn f1(&self, _x: T) {}
+}
+
+fn c1<T>(x: T) -> c1<T> {
+ c1 {
+ x: x
+ }
+}
+
+impl<T> c1<T> {
+ pub fn f2(&self, _x: T) {}
+}
+
+
+pub fn main() {
+ c1::<isize>(3).f1(4);
+ c1::<isize>(3).f2(4);
+}
diff --git a/tests/ui/issues/issue-24533.rs b/tests/ui/issues/issue-24533.rs
new file mode 100644
index 000000000..8592bf430
--- /dev/null
+++ b/tests/ui/issues/issue-24533.rs
@@ -0,0 +1,24 @@
+// run-pass
+#![allow(unused_must_use)]
+use std::slice::Iter;
+use std::io::{Error, ErrorKind, Result};
+use std::vec::*;
+
+fn foo(it: &mut Iter<u8>) -> Result<u8> {
+ Ok(*it.next().unwrap())
+}
+
+fn bar() -> Result<u8> {
+ let data: Vec<u8> = Vec::new();
+
+ if true {
+ return Err(Error::new(ErrorKind::NotFound, "msg"));
+ }
+
+ let mut it = data.iter();
+ foo(&mut it)
+}
+
+fn main() {
+ bar();
+}
diff --git a/tests/ui/issues/issue-24589.rs b/tests/ui/issues/issue-24589.rs
new file mode 100644
index 000000000..6b03e14f9
--- /dev/null
+++ b/tests/ui/issues/issue-24589.rs
@@ -0,0 +1,17 @@
+// run-pass
+pub struct _X([u8]);
+
+impl std::ops::Deref for _X {
+ type Target = [u8];
+
+ fn deref(&self) -> &[u8] {
+ &self.0
+ }
+}
+
+pub fn _g(x: &_X) -> &[u8] {
+ x
+}
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-2463.rs b/tests/ui/issues/issue-2463.rs
new file mode 100644
index 000000000..d24a47c53
--- /dev/null
+++ b/tests/ui/issues/issue-2463.rs
@@ -0,0 +1,25 @@
+// run-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+struct Pair { f: isize, g: isize }
+
+pub fn main() {
+
+ let x = Pair {
+ f: 0,
+ g: 0,
+ };
+
+ let _y = Pair {
+ f: 1,
+ g: 1,
+ .. x
+ };
+
+ let _z = Pair {
+ f: 1,
+ .. x
+ };
+
+}
diff --git a/tests/ui/issues/issue-24682.rs b/tests/ui/issues/issue-24682.rs
new file mode 100644
index 000000000..0d1ab7341
--- /dev/null
+++ b/tests/ui/issues/issue-24682.rs
@@ -0,0 +1,21 @@
+trait A: Sized {
+ type N;
+ fn x() ->
+ Self<
+ N= //~ ERROR associated type bindings are not allowed here
+ Self::N> {
+ loop {}
+ }
+ fn y(&self) ->
+ std
+ <N=()> //~ ERROR associated type bindings are not allowed here
+ ::option::Option<()>
+ { None }
+ fn z(&self) ->
+ u32<N=()> //~ ERROR associated type bindings are not allowed here
+ { 42 }
+
+}
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-24682.stderr b/tests/ui/issues/issue-24682.stderr
new file mode 100644
index 000000000..e1943bf4d
--- /dev/null
+++ b/tests/ui/issues/issue-24682.stderr
@@ -0,0 +1,22 @@
+error[E0229]: associated type bindings are not allowed here
+ --> $DIR/issue-24682.rs:5:11
+ |
+LL | / N=
+LL | | Self::N> {
+ | |_________________^ associated type not allowed here
+
+error[E0229]: associated type bindings are not allowed here
+ --> $DIR/issue-24682.rs:11:13
+ |
+LL | <N=()>
+ | ^^^^ associated type not allowed here
+
+error[E0229]: associated type bindings are not allowed here
+ --> $DIR/issue-24682.rs:15:13
+ |
+LL | u32<N=()>
+ | ^^^^ associated type not allowed here
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0229`.
diff --git a/tests/ui/issues/issue-24687-embed-debuginfo/auxiliary/issue-24687-lib.rs b/tests/ui/issues/issue-24687-embed-debuginfo/auxiliary/issue-24687-lib.rs
new file mode 100644
index 000000000..5b1b1389c
--- /dev/null
+++ b/tests/ui/issues/issue-24687-embed-debuginfo/auxiliary/issue-24687-lib.rs
@@ -0,0 +1,10 @@
+#![crate_type="lib"]
+
+// This is a file that pulls in a separate file as a submodule, where
+// that separate file has many multi-byte characters, to try to
+// encourage the compiler to trip on them.
+
+#[path = "issue-24687-mbcs-in-comments.rs"]
+mod issue_24687_mbcs_in_comments;
+
+pub use issue_24687_mbcs_in_comments::D;
diff --git a/tests/ui/issues/issue-24687-embed-debuginfo/auxiliary/issue-24687-mbcs-in-comments.rs b/tests/ui/issues/issue-24687-embed-debuginfo/auxiliary/issue-24687-mbcs-in-comments.rs
new file mode 100644
index 000000000..215145a64
--- /dev/null
+++ b/tests/ui/issues/issue-24687-embed-debuginfo/auxiliary/issue-24687-mbcs-in-comments.rs
@@ -0,0 +1,27 @@
+use std::fmt;
+
+// This ia file with many multi-byte characters, to try to encourage
+// the compiler to trip on them. The Drop implementation below will
+// need to have its source location embedded into the debug info for
+// the output file.
+
+// αααααααααααααααααααααααααααααααααααααααααααααααααααααααααααααααααααααα
+// ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+// γγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγ
+// δδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδ
+// εεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεε
+
+// ζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζ
+// ηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηη
+// θθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθ
+// ιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιι
+// κκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκ
+
+pub struct D<X:fmt::Debug>(pub X);
+
+impl<X:fmt::Debug> Drop for D<X> {
+ fn drop(&mut self) {
+ // λλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλ
+ println!("Dropping D({:?})", self.0);
+ }
+}
diff --git a/tests/ui/issues/issue-24687-embed-debuginfo/main.rs b/tests/ui/issues/issue-24687-embed-debuginfo/main.rs
new file mode 100644
index 000000000..f08bcdfe6
--- /dev/null
+++ b/tests/ui/issues/issue-24687-embed-debuginfo/main.rs
@@ -0,0 +1,14 @@
+// run-pass
+// aux-build:issue-24687-lib.rs
+// compile-flags:-g
+// ignore-asmjs wasm2js does not support source maps yet
+
+extern crate issue_24687_lib as d;
+
+fn main() {
+ // Create a `D`, which has a destructor whose body will be codegen'ed
+ // into the generated code here, and thus the local debuginfo will
+ // need references into the original source locations from
+ // `importer` above.
+ let _d = d::D("Hi");
+}
diff --git a/tests/ui/issues/issue-2470-bounds-check-overflow.rs b/tests/ui/issues/issue-2470-bounds-check-overflow.rs
new file mode 100644
index 000000000..f0e8e185e
--- /dev/null
+++ b/tests/ui/issues/issue-2470-bounds-check-overflow.rs
@@ -0,0 +1,27 @@
+// run-fail
+// error-pattern:index out of bounds
+// ignore-emscripten no processes
+
+use std::mem;
+
+fn main() {
+
+ // This should cause a bounds-check panic, but may not if we do our
+ // bounds checking by comparing the scaled index to the vector's
+ // address-bounds, since we've scaled the index to wrap around to the
+ // address of the 0th cell in the array (even though the index is
+ // huge).
+
+ let x = vec![1_usize, 2_usize, 3_usize];
+
+ let base = x.as_ptr() as usize;
+ let idx = base / mem::size_of::<usize>();
+ println!("ov1 base = 0x{:x}", base);
+ println!("ov1 idx = 0x{:x}", idx);
+ println!("ov1 sizeof::<usize>() = 0x{:x}", mem::size_of::<usize>());
+ println!("ov1 idx * sizeof::<usize>() = 0x{:x}",
+ idx * mem::size_of::<usize>());
+
+ // This should panic.
+ println!("ov1 0x{:x}", x[idx]);
+}
diff --git a/tests/ui/issues/issue-2472.rs b/tests/ui/issues/issue-2472.rs
new file mode 100644
index 000000000..c790bc2d0
--- /dev/null
+++ b/tests/ui/issues/issue-2472.rs
@@ -0,0 +1,14 @@
+// run-pass
+// aux-build:issue-2472-b.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_2472_b;
+
+use issue_2472_b::{S, T};
+
+pub fn main() {
+ let s = S(());
+ s.foo();
+ s.bar();
+}
diff --git a/tests/ui/issues/issue-24779.rs b/tests/ui/issues/issue-24779.rs
new file mode 100644
index 000000000..f1283d0dc
--- /dev/null
+++ b/tests/ui/issues/issue-24779.rs
@@ -0,0 +1,4 @@
+// run-pass
+fn main() {
+ assert_eq!((||||42)()(), 42);
+}
diff --git a/tests/ui/issues/issue-24819.rs b/tests/ui/issues/issue-24819.rs
new file mode 100644
index 000000000..59c3f2cd1
--- /dev/null
+++ b/tests/ui/issues/issue-24819.rs
@@ -0,0 +1,11 @@
+use std::collections::HashSet;
+
+fn main() {
+ let mut v = Vec::new();
+ foo(&mut v);
+ //~^ ERROR mismatched types
+ //~| expected struct `HashSet`, found struct `Vec`
+}
+
+fn foo(h: &mut HashSet<u32>) {
+}
diff --git a/tests/ui/issues/issue-24819.stderr b/tests/ui/issues/issue-24819.stderr
new file mode 100644
index 000000000..982a11fef
--- /dev/null
+++ b/tests/ui/issues/issue-24819.stderr
@@ -0,0 +1,19 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-24819.rs:5:9
+ |
+LL | foo(&mut v);
+ | --- ^^^^^^ expected struct `HashSet`, found struct `Vec`
+ | |
+ | arguments to this function are incorrect
+ |
+ = note: expected mutable reference `&mut HashSet<u32>`
+ found mutable reference `&mut Vec<_>`
+note: function defined here
+ --> $DIR/issue-24819.rs:10:4
+ |
+LL | fn foo(h: &mut HashSet<u32>) {
+ | ^^^ --------------------
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-2487-a.rs b/tests/ui/issues/issue-2487-a.rs
new file mode 100644
index 000000000..fe12dad74
--- /dev/null
+++ b/tests/ui/issues/issue-2487-a.rs
@@ -0,0 +1,32 @@
+// build-pass
+#![allow(dead_code)]
+#![allow(non_camel_case_types)]
+
+// pretty-expanded FIXME #23616
+
+struct socket {
+ sock: isize,
+
+}
+
+impl Drop for socket {
+ fn drop(&mut self) {}
+}
+
+impl socket {
+ pub fn set_identity(&self) {
+ closure(|| setsockopt_bytes(self.sock.clone()))
+ }
+}
+
+fn socket() -> socket {
+ socket {
+ sock: 1
+ }
+}
+
+fn closure<F>(f: F) where F: FnOnce() { f() }
+
+fn setsockopt_bytes(_sock: isize) { }
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-24945-repeat-dash-opts.rs b/tests/ui/issues/issue-24945-repeat-dash-opts.rs
new file mode 100644
index 000000000..0f92fc2f7
--- /dev/null
+++ b/tests/ui/issues/issue-24945-repeat-dash-opts.rs
@@ -0,0 +1,10 @@
+// run-pass
+// This test is just checking that we continue to accept `-g -g -O -O`
+// as options to the compiler.
+
+// compile-flags:-g -g -O -O
+// ignore-asmjs wasm2js does not support source maps yet
+
+fn main() {
+ assert_eq!(1, 1);
+}
diff --git a/tests/ui/issues/issue-24947.rs b/tests/ui/issues/issue-24947.rs
new file mode 100644
index 000000000..23705b4c9
--- /dev/null
+++ b/tests/ui/issues/issue-24947.rs
@@ -0,0 +1,25 @@
+// run-pass
+// #24947 ICE using a trait-associated const in an array size
+
+
+struct Foo;
+
+impl Foo {
+ const SIZE: usize = 8;
+}
+
+trait Bar {
+ const BAR_SIZE: usize;
+}
+
+impl Bar for Foo {
+ const BAR_SIZE: usize = 12;
+}
+
+#[allow(unused_variables)]
+fn main() {
+ let w: [u8; 12] = [0u8; <Foo as Bar>::BAR_SIZE];
+ let x: [u8; 12] = [0u8; <Foo>::BAR_SIZE];
+ let y: [u8; 8] = [0u8; <Foo>::SIZE];
+ let z: [u8; 8] = [0u8; Foo::SIZE];
+}
diff --git a/tests/ui/issues/issue-24954.rs b/tests/ui/issues/issue-24954.rs
new file mode 100644
index 000000000..0177dd4ea
--- /dev/null
+++ b/tests/ui/issues/issue-24954.rs
@@ -0,0 +1,13 @@
+// run-pass
+macro_rules! foo {
+ ($y:expr) => ({
+ $y = 2;
+ })
+}
+
+#[allow(unused_variables)]
+#[allow(unused_assignments)]
+fn main() {
+ let mut x = 1;
+ foo!(x);
+}
diff --git a/tests/ui/issues/issue-2502.rs b/tests/ui/issues/issue-2502.rs
new file mode 100644
index 000000000..631510024
--- /dev/null
+++ b/tests/ui/issues/issue-2502.rs
@@ -0,0 +1,24 @@
+// check-pass
+#![allow(dead_code)]
+#![allow(non_camel_case_types)]
+
+
+// pretty-expanded FIXME #23616
+
+struct font<'a> {
+ fontbuf: &'a Vec<u8> ,
+}
+
+impl<'a> font<'a> {
+ pub fn buf(&self) -> &'a Vec<u8> {
+ self.fontbuf
+ }
+}
+
+fn font(fontbuf: &Vec<u8> ) -> font {
+ font {
+ fontbuf: fontbuf
+ }
+}
+
+pub fn main() { }
diff --git a/tests/ui/issues/issue-25076.rs b/tests/ui/issues/issue-25076.rs
new file mode 100644
index 000000000..6c5a55392
--- /dev/null
+++ b/tests/ui/issues/issue-25076.rs
@@ -0,0 +1,11 @@
+struct S;
+
+trait InOut<T> { type Out; }
+
+fn do_fold<B, F: InOut<B, Out=B>>(init: B, f: F) {}
+
+fn bot<T>() -> T { loop {} }
+
+fn main() {
+ do_fold(bot(), ()); //~ ERROR `(): InOut<_>` is not satisfied
+}
diff --git a/tests/ui/issues/issue-25076.stderr b/tests/ui/issues/issue-25076.stderr
new file mode 100644
index 000000000..159cc484c
--- /dev/null
+++ b/tests/ui/issues/issue-25076.stderr
@@ -0,0 +1,17 @@
+error[E0277]: the trait bound `(): InOut<_>` is not satisfied
+ --> $DIR/issue-25076.rs:10:20
+ |
+LL | do_fold(bot(), ());
+ | ------- ^^ the trait `InOut<_>` is not implemented for `()`
+ | |
+ | required by a bound introduced by this call
+ |
+note: required by a bound in `do_fold`
+ --> $DIR/issue-25076.rs:5:18
+ |
+LL | fn do_fold<B, F: InOut<B, Out=B>>(init: B, f: F) {}
+ | ^^^^^^^^^^^^^^^ required by this bound in `do_fold`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-25089.rs b/tests/ui/issues/issue-25089.rs
new file mode 100644
index 000000000..c988f8f55
--- /dev/null
+++ b/tests/ui/issues/issue-25089.rs
@@ -0,0 +1,34 @@
+// run-pass
+// needs-unwind
+// ignore-emscripten no threads support
+
+use std::thread;
+
+struct Foo(#[allow(unused_tuple_struct_fields)] i32);
+
+impl Drop for Foo {
+ fn drop(&mut self) {
+ static mut DROPPED: bool = false;
+ unsafe {
+ assert!(!DROPPED);
+ DROPPED = true;
+ }
+ }
+}
+
+struct Empty;
+
+fn empty() -> Empty { Empty }
+
+fn should_panic(_: Foo, _: Empty) {
+ panic!("test panic");
+}
+
+fn test() {
+ should_panic(Foo(1), empty());
+}
+
+fn main() {
+ let ret = thread::spawn(test).join();
+ assert!(ret.is_err());
+}
diff --git a/tests/ui/issues/issue-25145.rs b/tests/ui/issues/issue-25145.rs
new file mode 100644
index 000000000..f5ae28fbb
--- /dev/null
+++ b/tests/ui/issues/issue-25145.rs
@@ -0,0 +1,13 @@
+// run-pass
+
+struct S;
+
+impl S {
+ const N: usize = 3;
+}
+
+static STUFF: [u8; S::N] = [0; S::N];
+
+fn main() {
+ assert_eq!(STUFF, [0; 3]);
+}
diff --git a/tests/ui/issues/issue-25180.rs b/tests/ui/issues/issue-25180.rs
new file mode 100644
index 000000000..29dc07f49
--- /dev/null
+++ b/tests/ui/issues/issue-25180.rs
@@ -0,0 +1,7 @@
+// check-pass
+#![allow(dead_code)]
+#![allow(non_upper_case_globals)]
+
+const x: &'static dyn Fn() = &|| println!("ICE here");
+
+fn main() {}
diff --git a/tests/ui/issues/issue-25185.rs b/tests/ui/issues/issue-25185.rs
new file mode 100644
index 000000000..383c9a1e9
--- /dev/null
+++ b/tests/ui/issues/issue-25185.rs
@@ -0,0 +1,13 @@
+// run-pass
+// aux-build:issue-25185-1.rs
+// aux-build:issue-25185-2.rs
+// ignore-wasm32-bare no libc for ffi testing
+
+extern crate issue_25185_2;
+
+fn main() {
+ let x = unsafe {
+ issue_25185_2::rust_dbg_extern_identity_u32(1)
+ };
+ assert_eq!(x, 1);
+}
diff --git a/tests/ui/issues/issue-2526-a.rs b/tests/ui/issues/issue-2526-a.rs
new file mode 100644
index 000000000..f3fdc0bd3
--- /dev/null
+++ b/tests/ui/issues/issue-2526-a.rs
@@ -0,0 +1,11 @@
+// run-pass
+// aux-build:issue-2526.rs
+
+// pretty-expanded FIXME #23616
+
+#![allow(unused_imports)]
+
+extern crate issue_2526;
+use issue_2526::*;
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-25279.rs b/tests/ui/issues/issue-25279.rs
new file mode 100644
index 000000000..fdc516d37
--- /dev/null
+++ b/tests/ui/issues/issue-25279.rs
@@ -0,0 +1,16 @@
+// run-pass
+struct S<'a>(&'a ());
+
+impl<'a> S<'a> {
+ fn foo(self) -> &'a () {
+ <Self>::bar(self)
+ }
+
+ fn bar(self) -> &'a () {
+ self.0
+ }
+}
+
+fn main() {
+ S(&()).foo();
+}
diff --git a/tests/ui/issues/issue-25343.rs b/tests/ui/issues/issue-25343.rs
new file mode 100644
index 000000000..95a0bd915
--- /dev/null
+++ b/tests/ui/issues/issue-25343.rs
@@ -0,0 +1,22 @@
+// run-pass
+#[allow(unused)]
+fn main() {
+ || {
+ 'label: loop {
+ }
+ };
+
+ // More cases added from issue 31754
+
+ 'label2: loop {
+ break;
+ }
+
+ let closure = || {
+ 'label2: loop {}
+ };
+
+ fn inner_fn() {
+ 'label2: loop {}
+ }
+}
diff --git a/tests/ui/issues/issue-25368.rs b/tests/ui/issues/issue-25368.rs
new file mode 100644
index 000000000..4be83457f
--- /dev/null
+++ b/tests/ui/issues/issue-25368.rs
@@ -0,0 +1,14 @@
+use std::sync::mpsc::channel;
+use std::thread::spawn;
+use std::marker::PhantomData;
+
+struct Foo<T> {foo: PhantomData<T>}
+
+fn main() {
+ let (tx, rx) =
+ channel();
+ spawn(move || {
+ tx.send(Foo{ foo: PhantomData });
+ //~^ ERROR type annotations needed
+ });
+}
diff --git a/tests/ui/issues/issue-25368.stderr b/tests/ui/issues/issue-25368.stderr
new file mode 100644
index 000000000..e6ed3aac7
--- /dev/null
+++ b/tests/ui/issues/issue-25368.stderr
@@ -0,0 +1,14 @@
+error[E0282]: type annotations needed
+ --> $DIR/issue-25368.rs:11:27
+ |
+LL | tx.send(Foo{ foo: PhantomData });
+ | ^^^^^^^^^^^ cannot infer type of the type parameter `T` declared on the struct `PhantomData`
+ |
+help: consider specifying the generic argument
+ |
+LL | tx.send(Foo{ foo: PhantomData::<T> });
+ | +++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-25386.rs b/tests/ui/issues/issue-25386.rs
new file mode 100644
index 000000000..b26cc7768
--- /dev/null
+++ b/tests/ui/issues/issue-25386.rs
@@ -0,0 +1,27 @@
+mod stuff {
+ pub struct Item {
+ c_object: Box<CObj>,
+ }
+ pub struct CObj {
+ name: Option<String>,
+ }
+ impl Item {
+ pub fn new() -> Item {
+ Item {
+ c_object: Box::new(CObj { name: None }),
+ }
+ }
+ }
+}
+
+macro_rules! check_ptr_exist {
+ ($var:expr, $member:ident) => (
+ (*$var.c_object).$member.is_some()
+ //~^ ERROR field `c_object` of struct `Item` is private
+ );
+}
+
+fn main() {
+ let item = stuff::Item::new();
+ println!("{}", check_ptr_exist!(item, name));
+}
diff --git a/tests/ui/issues/issue-25386.stderr b/tests/ui/issues/issue-25386.stderr
new file mode 100644
index 000000000..727b96908
--- /dev/null
+++ b/tests/ui/issues/issue-25386.stderr
@@ -0,0 +1,14 @@
+error[E0616]: field `c_object` of struct `Item` is private
+ --> $DIR/issue-25386.rs:19:16
+ |
+LL | (*$var.c_object).$member.is_some()
+ | ^^^^^^^^ private field
+...
+LL | println!("{}", check_ptr_exist!(item, name));
+ | ---------------------------- in this macro invocation
+ |
+ = note: this error originates in the macro `check_ptr_exist` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0616`.
diff --git a/tests/ui/issues/issue-25394.rs b/tests/ui/issues/issue-25394.rs
new file mode 100644
index 000000000..2f0ae19fc
--- /dev/null
+++ b/tests/ui/issues/issue-25394.rs
@@ -0,0 +1,6 @@
+// check-pass
+#![allow(dead_code)]
+#[derive(Debug)]
+struct Row<T>([T]);
+
+fn main() {}
diff --git a/tests/ui/issues/issue-25439.rs b/tests/ui/issues/issue-25439.rs
new file mode 100644
index 000000000..4f73ff3e3
--- /dev/null
+++ b/tests/ui/issues/issue-25439.rs
@@ -0,0 +1,9 @@
+struct Helper<'a, F: 'a>(&'a F);
+
+fn fix<F>(f: F) -> i32 where F: Fn(Helper<F>, i32) -> i32 {
+ f(Helper(&f), 8)
+}
+
+fn main() {
+ fix(|_, x| x); //~ ERROR closure/generator type that references itself [E0644]
+}
diff --git a/tests/ui/issues/issue-25439.stderr b/tests/ui/issues/issue-25439.stderr
new file mode 100644
index 000000000..dadae23fd
--- /dev/null
+++ b/tests/ui/issues/issue-25439.stderr
@@ -0,0 +1,19 @@
+error[E0644]: closure/generator type that references itself
+ --> $DIR/issue-25439.rs:8:9
+ |
+LL | fix(|_, x| x);
+ | ^^^^^^ cyclic type of infinite size
+ |
+ = note: closures cannot capture themselves or take themselves as argument;
+ this error may be the result of a recent compiler bug-fix,
+ see issue #46062 <https://github.com/rust-lang/rust/issues/46062>
+ for more information
+note: required by a bound in `fix`
+ --> $DIR/issue-25439.rs:3:33
+ |
+LL | fn fix<F>(f: F) -> i32 where F: Fn(Helper<F>, i32) -> i32 {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `fix`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0644`.
diff --git a/tests/ui/issues/issue-25467.rs b/tests/ui/issues/issue-25467.rs
new file mode 100644
index 000000000..31ac5f0f3
--- /dev/null
+++ b/tests/ui/issues/issue-25467.rs
@@ -0,0 +1,12 @@
+// run-pass
+#![allow(unused_variables)]
+// aux-build:issue-25467.rs
+
+pub type Issue25467BarT = ();
+pub type Issue25467FooT = ();
+
+extern crate issue_25467 as aux;
+
+fn main() {
+ let o: aux::Object = None;
+}
diff --git a/tests/ui/issues/issue-25497.rs b/tests/ui/issues/issue-25497.rs
new file mode 100644
index 000000000..25f5ab90f
--- /dev/null
+++ b/tests/ui/issues/issue-25497.rs
@@ -0,0 +1,19 @@
+// run-pass
+#[derive(Clone, Debug, PartialEq)]
+enum Expression {
+ Dummy,
+ Add(Box<Expression>),
+}
+
+use Expression::*;
+
+fn simplify(exp: Expression) -> Expression {
+ match exp {
+ Add(n) => *n.clone(),
+ _ => Dummy
+ }
+}
+
+fn main() {
+ assert_eq!(simplify(Add(Box::new(Dummy))), Dummy);
+}
diff --git a/tests/ui/issues/issue-2550.rs b/tests/ui/issues/issue-2550.rs
new file mode 100644
index 000000000..04ec66b80
--- /dev/null
+++ b/tests/ui/issues/issue-2550.rs
@@ -0,0 +1,22 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(non_snake_case)]
+
+// pretty-expanded FIXME #23616
+
+struct C {
+ x: usize,
+}
+
+fn C(x: usize) -> C {
+ C {
+ x: x
+ }
+}
+
+fn f<T>(_x: T) {
+}
+
+pub fn main() {
+ f(C(1));
+}
diff --git a/tests/ui/issues/issue-25515.rs b/tests/ui/issues/issue-25515.rs
new file mode 100644
index 000000000..e7b9ea3ac
--- /dev/null
+++ b/tests/ui/issues/issue-25515.rs
@@ -0,0 +1,20 @@
+// run-pass
+use std::rc::Rc;
+
+struct Foo<'r>(&'r mut i32);
+
+impl<'r> Drop for Foo<'r> {
+ fn drop(&mut self) {
+ *self.0 += 1;
+ }
+}
+
+fn main() {
+ let mut drops = 0;
+
+ {
+ let _: Rc<dyn Send> = Rc::new(Foo(&mut drops));
+ }
+
+ assert_eq!(1, drops);
+}
diff --git a/tests/ui/issues/issue-25549-multiple-drop.rs b/tests/ui/issues/issue-25549-multiple-drop.rs
new file mode 100644
index 000000000..25a2da707
--- /dev/null
+++ b/tests/ui/issues/issue-25549-multiple-drop.rs
@@ -0,0 +1,33 @@
+// run-pass
+#![allow(unused_variables)]
+struct Foo<'r>(&'r mut i32);
+
+impl<'r> Drop for Foo<'r> {
+ fn drop(&mut self) {
+ *self.0 += 1;
+ }
+}
+
+trait Trait {}
+impl<'r> Trait for Foo<'r> {}
+
+struct Holder<T: ?Sized>(T);
+
+fn main() {
+ let mut drops = 0;
+
+ {
+ let y = &Holder([Foo(&mut drops)]) as &Holder<[Foo]>;
+ // this used to cause an extra drop of the Foo instance
+ let x = &y.0;
+ }
+ assert_eq!(1, drops);
+
+ drops = 0;
+ {
+ let y = &Holder(Foo(&mut drops)) as &Holder<dyn Trait>;
+ // this used to cause an extra drop of the Foo instance
+ let x = &y.0;
+ }
+ assert_eq!(1, drops);
+}
diff --git a/tests/ui/issues/issue-25579.rs b/tests/ui/issues/issue-25579.rs
new file mode 100644
index 000000000..5f5a0f4d2
--- /dev/null
+++ b/tests/ui/issues/issue-25579.rs
@@ -0,0 +1,20 @@
+// check-pass
+
+enum Sexpression {
+ Num(()),
+ Cons(&'static mut Sexpression)
+}
+
+fn causes_error_in_ast(mut l: &mut Sexpression) {
+ loop { match l {
+ &mut Sexpression::Num(ref mut n) => {},
+ &mut Sexpression::Cons(ref mut expr) => {
+ l = &mut **expr;
+ }
+ }}
+}
+
+
+fn main() {
+ causes_error_in_ast(&mut Sexpression::Num(()));
+}
diff --git a/tests/ui/issues/issue-25679.rs b/tests/ui/issues/issue-25679.rs
new file mode 100644
index 000000000..b548da988
--- /dev/null
+++ b/tests/ui/issues/issue-25679.rs
@@ -0,0 +1,20 @@
+// run-pass
+trait Device {
+ type Resources;
+}
+#[allow(unused_tuple_struct_fields)]
+struct Foo<D, R>(D, R);
+
+impl<D: Device> Foo<D, D::Resources> {
+ fn present(&self) {}
+}
+
+struct Res;
+struct Dev;
+
+impl Device for Dev { type Resources = Res; }
+
+fn main() {
+ let foo = Foo(Dev, Res);
+ foo.present();
+}
diff --git a/tests/ui/issues/issue-25693.rs b/tests/ui/issues/issue-25693.rs
new file mode 100644
index 000000000..9af0ba100
--- /dev/null
+++ b/tests/ui/issues/issue-25693.rs
@@ -0,0 +1,22 @@
+// run-pass
+#![allow(unused_variables)]
+pub trait Parameters { type SelfRef; }
+
+struct RP<'a> { _marker: std::marker::PhantomData<&'a ()> }
+struct BP;
+
+impl<'a> Parameters for RP<'a> { type SelfRef = &'a X<RP<'a>>; }
+impl Parameters for BP { type SelfRef = Box<X<BP>>; }
+
+pub struct Y;
+pub enum X<P: Parameters> {
+ Nothing,
+ SameAgain(P::SelfRef, Y)
+}
+
+fn main() {
+ let bnil: Box<X<BP>> = Box::new(X::Nothing);
+ let bx: Box<X<BP>> = Box::new(X::SameAgain(bnil, Y));
+ let rnil: X<RP> = X::Nothing;
+ let rx: X<RP> = X::SameAgain(&rnil, Y);
+}
diff --git a/tests/ui/issues/issue-25746-bool-transmute.rs b/tests/ui/issues/issue-25746-bool-transmute.rs
new file mode 100644
index 000000000..bc2f4a7c1
--- /dev/null
+++ b/tests/ui/issues/issue-25746-bool-transmute.rs
@@ -0,0 +1,11 @@
+// run-pass
+use std::mem::transmute;
+
+fn main() {
+ unsafe {
+ let _: i8 = transmute(false);
+ let _: i8 = transmute(true);
+ let _: bool = transmute(0u8);
+ let _: bool = transmute(1u8);
+ }
+}
diff --git a/tests/ui/issues/issue-25757.rs b/tests/ui/issues/issue-25757.rs
new file mode 100644
index 000000000..ec1864d7d
--- /dev/null
+++ b/tests/ui/issues/issue-25757.rs
@@ -0,0 +1,18 @@
+// run-pass
+struct Foo {
+ a: u32
+}
+
+impl Foo {
+ fn x(&mut self) {
+ self.a = 5;
+ }
+}
+
+const FUNC: &'static dyn Fn(&mut Foo) -> () = &Foo::x;
+
+fn main() {
+ let mut foo = Foo { a: 137 };
+ FUNC(&mut foo);
+ assert_eq!(foo.a, 5);
+}
diff --git a/tests/ui/issues/issue-25810.rs b/tests/ui/issues/issue-25810.rs
new file mode 100644
index 000000000..f32216f32
--- /dev/null
+++ b/tests/ui/issues/issue-25810.rs
@@ -0,0 +1,28 @@
+// run-pass
+fn main() {
+ let x = X(15);
+ let y = x.foo();
+ println!("{:?}",y);
+}
+
+trait Foo
+ where for<'a> &'a Self: Bar
+{
+ fn foo<'a>(&'a self) -> <&'a Self as Bar>::Output;
+}
+
+trait Bar {
+ type Output;
+}
+
+struct X(i32);
+
+impl<'a> Bar for &'a X {
+ type Output = &'a i32;
+}
+
+impl Foo for X {
+ fn foo<'a>(&'a self) -> <&'a Self as Bar>::Output {
+ &self.0
+ }
+}
diff --git a/tests/ui/issues/issue-2590.rs b/tests/ui/issues/issue-2590.rs
new file mode 100644
index 000000000..a9a0e5ca4
--- /dev/null
+++ b/tests/ui/issues/issue-2590.rs
@@ -0,0 +1,15 @@
+struct Parser {
+ tokens: Vec<isize> ,
+}
+
+trait Parse {
+ fn parse(&self) -> Vec<isize> ;
+}
+
+impl Parse for Parser {
+ fn parse(&self) -> Vec<isize> {
+ self.tokens //~ ERROR cannot move out
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-2590.stderr b/tests/ui/issues/issue-2590.stderr
new file mode 100644
index 000000000..6aacd563a
--- /dev/null
+++ b/tests/ui/issues/issue-2590.stderr
@@ -0,0 +1,9 @@
+error[E0507]: cannot move out of `self.tokens` which is behind a shared reference
+ --> $DIR/issue-2590.rs:11:9
+ |
+LL | self.tokens
+ | ^^^^^^^^^^^ move occurs because `self.tokens` has type `Vec<isize>`, which does not implement the `Copy` trait
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0507`.
diff --git a/tests/ui/issues/issue-25901.rs b/tests/ui/issues/issue-25901.rs
new file mode 100644
index 000000000..1f7b341a9
--- /dev/null
+++ b/tests/ui/issues/issue-25901.rs
@@ -0,0 +1,14 @@
+struct A;
+struct B;
+
+static S: &'static B = &A;
+//~^ ERROR the trait bound
+
+use std::ops::Deref;
+
+impl Deref for A {
+ type Target = B;
+ fn deref(&self)->&B { static B_: B = B; &B_ }
+}
+
+fn main(){}
diff --git a/tests/ui/issues/issue-25901.stderr b/tests/ui/issues/issue-25901.stderr
new file mode 100644
index 000000000..b9cac3222
--- /dev/null
+++ b/tests/ui/issues/issue-25901.stderr
@@ -0,0 +1,15 @@
+error[E0277]: the trait bound `A: Deref` is not satisfied
+ --> $DIR/issue-25901.rs:4:24
+ |
+LL | static S: &'static B = &A;
+ | ^^ the trait `~const Deref` is not implemented for `A`
+ |
+note: the trait `Deref` is implemented for `A`, but that implementation is not `const`
+ --> $DIR/issue-25901.rs:4:24
+ |
+LL | static S: &'static B = &A;
+ | ^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-26056.rs b/tests/ui/issues/issue-26056.rs
new file mode 100644
index 000000000..99d43ec79
--- /dev/null
+++ b/tests/ui/issues/issue-26056.rs
@@ -0,0 +1,22 @@
+trait MapLookup<Q> {
+ type MapValue;
+}
+
+impl<K> MapLookup<K> for K {
+ type MapValue = K;
+}
+
+trait Map: MapLookup<<Self as Map>::Key> {
+ type Key;
+}
+
+impl<K> Map for K {
+ type Key = K;
+}
+
+
+fn main() {
+ let _ = &()
+ as &dyn Map<Key=u32,MapValue=u32>;
+ //~^ ERROR E0038
+}
diff --git a/tests/ui/issues/issue-26056.stderr b/tests/ui/issues/issue-26056.stderr
new file mode 100644
index 000000000..2c873243f
--- /dev/null
+++ b/tests/ui/issues/issue-26056.stderr
@@ -0,0 +1,17 @@
+error[E0038]: the trait `Map` cannot be made into an object
+ --> $DIR/issue-26056.rs:20:13
+ |
+LL | as &dyn Map<Key=u32,MapValue=u32>;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `Map` cannot be made into an object
+ |
+note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
+ --> $DIR/issue-26056.rs:9:12
+ |
+LL | trait Map: MapLookup<<Self as Map>::Key> {
+ | --- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...because it uses `Self` as a type parameter
+ | |
+ | this trait cannot be made into an object...
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0038`.
diff --git a/tests/ui/issues/issue-26093.rs b/tests/ui/issues/issue-26093.rs
new file mode 100644
index 000000000..c838515ca
--- /dev/null
+++ b/tests/ui/issues/issue-26093.rs
@@ -0,0 +1,12 @@
+macro_rules! not_a_place {
+ ($thing:expr) => {
+ $thing = 42;
+ //~^ ERROR invalid left-hand side of assignment
+ $thing += 42;
+ //~^ ERROR invalid left-hand side of assignment
+ }
+}
+
+fn main() {
+ not_a_place!(99);
+}
diff --git a/tests/ui/issues/issue-26093.stderr b/tests/ui/issues/issue-26093.stderr
new file mode 100644
index 000000000..1a08d0fef
--- /dev/null
+++ b/tests/ui/issues/issue-26093.stderr
@@ -0,0 +1,32 @@
+error[E0070]: invalid left-hand side of assignment
+ --> $DIR/issue-26093.rs:3:16
+ |
+LL | $thing = 42;
+ | ^
+...
+LL | not_a_place!(99);
+ | ----------------
+ | | |
+ | | cannot assign to this expression
+ | in this macro invocation
+ |
+ = note: this error originates in the macro `not_a_place` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0067]: invalid left-hand side of assignment
+ --> $DIR/issue-26093.rs:5:16
+ |
+LL | $thing += 42;
+ | ^^
+...
+LL | not_a_place!(99);
+ | ----------------
+ | | |
+ | | cannot assign to this expression
+ | in this macro invocation
+ |
+ = note: this error originates in the macro `not_a_place` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0067, E0070.
+For more information about an error, try `rustc --explain E0067`.
diff --git a/tests/ui/issues/issue-26094.rs b/tests/ui/issues/issue-26094.rs
new file mode 100644
index 000000000..d3d670aa9
--- /dev/null
+++ b/tests/ui/issues/issue-26094.rs
@@ -0,0 +1,13 @@
+macro_rules! some_macro {
+ ($other: expr) => ({
+ $other(None) //~ NOTE argument of type `Option<_>` unexpected
+ })
+}
+
+fn some_function() {} //~ NOTE defined here
+
+fn main() {
+ some_macro!(some_function);
+ //~^ ERROR function takes 0 arguments but 1 argument was supplied
+ //~| NOTE in this expansion of some_macro!
+}
diff --git a/tests/ui/issues/issue-26094.stderr b/tests/ui/issues/issue-26094.stderr
new file mode 100644
index 000000000..881a6e538
--- /dev/null
+++ b/tests/ui/issues/issue-26094.stderr
@@ -0,0 +1,22 @@
+error[E0061]: this function takes 0 arguments but 1 argument was supplied
+ --> $DIR/issue-26094.rs:10:17
+ |
+LL | $other(None)
+ | ---- argument of type `Option<_>` unexpected
+...
+LL | some_macro!(some_function);
+ | ^^^^^^^^^^^^^
+ |
+note: function defined here
+ --> $DIR/issue-26094.rs:7:4
+ |
+LL | fn some_function() {}
+ | ^^^^^^^^^^^^^
+help: remove the extra argument
+ |
+LL | some_function()
+ | ~~~~~~~~~~~~~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0061`.
diff --git a/tests/ui/issues/issue-26095.rs b/tests/ui/issues/issue-26095.rs
new file mode 100644
index 000000000..638f8f571
--- /dev/null
+++ b/tests/ui/issues/issue-26095.rs
@@ -0,0 +1,23 @@
+// check-pass
+#![allow(dead_code)]
+#![allow(non_upper_case_globals)]
+
+
+trait HasNumber<T> {
+ const Number: usize;
+}
+
+enum One {}
+enum Two {}
+
+enum Foo {}
+
+impl<T> HasNumber<T> for One {
+ const Number: usize = 1;
+}
+
+impl<T> HasNumber<T> for Two {
+ const Number: usize = 2;
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-2611-3.rs b/tests/ui/issues/issue-2611-3.rs
new file mode 100644
index 000000000..a95a748e0
--- /dev/null
+++ b/tests/ui/issues/issue-2611-3.rs
@@ -0,0 +1,19 @@
+// check-pass
+#![allow(dead_code)]
+// Tests that impls are allowed to have looser, more permissive bounds
+// than the traits require.
+
+
+trait A {
+ fn b<C:Sync,D>(&self, x: C) -> C;
+}
+
+struct E {
+ f: isize
+}
+
+impl A for E {
+ fn b<F,G>(&self, _x: F) -> F { panic!() }
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-26127.rs b/tests/ui/issues/issue-26127.rs
new file mode 100644
index 000000000..f3f9c1d9a
--- /dev/null
+++ b/tests/ui/issues/issue-26127.rs
@@ -0,0 +1,12 @@
+// run-pass
+trait Tr { type T; }
+impl Tr for u8 { type T=(); }
+struct S<I: Tr>(#[allow(unused_tuple_struct_fields)] I::T);
+
+fn foo<I: Tr>(i: I::T) {
+ S::<I>(i);
+}
+
+fn main() {
+ foo::<u8>(());
+}
diff --git a/tests/ui/issues/issue-26186.rs b/tests/ui/issues/issue-26186.rs
new file mode 100644
index 000000000..f93869352
--- /dev/null
+++ b/tests/ui/issues/issue-26186.rs
@@ -0,0 +1,62 @@
+// check-pass
+use std::sync::Mutex;
+use std::cell::RefCell;
+use std::rc::Rc;
+use std::ops::*;
+
+//eefriedman example
+struct S<'a, T:FnMut() + 'static + ?Sized>(&'a mut T);
+impl<'a, T:?Sized + FnMut() + 'static> DerefMut for S<'a, T> {
+ fn deref_mut(&mut self) -> &mut Self::Target { &mut self.0 }
+}
+impl<'a, T:?Sized + FnMut() + 'static> Deref for S<'a, T> {
+ type Target = dyn FnMut() + 'a;
+ fn deref(&self) -> &Self::Target { &self.0 }
+}
+
+//Ossipal example
+struct FunctionIcon {
+ get_icon: Mutex<Box<dyn FnMut() -> u32>>,
+}
+
+impl FunctionIcon {
+ fn get_icon(&self) -> impl '_ + std::ops::DerefMut<Target=Box<dyn FnMut() -> u32>> {
+ self.get_icon.lock().unwrap()
+ }
+
+ fn load_icon(&self) {
+ let mut get_icon = self.get_icon();
+ let _rgba_icon = (*get_icon)();
+ }
+}
+
+//shepmaster example
+struct Foo;
+
+impl Deref for Foo {
+ type Target = dyn FnMut() + 'static;
+ fn deref(&self) -> &Self::Target {
+ unimplemented!()
+ }
+}
+
+impl DerefMut for Foo {
+ fn deref_mut(&mut self) -> &mut Self::Target {
+ unimplemented!()
+ }
+}
+
+fn main() {
+ //eefriedman example
+ let mut f = ||{};
+ let mut s = S(&mut f);
+ s();
+
+ //Diggsey/Mark-Simulacrum example
+ let a: Rc<RefCell<dyn FnMut()>> = Rc::new(RefCell::new(||{}));
+ a.borrow_mut()();
+
+ //shepmaster example
+ let mut t = Foo;
+ t();
+}
diff --git a/tests/ui/issues/issue-26205.rs b/tests/ui/issues/issue-26205.rs
new file mode 100644
index 000000000..f5f39ded0
--- /dev/null
+++ b/tests/ui/issues/issue-26205.rs
@@ -0,0 +1,31 @@
+// check-pass
+#![allow(dead_code)]
+use std::ops::{Deref, DerefMut};
+
+struct Foo;
+
+impl Foo {
+ fn foo_mut(&mut self) {}
+}
+
+struct Bar(Foo);
+
+impl Deref for Bar {
+ type Target = Foo;
+
+ fn deref(&self) -> &Foo {
+ &self.0
+ }
+}
+
+impl DerefMut for Bar {
+ fn deref_mut(&mut self) -> &mut Foo {
+ &mut self.0
+ }
+}
+
+fn test(mut bar: Box<Bar>) {
+ bar.foo_mut();
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-26217.rs b/tests/ui/issues/issue-26217.rs
new file mode 100644
index 000000000..422625e73
--- /dev/null
+++ b/tests/ui/issues/issue-26217.rs
@@ -0,0 +1,10 @@
+fn foo<T>() where for<'a> T: 'a {}
+
+fn bar<'a>() {
+ foo::<&'a i32>();
+ //~^ ERROR lifetime may not live long enough
+}
+
+fn main() {
+ bar();
+}
diff --git a/tests/ui/issues/issue-26217.stderr b/tests/ui/issues/issue-26217.stderr
new file mode 100644
index 000000000..73c772205
--- /dev/null
+++ b/tests/ui/issues/issue-26217.stderr
@@ -0,0 +1,16 @@
+error: lifetime may not live long enough
+ --> $DIR/issue-26217.rs:4:5
+ |
+LL | fn bar<'a>() {
+ | -- lifetime `'a` defined here
+LL | foo::<&'a i32>();
+ | ^^^^^^^^^^^^^^ requires that `'a` must outlive `'static`
+ |
+note: due to current limitations in the borrow checker, this implies a `'static` lifetime
+ --> $DIR/issue-26217.rs:1:30
+ |
+LL | fn foo<T>() where for<'a> T: 'a {}
+ | ^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-26237.rs b/tests/ui/issues/issue-26237.rs
new file mode 100644
index 000000000..71e96677d
--- /dev/null
+++ b/tests/ui/issues/issue-26237.rs
@@ -0,0 +1,12 @@
+macro_rules! macro_panic {
+ ($not_a_function:expr, $some_argument:ident) => {
+ $not_a_function($some_argument)
+ }
+}
+
+fn main() {
+ let mut value_a = 0;
+ let mut value_b = 0;
+ macro_panic!(value_a, value_b);
+ //~^ ERROR expected function, found `{integer}`
+}
diff --git a/tests/ui/issues/issue-26237.stderr b/tests/ui/issues/issue-26237.stderr
new file mode 100644
index 000000000..91d28a5e1
--- /dev/null
+++ b/tests/ui/issues/issue-26237.stderr
@@ -0,0 +1,15 @@
+error[E0618]: expected function, found `{integer}`
+ --> $DIR/issue-26237.rs:10:18
+ |
+LL | $not_a_function($some_argument)
+ | ------------------------------- call expression requires function
+...
+LL | let mut value_a = 0;
+ | ----------- `value_a` has type `{integer}`
+LL | let mut value_b = 0;
+LL | macro_panic!(value_a, value_b);
+ | ^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0618`.
diff --git a/tests/ui/issues/issue-26262.rs b/tests/ui/issues/issue-26262.rs
new file mode 100644
index 000000000..41135db91
--- /dev/null
+++ b/tests/ui/issues/issue-26262.rs
@@ -0,0 +1,22 @@
+// Check that projections don't count as constraining type parameters.
+
+struct S<T>(T);
+
+trait Tr { type Assoc; fn test(); }
+
+impl<T: Tr> S<T::Assoc> {
+//~^ ERROR the type parameter `T` is not constrained
+ fn foo(self, _: T) {
+ T::test();
+ }
+}
+
+trait Trait1<T> { type Bar; }
+trait Trait2<'x> { type Foo; }
+
+impl<'a,T: Trait2<'a>> Trait1<<T as Trait2<'a>>::Foo> for T {
+//~^ ERROR the lifetime parameter `'a` is not constrained
+ type Bar = &'a ();
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-26262.stderr b/tests/ui/issues/issue-26262.stderr
new file mode 100644
index 000000000..90e2d0d93
--- /dev/null
+++ b/tests/ui/issues/issue-26262.stderr
@@ -0,0 +1,15 @@
+error[E0207]: the type parameter `T` is not constrained by the impl trait, self type, or predicates
+ --> $DIR/issue-26262.rs:7:6
+ |
+LL | impl<T: Tr> S<T::Assoc> {
+ | ^ unconstrained type parameter
+
+error[E0207]: the lifetime parameter `'a` is not constrained by the impl trait, self type, or predicates
+ --> $DIR/issue-26262.rs:17:6
+ |
+LL | impl<'a,T: Trait2<'a>> Trait1<<T as Trait2<'a>>::Foo> for T {
+ | ^^ unconstrained lifetime parameter
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0207`.
diff --git a/tests/ui/issues/issue-2631-b.rs b/tests/ui/issues/issue-2631-b.rs
new file mode 100644
index 000000000..c7f6728e3
--- /dev/null
+++ b/tests/ui/issues/issue-2631-b.rs
@@ -0,0 +1,17 @@
+// run-pass
+
+// aux-build:issue-2631-a.rs
+
+extern crate req;
+
+use req::request;
+use std::cell::RefCell;
+use std::collections::HashMap;
+use std::rc::Rc;
+
+pub fn main() {
+ let v = vec![Rc::new("hi".to_string())];
+ let mut m: req::header_map = HashMap::new();
+ m.insert("METHOD".to_string(), Rc::new(RefCell::new(v)));
+ request::<isize>(&m);
+}
diff --git a/tests/ui/issues/issue-2642.rs b/tests/ui/issues/issue-2642.rs
new file mode 100644
index 000000000..95c563225
--- /dev/null
+++ b/tests/ui/issues/issue-2642.rs
@@ -0,0 +1,10 @@
+// run-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+fn f() {
+ let _x: usize = loop { loop { break; } };
+}
+
+pub fn main() {
+}
diff --git a/tests/ui/issues/issue-26468.rs b/tests/ui/issues/issue-26468.rs
new file mode 100644
index 000000000..71cc90e8b
--- /dev/null
+++ b/tests/ui/issues/issue-26468.rs
@@ -0,0 +1,29 @@
+// run-pass
+#![allow(dead_code)]
+
+enum FooMode {
+ Check = 0x1001,
+}
+
+enum BarMode {
+ Check = 0x2001,
+}
+
+enum Mode {
+ Foo(FooMode),
+ Bar(BarMode),
+}
+
+#[inline(never)]
+fn broken(mode: &Mode) -> u32 {
+ for _ in 0..1 {
+ if let Mode::Foo(FooMode::Check) = *mode { return 17 }
+ if let Mode::Bar(BarMode::Check) = *mode { return 19 }
+ }
+ return 42;
+}
+
+fn main() {
+ let mode = Mode::Bar(BarMode::Check);
+ assert_eq!(broken(&mode), 19);
+}
diff --git a/tests/ui/issues/issue-26472.rs b/tests/ui/issues/issue-26472.rs
new file mode 100644
index 000000000..b100c59ad
--- /dev/null
+++ b/tests/ui/issues/issue-26472.rs
@@ -0,0 +1,13 @@
+mod sub {
+ pub struct S { len: usize }
+ impl S {
+ pub fn new() -> S { S { len: 0 } }
+ pub fn len(&self) -> usize { self.len }
+ }
+}
+
+fn main() {
+ let s = sub::S::new();
+ let v = s.len; //~ ERROR field `len` of struct `S` is private
+ s.len = v; //~ ERROR field `len` of struct `S` is private
+}
diff --git a/tests/ui/issues/issue-26472.stderr b/tests/ui/issues/issue-26472.stderr
new file mode 100644
index 000000000..d7134bff1
--- /dev/null
+++ b/tests/ui/issues/issue-26472.stderr
@@ -0,0 +1,20 @@
+error[E0616]: field `len` of struct `S` is private
+ --> $DIR/issue-26472.rs:11:15
+ |
+LL | let v = s.len;
+ | ^^^ private field
+ |
+help: a method `len` also exists, call it with parentheses
+ |
+LL | let v = s.len();
+ | ++
+
+error[E0616]: field `len` of struct `S` is private
+ --> $DIR/issue-26472.rs:12:7
+ |
+LL | s.len = v;
+ | ^^^ private field
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0616`.
diff --git a/tests/ui/issues/issue-26484.rs b/tests/ui/issues/issue-26484.rs
new file mode 100644
index 000000000..2a8750d3e
--- /dev/null
+++ b/tests/ui/issues/issue-26484.rs
@@ -0,0 +1,12 @@
+// run-pass
+// compile-flags:-g
+// ignore-asmjs wasm2js does not support source maps yet
+
+fn helper<F: FnOnce(usize) -> bool>(_f: F) {
+ print!("");
+}
+
+fn main() {
+ let cond = 0;
+ helper(|v| v == cond)
+}
diff --git a/tests/ui/issues/issue-26614.rs b/tests/ui/issues/issue-26614.rs
new file mode 100644
index 000000000..b8ebbdc5a
--- /dev/null
+++ b/tests/ui/issues/issue-26614.rs
@@ -0,0 +1,14 @@
+// check-pass
+
+trait Mirror {
+ type It;
+}
+
+impl<T> Mirror for T {
+ type It = Self;
+}
+
+fn main() {
+ let c: <u32 as Mirror>::It = 5;
+ const CCCC: <u32 as Mirror>::It = 5;
+}
diff --git a/tests/ui/issues/issue-26619.rs b/tests/ui/issues/issue-26619.rs
new file mode 100644
index 000000000..b9d34b055
--- /dev/null
+++ b/tests/ui/issues/issue-26619.rs
@@ -0,0 +1,22 @@
+pub struct History<'a> { pub _s: &'a str }
+
+impl<'a> History<'a> {
+ pub fn get_page(&self) {
+ for s in vec!["1|2".to_string()].into_iter().filter_map(|ref line| self.make_entry(line)) {
+ //~^ ERROR cannot return value referencing function parameter
+ println!("{:?}", s);
+ }
+ }
+
+ fn make_entry(&self, s: &'a String) -> Option<&str> {
+ let parts: Vec<_> = s.split('|').collect();
+ println!("{:?} -> {:?}", s, parts);
+
+ if let [commit, ..] = &parts[..] { Some(commit) } else { None }
+ }
+}
+
+fn main() {
+ let h = History{ _s: "" };
+ h.get_page();
+}
diff --git a/tests/ui/issues/issue-26619.stderr b/tests/ui/issues/issue-26619.stderr
new file mode 100644
index 000000000..1282fd7d3
--- /dev/null
+++ b/tests/ui/issues/issue-26619.stderr
@@ -0,0 +1,11 @@
+error[E0515]: cannot return value referencing function parameter
+ --> $DIR/issue-26619.rs:5:76
+ |
+LL | for s in vec!["1|2".to_string()].into_iter().filter_map(|ref line| self.make_entry(line)) {
+ | -------- ^^^^^^^^^^^^^^^^^^^^^ returns a value referencing data owned by the current function
+ | |
+ | function parameter borrowed here
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0515`.
diff --git a/tests/ui/issues/issue-26641.rs b/tests/ui/issues/issue-26641.rs
new file mode 100644
index 000000000..e08edd0b5
--- /dev/null
+++ b/tests/ui/issues/issue-26641.rs
@@ -0,0 +1,6 @@
+// run-pass
+struct Parser<'a>(#[allow(unused_tuple_struct_fields)] Box<dyn FnMut(Parser) + 'a>);
+
+fn main() {
+ let _x = Parser(Box::new(|_|{}));
+}
diff --git a/tests/ui/issues/issue-26646.rs b/tests/ui/issues/issue-26646.rs
new file mode 100644
index 000000000..86e4bd7e8
--- /dev/null
+++ b/tests/ui/issues/issue-26646.rs
@@ -0,0 +1,12 @@
+// check-pass
+#![deny(unused_attributes)]
+
+#[repr(C)]
+#[repr(packed)]
+pub struct Foo;
+
+#[repr(packed)]
+#[repr(C)]
+pub struct Bar;
+
+fn main() { }
diff --git a/tests/ui/issues/issue-26655.rs b/tests/ui/issues/issue-26655.rs
new file mode 100644
index 000000000..cb386c908
--- /dev/null
+++ b/tests/ui/issues/issue-26655.rs
@@ -0,0 +1,26 @@
+// run-pass
+// needs-unwind
+// ignore-emscripten no threads support
+
+// Check that the destructors of simple enums are run on unwinding
+
+use std::sync::atomic::{Ordering, AtomicUsize};
+use std::thread;
+
+static LOG: AtomicUsize = AtomicUsize::new(0);
+
+enum WithDtor { Val }
+impl Drop for WithDtor {
+ fn drop(&mut self) {
+ LOG.store(LOG.load(Ordering::SeqCst)+1,Ordering::SeqCst);
+ }
+}
+
+pub fn main() {
+ thread::spawn(move|| {
+ let _e: WithDtor = WithDtor::Val;
+ panic!("fail");
+ }).join().unwrap_err();
+
+ assert_eq!(LOG.load(Ordering::SeqCst), 1);
+}
diff --git a/tests/ui/issues/issue-26709.rs b/tests/ui/issues/issue-26709.rs
new file mode 100644
index 000000000..1bd2651dd
--- /dev/null
+++ b/tests/ui/issues/issue-26709.rs
@@ -0,0 +1,17 @@
+// run-pass
+struct Wrapper<'a, T: ?Sized>(&'a mut i32, #[allow(unused_tuple_struct_fields)] T);
+
+impl<'a, T: ?Sized> Drop for Wrapper<'a, T> {
+ fn drop(&mut self) {
+ *self.0 = 432;
+ }
+}
+
+fn main() {
+ let mut x = 0;
+ {
+ let wrapper = Box::new(Wrapper(&mut x, 123));
+ let _: Box<Wrapper<dyn Send>> = wrapper;
+ }
+ assert_eq!(432, x)
+}
diff --git a/tests/ui/issues/issue-26802.rs b/tests/ui/issues/issue-26802.rs
new file mode 100644
index 000000000..307a67160
--- /dev/null
+++ b/tests/ui/issues/issue-26802.rs
@@ -0,0 +1,14 @@
+// run-pass
+trait Foo<'a> {
+ fn bar<'b>(&self, x: &'b u8) -> u8 where 'a: 'b { *x+7 }
+}
+
+pub struct FooBar;
+impl Foo<'static> for FooBar {}
+fn test(foobar: FooBar) -> Box<dyn Foo<'static>> {
+ Box::new(foobar)
+}
+
+fn main() {
+ assert_eq!(test(FooBar).bar(&4), 11);
+}
diff --git a/tests/ui/issues/issue-26805.rs b/tests/ui/issues/issue-26805.rs
new file mode 100644
index 000000000..bcf8a6731
--- /dev/null
+++ b/tests/ui/issues/issue-26805.rs
@@ -0,0 +1,6 @@
+// run-pass
+struct NonOrd;
+
+fn main() {
+ let _: Box<dyn Iterator<Item = _>> = Box::new(vec![NonOrd].into_iter());
+}
diff --git a/tests/ui/issues/issue-26812.rs b/tests/ui/issues/issue-26812.rs
new file mode 100644
index 000000000..3391ea4b3
--- /dev/null
+++ b/tests/ui/issues/issue-26812.rs
@@ -0,0 +1,6 @@
+#![feature(default_type_parameter_fallback)]
+
+fn avg<T=T::Item>(_: T) {}
+//~^ ERROR generic parameters with a default cannot use forward declared identifiers
+
+fn main() {}
diff --git a/tests/ui/issues/issue-26812.stderr b/tests/ui/issues/issue-26812.stderr
new file mode 100644
index 000000000..fd1bbb9c5
--- /dev/null
+++ b/tests/ui/issues/issue-26812.stderr
@@ -0,0 +1,9 @@
+error[E0128]: generic parameters with a default cannot use forward declared identifiers
+ --> $DIR/issue-26812.rs:3:10
+ |
+LL | fn avg<T=T::Item>(_: T) {}
+ | ^^^^^^^ defaulted generic parameters cannot be forward declared
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0128`.
diff --git a/tests/ui/issues/issue-26905-rpass.rs b/tests/ui/issues/issue-26905-rpass.rs
new file mode 100644
index 000000000..2d5827f47
--- /dev/null
+++ b/tests/ui/issues/issue-26905-rpass.rs
@@ -0,0 +1,21 @@
+// run-pass
+#![feature(unsize, coerce_unsized)]
+
+// Verfies that PhantomData is ignored for DST coercions
+
+use std::marker::{Unsize, PhantomData};
+use std::ops::CoerceUnsized;
+
+struct MyRc<T: ?Sized> {
+ _ptr: *const T,
+ _boo: PhantomData<T>,
+}
+
+impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<MyRc<U>> for MyRc<T>{ }
+
+fn main() {
+ let data = [1, 2, 3];
+ let iter = data.iter();
+ let x = MyRc { _ptr: &iter, _boo: PhantomData };
+ let _y: MyRc<dyn Iterator<Item=&u32>> = x;
+}
diff --git a/tests/ui/issues/issue-26905.rs b/tests/ui/issues/issue-26905.rs
new file mode 100644
index 000000000..4c5c67d58
--- /dev/null
+++ b/tests/ui/issues/issue-26905.rs
@@ -0,0 +1,23 @@
+#![feature(unsize, coerce_unsized)]
+
+// Verfies that non-PhantomData ZSTs still cause coercions to fail.
+// They might have additional semantics that we don't want to bulldoze.
+
+use std::marker::{Unsize, PhantomData};
+use std::ops::CoerceUnsized;
+
+struct NotPhantomData<T: ?Sized>(PhantomData<T>);
+
+struct MyRc<T: ?Sized> {
+ _ptr: *const T,
+ _boo: NotPhantomData<T>,
+}
+
+impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<MyRc<U>> for MyRc<T>{ } //~ERROR
+
+fn main() {
+ let data = [1, 2, 3];
+ let iter = data.iter();
+ let x = MyRc { _ptr: &iter, _boo: NotPhantomData(PhantomData) };
+ let _y: MyRc<dyn Iterator<Item=&u32>> = x;
+}
diff --git a/tests/ui/issues/issue-26905.stderr b/tests/ui/issues/issue-26905.stderr
new file mode 100644
index 000000000..10dbb7325
--- /dev/null
+++ b/tests/ui/issues/issue-26905.stderr
@@ -0,0 +1,12 @@
+error[E0375]: implementing the trait `CoerceUnsized` requires multiple coercions
+ --> $DIR/issue-26905.rs:16:40
+ |
+LL | impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<MyRc<U>> for MyRc<T>{ }
+ | ^^^^^^^^^^^^^^^^^^^^^^ requires multiple coercions
+ |
+ = note: `CoerceUnsized` may only be implemented for a coercion between structures with one field being coerced
+ = note: currently, 2 fields need coercions: `_ptr` (`*const T` to `*const U`), `_boo` (`NotPhantomData<T>` to `NotPhantomData<U>`)
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0375`.
diff --git a/tests/ui/issues/issue-26948.rs b/tests/ui/issues/issue-26948.rs
new file mode 100644
index 000000000..832c9641d
--- /dev/null
+++ b/tests/ui/issues/issue-26948.rs
@@ -0,0 +1,6 @@
+fn main() {
+ enum Foo { A { x: u32 } }
+ let orig = Foo::A { x: 5 };
+ Foo::A { x: 6, ..orig };
+ //~^ ERROR functional record update syntax requires a struct
+}
diff --git a/tests/ui/issues/issue-26948.stderr b/tests/ui/issues/issue-26948.stderr
new file mode 100644
index 000000000..faede1687
--- /dev/null
+++ b/tests/ui/issues/issue-26948.stderr
@@ -0,0 +1,9 @@
+error[E0436]: functional record update syntax requires a struct
+ --> $DIR/issue-26948.rs:4:22
+ |
+LL | Foo::A { x: 6, ..orig };
+ | ^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0436`.
diff --git a/tests/ui/issues/issue-26997.rs b/tests/ui/issues/issue-26997.rs
new file mode 100644
index 000000000..3653e6273
--- /dev/null
+++ b/tests/ui/issues/issue-26997.rs
@@ -0,0 +1,15 @@
+// build-pass
+#![allow(dead_code)]
+pub struct Foo {
+ x: isize,
+ y: isize
+}
+
+impl Foo {
+ #[allow(improper_ctypes_definitions)]
+ pub extern "C" fn foo_new() -> Foo {
+ Foo { x: 21, y: 33 }
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-27008.rs b/tests/ui/issues/issue-27008.rs
new file mode 100644
index 000000000..e04de33f6
--- /dev/null
+++ b/tests/ui/issues/issue-27008.rs
@@ -0,0 +1,7 @@
+struct S;
+
+fn main() {
+ let b = [0; S];
+ //~^ ERROR mismatched types
+ //~| expected `usize`, found struct `S`
+}
diff --git a/tests/ui/issues/issue-27008.stderr b/tests/ui/issues/issue-27008.stderr
new file mode 100644
index 000000000..5b7e74c1c
--- /dev/null
+++ b/tests/ui/issues/issue-27008.stderr
@@ -0,0 +1,9 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-27008.rs:4:17
+ |
+LL | let b = [0; S];
+ | ^ expected `usize`, found struct `S`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-27033.rs b/tests/ui/issues/issue-27033.rs
new file mode 100644
index 000000000..a23819a20
--- /dev/null
+++ b/tests/ui/issues/issue-27033.rs
@@ -0,0 +1,12 @@
+fn main() {
+ match Some(1) {
+ None @ _ => {} //~ ERROR match bindings cannot shadow unit variants
+ };
+ const C: u8 = 1;
+ match 1 {
+ C @ 2 => { //~ ERROR match bindings cannot shadow constant
+ println!("{}", C);
+ }
+ _ => {}
+ };
+}
diff --git a/tests/ui/issues/issue-27033.stderr b/tests/ui/issues/issue-27033.stderr
new file mode 100644
index 000000000..7a0ca888d
--- /dev/null
+++ b/tests/ui/issues/issue-27033.stderr
@@ -0,0 +1,21 @@
+error[E0530]: match bindings cannot shadow unit variants
+ --> $DIR/issue-27033.rs:3:9
+ |
+LL | None @ _ => {}
+ | ^^^^ cannot be named the same as a unit variant
+ --> $SRC_DIR/std/src/prelude/mod.rs:LL:COL
+ |
+ = note: the unit variant `None` is defined here
+
+error[E0530]: match bindings cannot shadow constants
+ --> $DIR/issue-27033.rs:7:9
+ |
+LL | const C: u8 = 1;
+ | ---------------- the constant `C` is defined here
+LL | match 1 {
+LL | C @ 2 => {
+ | ^ cannot be named the same as a constant
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0530`.
diff --git a/tests/ui/issues/issue-27042.rs b/tests/ui/issues/issue-27042.rs
new file mode 100644
index 000000000..517c1f2e6
--- /dev/null
+++ b/tests/ui/issues/issue-27042.rs
@@ -0,0 +1,17 @@
+// Regression test for #27042. Test that a loop's label is included in its span.
+
+fn main() {
+ let _: i32 =
+ 'a: // in this case, the citation is just the `break`:
+ loop { break }; //~ ERROR mismatched types
+ let _: i32 =
+ 'b: //~ ERROR mismatched types
+ //~^ WARN denote infinite loops with
+ while true { break }; // but here we cite the whole loop
+ let _: i32 =
+ 'c: //~ ERROR mismatched types
+ for _ in None { break }; // but here we cite the whole loop
+ let _: i32 =
+ 'd: //~ ERROR mismatched types
+ while let Some(_) = None { break };
+}
diff --git a/tests/ui/issues/issue-27042.stderr b/tests/ui/issues/issue-27042.stderr
new file mode 100644
index 000000000..59ef28481
--- /dev/null
+++ b/tests/ui/issues/issue-27042.stderr
@@ -0,0 +1,48 @@
+warning: denote infinite loops with `loop { ... }`
+ --> $DIR/issue-27042.rs:8:9
+ |
+LL | / 'b:
+LL | |
+LL | | while true { break }; // but here we cite the whole loop
+ | |__________________^ help: use `loop`
+ |
+ = note: `#[warn(while_true)]` on by default
+
+error[E0308]: mismatched types
+ --> $DIR/issue-27042.rs:6:16
+ |
+LL | loop { break };
+ | ^^^^^
+ | |
+ | expected `i32`, found `()`
+ | help: give it a value of the expected type: `break 42`
+
+error[E0308]: mismatched types
+ --> $DIR/issue-27042.rs:8:9
+ |
+LL | let _: i32 =
+ | --- expected due to this
+LL | / 'b:
+LL | |
+LL | | while true { break }; // but here we cite the whole loop
+ | |____________________________^ expected `i32`, found `()`
+
+error[E0308]: mismatched types
+ --> $DIR/issue-27042.rs:12:9
+ |
+LL | / 'c:
+LL | | for _ in None { break }; // but here we cite the whole loop
+ | |_______________________________^ expected `i32`, found `()`
+
+error[E0308]: mismatched types
+ --> $DIR/issue-27042.rs:15:9
+ |
+LL | let _: i32 =
+ | --- expected due to this
+LL | / 'd:
+LL | | while let Some(_) = None { break };
+ | |__________________________________________^ expected `i32`, found `()`
+
+error: aborting due to 4 previous errors; 1 warning emitted
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-27054-primitive-binary-ops.rs b/tests/ui/issues/issue-27054-primitive-binary-ops.rs
new file mode 100644
index 000000000..c6f925de5
--- /dev/null
+++ b/tests/ui/issues/issue-27054-primitive-binary-ops.rs
@@ -0,0 +1,5 @@
+// run-pass
+fn main() {
+ let x = &mut 1;
+ assert_eq!(*x + { *x=2; 1 }, 2);
+}
diff --git a/tests/ui/issues/issue-27078.rs b/tests/ui/issues/issue-27078.rs
new file mode 100644
index 000000000..5f09b9587
--- /dev/null
+++ b/tests/ui/issues/issue-27078.rs
@@ -0,0 +1,9 @@
+trait Foo {
+ const BAR: i32;
+ fn foo(self) -> &'static i32 {
+ //~^ ERROR the size for values of type
+ &<Self>::BAR
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-27078.stderr b/tests/ui/issues/issue-27078.stderr
new file mode 100644
index 000000000..ced92bbd4
--- /dev/null
+++ b/tests/ui/issues/issue-27078.stderr
@@ -0,0 +1,19 @@
+error[E0277]: the size for values of type `Self` cannot be known at compilation time
+ --> $DIR/issue-27078.rs:3:12
+ |
+LL | fn foo(self) -> &'static i32 {
+ | ^^^^ doesn't have a size known at compile-time
+ |
+ = help: unsized fn params are gated as an unstable feature
+help: consider further restricting `Self`
+ |
+LL | fn foo(self) -> &'static i32 where Self: Sized {
+ | +++++++++++++++++
+help: function arguments must have a statically known size, borrowed types always have a known size
+ |
+LL | fn foo(&self) -> &'static i32 {
+ | +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-2708.rs b/tests/ui/issues/issue-2708.rs
new file mode 100644
index 000000000..4e53b9d14
--- /dev/null
+++ b/tests/ui/issues/issue-2708.rs
@@ -0,0 +1,30 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(non_snake_case)]
+
+// pretty-expanded FIXME #23616
+
+
+
+struct Font {
+ fontbuf: usize,
+ cairo_font: usize,
+ font_dtor: usize,
+
+}
+
+impl Drop for Font {
+ fn drop(&mut self) {}
+}
+
+fn Font() -> Font {
+ Font {
+ fontbuf: 0,
+ cairo_font: 0,
+ font_dtor: 0
+ }
+}
+
+pub fn main() {
+ let _f: Box<_> = Box::new(Font());
+}
diff --git a/tests/ui/issues/issue-27105.rs b/tests/ui/issues/issue-27105.rs
new file mode 100644
index 000000000..3339af364
--- /dev/null
+++ b/tests/ui/issues/issue-27105.rs
@@ -0,0 +1,15 @@
+// check-pass
+use std::cell::RefCell;
+use std::rc::Rc;
+
+pub struct Callbacks {
+ callbacks: Vec<Rc<RefCell<dyn FnMut(i32)>>>,
+}
+
+impl Callbacks {
+ pub fn register<F: FnMut(i32)+'static>(&mut self, callback: F) {
+ self.callbacks.push(Rc::new(RefCell::new(callback)));
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-2723-b.rs b/tests/ui/issues/issue-2723-b.rs
new file mode 100644
index 000000000..1910561d0
--- /dev/null
+++ b/tests/ui/issues/issue-2723-b.rs
@@ -0,0 +1,11 @@
+// run-pass
+// aux-build:issue-2723-a.rs
+
+extern crate issue_2723_a;
+use issue_2723_a::f;
+
+pub fn main() {
+ unsafe {
+ f(vec![2]);
+ }
+}
diff --git a/tests/ui/issues/issue-27240.rs b/tests/ui/issues/issue-27240.rs
new file mode 100644
index 000000000..eaf254f33
--- /dev/null
+++ b/tests/ui/issues/issue-27240.rs
@@ -0,0 +1,27 @@
+// run-pass
+#![allow(unused_assignments)]
+#![allow(unused_variables)]
+use std::fmt;
+struct NoisyDrop<T: fmt::Debug>(#[allow(unused_tuple_struct_fields)] T);
+impl<T: fmt::Debug> Drop for NoisyDrop<T> {
+ fn drop(&mut self) {}
+}
+
+struct Bar<T: fmt::Debug>(#[allow(unused_tuple_struct_fields)] [*const NoisyDrop<T>; 2]);
+
+fn fine() {
+ let (u,b);
+ u = vec![43];
+ b = Bar([&NoisyDrop(&u), &NoisyDrop(&u)]);
+}
+
+#[allow(unused_tuple_struct_fields)]
+struct Bar2<T: fmt::Debug>(*const NoisyDrop<T>, *const NoisyDrop<T>);
+
+fn lolwut() {
+ let (u,v);
+ u = vec![43];
+ v = Bar2(&NoisyDrop(&u), &NoisyDrop(&u));
+}
+
+fn main() { fine(); lolwut() }
diff --git a/tests/ui/issues/issue-27268.rs b/tests/ui/issues/issue-27268.rs
new file mode 100644
index 000000000..161e2d4d2
--- /dev/null
+++ b/tests/ui/issues/issue-27268.rs
@@ -0,0 +1,4 @@
+// run-pass
+fn main() {
+ const _C: &'static dyn Fn() = &||{};
+}
diff --git a/tests/ui/issues/issue-27281.rs b/tests/ui/issues/issue-27281.rs
new file mode 100644
index 000000000..717d8b2c2
--- /dev/null
+++ b/tests/ui/issues/issue-27281.rs
@@ -0,0 +1,17 @@
+// check-pass
+pub trait Trait<'a> {
+ type T;
+ type U;
+ fn foo(&self, s: &'a ()) -> &'a ();
+}
+
+impl<'a> Trait<'a> for () {
+ type T = &'a ();
+ type U = Self::T;
+
+ fn foo(&self, s: &'a ()) -> &'a () {
+ let t: Self::T = s; t
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-27340.rs b/tests/ui/issues/issue-27340.rs
new file mode 100644
index 000000000..61c77cc1f
--- /dev/null
+++ b/tests/ui/issues/issue-27340.rs
@@ -0,0 +1,6 @@
+struct Foo;
+#[derive(Copy, Clone)]
+//~^ ERROR the trait `Copy` may not be implemented for this type
+struct Bar(Foo);
+
+fn main() {}
diff --git a/tests/ui/issues/issue-27340.stderr b/tests/ui/issues/issue-27340.stderr
new file mode 100644
index 000000000..40889b866
--- /dev/null
+++ b/tests/ui/issues/issue-27340.stderr
@@ -0,0 +1,14 @@
+error[E0204]: the trait `Copy` may not be implemented for this type
+ --> $DIR/issue-27340.rs:2:10
+ |
+LL | #[derive(Copy, Clone)]
+ | ^^^^
+LL |
+LL | struct Bar(Foo);
+ | --- this field does not implement `Copy`
+ |
+ = note: this error originates in the derive macro `Copy` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0204`.
diff --git a/tests/ui/issues/issue-2735-2.rs b/tests/ui/issues/issue-2735-2.rs
new file mode 100644
index 000000000..70ebce9d3
--- /dev/null
+++ b/tests/ui/issues/issue-2735-2.rs
@@ -0,0 +1,27 @@
+// run-pass
+#![allow(non_camel_case_types)]
+
+use std::cell::Cell;
+
+// This test should behave exactly like issue-2735-3
+struct defer<'a> {
+ b: &'a Cell<bool>,
+}
+
+impl<'a> Drop for defer<'a> {
+ fn drop(&mut self) {
+ self.b.set(true);
+ }
+}
+
+fn defer(b: &Cell<bool>) -> defer {
+ defer {
+ b: b
+ }
+}
+
+pub fn main() {
+ let dtor_ran = &Cell::new(false);
+ let _ = defer(dtor_ran);
+ assert!(dtor_ran.get());
+}
diff --git a/tests/ui/issues/issue-2735-3.rs b/tests/ui/issues/issue-2735-3.rs
new file mode 100644
index 000000000..233015378
--- /dev/null
+++ b/tests/ui/issues/issue-2735-3.rs
@@ -0,0 +1,27 @@
+// run-pass
+#![allow(non_camel_case_types)]
+
+use std::cell::Cell;
+
+// This test should behave exactly like issue-2735-2
+struct defer<'a> {
+ b: &'a Cell<bool>,
+}
+
+impl<'a> Drop for defer<'a> {
+ fn drop(&mut self) {
+ self.b.set(true);
+ }
+}
+
+fn defer(b: &Cell<bool>) -> defer {
+ defer {
+ b: b
+ }
+}
+
+pub fn main() {
+ let dtor_ran = &Cell::new(false);
+ defer(dtor_ran);
+ assert!(dtor_ran.get());
+}
diff --git a/tests/ui/issues/issue-2735.rs b/tests/ui/issues/issue-2735.rs
new file mode 100644
index 000000000..20d3949a9
--- /dev/null
+++ b/tests/ui/issues/issue-2735.rs
@@ -0,0 +1,22 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(non_camel_case_types)]
+
+// pretty-expanded FIXME #23616
+
+trait hax {
+ fn dummy(&self) { }
+}
+impl<A> hax for A { }
+
+fn perform_hax<T: 'static>(x: Box<T>) -> Box<dyn hax+'static> {
+ Box::new(x) as Box<dyn hax+'static>
+}
+
+fn deadcode() {
+ perform_hax(Box::new("deadcode".to_string()));
+}
+
+pub fn main() {
+ perform_hax(Box::new(42));
+}
diff --git a/tests/ui/issues/issue-27401-dropflag-reinit.rs b/tests/ui/issues/issue-27401-dropflag-reinit.rs
new file mode 100644
index 000000000..ab54af29b
--- /dev/null
+++ b/tests/ui/issues/issue-27401-dropflag-reinit.rs
@@ -0,0 +1,26 @@
+// run-pass
+
+// Check that when a `let`-binding occurs in a loop, its associated
+// drop-flag is reinitialized (to indicate "needs-drop" at the end of
+// the owning variable's scope).
+
+struct A<'a>(&'a mut i32);
+
+impl<'a> Drop for A<'a> {
+ fn drop(&mut self) {
+ *self.0 += 1;
+ }
+}
+
+fn main() {
+ let mut cnt = 0;
+ for i in 0..2 {
+ let a = A(&mut cnt);
+ if i == 1 { // Note that
+ break; // both this break
+ } // and also
+ drop(a); // this move of `a`
+ // are necessary to expose the bug
+ }
+ assert_eq!(cnt, 2);
+}
diff --git a/tests/ui/issues/issue-27433.fixed b/tests/ui/issues/issue-27433.fixed
new file mode 100644
index 000000000..ce31f6bea
--- /dev/null
+++ b/tests/ui/issues/issue-27433.fixed
@@ -0,0 +1,7 @@
+// run-rustfix
+fn main() {
+ let foo = 42u32;
+ #[allow(unused_variables, non_snake_case)]
+ let FOO : u32 = foo;
+ //~^ ERROR attempt to use a non-constant value in a constant
+}
diff --git a/tests/ui/issues/issue-27433.rs b/tests/ui/issues/issue-27433.rs
new file mode 100644
index 000000000..01411a51c
--- /dev/null
+++ b/tests/ui/issues/issue-27433.rs
@@ -0,0 +1,7 @@
+// run-rustfix
+fn main() {
+ let foo = 42u32;
+ #[allow(unused_variables, non_snake_case)]
+ const FOO : u32 = foo;
+ //~^ ERROR attempt to use a non-constant value in a constant
+}
diff --git a/tests/ui/issues/issue-27433.stderr b/tests/ui/issues/issue-27433.stderr
new file mode 100644
index 000000000..da751a649
--- /dev/null
+++ b/tests/ui/issues/issue-27433.stderr
@@ -0,0 +1,11 @@
+error[E0435]: attempt to use a non-constant value in a constant
+ --> $DIR/issue-27433.rs:5:23
+ |
+LL | const FOO : u32 = foo;
+ | --------- ^^^ non-constant value
+ | |
+ | help: consider using `let` instead of `const`: `let FOO`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0435`.
diff --git a/tests/ui/issues/issue-2748-a.rs b/tests/ui/issues/issue-2748-a.rs
new file mode 100644
index 000000000..cbb9bcc28
--- /dev/null
+++ b/tests/ui/issues/issue-2748-a.rs
@@ -0,0 +1,17 @@
+// build-pass
+#![allow(dead_code)]
+#![allow(non_snake_case)]
+
+// pretty-expanded FIXME #23616
+
+struct CMap<'a> {
+ buf: &'a [u8],
+}
+
+fn CMap(buf: &[u8]) -> CMap {
+ CMap {
+ buf: buf
+ }
+}
+
+pub fn main() { }
diff --git a/tests/ui/issues/issue-27583.rs b/tests/ui/issues/issue-27583.rs
new file mode 100644
index 000000000..84c94c7c9
--- /dev/null
+++ b/tests/ui/issues/issue-27583.rs
@@ -0,0 +1,47 @@
+// check-pass
+// Regression test for issue #27583. Unclear how useful this will be
+// going forward, since the issue in question was EXTREMELY sensitive
+// to compiler internals (like the precise numbering of nodes), but
+// what the hey.
+
+#![allow(warnings)]
+
+use std::cell::Cell;
+use std::marker::PhantomData;
+
+pub trait Delegate<'tcx> { }
+
+pub struct InferCtxt<'a, 'tcx: 'a> {
+ x: PhantomData<&'a Cell<&'tcx ()>>
+}
+
+pub struct MemCategorizationContext<'t, 'a: 't, 'tcx : 'a> {
+ x: &'t InferCtxt<'a, 'tcx>,
+}
+
+pub struct ExprUseVisitor<'d, 't, 'a: 't, 'tcx:'a+'d> {
+ typer: &'t InferCtxt<'a, 'tcx>,
+ mc: MemCategorizationContext<'t, 'a, 'tcx>,
+ delegate: &'d mut (Delegate<'tcx>+'d),
+}
+
+impl<'d,'t,'a,'tcx> ExprUseVisitor<'d,'t,'a,'tcx> {
+ pub fn new(delegate: &'d mut Delegate<'tcx>,
+ typer: &'t InferCtxt<'a, 'tcx>)
+ -> ExprUseVisitor<'d,'t,'a,'tcx>
+ {
+ ExprUseVisitor {
+ typer: typer,
+ mc: MemCategorizationContext::new(typer),
+ delegate: delegate,
+ }
+ }
+}
+
+impl<'t, 'a,'tcx> MemCategorizationContext<'t, 'a, 'tcx> {
+ pub fn new(typer: &'t InferCtxt<'a, 'tcx>) -> MemCategorizationContext<'t, 'a, 'tcx> {
+ MemCategorizationContext { x: typer }
+ }
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-27592.rs b/tests/ui/issues/issue-27592.rs
new file mode 100644
index 000000000..88f70f584
--- /dev/null
+++ b/tests/ui/issues/issue-27592.rs
@@ -0,0 +1,19 @@
+// Regression test for issue #27592.
+
+fn write<'a, F: ::std::ops::FnOnce()->::std::fmt::Arguments<'a> + 'a>(fcn: F) {
+ use std::fmt::Write;
+ let _ = match fcn() { a => write!(&mut Stream, "{}", a), };
+}
+
+struct Stream;
+impl ::std::fmt::Write for Stream {
+ fn write_str(&mut self, _s: &str) -> ::std::fmt::Result {
+ Ok( () )
+ }
+}
+
+fn main() {
+ write(|| format_args!("{}", String::from("Hello world")));
+ //~^ ERROR cannot return value referencing temporary value
+ //~| ERROR cannot return reference to temporary value
+}
diff --git a/tests/ui/issues/issue-27592.stderr b/tests/ui/issues/issue-27592.stderr
new file mode 100644
index 000000000..1205a8b65
--- /dev/null
+++ b/tests/ui/issues/issue-27592.stderr
@@ -0,0 +1,22 @@
+error[E0515]: cannot return value referencing temporary value
+ --> $DIR/issue-27592.rs:16:14
+ |
+LL | write(|| format_args!("{}", String::from("Hello world")));
+ | ^^^^^^^^^^^^^^^^^^^---------------------------^
+ | | |
+ | | temporary value created here
+ | returns a value referencing data owned by the current function
+ |
+ = note: this error originates in the macro `format_args` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0515]: cannot return reference to temporary value
+ --> $DIR/issue-27592.rs:16:14
+ |
+LL | write(|| format_args!("{}", String::from("Hello world")));
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ returns a reference to data owned by the current function
+ |
+ = note: this error originates in the macro `format_args` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0515`.
diff --git a/tests/ui/issues/issue-2761.rs b/tests/ui/issues/issue-2761.rs
new file mode 100644
index 000000000..3ba098abb
--- /dev/null
+++ b/tests/ui/issues/issue-2761.rs
@@ -0,0 +1,7 @@
+// run-fail
+// error-pattern:custom message
+// ignore-emscripten no processes
+
+fn main() {
+ assert!(false, "custom message");
+}
diff --git a/tests/ui/issues/issue-27639.rs b/tests/ui/issues/issue-27639.rs
new file mode 100644
index 000000000..945fbad91
--- /dev/null
+++ b/tests/ui/issues/issue-27639.rs
@@ -0,0 +1,11 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(non_upper_case_globals)]
+
+fn main() {
+ const iter: i32 = 0;
+
+ for i in 1..10 {
+ println!("{}", i);
+ }
+}
diff --git a/tests/ui/issues/issue-27697.rs b/tests/ui/issues/issue-27697.rs
new file mode 100644
index 000000000..12af8a8e8
--- /dev/null
+++ b/tests/ui/issues/issue-27697.rs
@@ -0,0 +1,21 @@
+// check-pass
+
+use std::ops::Deref;
+
+trait MyTrait {
+ fn do_something(&self);
+ fn as_str(&self) -> &str;
+}
+
+impl Deref for dyn MyTrait {
+ type Target = str;
+ fn deref(&self) -> &Self::Target {
+ self.as_str()
+ }
+}
+
+fn trait_object_does_something(t: &dyn MyTrait) {
+ t.do_something()
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-27815.rs b/tests/ui/issues/issue-27815.rs
new file mode 100644
index 000000000..9e53014f4
--- /dev/null
+++ b/tests/ui/issues/issue-27815.rs
@@ -0,0 +1,12 @@
+mod A {}
+
+fn main() {
+ let u = A { x: 1 }; //~ ERROR expected struct, variant or union type, found module `A`
+ let v = u32 { x: 1 }; //~ ERROR expected struct, variant or union type, found builtin type `u32`
+ match () {
+ A { x: 1 } => {}
+ //~^ ERROR expected struct, variant or union type, found module `A`
+ u32 { x: 1 } => {}
+ //~^ ERROR expected struct, variant or union type, found builtin type `u32`
+ }
+}
diff --git a/tests/ui/issues/issue-27815.stderr b/tests/ui/issues/issue-27815.stderr
new file mode 100644
index 000000000..43f78ccf6
--- /dev/null
+++ b/tests/ui/issues/issue-27815.stderr
@@ -0,0 +1,27 @@
+error[E0574]: expected struct, variant or union type, found module `A`
+ --> $DIR/issue-27815.rs:4:13
+ |
+LL | let u = A { x: 1 };
+ | ^ not a struct, variant or union type
+
+error[E0574]: expected struct, variant or union type, found builtin type `u32`
+ --> $DIR/issue-27815.rs:5:13
+ |
+LL | let v = u32 { x: 1 };
+ | ^^^ not a struct, variant or union type
+
+error[E0574]: expected struct, variant or union type, found module `A`
+ --> $DIR/issue-27815.rs:7:9
+ |
+LL | A { x: 1 } => {}
+ | ^ not a struct, variant or union type
+
+error[E0574]: expected struct, variant or union type, found builtin type `u32`
+ --> $DIR/issue-27815.rs:9:9
+ |
+LL | u32 { x: 1 } => {}
+ | ^^^ not a struct, variant or union type
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0574`.
diff --git a/tests/ui/issues/issue-27842.rs b/tests/ui/issues/issue-27842.rs
new file mode 100644
index 000000000..3bcfa1330
--- /dev/null
+++ b/tests/ui/issues/issue-27842.rs
@@ -0,0 +1,11 @@
+fn main() {
+ let tup = (0, 1, 2);
+ // the case where we show a suggestion
+ let _ = tup[0];
+ //~^ ERROR cannot index into a value of type
+
+ // the case where we show just a general hint
+ let i = 0_usize;
+ let _ = tup[i];
+ //~^ ERROR cannot index into a value of type
+}
diff --git a/tests/ui/issues/issue-27842.stderr b/tests/ui/issues/issue-27842.stderr
new file mode 100644
index 000000000..784666a63
--- /dev/null
+++ b/tests/ui/issues/issue-27842.stderr
@@ -0,0 +1,17 @@
+error[E0608]: cannot index into a value of type `({integer}, {integer}, {integer})`
+ --> $DIR/issue-27842.rs:4:13
+ |
+LL | let _ = tup[0];
+ | ^^^^^^ help: to access tuple elements, use: `tup.0`
+
+error[E0608]: cannot index into a value of type `({integer}, {integer}, {integer})`
+ --> $DIR/issue-27842.rs:9:13
+ |
+LL | let _ = tup[i];
+ | ^^^^^^
+ |
+ = help: to access tuple elements, use tuple indexing syntax (e.g., `tuple.0`)
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0608`.
diff --git a/tests/ui/issues/issue-27859.rs b/tests/ui/issues/issue-27859.rs
new file mode 100644
index 000000000..233670681
--- /dev/null
+++ b/tests/ui/issues/issue-27859.rs
@@ -0,0 +1,20 @@
+// run-pass
+// ignore-wasm32 issue 42629
+
+#[inline(never)]
+fn foo(a: f32, b: f32) -> f32 {
+ a % b
+}
+
+#[inline(never)]
+fn bar(a: f32, b: f32) -> f32 {
+ ((a as f64) % (b as f64)) as f32
+}
+
+fn main() {
+ let unknown_float = std::env::args().len();
+ println!("{}", foo(4.0, unknown_float as f32));
+ println!("{}", foo(5.0, (unknown_float as f32) + 1.0));
+ println!("{}", bar(6.0, (unknown_float as f32) + 2.0));
+ println!("{}", bar(7.0, (unknown_float as f32) + 3.0));
+}
diff --git a/tests/ui/issues/issue-27889.rs b/tests/ui/issues/issue-27889.rs
new file mode 100644
index 000000000..623416a5d
--- /dev/null
+++ b/tests/ui/issues/issue-27889.rs
@@ -0,0 +1,23 @@
+// check-pass
+#![allow(unused_assignments)]
+#![allow(unused_variables)]
+// Test that a field can have the same name in different variants
+// of an enum
+
+pub enum Foo {
+ X { foo: u32 },
+ Y { foo: u32 }
+}
+
+pub fn foo(mut x: Foo) {
+ let mut y = None;
+ let mut z = None;
+ if let Foo::X { ref foo } = x {
+ z = Some(foo);
+ }
+ if let Foo::Y { ref mut foo } = x {
+ y = Some(foo);
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-27901.rs b/tests/ui/issues/issue-27901.rs
new file mode 100644
index 000000000..ffd90b689
--- /dev/null
+++ b/tests/ui/issues/issue-27901.rs
@@ -0,0 +1,11 @@
+// run-pass
+trait Stream { type Item; }
+impl<'a> Stream for &'a str { type Item = u8; }
+fn f<'s>(s: &'s str) -> (&'s str, <&'s str as Stream>::Item) {
+ (s, 42)
+}
+
+fn main() {
+ let fx = f as for<'t> fn(&'t str) -> (&'t str, <&'t str as Stream>::Item);
+ assert_eq!(fx("hi"), ("hi", 42));
+}
diff --git a/tests/ui/issues/issue-27942.rs b/tests/ui/issues/issue-27942.rs
new file mode 100644
index 000000000..34b34de38
--- /dev/null
+++ b/tests/ui/issues/issue-27942.rs
@@ -0,0 +1,14 @@
+pub trait Resources<'a> {}
+
+pub trait Buffer<'a, R: Resources<'a>> {
+
+ fn select(&self) -> BufferViewHandle<R>;
+ //~^ ERROR mismatched types
+ //~| lifetime mismatch
+ //~| ERROR mismatched types
+ //~| lifetime mismatch
+}
+
+pub struct BufferViewHandle<'a, R: 'a+Resources<'a>>(&'a R);
+
+fn main() {}
diff --git a/tests/ui/issues/issue-27942.stderr b/tests/ui/issues/issue-27942.stderr
new file mode 100644
index 000000000..7ea9345a6
--- /dev/null
+++ b/tests/ui/issues/issue-27942.stderr
@@ -0,0 +1,41 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-27942.rs:5:25
+ |
+LL | fn select(&self) -> BufferViewHandle<R>;
+ | ^^^^^^^^^^^^^^^^^^^ lifetime mismatch
+ |
+ = note: expected trait `Resources<'_>`
+ found trait `Resources<'a>`
+note: the anonymous lifetime defined here...
+ --> $DIR/issue-27942.rs:5:15
+ |
+LL | fn select(&self) -> BufferViewHandle<R>;
+ | ^^^^^
+note: ...does not necessarily outlive the lifetime `'a` as defined here
+ --> $DIR/issue-27942.rs:3:18
+ |
+LL | pub trait Buffer<'a, R: Resources<'a>> {
+ | ^^
+
+error[E0308]: mismatched types
+ --> $DIR/issue-27942.rs:5:25
+ |
+LL | fn select(&self) -> BufferViewHandle<R>;
+ | ^^^^^^^^^^^^^^^^^^^ lifetime mismatch
+ |
+ = note: expected trait `Resources<'_>`
+ found trait `Resources<'a>`
+note: the lifetime `'a` as defined here...
+ --> $DIR/issue-27942.rs:3:18
+ |
+LL | pub trait Buffer<'a, R: Resources<'a>> {
+ | ^^
+note: ...does not necessarily outlive the anonymous lifetime defined here
+ --> $DIR/issue-27942.rs:5:15
+ |
+LL | fn select(&self) -> BufferViewHandle<R>;
+ | ^^^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-27949.rs b/tests/ui/issues/issue-27949.rs
new file mode 100644
index 000000000..e905da72a
--- /dev/null
+++ b/tests/ui/issues/issue-27949.rs
@@ -0,0 +1,41 @@
+// run-pass
+//
+// At one time, the `==` operator (and other binary operators) did not
+// support subtyping during type checking, and would therefore require
+// LHS and RHS to be exactly identical--i.e. to have the same lifetimes.
+//
+// This was fixed in 1a7fb7dc78439a704f024609ce3dc0beb1386552.
+
+#[derive(Copy, Clone)]
+struct Input<'a> {
+ foo: &'a u32
+}
+
+impl <'a> std::cmp::PartialEq<Input<'a>> for Input<'a> {
+ fn eq(&self, other: &Input<'a>) -> bool {
+ self.foo == other.foo
+ }
+
+ fn ne(&self, other: &Input<'a>) -> bool {
+ self.foo != other.foo
+ }
+}
+
+
+fn check_equal<'a, 'b>(x: Input<'a>, y: Input<'b>) -> bool {
+ // Type checking error due to 'a != 'b prior to 1a7fb7dc78
+ x == y
+}
+
+fn main() {
+ let i = 1u32;
+ let j = 1u32;
+ let k = 2u32;
+
+ let input_i = Input { foo: &i };
+ let input_j = Input { foo: &j };
+ let input_k = Input { foo: &k };
+ assert!(check_equal(input_i, input_i));
+ assert!(check_equal(input_i, input_j));
+ assert!(!check_equal(input_i, input_k));
+}
diff --git a/tests/ui/issues/issue-27997.rs b/tests/ui/issues/issue-27997.rs
new file mode 100644
index 000000000..dd74cf752
--- /dev/null
+++ b/tests/ui/issues/issue-27997.rs
@@ -0,0 +1,37 @@
+// run-pass
+use std::sync::atomic::{Ordering, AtomicUsize};
+
+use std::mem;
+struct S<U,V> {
+ _u: U,
+ size_of_u: usize,
+ _v: V,
+ size_of_v: usize
+}
+
+impl<U, V> S<U, V> {
+ fn new(u: U, v: V) -> Self {
+ S {
+ _u: u,
+ size_of_u: mem::size_of::<U>(),
+ _v: v,
+ size_of_v: mem::size_of::<V>()
+ }
+ }
+}
+
+static COUNT: AtomicUsize = AtomicUsize::new(0);
+
+impl<V, U> Drop for S<U, V> {
+ fn drop(&mut self) {
+ assert_eq!(mem::size_of::<U>(), self.size_of_u);
+ assert_eq!(mem::size_of::<V>(), self.size_of_v);
+ COUNT.store(COUNT.load(Ordering::SeqCst)+1, Ordering::SeqCst);
+ }
+}
+
+fn main() {
+ assert_eq!(COUNT.load(Ordering::SeqCst), 0);
+ { S::new(0u8, 1u16); }
+ assert_eq!(COUNT.load(Ordering::SeqCst), 1);
+}
diff --git a/tests/ui/issues/issue-2804-2.rs b/tests/ui/issues/issue-2804-2.rs
new file mode 100644
index 000000000..d02725505
--- /dev/null
+++ b/tests/ui/issues/issue-2804-2.rs
@@ -0,0 +1,12 @@
+// check-pass
+#![allow(dead_code)]
+// Minimized version of issue-2804.rs. Both check that callee IDs don't
+// clobber the previous node ID in a macro expr
+
+use std::collections::HashMap;
+
+fn add_interfaces(managed_ip: String, device: HashMap<String, isize>) {
+ println!("{}, {}", managed_ip, device["interfaces"]);
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-28105.rs b/tests/ui/issues/issue-28105.rs
new file mode 100644
index 000000000..1e8d2d6cc
--- /dev/null
+++ b/tests/ui/issues/issue-28105.rs
@@ -0,0 +1,8 @@
+// Make sure that a continue span actually contains the keyword.
+
+fn main() {
+ continue //~ ERROR `continue` outside of a loop
+ ;
+ break //~ ERROR `break` outside of a loop
+ ;
+}
diff --git a/tests/ui/issues/issue-28105.stderr b/tests/ui/issues/issue-28105.stderr
new file mode 100644
index 000000000..f450256f3
--- /dev/null
+++ b/tests/ui/issues/issue-28105.stderr
@@ -0,0 +1,15 @@
+error[E0268]: `continue` outside of a loop
+ --> $DIR/issue-28105.rs:4:5
+ |
+LL | continue
+ | ^^^^^^^^ cannot `continue` outside of a loop
+
+error[E0268]: `break` outside of a loop or labeled block
+ --> $DIR/issue-28105.rs:6:5
+ |
+LL | break
+ | ^^^^^ cannot `break` outside of a loop or labeled block
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0268`.
diff --git a/tests/ui/issues/issue-28109.rs b/tests/ui/issues/issue-28109.rs
new file mode 100644
index 000000000..755a539b5
--- /dev/null
+++ b/tests/ui/issues/issue-28109.rs
@@ -0,0 +1,12 @@
+// Make sure that label for continue and break is spanned correctly
+
+fn main() {
+ loop {
+ continue
+ 'b //~ ERROR use of undeclared label
+ ;
+ break
+ 'c //~ ERROR use of undeclared label
+ ;
+ }
+}
diff --git a/tests/ui/issues/issue-28109.stderr b/tests/ui/issues/issue-28109.stderr
new file mode 100644
index 000000000..0f918d3b6
--- /dev/null
+++ b/tests/ui/issues/issue-28109.stderr
@@ -0,0 +1,15 @@
+error[E0426]: use of undeclared label `'b`
+ --> $DIR/issue-28109.rs:6:9
+ |
+LL | 'b
+ | ^^ undeclared label `'b`
+
+error[E0426]: use of undeclared label `'c`
+ --> $DIR/issue-28109.rs:9:9
+ |
+LL | 'c
+ | ^^ undeclared label `'c`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0426`.
diff --git a/tests/ui/issues/issue-28181.rs b/tests/ui/issues/issue-28181.rs
new file mode 100644
index 000000000..c46e131c6
--- /dev/null
+++ b/tests/ui/issues/issue-28181.rs
@@ -0,0 +1,6 @@
+// run-pass
+fn bar<F>(f: F) -> usize where F: Fn([usize; 1]) -> usize { f([2]) }
+
+fn main() {
+ bar(|u| { u[0] });
+}
diff --git a/tests/ui/issues/issue-2823.rs b/tests/ui/issues/issue-2823.rs
new file mode 100644
index 000000000..7b443b415
--- /dev/null
+++ b/tests/ui/issues/issue-2823.rs
@@ -0,0 +1,14 @@
+struct C {
+ x: isize,
+}
+
+impl Drop for C {
+ fn drop(&mut self) {
+ println!("dropping: {}", self.x);
+ }
+}
+
+fn main() {
+ let c = C{ x: 2};
+ let _d = c.clone(); //~ ERROR no method named `clone` found
+}
diff --git a/tests/ui/issues/issue-2823.stderr b/tests/ui/issues/issue-2823.stderr
new file mode 100644
index 000000000..b5a2b2f55
--- /dev/null
+++ b/tests/ui/issues/issue-2823.stderr
@@ -0,0 +1,16 @@
+error[E0599]: no method named `clone` found for struct `C` in the current scope
+ --> $DIR/issue-2823.rs:13:16
+ |
+LL | struct C {
+ | -------- method `clone` not found for this struct
+...
+LL | let _d = c.clone();
+ | ^^^^^ method not found in `C`
+ |
+ = help: items from traits can only be used if the trait is implemented and in scope
+ = note: the following trait defines an item `clone`, perhaps you need to implement it:
+ candidate #1: `Clone`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-28279.rs b/tests/ui/issues/issue-28279.rs
new file mode 100644
index 000000000..bab5df122
--- /dev/null
+++ b/tests/ui/issues/issue-28279.rs
@@ -0,0 +1,21 @@
+// check-pass
+#![allow(dead_code)]
+use std::rc::Rc;
+
+fn test1() -> Rc<dyn for<'a> Fn(&'a usize) + 'static> {
+ if let Some(_) = Some(1) {
+ loop{}
+ } else {
+ loop{}
+ }
+}
+
+fn test2() -> *mut (dyn for<'a> Fn(&'a usize) + 'static) {
+ if let Some(_) = Some(1) {
+ loop{}
+ } else {
+ loop{}
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-28344.rs b/tests/ui/issues/issue-28344.rs
new file mode 100644
index 000000000..1a6a7f46b
--- /dev/null
+++ b/tests/ui/issues/issue-28344.rs
@@ -0,0 +1,15 @@
+use std::ops::BitXor;
+
+fn main() {
+ let x: u8 = BitXor::bitor(0 as u8, 0 as u8);
+ //~^ ERROR must be specified
+ //~| no function or associated item named
+ //~| WARN trait objects without an explicit `dyn` are deprecated
+ //~| WARN this is accepted in the current edition
+
+ let g = BitXor::bitor;
+ //~^ ERROR must be specified
+ //~| no function or associated item named
+ //~| WARN trait objects without an explicit `dyn` are deprecated
+ //~| WARN this is accepted in the current edition
+}
diff --git a/tests/ui/issues/issue-28344.stderr b/tests/ui/issues/issue-28344.stderr
new file mode 100644
index 000000000..f398a5da3
--- /dev/null
+++ b/tests/ui/issues/issue-28344.stderr
@@ -0,0 +1,61 @@
+warning: trait objects without an explicit `dyn` are deprecated
+ --> $DIR/issue-28344.rs:4:17
+ |
+LL | let x: u8 = BitXor::bitor(0 as u8, 0 as u8);
+ | ^^^^^^
+ |
+ = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
+ = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
+ = note: `#[warn(bare_trait_objects)]` on by default
+help: use `dyn`
+ |
+LL | let x: u8 = <dyn BitXor>::bitor(0 as u8, 0 as u8);
+ | ++++ +
+
+error[E0191]: the value of the associated type `Output` (from trait `BitXor`) must be specified
+ --> $DIR/issue-28344.rs:4:17
+ |
+LL | let x: u8 = BitXor::bitor(0 as u8, 0 as u8);
+ | ^^^^^^ help: specify the associated type: `BitXor<Output = Type>`
+
+error[E0599]: no function or associated item named `bitor` found for trait object `dyn BitXor<_>` in the current scope
+ --> $DIR/issue-28344.rs:4:25
+ |
+LL | let x: u8 = BitXor::bitor(0 as u8, 0 as u8);
+ | ^^^^^
+ | |
+ | function or associated item not found in `dyn BitXor<_>`
+ | help: there is a method with a similar name: `bitxor`
+
+warning: trait objects without an explicit `dyn` are deprecated
+ --> $DIR/issue-28344.rs:10:13
+ |
+LL | let g = BitXor::bitor;
+ | ^^^^^^
+ |
+ = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
+ = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
+help: use `dyn`
+ |
+LL | let g = <dyn BitXor>::bitor;
+ | ++++ +
+
+error[E0191]: the value of the associated type `Output` (from trait `BitXor`) must be specified
+ --> $DIR/issue-28344.rs:10:13
+ |
+LL | let g = BitXor::bitor;
+ | ^^^^^^ help: specify the associated type: `BitXor<Output = Type>`
+
+error[E0599]: no function or associated item named `bitor` found for trait object `dyn BitXor<_>` in the current scope
+ --> $DIR/issue-28344.rs:10:21
+ |
+LL | let g = BitXor::bitor;
+ | ^^^^^
+ | |
+ | function or associated item not found in `dyn BitXor<_>`
+ | help: there is a method with a similar name: `bitxor`
+
+error: aborting due to 4 previous errors; 2 warnings emitted
+
+Some errors have detailed explanations: E0191, E0599.
+For more information about an error, try `rustc --explain E0191`.
diff --git a/tests/ui/issues/issue-28433.rs b/tests/ui/issues/issue-28433.rs
new file mode 100644
index 000000000..8d05c32d5
--- /dev/null
+++ b/tests/ui/issues/issue-28433.rs
@@ -0,0 +1,12 @@
+enum Bird {
+ pub Duck,
+ //~^ ERROR unnecessary visibility qualifier
+ Goose,
+ pub(crate) Dove
+ //~^ ERROR unnecessary visibility qualifier
+}
+
+
+fn main() {
+ let y = Bird::Goose;
+}
diff --git a/tests/ui/issues/issue-28433.stderr b/tests/ui/issues/issue-28433.stderr
new file mode 100644
index 000000000..9f5f63336
--- /dev/null
+++ b/tests/ui/issues/issue-28433.stderr
@@ -0,0 +1,15 @@
+error[E0449]: unnecessary visibility qualifier
+ --> $DIR/issue-28433.rs:2:5
+ |
+LL | pub Duck,
+ | ^^^ `pub` not permitted here because it's implied
+
+error[E0449]: unnecessary visibility qualifier
+ --> $DIR/issue-28433.rs:5:5
+ |
+LL | pub(crate) Dove
+ | ^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0449`.
diff --git a/tests/ui/issues/issue-28472.rs b/tests/ui/issues/issue-28472.rs
new file mode 100644
index 000000000..6db1f9a5b
--- /dev/null
+++ b/tests/ui/issues/issue-28472.rs
@@ -0,0 +1,14 @@
+// Check that the visibility modifier is included in the span of foreign items.
+
+extern "C" {
+ fn foo();
+
+ pub //~ ERROR the name `foo` is defined multiple times
+ fn foo();
+
+ pub //~ ERROR the name `foo` is defined multiple times
+ static mut foo: u32;
+}
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-28472.stderr b/tests/ui/issues/issue-28472.stderr
new file mode 100644
index 000000000..051ed25b6
--- /dev/null
+++ b/tests/ui/issues/issue-28472.stderr
@@ -0,0 +1,27 @@
+error[E0428]: the name `foo` is defined multiple times
+ --> $DIR/issue-28472.rs:6:3
+ |
+LL | fn foo();
+ | --------- previous definition of the value `foo` here
+LL |
+LL | / pub
+LL | | fn foo();
+ | |___________^ `foo` redefined here
+ |
+ = note: `foo` must be defined only once in the value namespace of this module
+
+error[E0428]: the name `foo` is defined multiple times
+ --> $DIR/issue-28472.rs:9:3
+ |
+LL | fn foo();
+ | --------- previous definition of the value `foo` here
+...
+LL | / pub
+LL | | static mut foo: u32;
+ | |______________________^ `foo` redefined here
+ |
+ = note: `foo` must be defined only once in the value namespace of this module
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0428`.
diff --git a/tests/ui/issues/issue-2848.rs b/tests/ui/issues/issue-2848.rs
new file mode 100644
index 000000000..e0049bf8f
--- /dev/null
+++ b/tests/ui/issues/issue-2848.rs
@@ -0,0 +1,17 @@
+#[allow(non_camel_case_types)]
+
+mod bar {
+ pub enum foo {
+ alpha,
+ beta,
+ charlie
+ }
+}
+
+fn main() {
+ use bar::foo::{alpha, charlie};
+ match alpha {
+ alpha | beta => {} //~ ERROR variable `beta` is not bound in all patterns
+ charlie => {}
+ }
+}
diff --git a/tests/ui/issues/issue-2848.stderr b/tests/ui/issues/issue-2848.stderr
new file mode 100644
index 000000000..71ed7d70b
--- /dev/null
+++ b/tests/ui/issues/issue-2848.stderr
@@ -0,0 +1,11 @@
+error[E0408]: variable `beta` is not bound in all patterns
+ --> $DIR/issue-2848.rs:14:7
+ |
+LL | alpha | beta => {}
+ | ^^^^^ ---- variable not in all patterns
+ | |
+ | pattern doesn't bind `beta`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0408`.
diff --git a/tests/ui/issues/issue-2849.rs b/tests/ui/issues/issue-2849.rs
new file mode 100644
index 000000000..787ab0e28
--- /dev/null
+++ b/tests/ui/issues/issue-2849.rs
@@ -0,0 +1,8 @@
+enum Foo { Alpha, Beta(isize) }
+
+fn main() {
+ match Foo::Alpha {
+ Foo::Alpha | Foo::Beta(i) => {}
+ //~^ ERROR variable `i` is not bound in all patterns
+ }
+}
diff --git a/tests/ui/issues/issue-2849.stderr b/tests/ui/issues/issue-2849.stderr
new file mode 100644
index 000000000..9027098d2
--- /dev/null
+++ b/tests/ui/issues/issue-2849.stderr
@@ -0,0 +1,11 @@
+error[E0408]: variable `i` is not bound in all patterns
+ --> $DIR/issue-2849.rs:5:7
+ |
+LL | Foo::Alpha | Foo::Beta(i) => {}
+ | ^^^^^^^^^^ - variable not in all patterns
+ | |
+ | pattern doesn't bind `i`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0408`.
diff --git a/tests/ui/issues/issue-28498-must-work-ex1.rs b/tests/ui/issues/issue-28498-must-work-ex1.rs
new file mode 100644
index 000000000..ab6d190e0
--- /dev/null
+++ b/tests/ui/issues/issue-28498-must-work-ex1.rs
@@ -0,0 +1,18 @@
+// run-pass
+// Example taken from RFC 1238 text
+
+// https://github.com/rust-lang/rfcs/blob/master/text/1238-nonparametric-dropck.md
+// #examples-of-code-that-must-continue-to-work
+
+use std::cell::Cell;
+
+struct Concrete<'a>(#[allow(unused_tuple_struct_fields)] u32, Cell<Option<&'a Concrete<'a>>>);
+
+fn main() {
+ let mut data = Vec::new();
+ data.push(Concrete(0, Cell::new(None)));
+ data.push(Concrete(0, Cell::new(None)));
+
+ data[0].1.set(Some(&data[1]));
+ data[1].1.set(Some(&data[0]));
+}
diff --git a/tests/ui/issues/issue-28498-must-work-ex2.rs b/tests/ui/issues/issue-28498-must-work-ex2.rs
new file mode 100644
index 000000000..378d736ee
--- /dev/null
+++ b/tests/ui/issues/issue-28498-must-work-ex2.rs
@@ -0,0 +1,20 @@
+// run-pass
+// Example taken from RFC 1238 text
+
+// https://github.com/rust-lang/rfcs/blob/master/text/1238-nonparametric-dropck.md
+// #examples-of-code-that-must-continue-to-work
+
+use std::cell::Cell;
+
+struct Concrete<'a>(#[allow(unused_tuple_struct_fields)] u32, Cell<Option<&'a Concrete<'a>>>);
+
+struct Foo<T> { data: Vec<T> }
+
+fn main() {
+ let mut foo = Foo { data: Vec::new() };
+ foo.data.push(Concrete(0, Cell::new(None)));
+ foo.data.push(Concrete(0, Cell::new(None)));
+
+ foo.data[0].1.set(Some(&foo.data[1]));
+ foo.data[1].1.set(Some(&foo.data[0]));
+}
diff --git a/tests/ui/issues/issue-28498-ugeh-ex1.rs b/tests/ui/issues/issue-28498-ugeh-ex1.rs
new file mode 100644
index 000000000..24bf706ce
--- /dev/null
+++ b/tests/ui/issues/issue-28498-ugeh-ex1.rs
@@ -0,0 +1,27 @@
+// run-pass
+
+// Example taken from RFC 1238 text
+
+// https://github.com/rust-lang/rfcs/blob/master/text/1238-nonparametric-dropck.md
+// #example-of-the-unguarded-escape-hatch
+
+#![feature(dropck_eyepatch)]
+use std::cell::Cell;
+
+struct Concrete<'a>(#[allow(unused_tuple_struct_fields)] u32, Cell<Option<&'a Concrete<'a>>>);
+
+struct Foo<T> { data: Vec<T> }
+
+// Below is the UGEH attribute
+unsafe impl<#[may_dangle] T> Drop for Foo<T> {
+ fn drop(&mut self) { }
+}
+
+fn main() {
+ let mut foo = Foo { data: Vec::new() };
+ foo.data.push(Concrete(0, Cell::new(None)));
+ foo.data.push(Concrete(0, Cell::new(None)));
+
+ foo.data[0].1.set(Some(&foo.data[1]));
+ foo.data[1].1.set(Some(&foo.data[0]));
+}
diff --git a/tests/ui/issues/issue-28550.rs b/tests/ui/issues/issue-28550.rs
new file mode 100644
index 000000000..95583f805
--- /dev/null
+++ b/tests/ui/issues/issue-28550.rs
@@ -0,0 +1,16 @@
+// run-pass
+struct A<F: FnOnce()->T,T>(F::Output);
+struct B<F: FnOnce()->T,T>(A<F,T>);
+
+// Removing Option causes it to compile.
+fn foo<T,F: FnOnce()->T>(f: F) -> Option<B<F,T>> {
+ Some(B(A(f())))
+}
+
+fn main() {
+ let v = (|| foo(||4))();
+ match v {
+ Some(B(A(4))) => {},
+ _ => unreachable!()
+ }
+}
diff --git a/tests/ui/issues/issue-28561.rs b/tests/ui/issues/issue-28561.rs
new file mode 100644
index 000000000..beb12c36d
--- /dev/null
+++ b/tests/ui/issues/issue-28561.rs
@@ -0,0 +1,73 @@
+// check-pass
+#[derive(Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd, Clone, Copy)]
+struct Array<T> {
+ f00: [T; 00],
+ f01: [T; 01],
+ f02: [T; 02],
+ f03: [T; 03],
+ f04: [T; 04],
+ f05: [T; 05],
+ f06: [T; 06],
+ f07: [T; 07],
+ f08: [T; 08],
+ f09: [T; 09],
+ f10: [T; 10],
+ f11: [T; 11],
+ f12: [T; 12],
+ f13: [T; 13],
+ f14: [T; 14],
+ f15: [T; 15],
+ f16: [T; 16],
+ f17: [T; 17],
+ f18: [T; 18],
+ f19: [T; 19],
+ f20: [T; 20],
+ f21: [T; 21],
+ f22: [T; 22],
+ f23: [T; 23],
+ f24: [T; 24],
+ f25: [T; 25],
+ f26: [T; 26],
+ f27: [T; 27],
+ f28: [T; 28],
+ f29: [T; 29],
+ f30: [T; 30],
+ f31: [T; 31],
+ f32: [T; 32],
+}
+
+#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
+struct Fn<A, B, C, D, E, F, G, H, I, J, K, L> {
+ f00: fn(),
+ f01: fn(A),
+ f02: fn(A, B),
+ f03: fn(A, B, C),
+ f04: fn(A, B, C, D),
+ f05: fn(A, B, C, D, E),
+ f06: fn(A, B, C, D, E, F),
+ f07: fn(A, B, C, D, E, F, G),
+ f08: fn(A, B, C, D, E, F, G, H),
+ f09: fn(A, B, C, D, E, F, G, H, I),
+ f10: fn(A, B, C, D, E, F, G, H, I, J),
+ f11: fn(A, B, C, D, E, F, G, H, I, J, K),
+ f12: fn(A, B, C, D, E, F, G, H, I, J, K, L),
+}
+
+#[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
+struct Tuple<A, B, C, D, E, F, G, H, I, J, K, L> {
+ f00: (),
+ f01: (A),
+ f02: (A, B),
+ f03: (A, B, C),
+ f04: (A, B, C, D),
+ f05: (A, B, C, D, E),
+ f06: (A, B, C, D, E, F),
+ f07: (A, B, C, D, E, F, G),
+ f08: (A, B, C, D, E, F, G, H),
+ f09: (A, B, C, D, E, F, G, H, I),
+ f10: (A, B, C, D, E, F, G, H, I, J),
+ f11: (A, B, C, D, E, F, G, H, I, J, K),
+ f12: (A, B, C, D, E, F, G, H, I, J, K, L),
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-28568.rs b/tests/ui/issues/issue-28568.rs
new file mode 100644
index 000000000..ce511158f
--- /dev/null
+++ b/tests/ui/issues/issue-28568.rs
@@ -0,0 +1,12 @@
+struct MyStruct;
+
+impl Drop for MyStruct {
+ fn drop(&mut self) { }
+}
+
+impl Drop for MyStruct {
+//~^ ERROR conflicting implementations of trait
+ fn drop(&mut self) { }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-28568.stderr b/tests/ui/issues/issue-28568.stderr
new file mode 100644
index 000000000..960259080
--- /dev/null
+++ b/tests/ui/issues/issue-28568.stderr
@@ -0,0 +1,12 @@
+error[E0119]: conflicting implementations of trait `Drop` for type `MyStruct`
+ --> $DIR/issue-28568.rs:7:1
+ |
+LL | impl Drop for MyStruct {
+ | ---------------------- first implementation here
+...
+LL | impl Drop for MyStruct {
+ | ^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `MyStruct`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/tests/ui/issues/issue-28586.rs b/tests/ui/issues/issue-28586.rs
new file mode 100644
index 000000000..c543ef9b0
--- /dev/null
+++ b/tests/ui/issues/issue-28586.rs
@@ -0,0 +1,7 @@
+// Regression test for issue #28586
+
+pub trait Foo {}
+impl Foo for [u8; usize::BYTES] {}
+//~^ ERROR no associated item named `BYTES` found
+
+fn main() { }
diff --git a/tests/ui/issues/issue-28586.stderr b/tests/ui/issues/issue-28586.stderr
new file mode 100644
index 000000000..d19c4af2d
--- /dev/null
+++ b/tests/ui/issues/issue-28586.stderr
@@ -0,0 +1,9 @@
+error[E0599]: no associated item named `BYTES` found for type `usize` in the current scope
+ --> $DIR/issue-28586.rs:4:26
+ |
+LL | impl Foo for [u8; usize::BYTES] {}
+ | ^^^^^ associated item not found in `usize`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-28600.rs b/tests/ui/issues/issue-28600.rs
new file mode 100644
index 000000000..52db0d5fd
--- /dev/null
+++ b/tests/ui/issues/issue-28600.rs
@@ -0,0 +1,15 @@
+// build-pass
+// #28600 ICE: pub extern fn with parameter type &str inside struct impl
+
+struct Test;
+
+impl Test {
+ #[allow(dead_code)]
+ #[allow(unused_variables)]
+ #[allow(improper_ctypes_definitions)]
+ pub extern "C" fn test(val: &str) {
+
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-28625.rs b/tests/ui/issues/issue-28625.rs
new file mode 100644
index 000000000..15a6a63d5
--- /dev/null
+++ b/tests/ui/issues/issue-28625.rs
@@ -0,0 +1,22 @@
+// normalize-stderr-test "\d+ bits" -> "N bits"
+
+trait Bar {
+ type Bar;
+}
+
+struct ArrayPeano<T: Bar> {
+ data: T::Bar,
+}
+
+fn foo<T>(a: &ArrayPeano<T>) -> &[T] where T: Bar {
+ unsafe { std::mem::transmute(a) } //~ ERROR cannot transmute between types of different sizes
+}
+
+impl Bar for () {
+ type Bar = ();
+}
+
+fn main() {
+ let x: ArrayPeano<()> = ArrayPeano { data: () };
+ foo(&x);
+}
diff --git a/tests/ui/issues/issue-28625.stderr b/tests/ui/issues/issue-28625.stderr
new file mode 100644
index 000000000..7ee0cd486
--- /dev/null
+++ b/tests/ui/issues/issue-28625.stderr
@@ -0,0 +1,12 @@
+error[E0512]: cannot transmute between types of different sizes, or dependently-sized types
+ --> $DIR/issue-28625.rs:12:14
+ |
+LL | unsafe { std::mem::transmute(a) }
+ | ^^^^^^^^^^^^^^^^^^^
+ |
+ = note: source type: `&ArrayPeano<T>` (N bits)
+ = note: target type: `&[T]` (N bits)
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0512`.
diff --git a/tests/ui/issues/issue-28776.mir.stderr b/tests/ui/issues/issue-28776.mir.stderr
new file mode 100644
index 000000000..1d470fb5e
--- /dev/null
+++ b/tests/ui/issues/issue-28776.mir.stderr
@@ -0,0 +1,11 @@
+error[E0133]: call to unsafe function is unsafe and requires unsafe function or block
+ --> $DIR/issue-28776.rs:7:5
+ |
+LL | (&ptr::write)(1 as *mut _, 42);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
+ |
+ = note: consult the function's documentation for information on how to avoid undefined behavior
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0133`.
diff --git a/tests/ui/issues/issue-28776.rs b/tests/ui/issues/issue-28776.rs
new file mode 100644
index 000000000..19df3c4a4
--- /dev/null
+++ b/tests/ui/issues/issue-28776.rs
@@ -0,0 +1,9 @@
+// revisions: mir thir
+// [thir]compile-flags: -Z thir-unsafeck
+
+use std::ptr;
+
+fn main() {
+ (&ptr::write)(1 as *mut _, 42);
+ //~^ ERROR E0133
+}
diff --git a/tests/ui/issues/issue-28776.thir.stderr b/tests/ui/issues/issue-28776.thir.stderr
new file mode 100644
index 000000000..e3562810b
--- /dev/null
+++ b/tests/ui/issues/issue-28776.thir.stderr
@@ -0,0 +1,11 @@
+error[E0133]: call to unsafe function `std::ptr::write` is unsafe and requires unsafe function or block
+ --> $DIR/issue-28776.rs:7:5
+ |
+LL | (&ptr::write)(1 as *mut _, 42);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
+ |
+ = note: consult the function's documentation for information on how to avoid undefined behavior
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0133`.
diff --git a/tests/ui/issues/issue-28777.rs b/tests/ui/issues/issue-28777.rs
new file mode 100644
index 000000000..1f426b718
--- /dev/null
+++ b/tests/ui/issues/issue-28777.rs
@@ -0,0 +1,22 @@
+// run-pass
+#![allow(unused_braces)]
+fn main() {
+ let v1 = { 1 + {2} * {3} };
+ let v2 = 1 + {2} * {3} ;
+
+ assert_eq!(7, v1);
+ assert_eq!(7, v2);
+
+ let v3;
+ v3 = { 1 + {2} * {3} };
+ let v4;
+ v4 = 1 + {2} * {3};
+ assert_eq!(7, v3);
+ assert_eq!(7, v4);
+
+ let v5 = { 1 + {2} * 3 };
+ assert_eq!(7, v5);
+
+ let v9 = { 1 + if 1 > 2 {1} else {2} * {3} };
+ assert_eq!(7, v9);
+}
diff --git a/tests/ui/issues/issue-28822.rs b/tests/ui/issues/issue-28822.rs
new file mode 100644
index 000000000..10e5d1dd0
--- /dev/null
+++ b/tests/ui/issues/issue-28822.rs
@@ -0,0 +1,7 @@
+// check-pass
+#![allow(dead_code)]
+
+fn main() {}
+
+const fn size_ofs(_: usize) {}
+const fn size_ofs2(_foo: usize) {}
diff --git a/tests/ui/issues/issue-28828.rs b/tests/ui/issues/issue-28828.rs
new file mode 100644
index 000000000..03968809e
--- /dev/null
+++ b/tests/ui/issues/issue-28828.rs
@@ -0,0 +1,18 @@
+// run-pass
+pub trait Foo {
+ type Out;
+}
+
+impl Foo for () {
+ type Out = bool;
+}
+
+fn main() {
+ type Bool = <() as Foo>::Out;
+
+ let x: Bool = true;
+ assert!(x);
+
+ let y: Option<Bool> = None;
+ assert_eq!(y, None);
+}
diff --git a/tests/ui/issues/issue-28839.rs b/tests/ui/issues/issue-28839.rs
new file mode 100644
index 000000000..73be87a0c
--- /dev/null
+++ b/tests/ui/issues/issue-28839.rs
@@ -0,0 +1,15 @@
+// run-pass
+// ignore-pretty issue #37199
+
+pub struct Foo;
+
+pub fn get_foo2<'a>(foo: &'a mut Option<&'a mut Foo>) -> &'a mut Foo {
+ match foo {
+ // Ensure that this is not considered a move, but rather a reborrow.
+ &mut Some(ref mut x) => *x,
+ &mut None => panic!(),
+ }
+}
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-28936.rs b/tests/ui/issues/issue-28936.rs
new file mode 100644
index 000000000..da9e92c0c
--- /dev/null
+++ b/tests/ui/issues/issue-28936.rs
@@ -0,0 +1,27 @@
+// check-pass
+pub type Session = i32;
+pub struct StreamParser<'a, T> {
+ _tokens: T,
+ _session: &'a mut Session,
+}
+
+impl<'a, T> StreamParser<'a, T> {
+ pub fn thing(&mut self) -> bool { true }
+}
+
+pub fn parse_stream<T: Iterator<Item=i32>, U, F>(
+ _session: &mut Session, _tokens: T, _f: F) -> U
+ where F: Fn(&mut StreamParser<T>) -> U { panic!(); }
+
+pub fn thing(session: &mut Session) {
+ let mut stream = vec![1, 2, 3].into_iter();
+
+ let _b = parse_stream(session,
+ stream.by_ref(),
+ // replacing the above with the following fixes it
+ //&mut stream,
+ |p| p.thing());
+
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-2895.rs b/tests/ui/issues/issue-2895.rs
new file mode 100644
index 000000000..d8c08996b
--- /dev/null
+++ b/tests/ui/issues/issue-2895.rs
@@ -0,0 +1,28 @@
+// run-pass
+#![allow(dead_code)]
+
+use std::mem;
+
+struct Cat {
+ x: isize
+}
+
+struct Kitty {
+ x: isize,
+}
+
+impl Drop for Kitty {
+ fn drop(&mut self) {}
+}
+
+#[cfg(target_pointer_width = "64")]
+pub fn main() {
+ assert_eq!(mem::size_of::<Cat>(), 8 as usize);
+ assert_eq!(mem::size_of::<Kitty>(), 8 as usize);
+}
+
+#[cfg(target_pointer_width = "32")]
+pub fn main() {
+ assert_eq!(mem::size_of::<Cat>(), 4 as usize);
+ assert_eq!(mem::size_of::<Kitty>(), 4 as usize);
+}
diff --git a/tests/ui/issues/issue-28971.rs b/tests/ui/issues/issue-28971.rs
new file mode 100644
index 000000000..f0a1e2d00
--- /dev/null
+++ b/tests/ui/issues/issue-28971.rs
@@ -0,0 +1,16 @@
+enum Foo {
+ Bar(u8)
+}
+fn main(){
+ foo(|| {
+ match Foo::Bar(1) {
+ Foo::Baz(..) => (),
+ //~^ ERROR no variant or associated item named `Baz` found
+ _ => (),
+ }
+ });
+}
+
+fn foo<F>(f: F) where F: FnMut() {
+ f();
+}
diff --git a/tests/ui/issues/issue-28971.stderr b/tests/ui/issues/issue-28971.stderr
new file mode 100644
index 000000000..2eb8a1c26
--- /dev/null
+++ b/tests/ui/issues/issue-28971.stderr
@@ -0,0 +1,15 @@
+error[E0599]: no variant or associated item named `Baz` found for enum `Foo` in the current scope
+ --> $DIR/issue-28971.rs:7:18
+ |
+LL | enum Foo {
+ | -------- variant or associated item `Baz` not found for this enum
+...
+LL | Foo::Baz(..) => (),
+ | ^^^
+ | |
+ | variant or associated item not found in `Foo`
+ | help: there is a variant with a similar name: `Bar`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-28983.rs b/tests/ui/issues/issue-28983.rs
new file mode 100644
index 000000000..3db26a1ee
--- /dev/null
+++ b/tests/ui/issues/issue-28983.rs
@@ -0,0 +1,22 @@
+// run-pass
+pub trait Test { type T; }
+
+impl Test for u32 {
+ type T = i32;
+}
+
+pub mod export {
+ #[no_mangle]
+ pub extern "C" fn issue_28983(t: <u32 as ::Test>::T) -> i32 { t*3 }
+}
+
+// to test both exporting and importing functions, import
+// a function from ourselves.
+extern "C" {
+ fn issue_28983(t: <u32 as Test>::T) -> i32;
+}
+
+fn main() {
+ assert_eq!(export::issue_28983(2), 6);
+ assert_eq!(unsafe { issue_28983(3) }, 9);
+}
diff --git a/tests/ui/issues/issue-28992-empty.rs b/tests/ui/issues/issue-28992-empty.rs
new file mode 100644
index 000000000..74cfeb6db
--- /dev/null
+++ b/tests/ui/issues/issue-28992-empty.rs
@@ -0,0 +1,16 @@
+// Can't use constants as tuple struct patterns
+
+
+const C1: i32 = 0;
+
+struct S;
+
+impl S {
+ const C2: i32 = 0;
+}
+
+fn main() {
+ if let C1(..) = 0 {} //~ ERROR expected tuple struct or tuple variant, found constant `C1`
+ if let S::C2(..) = 0 {}
+ //~^ ERROR expected tuple struct or tuple variant, found associated constant `S::C2`
+}
diff --git a/tests/ui/issues/issue-28992-empty.stderr b/tests/ui/issues/issue-28992-empty.stderr
new file mode 100644
index 000000000..f69773b8c
--- /dev/null
+++ b/tests/ui/issues/issue-28992-empty.stderr
@@ -0,0 +1,16 @@
+error[E0532]: expected tuple struct or tuple variant, found constant `C1`
+ --> $DIR/issue-28992-empty.rs:13:12
+ |
+LL | if let C1(..) = 0 {}
+ | ^^ not a tuple struct or tuple variant
+
+error[E0164]: expected tuple struct or tuple variant, found associated constant `S::C2`
+ --> $DIR/issue-28992-empty.rs:14:12
+ |
+LL | if let S::C2(..) = 0 {}
+ | ^^^^^^^^^ not a tuple struct or tuple variant
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0164, E0532.
+For more information about an error, try `rustc --explain E0164`.
diff --git a/tests/ui/issues/issue-28999.rs b/tests/ui/issues/issue-28999.rs
new file mode 100644
index 000000000..cec3e25da
--- /dev/null
+++ b/tests/ui/issues/issue-28999.rs
@@ -0,0 +1,11 @@
+// check-pass
+pub struct Xyz<'a, V> {
+ pub v: (V, &'a u32),
+}
+
+pub fn eq<'a, 's, 't, V>(this: &'s Xyz<'a, V>, other: &'t Xyz<'a, V>) -> bool
+ where V: PartialEq {
+ this.v == other.v
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-29030.rs b/tests/ui/issues/issue-29030.rs
new file mode 100644
index 000000000..723e35840
--- /dev/null
+++ b/tests/ui/issues/issue-29030.rs
@@ -0,0 +1,9 @@
+// check-pass
+#![allow(dead_code)]
+#[derive(Debug)]
+struct Message<'a, P: 'a = &'a [u8]> {
+ header: &'a [u8],
+ payload: P,
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-29037.rs b/tests/ui/issues/issue-29037.rs
new file mode 100644
index 000000000..155ed144b
--- /dev/null
+++ b/tests/ui/issues/issue-29037.rs
@@ -0,0 +1,24 @@
+// check-pass
+#![allow(dead_code)]
+// This test ensures that each pointer type `P<X>` is covariant in `X`.
+
+use std::rc::Rc;
+use std::sync::Arc;
+
+fn a<'r>(x: Box<&'static str>) -> Box<&'r str> {
+ x
+}
+
+fn b<'r, 'w>(x: &'w &'static str) -> &'w &'r str {
+ x
+}
+
+fn c<'r>(x: Arc<&'static str>) -> Arc<&'r str> {
+ x
+}
+
+fn d<'r>(x: Rc<&'static str>) -> Rc<&'r str> {
+ x
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-2904.rs b/tests/ui/issues/issue-2904.rs
new file mode 100644
index 000000000..73aa78f09
--- /dev/null
+++ b/tests/ui/issues/issue-2904.rs
@@ -0,0 +1,79 @@
+// build-pass
+#![allow(unused_must_use)]
+#![allow(dead_code)]
+#![allow(unused_mut)]
+#![allow(non_camel_case_types)]
+
+// Map representation
+
+use std::fmt;
+use std::io::prelude::*;
+use square::{bot, wall, rock, lambda, closed_lift, open_lift, earth, empty};
+
+enum square {
+ bot,
+ wall,
+ rock,
+ lambda,
+ closed_lift,
+ open_lift,
+ earth,
+ empty
+}
+
+impl fmt::Debug for square {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ write!(f, "{}", match *self {
+ bot => { "R".to_string() }
+ wall => { "#".to_string() }
+ rock => { "*".to_string() }
+ lambda => { "\\".to_string() }
+ closed_lift => { "L".to_string() }
+ open_lift => { "O".to_string() }
+ earth => { ".".to_string() }
+ empty => { " ".to_string() }
+ })
+ }
+}
+
+fn square_from_char(c: char) -> square {
+ match c {
+ 'R' => { bot }
+ '#' => { wall }
+ '*' => { rock }
+ '\\' => { lambda }
+ 'L' => { closed_lift }
+ 'O' => { open_lift }
+ '.' => { earth }
+ ' ' => { empty }
+ _ => {
+ println!("invalid square: {}", c);
+ panic!()
+ }
+ }
+}
+
+fn read_board_grid<rdr:'static + Read>(mut input: rdr)
+ -> Vec<Vec<square>> {
+ let mut input: &mut dyn Read = &mut input;
+ let mut grid = Vec::new();
+ let mut line = [0; 10];
+ input.read(&mut line);
+ let mut row = Vec::new();
+ for c in &line {
+ row.push(square_from_char(*c as char))
+ }
+ grid.push(row);
+ let width = grid[0].len();
+ for row in &grid { assert_eq!(row.len(), width) }
+ grid
+}
+
+mod test {
+ #[test]
+ pub fn trivial_to_string() {
+ assert_eq!(lambda.to_string(), "\\")
+ }
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-29048.rs b/tests/ui/issues/issue-29048.rs
new file mode 100644
index 000000000..039f072f1
--- /dev/null
+++ b/tests/ui/issues/issue-29048.rs
@@ -0,0 +1,12 @@
+// check-pass
+pub struct Chan;
+pub struct ChanSelect<'c, T> {
+ chans: Vec<(&'c Chan, T)>,
+}
+impl<'c, T> ChanSelect<'c, T> {
+ pub fn add_recv_ret(&mut self, chan: &'c Chan, ret: T)
+ {
+ self.chans.push((chan, ret));
+ }
+}
+fn main() {}
diff --git a/tests/ui/issues/issue-29053.rs b/tests/ui/issues/issue-29053.rs
new file mode 100644
index 000000000..34c4a0f8f
--- /dev/null
+++ b/tests/ui/issues/issue-29053.rs
@@ -0,0 +1,12 @@
+// run-pass
+fn main() {
+ let x: &'static str = "x";
+
+ {
+ let y = "y".to_string();
+ let ref mut x = &*x;
+ *x = &*y;
+ }
+
+ assert_eq!(x, "x");
+}
diff --git a/tests/ui/issues/issue-29071-2.rs b/tests/ui/issues/issue-29071-2.rs
new file mode 100644
index 000000000..f27bf0261
--- /dev/null
+++ b/tests/ui/issues/issue-29071-2.rs
@@ -0,0 +1,32 @@
+// run-pass
+#![allow(dead_code)]
+fn t1() -> u32 {
+ let x;
+ x = if true { [1, 2, 3] } else { [2, 3, 4] }[0];
+ x
+}
+
+fn t2() -> [u32; 1] {
+ if true { [1, 2, 3]; } else { [2, 3, 4]; }
+ [0]
+}
+
+fn t3() -> u32 {
+ let x;
+ x = if true { i1 as F } else { i2 as F }();
+ x
+}
+
+fn t4() -> () {
+ if true { i1 as F; } else { i2 as F; }
+ ()
+}
+
+type F = fn() -> u32;
+fn i1() -> u32 { 1 }
+fn i2() -> u32 { 2 }
+
+fn main() {
+ assert_eq!(t1(), 1);
+ assert_eq!(t3(), 1);
+}
diff --git a/tests/ui/issues/issue-29071.rs b/tests/ui/issues/issue-29071.rs
new file mode 100644
index 000000000..8bdacf2ce
--- /dev/null
+++ b/tests/ui/issues/issue-29071.rs
@@ -0,0 +1,16 @@
+// check-pass
+#![allow(dead_code)]
+#![allow(non_upper_case_globals)]
+
+fn ret() -> u32 {
+ static x: u32 = 10;
+ x & if true { 10u32 } else { 20u32 } & x
+}
+
+fn ret2() -> &'static u32 {
+ static x: u32 = 10;
+ if true { 10u32; } else { 20u32; }
+ &x
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-29092.rs b/tests/ui/issues/issue-29092.rs
new file mode 100644
index 000000000..f20d2a424
--- /dev/null
+++ b/tests/ui/issues/issue-29092.rs
@@ -0,0 +1,26 @@
+// run-pass
+// Regression test for Issue #29092.
+//
+// (Possibly redundant with regression test run-pass/issue-30530.rs)
+
+use self::Term::*;
+
+#[derive(Clone)]
+pub enum Term {
+ Dummy,
+ A(Box<Term>),
+ B(Box<Term>),
+}
+
+// a small-step evaluator
+pub fn small_eval(v: Term) -> Term {
+ match v {
+ A(t) => *t.clone(),
+ B(t) => *t.clone(),
+ _ => Dummy,
+ }
+}
+
+fn main() {
+ small_eval(Dummy);
+}
diff --git a/tests/ui/issues/issue-29147-rpass.rs b/tests/ui/issues/issue-29147-rpass.rs
new file mode 100644
index 000000000..439f8bb53
--- /dev/null
+++ b/tests/ui/issues/issue-29147-rpass.rs
@@ -0,0 +1,28 @@
+// run-pass
+#![recursion_limit="1024"]
+#![allow(dead_code)]
+
+use std::mem;
+
+pub struct S0<T>(T,T);
+pub struct S1<T>(Option<Box<S0<S0<T>>>>,Option<Box<S0<S0<T>>>>);
+pub struct S2<T>(Option<Box<S1<S1<T>>>>,Option<Box<S1<S1<T>>>>);
+pub struct S3<T>(Option<Box<S2<S2<T>>>>,Option<Box<S2<S2<T>>>>);
+pub struct S4<T>(Option<Box<S3<S3<T>>>>,Option<Box<S3<S3<T>>>>);
+pub struct S5<T>(Option<Box<S4<S4<T>>>>,Option<Box<S4<S4<T>>>>,Option<T>);
+
+trait Foo { fn xxx(&self); }
+/// some local of #[fundamental] trait
+trait Bar {}
+
+impl<T> Foo for T where T: Bar, T: Sync {
+ fn xxx(&self) {}
+}
+
+impl Foo for S5<u8> { fn xxx(&self) {} }
+
+fn main() {
+ let s = S5(None,None,None);
+ s.xxx();
+ assert_eq!(mem::size_of_val(&s.2), mem::size_of::<Option<u8>>());
+}
diff --git a/tests/ui/issues/issue-29147.rs b/tests/ui/issues/issue-29147.rs
new file mode 100644
index 000000000..190ecf460
--- /dev/null
+++ b/tests/ui/issues/issue-29147.rs
@@ -0,0 +1,23 @@
+#![recursion_limit="1024"]
+#![allow(dead_code)]
+
+pub struct S0<T>(T,T);
+pub struct S1<T>(Option<Box<S0<S0<T>>>>,Option<Box<S0<S0<T>>>>);
+pub struct S2<T>(Option<Box<S1<S1<T>>>>,Option<Box<S1<S1<T>>>>);
+pub struct S3<T>(Option<Box<S2<S2<T>>>>,Option<Box<S2<S2<T>>>>);
+pub struct S4<T>(Option<Box<S3<S3<T>>>>,Option<Box<S3<S3<T>>>>);
+pub struct S5<T>(Option<Box<S4<S4<T>>>>,Option<Box<S4<S4<T>>>>,Option<T>);
+
+trait Foo { fn xxx(&self); }
+trait Bar {} // anything local or #[fundamental]
+
+impl<T> Foo for T where T: Bar, T: Sync {
+ fn xxx(&self) {}
+}
+
+impl Foo for S5<u32> { fn xxx(&self) {} }
+impl Foo for S5<u64> { fn xxx(&self) {} }
+
+fn main() {
+ let _ = <S5<_>>::xxx; //~ ERROR type annotations needed
+}
diff --git a/tests/ui/issues/issue-29147.stderr b/tests/ui/issues/issue-29147.stderr
new file mode 100644
index 000000000..138d477dc
--- /dev/null
+++ b/tests/ui/issues/issue-29147.stderr
@@ -0,0 +1,17 @@
+error[E0283]: type annotations needed
+ --> $DIR/issue-29147.rs:22:13
+ |
+LL | let _ = <S5<_>>::xxx;
+ | ^^^^^^^^^^^^ cannot infer type for struct `S5<_>`
+ |
+note: multiple `impl`s satisfying `S5<_>: Foo` found
+ --> $DIR/issue-29147.rs:18:1
+ |
+LL | impl Foo for S5<u32> { fn xxx(&self) {} }
+ | ^^^^^^^^^^^^^^^^^^^^
+LL | impl Foo for S5<u64> { fn xxx(&self) {} }
+ | ^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0283`.
diff --git a/tests/ui/issues/issue-29181.rs b/tests/ui/issues/issue-29181.rs
new file mode 100644
index 000000000..70e5bc019
--- /dev/null
+++ b/tests/ui/issues/issue-29181.rs
@@ -0,0 +1,9 @@
+// aux-build:issue-29181.rs
+
+extern crate issue_29181 as foo;
+
+fn main() {
+ 0.homura(); //~ ERROR no method named `homura` found
+ // Issue #47759, detect existing method on the fundamental impl:
+ let _ = |x: f64| x * 2.0.exp(); //~ ERROR can't call method `exp` on ambiguous numeric type
+}
diff --git a/tests/ui/issues/issue-29181.stderr b/tests/ui/issues/issue-29181.stderr
new file mode 100644
index 000000000..53addf2fe
--- /dev/null
+++ b/tests/ui/issues/issue-29181.stderr
@@ -0,0 +1,21 @@
+error[E0599]: no method named `homura` found for type `{integer}` in the current scope
+ --> $DIR/issue-29181.rs:6:7
+ |
+LL | 0.homura();
+ | ^^^^^^ method not found in `{integer}`
+
+error[E0689]: can't call method `exp` on ambiguous numeric type `{float}`
+ --> $DIR/issue-29181.rs:8:30
+ |
+LL | let _ = |x: f64| x * 2.0.exp();
+ | ^^^
+ |
+help: you must specify a concrete type for this numeric value, like `f32`
+ |
+LL | let _ = |x: f64| x * 2.0_f32.exp();
+ | ~~~~~~~
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0599, E0689.
+For more information about an error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-29265.rs b/tests/ui/issues/issue-29265.rs
new file mode 100644
index 000000000..f554c4d16
--- /dev/null
+++ b/tests/ui/issues/issue-29265.rs
@@ -0,0 +1,10 @@
+// aux-build:issue-29265.rs
+// check-pass
+
+extern crate issue_29265 as lib;
+
+static _UNUSED: &'static lib::SomeType = &lib::SOME_VALUE;
+
+fn main() {
+ vec![0u8; lib::SOME_VALUE.some_member];
+}
diff --git a/tests/ui/issues/issue-29276.rs b/tests/ui/issues/issue-29276.rs
new file mode 100644
index 000000000..02b695659
--- /dev/null
+++ b/tests/ui/issues/issue-29276.rs
@@ -0,0 +1,5 @@
+// check-pass
+#![allow(dead_code)]
+struct S([u8; { struct Z; 0 }]);
+
+fn main() {}
diff --git a/tests/ui/issues/issue-2935.rs b/tests/ui/issues/issue-2935.rs
new file mode 100644
index 000000000..37f818199
--- /dev/null
+++ b/tests/ui/issues/issue-2935.rs
@@ -0,0 +1,28 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(non_camel_case_types)]
+
+//type t = { a: isize };
+// type t = { a: bool };
+type t = bool;
+
+trait it {
+ fn f(&self);
+}
+
+impl it for t {
+ fn f(&self) { }
+}
+
+pub fn main() {
+ // let x = ({a: 4} as it);
+ // let y = box ({a: 4});
+ // let z = box ({a: 4} as it);
+ // let z = box ({a: true} as it);
+ let z: Box<_> = Box::new(Box::new(true) as Box<dyn it>);
+ // x.f();
+ // y.f();
+ // (*z).f();
+ println!("ok so far...");
+ z.f(); //segfault
+}
diff --git a/tests/ui/issues/issue-29466.rs b/tests/ui/issues/issue-29466.rs
new file mode 100644
index 000000000..f8785a632
--- /dev/null
+++ b/tests/ui/issues/issue-29466.rs
@@ -0,0 +1,3603 @@
+// ignore-tidy-filelength
+//
+// run-pass
+
+#![allow(unused_variables)]
+
+macro_rules! m(
+ ($e1:expr => $e2:expr) => ({ $e1 })
+);
+
+fn main() {
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+ let x = m!(1 => 2);
+
+ println!("{}", x);
+}
diff --git a/tests/ui/issues/issue-29485.rs b/tests/ui/issues/issue-29485.rs
new file mode 100644
index 000000000..8d58ee6d9
--- /dev/null
+++ b/tests/ui/issues/issue-29485.rs
@@ -0,0 +1,19 @@
+// run-pass
+#![allow(unused_attributes)]
+// aux-build:issue-29485.rs
+// needs-unwind
+// ignore-emscripten no threads
+
+#[feature(recover)]
+
+extern crate a;
+
+fn main() {
+ let _ = std::thread::spawn(move || {
+ a::f(&mut a::X(0), g);
+ }).join();
+}
+
+fn g() {
+ panic!();
+}
diff --git a/tests/ui/issues/issue-2951.rs b/tests/ui/issues/issue-2951.rs
new file mode 100644
index 000000000..1798e3e75
--- /dev/null
+++ b/tests/ui/issues/issue-2951.rs
@@ -0,0 +1,11 @@
+fn foo<T, U>(x: T, y: U) {
+ let mut xx = x;
+ xx = y;
+ //~^ ERROR mismatched types
+ //~| expected type parameter `T`, found type parameter `U`
+ //~| expected type parameter `T`
+ //~| found type parameter `U`
+}
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-2951.stderr b/tests/ui/issues/issue-2951.stderr
new file mode 100644
index 000000000..538bbe2f5
--- /dev/null
+++ b/tests/ui/issues/issue-2951.stderr
@@ -0,0 +1,20 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-2951.rs:3:10
+ |
+LL | fn foo<T, U>(x: T, y: U) {
+ | - - found type parameter
+ | |
+ | expected type parameter
+LL | let mut xx = x;
+ | - expected due to this value
+LL | xx = y;
+ | ^ expected type parameter `T`, found type parameter `U`
+ |
+ = note: expected type parameter `T`
+ found type parameter `U`
+ = note: a type parameter was expected, but a different one was found; you might be missing a type parameter or trait bound
+ = note: for more information, visit https://doc.rust-lang.org/book/ch10-02-traits.html#traits-as-parameters
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-29516.rs b/tests/ui/issues/issue-29516.rs
new file mode 100644
index 000000000..6779d508d
--- /dev/null
+++ b/tests/ui/issues/issue-29516.rs
@@ -0,0 +1,20 @@
+// check-pass
+#![feature(auto_traits)]
+#![feature(negative_impls)]
+
+auto trait NotSame {}
+
+impl<A> !NotSame for (A, A) {}
+
+trait OneOfEach {}
+
+impl<A> OneOfEach for (A,) {}
+
+impl<A, B> OneOfEach for (A, B)
+where
+ (B,): OneOfEach,
+ (A, B): NotSame,
+{
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-29522.rs b/tests/ui/issues/issue-29522.rs
new file mode 100644
index 000000000..3d2de5ef6
--- /dev/null
+++ b/tests/ui/issues/issue-29522.rs
@@ -0,0 +1,17 @@
+// run-pass
+#![allow(unused_variables)]
+// check that we don't accidentally capture upvars just because their name
+// occurs in a path
+
+fn assert_static<T: 'static>(_t: T) {}
+
+mod foo {
+ pub fn scope() {}
+}
+
+fn main() {
+ let scope = &mut 0;
+ assert_static(|| {
+ foo::scope();
+ });
+}
diff --git a/tests/ui/issues/issue-29540.rs b/tests/ui/issues/issue-29540.rs
new file mode 100644
index 000000000..c0de20822
--- /dev/null
+++ b/tests/ui/issues/issue-29540.rs
@@ -0,0 +1,492 @@
+// build-pass
+#[derive(Debug)]
+pub struct Config {
+ pub name: String,
+ pub cluster: String,
+ pub debug_none: String,
+ pub debug_lockdep: String,
+ pub debug_context: String,
+ pub debug_crush: String,
+ pub debug_mds: String,
+ pub debug_mds_balancer: String,
+ pub debug_mds_locker: String,
+ pub debug_mds_log: String,
+ pub debug_mds_log_expire: String,
+ pub debug_mds_migrator: String,
+ pub debug_buffer: String,
+ pub debug_timer: String,
+ pub debug_filer: String,
+ pub debug_striper: String,
+ pub debug_objecter: String,
+ pub debug_rados: String,
+ pub debug_rbd: String,
+ pub debug_journaler: String,
+ pub debug_objectcacher: String,
+ pub debug_client: String,
+ pub debug_osd: String,
+ pub debug_optracker: String,
+ pub debug_objclass: String,
+ pub debug_filestore: String,
+ pub debug_keyvaluestore: String,
+ pub debug_journal: String,
+ pub debug_ms: String,
+ pub debug_mon: String,
+ pub debug_monc: String,
+ pub debug_paxos: String,
+ pub debug_tp: String,
+ pub debug_auth: String,
+ pub debug_crypto: String,
+ pub debug_finisher: String,
+ pub debug_heartbeatmap: String,
+ pub debug_perfcounter: String,
+ pub debug_rgw: String,
+ pub debug_civetweb: String,
+ pub debug_javaclient: String,
+ pub debug_asok: String,
+ pub debug_throttle: String,
+ pub host: String,
+ pub fsid: String,
+ pub public_addr: String,
+ pub cluster_addr: String,
+ pub public_network: String,
+ pub cluster_network: String,
+ pub num_client: String,
+ pub monmap: String,
+ pub mon_host: String,
+ pub lockdep: String,
+ pub run_dir: String,
+ pub admin_socket: String,
+ pub daemonize: String,
+ pub pid_file: String,
+ pub chdir: String,
+ pub max_open_files: String,
+ pub restapi_log_level: String,
+ pub restapi_base_url: String,
+ pub fatal_signal_handlers: String,
+ pub log_file: String,
+ pub log_max_new: String,
+ pub log_max_recent: String,
+ pub log_to_stderr: String,
+ pub err_to_stderr: String,
+ pub log_to_syslog: String,
+ pub err_to_syslog: String,
+ pub log_flush_on_exit: String,
+ pub log_stop_at_utilization: String,
+ pub clog_to_monitors: String,
+ pub clog_to_syslog: String,
+ pub clog_to_syslog_level: String,
+ pub clog_to_syslog_facility: String,
+ pub mon_cluster_log_to_syslog: String,
+ pub mon_cluster_log_to_syslog_level: String,
+ pub mon_cluster_log_to_syslog_facility: String,
+ pub mon_cluster_log_file: String,
+ pub mon_cluster_log_file_level: String,
+ pub key: String,
+ pub keyfile: String,
+ pub keyring: String,
+ pub heartbeat_interval: String,
+ pub heartbeat_file: String,
+ pub heartbeat_inject_failure: String,
+ pub perf: String,
+ pub ms_tcp_nodelay: String,
+ pub ms_tcp_rcvbuf: String,
+ pub ms_initial_backoff: String,
+ pub ms_max_backoff: String,
+ pub ms_nocrc: String,
+ pub ms_die_on_bad_msg: String,
+ pub ms_die_on_unhandled_msg: String,
+ pub ms_die_on_old_message: String,
+ pub ms_dispatch_throttle_bytes: String,
+ pub ms_bind_ipv6: String,
+ pub ms_bind_port_min: String,
+ pub ms_bind_port_max: String,
+ pub ms_rwthread_stack_bytes: String,
+ pub ms_tcp_read_timeout: String,
+ pub ms_pq_max_tokens_per_priority: String,
+ pub ms_pq_min_cost: String,
+ pub ms_inject_socket_failures: String,
+ pub ms_inject_delay_type: String,
+ pub ms_inject_delay_msg_type: String,
+ pub ms_inject_delay_max: String,
+ pub ms_inject_delay_probability: String,
+ pub ms_inject_internal_delays: String,
+ pub ms_dump_on_send: String,
+ pub inject_early_sigterm: String,
+ pub mon_data: String,
+ pub mon_initial_members: String,
+ pub mon_sync_fs_threshold: String,
+ pub mon_compact_on_start: String,
+ pub mon_compact_on_bootstrap: String,
+ pub mon_compact_on_trim: String,
+ pub mon_tick_interval: String,
+ pub mon_subscribe_interval: String,
+ pub mon_delta_reset_interval: String,
+ pub mon_osd_laggy_halflife: String,
+ pub mon_osd_laggy_weight: String,
+ pub mon_osd_adjust_heartbeat_grace: String,
+ pub mon_osd_adjust_down_out_interval: String,
+ pub mon_osd_auto_mark_in: String,
+ pub mon_osd_auto_mark_auto_out_in: String,
+ pub mon_osd_auto_mark_new_in: String,
+ pub mon_osd_down_out_interval: String,
+ pub mon_osd_down_out_subtree_limit: String,
+ pub mon_osd_min_up_ratio: String,
+ pub mon_osd_min_in_ratio: String,
+ pub mon_osd_max_op_age: String,
+ pub mon_osd_max_split_count: String,
+ pub mon_osd_allow_primary_temp: String,
+ pub mon_osd_allow_primary_affinity: String,
+ pub mon_stat_smooth_intervals: String,
+ pub mon_lease: String,
+ pub mon_lease_renew_interval: String,
+ pub mon_lease_ack_timeout: String,
+ pub mon_clock_drift_allowed: String,
+ pub mon_clock_drift_warn_backoff: String,
+ pub mon_timecheck_interval: String,
+ pub mon_accept_timeout: String,
+ pub mon_pg_create_interval: String,
+ pub mon_pg_stuck_threshold: String,
+ pub mon_pg_warn_min_per_osd: String,
+ pub mon_pg_warn_max_object_skew: String,
+ pub mon_pg_warn_min_objects: String,
+ pub mon_pg_warn_min_pool_objects: String,
+ pub mon_cache_target_full_warn_ratio: String,
+ pub mon_osd_full_ratio: String,
+ pub mon_osd_nearfull_ratio: String,
+ pub mon_globalid_prealloc: String,
+ pub mon_osd_report_timeout: String,
+ pub mon_force_standby_active: String,
+ pub mon_warn_on_old_mons: String,
+ pub mon_warn_on_legacy_crush_tunables: String,
+ pub mon_warn_on_osd_down_out_interval_zero: String,
+ pub mon_warn_on_cache_pools_without_hit_sets: String,
+ pub mon_min_osdmap_epochs: String,
+ pub mon_max_pgmap_epochs: String,
+ pub mon_max_log_epochs: String,
+ pub mon_max_mdsmap_epochs: String,
+ pub mon_max_osd: String,
+ pub mon_probe_timeout: String,
+ pub mon_slurp_timeout: String,
+ pub mon_slurp_bytes: String,
+ pub mon_client_bytes: String,
+ pub mon_daemon_bytes: String,
+ pub mon_max_log_entries_per_event: String,
+ pub mon_health_data_update_interval: String,
+ pub mon_data_avail_crit: String,
+ pub mon_data_avail_warn: String,
+ pub mon_config_key_max_entry_size: String,
+ pub mon_sync_timeout: String,
+ pub mon_sync_max_payload_size: String,
+ pub mon_sync_debug: String,
+ pub mon_sync_debug_leader: String,
+ pub mon_sync_debug_provider: String,
+ pub mon_sync_debug_provider_fallback: String,
+ pub mon_inject_sync_get_chunk_delay: String,
+ pub mon_osd_min_down_reporters: String,
+ pub mon_osd_min_down_reports: String,
+ pub mon_osd_force_trim_to: String,
+ pub mon_mds_force_trim_to: String,
+ pub mon_advanced_debug_mode: String,
+ pub mon_debug_dump_transactions: String,
+ pub mon_debug_dump_location: String,
+ pub mon_sync_provider_kill_at: String,
+ pub mon_sync_requester_kill_at: String,
+ pub mon_leveldb_write_buffer_size: String,
+ pub mon_leveldb_cache_size: String,
+ pub mon_leveldb_block_size: String,
+ pub mon_leveldb_bloom_size: String,
+ pub mon_leveldb_max_open_files: String,
+ pub mon_leveldb_compression: String,
+ pub mon_leveldb_paranoid: String,
+ pub mon_leveldb_log: String,
+ pub mon_leveldb_size_warn: String,
+ pub mon_force_quorum_join: String,
+ pub paxos_stash_full_interval: String,
+ pub paxos_max_join_drift: String,
+ pub paxos_propose_interval: String,
+ pub paxos_min_wait: String,
+ pub paxos_min: String,
+ pub paxos_trim_min: String,
+ pub paxos_trim_max: String,
+ pub paxos_service_trim_min: String,
+ pub paxos_service_trim_max: String,
+ pub paxos_kill_at: String,
+ pub clock_offset: String,
+ pub auth_cluster_required: String,
+ pub auth_service_required: String,
+ pub auth_client_required: String,
+ pub auth_supported: String,
+ pub cephx_require_signatures: String,
+ pub cephx_cluster_require_signatures: String,
+ pub cephx_service_require_signatures: String,
+ pub cephx_sign_messages: String,
+ pub auth_mon_ticket_ttl: String,
+ pub auth_service_ticket_ttl: String,
+ pub auth_debug: String,
+ pub mon_client_hunt_interval: String,
+ pub mon_client_ping_interval: String,
+ pub mon_client_ping_timeout: String,
+ pub mon_client_hunt_interval_backoff: String,
+ pub mon_client_hunt_interval_max_multiple: String,
+ pub mon_client_max_log_entries_per_message: String,
+ pub mon_max_pool_pg_num: String,
+ pub mon_pool_quota_warn_threshold: String,
+ pub mon_pool_quota_crit_threshold: String,
+ pub client_cache_size: String,
+ pub client_cache_mid: String,
+ pub client_use_random_mds: String,
+ pub client_mount_timeout: String,
+ pub client_tick_interval: String,
+ pub client_trace: String,
+ pub client_readahead_min: String,
+ pub client_readahead_max_bytes: String,
+ pub client_readahead_max_periods: String,
+ pub client_snapdir: String,
+ pub client_mountpoint: String,
+ pub client_notify_timeout: String,
+ pub osd_client_watch_timeout: String,
+ pub client_caps_release_delay: String,
+ pub client_oc: String,
+ pub client_oc_size: String,
+ pub client_oc_max_dirty: String,
+ pub client_oc_target_dirty: String,
+ pub client_oc_max_dirty_age: String,
+ pub client_oc_max_objects: String,
+ pub client_debug_force_sync_read: String,
+ pub client_debug_inject_tick_delay: String,
+ pub client_max_inline_size: String,
+ pub fuse_use_invalidate_cb: String,
+ pub fuse_allow_other: String,
+ pub fuse_default_permissions: String,
+ pub fuse_big_writes: String,
+ pub fuse_atomic_o_trunc: String,
+ pub fuse_debug: String,
+ pub fuse_multithreaded: String,
+ pub crush_location: String,
+ pub objecter_tick_interval: String,
+ pub objecter_timeout: String,
+ pub objecter_inflight_op_bytes: String,
+ pub objecter_inflight_ops: String,
+ pub journaler_allow_split_entries: String,
+ pub journaler_write_head_interval: String,
+ pub journaler_prefetch_periods: String,
+ pub journaler_prezero_periods: String,
+ pub journaler_batch_interval: String,
+ pub journaler_batch_max: String,
+ pub mds_data: String,
+ pub mds_max_file_size: String,
+ pub mds_cache_size: String,
+ pub mds_cache_mid: String,
+ pub mds_mem_max: String,
+ pub mds_dir_max_commit_size: String,
+ pub mds_decay_halflife: String,
+ pub mds_beacon_interval: String,
+ pub mds_beacon_grace: String,
+ pub mds_enforce_unique_name: String,
+ pub mds_interval: String,
+ pub mds_session_timeout: String,
+ pub mds_freeze_tree_timeout: String,
+ pub mds_session_autoclose: String,
+ pub mds_reconnect_timeout: String,
+ pub mds_tick_interval: String,
+ pub mds_dirstat_min_interval: String,
+ pub mds_scatter_nudge_interval: String,
+ pub mds_client_prealloc_inos: String,
+ pub mds_early_reply: String,
+ pub mds_default_dir_hash: String,
+ pub mds_log: String,
+ pub mds_log_skip_corrupt_events: String,
+ pub mds_log_max_events: String,
+ pub mds_log_segment_size: String,
+ pub mds_log_max_segments: String,
+ pub mds_log_max_expiring: String,
+ pub mds_bal_sample_interval: String,
+ pub mds_bal_replicate_threshold: String,
+ pub mds_bal_unreplicate_threshold: String,
+ pub mds_bal_frag: String,
+ pub mds_bal_split_size: String,
+ pub mds_bal_split_rd: String,
+ pub mds_bal_split_wr: String,
+ pub mds_bal_split_bits: String,
+ pub mds_bal_merge_size: String,
+ pub mds_bal_merge_rd: String,
+ pub mds_bal_merge_wr: String,
+ pub mds_bal_interval: String,
+ pub mds_bal_fragment_interval: String,
+ pub mds_bal_idle_threshold: String,
+ pub mds_bal_max: String,
+ pub mds_bal_max_until: String,
+ pub mds_bal_mode: String,
+ pub mds_bal_min_rebalance: String,
+ pub mds_bal_min_start: String,
+ pub mds_bal_need_min: String,
+ pub mds_bal_need_max: String,
+ pub mds_bal_midchunk: String,
+ pub mds_bal_minchunk: String,
+ pub mds_bal_target_removal_min: String,
+ pub mds_bal_target_removal_max: String,
+ pub mds_replay_interval: String,
+ pub mds_shutdown_check: String,
+ pub mds_thrash_exports: String,
+ pub mds_thrash_fragments: String,
+ pub mds_dump_cache_on_map: String,
+ pub mds_dump_cache_after_rejoin: String,
+ pub mds_verify_scatter: String,
+ pub mds_debug_scatterstat: String,
+ pub mds_debug_frag: String,
+ pub mds_debug_auth_pins: String,
+ pub mds_debug_subtrees: String,
+ pub mds_kill_mdstable_at: String,
+ pub mds_kill_export_at: String,
+ pub mds_kill_import_at: String,
+ pub mds_kill_link_at: String,
+ pub mds_kill_rename_at: String,
+ pub mds_kill_openc_at: String,
+ pub mds_kill_journal_at: String,
+ pub mds_kill_journal_expire_at: String,
+ pub mds_kill_journal_replay_at: String,
+ pub mds_kill_create_at: String,
+ pub mds_open_remote_link_mode: String,
+ pub mds_inject_traceless_reply_probability: String,
+ pub mds_wipe_sessions: String,
+ pub mds_wipe_ino_prealloc: String,
+ pub mds_skip_ino: String,
+ pub max_mds: String,
+ pub mds_standby_for_name: String,
+ pub mds_standby_for_rank: String,
+ pub mds_standby_replay: String,
+ pub osd_compact_leveldb_on_mount: String,
+ pub osd_max_backfills: String,
+ pub osd_backfill_full_ratio: String,
+ pub osd_backfill_retry_interval: String,
+ pub osd_agent_max_ops: String,
+ pub osd_agent_min_evict_effort: String,
+ pub osd_agent_quantize_effort: String,
+ pub osd_agent_delay_time: String,
+ pub osd_agent_hist_halflife: String,
+ pub osd_agent_slop: String,
+ pub osd_uuid: String,
+ pub osd_data: String,
+ pub osd_journal: String,
+ pub osd_journal_size: String,
+ pub osd_max_write_size: String,
+ pub osd_max_pgls: String,
+ pub osd_client_message_size_cap: String,
+ pub osd_client_message_cap: String,
+ pub osd_pg_bits: String,
+ pub osd_pgp_bits: String,
+ pub osd_crush_chooseleaf_type: String,
+ pub osd_pool_default_crush_rule: String,
+ pub osd_pool_default_crush_replicated_ruleset: String,
+ pub osd_pool_erasure_code_stripe_width: String,
+ pub osd_pool_default_size: String,
+ pub osd_pool_default_min_size: String,
+ pub osd_pool_default_pg_num: String,
+ pub osd_pool_default_pgp_num: String,
+ pub osd_pool_default_erasure_code_directory: String,
+ pub osd_pool_default_erasure_code_profile: String,
+ pub osd_erasure_code_plugins: String,
+ pub osd_pool_default_flags: String,
+ pub osd_pool_default_flag_hashpspool: String,
+ pub osd_pool_default_hit_set_bloom_fpp: String,
+ pub osd_pool_default_cache_target_dirty_ratio: String,
+ pub osd_pool_default_cache_target_full_ratio: String,
+ pub osd_pool_default_cache_min_flush_age: String,
+ pub osd_pool_default_cache_min_evict_age: String,
+ pub osd_hit_set_min_size: String,
+ pub osd_hit_set_max_size: String,
+ pub osd_hit_set_namespace: String,
+ pub osd_tier_default_cache_mode: String,
+ pub osd_tier_default_cache_hit_set_count: String,
+ pub osd_tier_default_cache_hit_set_period: String,
+ pub osd_tier_default_cache_hit_set_type: String,
+ pub osd_map_dedup: String,
+ pub osd_map_max_advance: String,
+ pub osd_map_cache_size: String,
+ pub osd_map_message_max: String,
+ pub osd_map_share_max_epochs: String,
+ pub osd_op_threads: String,
+ pub osd_peering_wq_batch_size: String,
+ pub osd_op_pq_max_tokens_per_priority: String,
+ pub osd_op_pq_min_cost: String,
+ pub osd_disk_threads: String,
+ pub osd_disk_thread_ioprio_class: String,
+ pub osd_disk_thread_ioprio_priority: String,
+ pub osd_recovery_threads: String,
+ pub osd_recover_clone_overlap: String,
+ pub osd_recover_clone_overlap_limit: String,
+ pub osd_backfill_scan_min: String,
+ pub osd_backfill_scan_max: String,
+ pub osd_op_thread_timeout: String,
+ pub osd_recovery_thread_timeout: String,
+ pub osd_snap_trim_thread_timeout: String,
+ pub osd_snap_trim_sleep: String,
+ pub osd_scrub_thread_timeout: String,
+ pub osd_scrub_finalize_thread_timeout: String,
+ pub osd_scrub_invalid_stats: String,
+ pub osd_remove_thread_timeout: String,
+ pub osd_command_thread_timeout: String,
+ pub osd_age: String,
+ pub osd_age_time: String,
+ pub osd_heartbeat_addr: String,
+ pub osd_heartbeat_interval: String,
+ pub osd_heartbeat_grace: String,
+ pub osd_heartbeat_min_peers: String,
+ pub osd_pg_max_concurrent_snap_trims: String,
+ pub osd_heartbeat_min_healthy_ratio: String,
+ pub osd_mon_heartbeat_interval: String,
+ pub osd_mon_report_interval_max: String,
+ pub osd_mon_report_interval_min: String,
+ pub osd_pg_stat_report_interval_max: String,
+ pub osd_mon_ack_timeout: String,
+ pub osd_default_data_pool_replay_window: String,
+ pub osd_preserve_trimmed_log: String,
+ pub osd_auto_mark_unfound_lost: String,
+ pub osd_recovery_delay_start: String,
+ pub osd_recovery_max_active: String,
+ pub osd_recovery_max_single_start: String,
+ pub osd_recovery_max_chunk: String,
+ pub osd_copyfrom_max_chunk: String,
+ pub osd_push_per_object_cost: String,
+ pub osd_max_push_cost: String,
+ pub osd_max_push_objects: String,
+ pub osd_recovery_forget_lost_objects: String,
+ pub osd_max_scrubs: String,
+ pub osd_scrub_load_threshold: String,
+ pub osd_scrub_min_interval: String,
+ pub osd_scrub_max_interval: String,
+ pub osd_scrub_chunk_min: String,
+ pub osd_scrub_chunk_max: String,
+ pub osd_scrub_sleep: String,
+ pub osd_deep_scrub_interval: String,
+ pub osd_deep_scrub_stride: String,
+ pub osd_scan_list_ping_tp_interval: String,
+ pub osd_auto_weight: String,
+ pub osd_class_dir: String,
+ pub osd_open_classes_on_start: String,
+ pub osd_check_for_log_corruption: String,
+ pub osd_use_stale_snap: String,
+ pub osd_rollback_to_cluster_snap: String,
+ pub osd_default_notify_timeout: String,
+ pub osd_kill_backfill_at: String,
+ pub osd_pg_epoch_persisted_max_stale: String,
+ pub osd_min_pg_log_entries: String,
+ pub osd_max_pg_log_entries: String,
+ pub osd_op_complaint_time: String,
+ pub osd_command_max_records: String,
+ pub osd_op_log_threshold: String,
+ pub osd_verify_sparse_read_holes: String,
+ pub osd_debug_drop_ping_probability: String,
+ pub osd_debug_drop_ping_duration: String,
+ pub osd_debug_drop_pg_create_probability: String,
+ pub osd_debug_drop_pg_create_duration: String,
+ pub osd_debug_drop_op_probability: String,
+ pub osd_debug_op_order: String,
+ pub osd_debug_verify_snaps_on_info: String,
+ pub osd_debug_verify_stray_on_activate: String,
+ pub osd_debug_skip_full_check_in_backfill_reservation: String,
+ pub osd_debug_reject_backfill_probability: String,
+ pub osd_enable_op_tracker: String,
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-29663.rs b/tests/ui/issues/issue-29663.rs
new file mode 100644
index 000000000..e2e89a8bf
--- /dev/null
+++ b/tests/ui/issues/issue-29663.rs
@@ -0,0 +1,56 @@
+// run-pass
+#![allow(stable_features)]
+// write_volatile causes an LLVM assert with composite types
+
+#![feature(volatile)]
+use std::ptr::{read_volatile, write_volatile};
+
+#[derive(Debug, Eq, PartialEq)]
+struct A(u32);
+#[derive(Debug, Eq, PartialEq)]
+struct B(u64);
+#[derive(Debug, Eq, PartialEq)]
+struct C(u32, u32);
+#[derive(Debug, Eq, PartialEq)]
+struct D(u64, u64);
+#[derive(Debug, Eq, PartialEq)]
+struct E([u64; 32]);
+
+fn main() {
+ unsafe {
+ let mut x: u32 = 0;
+ write_volatile(&mut x, 1);
+ assert_eq!(read_volatile(&x), 1);
+ assert_eq!(x, 1);
+
+ let mut x: u64 = 0;
+ write_volatile(&mut x, 1);
+ assert_eq!(read_volatile(&x), 1);
+ assert_eq!(x, 1);
+
+ let mut x = A(0);
+ write_volatile(&mut x, A(1));
+ assert_eq!(read_volatile(&x), A(1));
+ assert_eq!(x, A(1));
+
+ let mut x = B(0);
+ write_volatile(&mut x, B(1));
+ assert_eq!(read_volatile(&x), B(1));
+ assert_eq!(x, B(1));
+
+ let mut x = C(0, 0);
+ write_volatile(&mut x, C(1, 1));
+ assert_eq!(read_volatile(&x), C(1, 1));
+ assert_eq!(x, C(1, 1));
+
+ let mut x = D(0, 0);
+ write_volatile(&mut x, D(1, 1));
+ assert_eq!(read_volatile(&x), D(1, 1));
+ assert_eq!(x, D(1, 1));
+
+ let mut x = E([0; 32]);
+ write_volatile(&mut x, E([1; 32]));
+ assert_eq!(read_volatile(&x), E([1; 32]));
+ assert_eq!(x, E([1; 32]));
+ }
+}
diff --git a/tests/ui/issues/issue-29668.rs b/tests/ui/issues/issue-29668.rs
new file mode 100644
index 000000000..3d6c27bcd
--- /dev/null
+++ b/tests/ui/issues/issue-29668.rs
@@ -0,0 +1,16 @@
+// run-pass
+// Functions can return unnameable types
+
+mod m1 {
+ mod m2 {
+ #[derive(Debug)]
+ pub struct A;
+ }
+ use self::m2::A;
+ pub fn x() -> A { A }
+}
+
+fn main() {
+ let x = m1::x();
+ println!("{:?}", x);
+}
diff --git a/tests/ui/issues/issue-29710.rs b/tests/ui/issues/issue-29710.rs
new file mode 100644
index 000000000..bc98d389c
--- /dev/null
+++ b/tests/ui/issues/issue-29710.rs
@@ -0,0 +1,11 @@
+// check-pass
+#![deny(unused_results)]
+#![allow(dead_code)]
+
+#[derive(Debug)]
+struct A(usize);
+
+#[derive(Debug)]
+struct B { a: usize }
+
+fn main() {}
diff --git a/tests/ui/issues/issue-29723.rs b/tests/ui/issues/issue-29723.rs
new file mode 100644
index 000000000..399e9ba0d
--- /dev/null
+++ b/tests/ui/issues/issue-29723.rs
@@ -0,0 +1,22 @@
+// test for https://github.com/rust-lang/rust/issues/29723
+
+#![feature(if_let_guard)]
+
+fn main() {
+ let s = String::new();
+ let _s = match 0 {
+ 0 if { drop(s); false } => String::from("oops"),
+ _ => {
+ // This should trigger an error,
+ // s could have been moved from.
+ s
+ //~^ ERROR use of moved value: `s`
+ }
+ };
+
+ let s = String::new();
+ let _s = match 0 {
+ 0 if let Some(()) = { drop(s); None } => String::from("oops"),
+ _ => s //~ ERROR use of moved value: `s`
+ };
+}
diff --git a/tests/ui/issues/issue-29723.stderr b/tests/ui/issues/issue-29723.stderr
new file mode 100644
index 000000000..044d8a9b5
--- /dev/null
+++ b/tests/ui/issues/issue-29723.stderr
@@ -0,0 +1,36 @@
+error[E0382]: use of moved value: `s`
+ --> $DIR/issue-29723.rs:12:13
+ |
+LL | let s = String::new();
+ | - move occurs because `s` has type `String`, which does not implement the `Copy` trait
+LL | let _s = match 0 {
+LL | 0 if { drop(s); false } => String::from("oops"),
+ | - value moved here
+...
+LL | s
+ | ^ value used here after move
+ |
+help: consider cloning the value if the performance cost is acceptable
+ |
+LL | 0 if { drop(s.clone()); false } => String::from("oops"),
+ | ++++++++
+
+error[E0382]: use of moved value: `s`
+ --> $DIR/issue-29723.rs:20:14
+ |
+LL | let s = String::new();
+ | - move occurs because `s` has type `String`, which does not implement the `Copy` trait
+LL | let _s = match 0 {
+LL | 0 if let Some(()) = { drop(s); None } => String::from("oops"),
+ | - value moved here
+LL | _ => s
+ | ^ value used here after move
+ |
+help: consider cloning the value if the performance cost is acceptable
+ |
+LL | 0 if let Some(()) = { drop(s.clone()); None } => String::from("oops"),
+ | ++++++++
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0382`.
diff --git a/tests/ui/issues/issue-29740.rs b/tests/ui/issues/issue-29740.rs
new file mode 100644
index 000000000..20398890b
--- /dev/null
+++ b/tests/ui/issues/issue-29740.rs
@@ -0,0 +1,317 @@
+// check-pass
+#![allow(dead_code)]
+// Regression test for #29740. Inefficient MIR matching algorithms
+// generated way too much code for this sort of case, leading to OOM.
+#![allow(non_snake_case)]
+
+pub mod KeyboardEventConstants {
+ pub const DOM_KEY_LOCATION_STANDARD: u32 = 0;
+ pub const DOM_KEY_LOCATION_LEFT: u32 = 1;
+ pub const DOM_KEY_LOCATION_RIGHT: u32 = 2;
+ pub const DOM_KEY_LOCATION_NUMPAD: u32 = 3;
+} // mod KeyboardEventConstants
+
+pub enum Key {
+ Space,
+ Apostrophe,
+ Comma,
+ Minus,
+ Period,
+ Slash,
+ Num0,
+ Num1,
+ Num2,
+ Num3,
+ Num4,
+ Num5,
+ Num6,
+ Num7,
+ Num8,
+ Num9,
+ Semicolon,
+ Equal,
+ A,
+ B,
+ C,
+ D,
+ E,
+ F,
+ G,
+ H,
+ I,
+ J,
+ K,
+ L,
+ M,
+ N,
+ O,
+ P,
+ Q,
+ R,
+ S,
+ T,
+ U,
+ V,
+ W,
+ X,
+ Y,
+ Z,
+ LeftBracket,
+ Backslash,
+ RightBracket,
+ GraveAccent,
+ World1,
+ World2,
+
+ Escape,
+ Enter,
+ Tab,
+ Backspace,
+ Insert,
+ Delete,
+ Right,
+ Left,
+ Down,
+ Up,
+ PageUp,
+ PageDown,
+ Home,
+ End,
+ CapsLock,
+ ScrollLock,
+ NumLock,
+ PrintScreen,
+ Pause,
+ F1,
+ F2,
+ F3,
+ F4,
+ F5,
+ F6,
+ F7,
+ F8,
+ F9,
+ F10,
+ F11,
+ F12,
+ F13,
+ F14,
+ F15,
+ F16,
+ F17,
+ F18,
+ F19,
+ F20,
+ F21,
+ F22,
+ F23,
+ F24,
+ F25,
+ Kp0,
+ Kp1,
+ Kp2,
+ Kp3,
+ Kp4,
+ Kp5,
+ Kp6,
+ Kp7,
+ Kp8,
+ Kp9,
+ KpDecimal,
+ KpDivide,
+ KpMultiply,
+ KpSubtract,
+ KpAdd,
+ KpEnter,
+ KpEqual,
+ LeftShift,
+ LeftControl,
+ LeftAlt,
+ LeftSuper,
+ RightShift,
+ RightControl,
+ RightAlt,
+ RightSuper,
+ Menu,
+}
+
+fn key_from_string(key_string: &str, location: u32) -> Option<Key> {
+ match key_string {
+ " " => Some(Key::Space),
+ "\"" => Some(Key::Apostrophe),
+ "'" => Some(Key::Apostrophe),
+ "<" => Some(Key::Comma),
+ "," => Some(Key::Comma),
+ "_" => Some(Key::Minus),
+ "-" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Minus),
+ ">" => Some(Key::Period),
+ "." if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Period),
+ "?" => Some(Key::Slash),
+ "/" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Slash),
+ "~" => Some(Key::GraveAccent),
+ "`" => Some(Key::GraveAccent),
+ ")" => Some(Key::Num0),
+ "0" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num0),
+ "!" => Some(Key::Num1),
+ "1" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num1),
+ "@" => Some(Key::Num2),
+ "2" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num2),
+ "#" => Some(Key::Num3),
+ "3" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num3),
+ "$" => Some(Key::Num4),
+ "4" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num4),
+ "%" => Some(Key::Num5),
+ "5" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num5),
+ "^" => Some(Key::Num6),
+ "6" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num6),
+ "&" => Some(Key::Num7),
+ "7" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num7),
+ "*" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num8),
+ "8" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num8),
+ "(" => Some(Key::Num9),
+ "9" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num9),
+ ":" => Some(Key::Semicolon),
+ ";" => Some(Key::Semicolon),
+ "+" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Equal),
+ "=" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Equal),
+ "A" => Some(Key::A),
+ "a" => Some(Key::A),
+ "B" => Some(Key::B),
+ "b" => Some(Key::B),
+ "C" => Some(Key::C),
+ "c" => Some(Key::C),
+ "D" => Some(Key::D),
+ "d" => Some(Key::D),
+ "E" => Some(Key::E),
+ "e" => Some(Key::E),
+ "F" => Some(Key::F),
+ "f" => Some(Key::F),
+ "G" => Some(Key::G),
+ "g" => Some(Key::G),
+ "H" => Some(Key::H),
+ "h" => Some(Key::H),
+ "I" => Some(Key::I),
+ "i" => Some(Key::I),
+ "J" => Some(Key::J),
+ "j" => Some(Key::J),
+ "K" => Some(Key::K),
+ "k" => Some(Key::K),
+ "L" => Some(Key::L),
+ "l" => Some(Key::L),
+ "M" => Some(Key::M),
+ "m" => Some(Key::M),
+ "N" => Some(Key::N),
+ "n" => Some(Key::N),
+ "O" => Some(Key::O),
+ "o" => Some(Key::O),
+ "P" => Some(Key::P),
+ "p" => Some(Key::P),
+ "Q" => Some(Key::Q),
+ "q" => Some(Key::Q),
+ "R" => Some(Key::R),
+ "r" => Some(Key::R),
+ "S" => Some(Key::S),
+ "s" => Some(Key::S),
+ "T" => Some(Key::T),
+ "t" => Some(Key::T),
+ "U" => Some(Key::U),
+ "u" => Some(Key::U),
+ "V" => Some(Key::V),
+ "v" => Some(Key::V),
+ "W" => Some(Key::W),
+ "w" => Some(Key::W),
+ "X" => Some(Key::X),
+ "x" => Some(Key::X),
+ "Y" => Some(Key::Y),
+ "y" => Some(Key::Y),
+ "Z" => Some(Key::Z),
+ "z" => Some(Key::Z),
+ "{" => Some(Key::LeftBracket),
+ "[" => Some(Key::LeftBracket),
+ "|" => Some(Key::Backslash),
+ "\\" => Some(Key::Backslash),
+ "}" => Some(Key::RightBracket),
+ "]" => Some(Key::RightBracket),
+ "Escape" => Some(Key::Escape),
+ "Enter" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD
+ => Some(Key::Enter),
+ "Tab" => Some(Key::Tab),
+ "Backspace" => Some(Key::Backspace),
+ "Insert" => Some(Key::Insert),
+ "Delete" => Some(Key::Delete),
+ "ArrowRight" => Some(Key::Right),
+ "ArrowLeft" => Some(Key::Left),
+ "ArrowDown" => Some(Key::Down),
+ "ArrowUp" => Some(Key::Up),
+ "PageUp" => Some(Key::PageUp),
+ "PageDown" => Some(Key::PageDown),
+ "Home" => Some(Key::Home),
+ "End" => Some(Key::End),
+ "CapsLock" => Some(Key::CapsLock),
+ "ScrollLock" => Some(Key::ScrollLock),
+ "NumLock" => Some(Key::NumLock),
+ "PrintScreen" => Some(Key::PrintScreen),
+ "Pause" => Some(Key::Pause),
+ "F1" => Some(Key::F1),
+ "F2" => Some(Key::F2),
+ "F3" => Some(Key::F3),
+ "F4" => Some(Key::F4),
+ "F5" => Some(Key::F5),
+ "F6" => Some(Key::F6),
+ "F7" => Some(Key::F7),
+ "F8" => Some(Key::F8),
+ "F9" => Some(Key::F9),
+ "F10" => Some(Key::F10),
+ "F11" => Some(Key::F11),
+ "F12" => Some(Key::F12),
+ "F13" => Some(Key::F13),
+ "F14" => Some(Key::F14),
+ "F15" => Some(Key::F15),
+ "F16" => Some(Key::F16),
+ "F17" => Some(Key::F17),
+ "F18" => Some(Key::F18),
+ "F19" => Some(Key::F19),
+ "F20" => Some(Key::F20),
+ "F21" => Some(Key::F21),
+ "F22" => Some(Key::F22),
+ "F23" => Some(Key::F23),
+ "F24" => Some(Key::F24),
+ "F25" => Some(Key::F25),
+ "0" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp0),
+ "1" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp1),
+ "2" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp2),
+ "3" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp3),
+ "4" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp4),
+ "5" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp5),
+ "6" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp6),
+ "7" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp7),
+ "8" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp8),
+ "9" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp9),
+ "." if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::KpDecimal),
+ "/" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::KpDivide),
+ "*" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::KpMultiply),
+ "-" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::KpSubtract),
+ "+" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::KpAdd),
+ "Enter" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD
+ => Some(Key::KpEnter),
+ "=" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::KpEqual),
+ "Shift" if location == KeyboardEventConstants::DOM_KEY_LOCATION_LEFT
+ => Some(Key::LeftShift),
+ "Control" if location == KeyboardEventConstants::DOM_KEY_LOCATION_LEFT
+ => Some(Key::LeftControl),
+ "Alt" if location == KeyboardEventConstants::DOM_KEY_LOCATION_LEFT => Some(Key::LeftAlt),
+ "Super" if location == KeyboardEventConstants::DOM_KEY_LOCATION_LEFT
+ => Some(Key::LeftSuper),
+ "Shift" if location == KeyboardEventConstants::DOM_KEY_LOCATION_RIGHT
+ => Some(Key::RightShift),
+ "Control" if location == KeyboardEventConstants::DOM_KEY_LOCATION_RIGHT
+ => Some(Key::RightControl),
+ "Alt" if location == KeyboardEventConstants::DOM_KEY_LOCATION_RIGHT => Some(Key::RightAlt),
+ "Super" if location == KeyboardEventConstants::DOM_KEY_LOCATION_RIGHT
+ => Some(Key::RightSuper),
+ "ContextMenu" => Some(Key::Menu),
+ _ => None
+ }
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-29743.rs b/tests/ui/issues/issue-29743.rs
new file mode 100644
index 000000000..250cd7e1b
--- /dev/null
+++ b/tests/ui/issues/issue-29743.rs
@@ -0,0 +1,7 @@
+// check-pass
+
+fn main() {
+ let mut i = [1, 2, 3];
+ i[i[0]] = 0;
+ i[i[0] - 1] = 0;
+}
diff --git a/tests/ui/issues/issue-29746.rs b/tests/ui/issues/issue-29746.rs
new file mode 100644
index 000000000..3470a7e09
--- /dev/null
+++ b/tests/ui/issues/issue-29746.rs
@@ -0,0 +1,36 @@
+// run-pass
+// zip!(a1,a2,a3,a4) is equivalent to:
+// a1.zip(a2).zip(a3).zip(a4).map(|(((x1,x2),x3),x4)| (x1,x2,x3,x4))
+macro_rules! zip {
+ // Entry point
+ ([$a:expr, $b:expr, $($rest:expr),*]) => {
+ zip!([$($rest),*], $a.zip($b), (x,y), [x,y])
+ };
+
+ // Intermediate steps to build the zipped expression, the match pattern
+ // and the output tuple of the closure, using macro hygiene to repeatedly
+ // introduce new variables named 'x'.
+ ([$a:expr, $($rest:expr),*], $zip:expr, $pat:pat, [$($flat:expr),*]) => {
+ zip!([$($rest),*], $zip.zip($a), ($pat,x), [$($flat),*, x])
+ };
+
+ // Final step
+ ([], $zip:expr, $pat:pat, [$($flat:expr),+]) => {
+ $zip.map(|$pat| ($($flat),+))
+ };
+
+ // Comma
+ ([$a:expr], $zip:expr, $pat:pat, [$($flat:expr),*]) => {
+ zip!([$a,], $zip, $pat, [$($flat),*])
+ };
+}
+
+fn main() {
+ let p1 = vec![1i32, 2].into_iter();
+ let p2 = vec!["10", "20"].into_iter();
+ let p3 = vec![100u16, 200].into_iter();
+ let p4 = vec![1000i64, 2000].into_iter();
+
+ let e = zip!([p1,p2,p3,p4]).collect::<Vec<_>>();
+ assert_eq!(e[0], (1i32,"10",100u16,1000i64));
+}
diff --git a/tests/ui/issues/issue-29798.rs b/tests/ui/issues/issue-29798.rs
new file mode 100644
index 000000000..5eff5d191
--- /dev/null
+++ b/tests/ui/issues/issue-29798.rs
@@ -0,0 +1,11 @@
+// run-fail
+// error-pattern:index out of bounds: the len is 5 but the index is 5
+// ignore-emscripten no processes
+
+const fn test(x: usize) -> i32 {
+ [42;5][x]
+}
+
+fn main () {
+ let _ = test(5);
+}
diff --git a/tests/ui/issues/issue-29821.rs b/tests/ui/issues/issue-29821.rs
new file mode 100644
index 000000000..54be3afb5
--- /dev/null
+++ b/tests/ui/issues/issue-29821.rs
@@ -0,0 +1,19 @@
+// build-pass
+
+pub trait Foo {
+ type FooAssoc;
+}
+
+pub struct Bar<F: Foo> {
+ id: F::FooAssoc
+}
+
+pub struct Baz;
+
+impl Foo for Baz {
+ type FooAssoc = usize;
+}
+
+static mut MY_FOO: Bar<Baz> = Bar { id: 0 };
+
+fn main() {}
diff --git a/tests/ui/issues/issue-29857.rs b/tests/ui/issues/issue-29857.rs
new file mode 100644
index 000000000..6f4c5f45d
--- /dev/null
+++ b/tests/ui/issues/issue-29857.rs
@@ -0,0 +1,19 @@
+// check-pass
+
+use std::marker::PhantomData;
+
+pub trait Foo<P> {}
+
+impl <P, T: Foo<P>> Foo<P> for Option<T> {}
+
+pub struct Qux<T> (PhantomData<*mut T>);
+
+impl<T> Foo<*mut T> for Option<Qux<T>> {}
+
+pub trait Bar {
+ type Output: 'static;
+}
+
+impl<T: 'static, W: Bar<Output = T>> Foo<*mut T> for W {}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-29861.rs b/tests/ui/issues/issue-29861.rs
new file mode 100644
index 000000000..58f8eb536
--- /dev/null
+++ b/tests/ui/issues/issue-29861.rs
@@ -0,0 +1,20 @@
+pub trait MakeRef<'a> {
+ type Ref;
+}
+impl<'a, T: 'a> MakeRef<'a> for T {
+ type Ref = &'a T;
+}
+
+pub trait MakeRef2 {
+ type Ref2;
+}
+impl<'a, T: 'a> MakeRef2 for T {
+//~^ ERROR the lifetime parameter `'a` is not constrained
+ type Ref2 = <T as MakeRef<'a>>::Ref;
+}
+
+fn foo() -> <String as MakeRef2>::Ref2 { &String::from("foo") }
+
+fn main() {
+ println!("{}", foo());
+}
diff --git a/tests/ui/issues/issue-29861.stderr b/tests/ui/issues/issue-29861.stderr
new file mode 100644
index 000000000..d9d3cf360
--- /dev/null
+++ b/tests/ui/issues/issue-29861.stderr
@@ -0,0 +1,9 @@
+error[E0207]: the lifetime parameter `'a` is not constrained by the impl trait, self type, or predicates
+ --> $DIR/issue-29861.rs:11:6
+ |
+LL | impl<'a, T: 'a> MakeRef2 for T {
+ | ^^ unconstrained lifetime parameter
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0207`.
diff --git a/tests/ui/issues/issue-2989.rs b/tests/ui/issues/issue-2989.rs
new file mode 100644
index 000000000..c0b673743
--- /dev/null
+++ b/tests/ui/issues/issue-2989.rs
@@ -0,0 +1,36 @@
+// run-pass
+#![allow(non_camel_case_types)]
+
+trait methods {
+ fn to_bytes(&self) -> Vec<u8> ;
+}
+
+impl methods for () {
+ fn to_bytes(&self) -> Vec<u8> {
+ Vec::new()
+ }
+}
+
+// the position of this function is significant! - if it comes before methods
+// then it works, if it comes after it then it doesn't!
+fn to_bools(bitv: Storage) -> Vec<bool> {
+ (0..8).map(|i| {
+ let w = i / 64;
+ let b = i % 64;
+ let x = 1 & (bitv.storage[w] >> b);
+ x == 1
+ }).collect()
+}
+
+struct Storage { storage: Vec<u64> }
+
+pub fn main() {
+ let bools = vec![false, false, true, false, false, true, true, false];
+ let bools2 = to_bools(Storage{storage: vec![0b01100100]});
+
+ for i in 0..8 {
+ println!("{} => {} vs {}", i, bools[i], bools2[i]);
+ }
+
+ assert_eq!(bools, bools2);
+}
diff --git a/tests/ui/issues/issue-29948.rs b/tests/ui/issues/issue-29948.rs
new file mode 100644
index 000000000..3ed701480
--- /dev/null
+++ b/tests/ui/issues/issue-29948.rs
@@ -0,0 +1,40 @@
+// run-pass
+// needs-unwind
+
+use std::panic;
+
+impl<'a> panic::UnwindSafe for Foo<'a> {}
+impl<'a> panic::RefUnwindSafe for Foo<'a> {}
+
+struct Foo<'a>(&'a mut bool);
+
+impl<'a> Drop for Foo<'a> {
+ fn drop(&mut self) {
+ *self.0 = true;
+ }
+}
+
+fn f<T: FnOnce()>(t: T) {
+ t()
+}
+
+fn main() {
+ let mut ran_drop = false;
+ {
+ let x = Foo(&mut ran_drop);
+ let x = move || { let _ = x; };
+ f(x);
+ }
+ assert!(ran_drop);
+
+ let mut ran_drop = false;
+ {
+ let x = Foo(&mut ran_drop);
+ let result = panic::catch_unwind(move || {
+ let x = move || { let _ = x; panic!() };
+ f(x);
+ });
+ assert!(result.is_err());
+ }
+ assert!(ran_drop);
+}
diff --git a/tests/ui/issues/issue-2995.rs b/tests/ui/issues/issue-2995.rs
new file mode 100644
index 000000000..0da790948
--- /dev/null
+++ b/tests/ui/issues/issue-2995.rs
@@ -0,0 +1,5 @@
+fn bad (p: *const isize) {
+ let _q: &isize = p as &isize; //~ ERROR non-primitive cast
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-2995.stderr b/tests/ui/issues/issue-2995.stderr
new file mode 100644
index 000000000..0d09612c6
--- /dev/null
+++ b/tests/ui/issues/issue-2995.stderr
@@ -0,0 +1,15 @@
+error[E0605]: non-primitive cast: `*const isize` as `&isize`
+ --> $DIR/issue-2995.rs:2:22
+ |
+LL | let _q: &isize = p as &isize;
+ | ^^^^^^^^^^^ invalid cast
+ |
+help: consider borrowing the value
+ |
+LL - let _q: &isize = p as &isize;
+LL + let _q: &isize = &*p;
+ |
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0605`.
diff --git a/tests/ui/issues/issue-30007.rs b/tests/ui/issues/issue-30007.rs
new file mode 100644
index 000000000..918a821ba
--- /dev/null
+++ b/tests/ui/issues/issue-30007.rs
@@ -0,0 +1,7 @@
+macro_rules! t {
+ () => ( String ; ); //~ ERROR macro expansion ignores token `;`
+}
+
+fn main() {
+ let i: Vec<t!()>;
+}
diff --git a/tests/ui/issues/issue-30007.stderr b/tests/ui/issues/issue-30007.stderr
new file mode 100644
index 000000000..87e770e15
--- /dev/null
+++ b/tests/ui/issues/issue-30007.stderr
@@ -0,0 +1,13 @@
+error: macro expansion ignores token `;` and any following
+ --> $DIR/issue-30007.rs:2:20
+ |
+LL | () => ( String ; );
+ | ^
+...
+LL | let i: Vec<t!()>;
+ | ---- caused by the macro expansion here
+ |
+ = note: the usage of `t!` is likely invalid in type context
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-30018-panic.rs b/tests/ui/issues/issue-30018-panic.rs
new file mode 100644
index 000000000..cba3055a2
--- /dev/null
+++ b/tests/ui/issues/issue-30018-panic.rs
@@ -0,0 +1,26 @@
+// run-pass
+// Regression test for Issue #30018. This is very similar to the
+// original reported test, except that the panic is wrapped in a
+// spawned thread to isolate the expected error result from the
+// SIGTRAP injected by the drop-flag consistency checking.
+
+// needs-unwind
+// ignore-emscripten no threads support
+
+struct Foo;
+
+impl Drop for Foo {
+ fn drop(&mut self) {}
+}
+
+fn foo() -> Foo {
+ panic!();
+}
+
+fn main() {
+ use std::thread;
+ let handle = thread::spawn(|| {
+ let _ = &[foo()];
+ });
+ let _ = handle.join();
+}
diff --git a/tests/ui/issues/issue-3008-1.rs b/tests/ui/issues/issue-3008-1.rs
new file mode 100644
index 000000000..1124969e6
--- /dev/null
+++ b/tests/ui/issues/issue-3008-1.rs
@@ -0,0 +1,12 @@
+enum Foo {
+ Foo_(Bar)
+}
+
+enum Bar {
+ //~^ ERROR recursive type `Bar` has infinite size
+ BarNone,
+ BarSome(Bar)
+}
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-3008-1.stderr b/tests/ui/issues/issue-3008-1.stderr
new file mode 100644
index 000000000..be25b9091
--- /dev/null
+++ b/tests/ui/issues/issue-3008-1.stderr
@@ -0,0 +1,17 @@
+error[E0072]: recursive type `Bar` has infinite size
+ --> $DIR/issue-3008-1.rs:5:1
+ |
+LL | enum Bar {
+ | ^^^^^^^^
+...
+LL | BarSome(Bar)
+ | --- recursive without indirection
+ |
+help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle
+ |
+LL | BarSome(Box<Bar>)
+ | ++++ +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0072`.
diff --git a/tests/ui/issues/issue-3008-2.rs b/tests/ui/issues/issue-3008-2.rs
new file mode 100644
index 000000000..5846c69da
--- /dev/null
+++ b/tests/ui/issues/issue-3008-2.rs
@@ -0,0 +1,6 @@
+enum Foo { Foo_(Bar) }
+struct Bar { x: Bar }
+//~^ ERROR E0072
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-3008-2.stderr b/tests/ui/issues/issue-3008-2.stderr
new file mode 100644
index 000000000..858a8fd6a
--- /dev/null
+++ b/tests/ui/issues/issue-3008-2.stderr
@@ -0,0 +1,14 @@
+error[E0072]: recursive type `Bar` has infinite size
+ --> $DIR/issue-3008-2.rs:2:1
+ |
+LL | struct Bar { x: Bar }
+ | ^^^^^^^^^^ --- recursive without indirection
+ |
+help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle
+ |
+LL | struct Bar { x: Box<Bar> }
+ | ++++ +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0072`.
diff --git a/tests/ui/issues/issue-3008-3.rs b/tests/ui/issues/issue-3008-3.rs
new file mode 100644
index 000000000..212eb2eb8
--- /dev/null
+++ b/tests/ui/issues/issue-3008-3.rs
@@ -0,0 +1,10 @@
+use std::marker;
+
+enum E1 { V1(E2<E1>), }
+enum E2<T> { V2(E2<E1>, marker::PhantomData<T>), }
+//~^ ERROR recursive type `E2` has infinite size
+
+impl E1 { fn foo(&self) {} }
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-3008-3.stderr b/tests/ui/issues/issue-3008-3.stderr
new file mode 100644
index 000000000..a1a81e293
--- /dev/null
+++ b/tests/ui/issues/issue-3008-3.stderr
@@ -0,0 +1,14 @@
+error[E0072]: recursive type `E2` has infinite size
+ --> $DIR/issue-3008-3.rs:4:1
+ |
+LL | enum E2<T> { V2(E2<E1>, marker::PhantomData<T>), }
+ | ^^^^^^^^^^ ------ recursive without indirection
+ |
+help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle
+ |
+LL | enum E2<T> { V2(Box<E2<E1>>, marker::PhantomData<T>), }
+ | ++++ +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0072`.
diff --git a/tests/ui/issues/issue-30081.rs b/tests/ui/issues/issue-30081.rs
new file mode 100644
index 000000000..e7fca96ed
--- /dev/null
+++ b/tests/ui/issues/issue-30081.rs
@@ -0,0 +1,15 @@
+// run-pass
+// This used to segfault #30081
+
+pub enum Instruction {
+ Increment(i8),
+ Loop(Box<Box<()>>),
+}
+
+fn main() {
+ let instrs: Option<(u8, Box<Instruction>)> = None;
+ instrs.into_iter()
+ .map(|(_, instr)| instr)
+ .map(|instr| match *instr { _other => {} })
+ .last();
+}
diff --git a/tests/ui/issues/issue-3012-2.rs b/tests/ui/issues/issue-3012-2.rs
new file mode 100644
index 000000000..7d32c51f5
--- /dev/null
+++ b/tests/ui/issues/issue-3012-2.rs
@@ -0,0 +1,13 @@
+// run-pass
+// aux-build:issue-3012-1.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate socketlib;
+
+use socketlib::socket;
+
+pub fn main() {
+ let fd: u32 = 1 as u32;
+ let _sock: Box<_> = Box::new(socket::socket_handle(fd));
+}
diff --git a/tests/ui/issues/issue-30123.rs b/tests/ui/issues/issue-30123.rs
new file mode 100644
index 000000000..705355d91
--- /dev/null
+++ b/tests/ui/issues/issue-30123.rs
@@ -0,0 +1,9 @@
+// aux-build:issue-30123-aux.rs
+
+extern crate issue_30123_aux;
+use issue_30123_aux::*;
+
+fn main() {
+ let ug = Graph::<i32, i32>::new_undirected();
+ //~^ ERROR no function or associated item named `new_undirected` found
+}
diff --git a/tests/ui/issues/issue-30123.stderr b/tests/ui/issues/issue-30123.stderr
new file mode 100644
index 000000000..7808cbf8a
--- /dev/null
+++ b/tests/ui/issues/issue-30123.stderr
@@ -0,0 +1,12 @@
+error[E0599]: no function or associated item named `new_undirected` found for struct `Graph<i32, i32>` in the current scope
+ --> $DIR/issue-30123.rs:7:33
+ |
+LL | let ug = Graph::<i32, i32>::new_undirected();
+ | ^^^^^^^^^^^^^^ function or associated item not found in `Graph<i32, i32>`
+ |
+ = note: the function or associated item was found for
+ - `issue_30123_aux::Graph<N, E, Undirected>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-3021-b.rs b/tests/ui/issues/issue-3021-b.rs
new file mode 100644
index 000000000..f1630afe1
--- /dev/null
+++ b/tests/ui/issues/issue-3021-b.rs
@@ -0,0 +1,14 @@
+fn siphash(k0 : u64) {
+
+ struct SipHash {
+ v0: u64,
+ }
+
+ impl SipHash {
+ pub fn reset(&mut self) {
+ self.v0 = k0 ^ 0x736f6d6570736575; //~ ERROR can't capture dynamic environment
+ }
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-3021-b.stderr b/tests/ui/issues/issue-3021-b.stderr
new file mode 100644
index 000000000..72289c5f9
--- /dev/null
+++ b/tests/ui/issues/issue-3021-b.stderr
@@ -0,0 +1,11 @@
+error[E0434]: can't capture dynamic environment in a fn item
+ --> $DIR/issue-3021-b.rs:9:22
+ |
+LL | self.v0 = k0 ^ 0x736f6d6570736575;
+ | ^^
+ |
+ = help: use the `|| { ... }` closure form instead
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0434`.
diff --git a/tests/ui/issues/issue-3021-d.rs b/tests/ui/issues/issue-3021-d.rs
new file mode 100644
index 000000000..1fb0002b2
--- /dev/null
+++ b/tests/ui/issues/issue-3021-d.rs
@@ -0,0 +1,28 @@
+trait SipHash {
+ fn result(&self) -> u64;
+ fn reset(&self);
+}
+
+fn siphash(k0 : u64, k1 : u64) {
+ struct SipState {
+ v0: u64,
+ v1: u64,
+ }
+
+ fn mk_result(st : &SipState) -> u64 {
+
+ let v0 = st.v0;
+ let v1 = st.v1;
+ return v0 ^ v1;
+ }
+
+ impl SipHash for SipState {
+ fn reset(&self) {
+ self.v0 = k0 ^ 0x736f6d6570736575; //~ ERROR can't capture dynamic environment
+ self.v1 = k1 ^ 0x646f72616e646f6d; //~ ERROR can't capture dynamic environment
+ }
+ fn result(&self) -> u64 { return mk_result(self); }
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-3021-d.stderr b/tests/ui/issues/issue-3021-d.stderr
new file mode 100644
index 000000000..39e6e8c43
--- /dev/null
+++ b/tests/ui/issues/issue-3021-d.stderr
@@ -0,0 +1,19 @@
+error[E0434]: can't capture dynamic environment in a fn item
+ --> $DIR/issue-3021-d.rs:21:23
+ |
+LL | self.v0 = k0 ^ 0x736f6d6570736575;
+ | ^^
+ |
+ = help: use the `|| { ... }` closure form instead
+
+error[E0434]: can't capture dynamic environment in a fn item
+ --> $DIR/issue-3021-d.rs:22:23
+ |
+LL | self.v1 = k1 ^ 0x646f72616e646f6d;
+ | ^^
+ |
+ = help: use the `|| { ... }` closure form instead
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0434`.
diff --git a/tests/ui/issues/issue-30236.rs b/tests/ui/issues/issue-30236.rs
new file mode 100644
index 000000000..9c2d85507
--- /dev/null
+++ b/tests/ui/issues/issue-30236.rs
@@ -0,0 +1,7 @@
+type Foo<
+ Unused //~ ERROR type parameter `Unused` is unused
+ > = u8;
+
+fn main() {
+
+}
diff --git a/tests/ui/issues/issue-30236.stderr b/tests/ui/issues/issue-30236.stderr
new file mode 100644
index 000000000..64cbd58d6
--- /dev/null
+++ b/tests/ui/issues/issue-30236.stderr
@@ -0,0 +1,9 @@
+error[E0091]: type parameter `Unused` is unused
+ --> $DIR/issue-30236.rs:2:5
+ |
+LL | Unused
+ | ^^^^^^ unused type parameter
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0091`.
diff --git a/tests/ui/issues/issue-30255.rs b/tests/ui/issues/issue-30255.rs
new file mode 100644
index 000000000..6970a122b
--- /dev/null
+++ b/tests/ui/issues/issue-30255.rs
@@ -0,0 +1,24 @@
+//
+// Test that lifetime elision error messages correctly omit parameters
+// with no elided lifetimes
+
+struct S<'a> {
+ field: &'a i32,
+}
+
+fn f(a: &S, b: i32) -> &i32 {
+//~^ ERROR missing lifetime specifier [E0106]
+ panic!();
+}
+
+fn g(a: &S, b: bool, c: &i32) -> &i32 {
+//~^ ERROR missing lifetime specifier [E0106]
+ panic!();
+}
+
+fn h(a: &bool, b: bool, c: &S, d: &i32) -> &i32 {
+//~^ ERROR missing lifetime specifier [E0106]
+ panic!();
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-30255.stderr b/tests/ui/issues/issue-30255.stderr
new file mode 100644
index 000000000..adb721a1c
--- /dev/null
+++ b/tests/ui/issues/issue-30255.stderr
@@ -0,0 +1,39 @@
+error[E0106]: missing lifetime specifier
+ --> $DIR/issue-30255.rs:9:24
+ |
+LL | fn f(a: &S, b: i32) -> &i32 {
+ | -- ^ expected named lifetime parameter
+ |
+ = help: this function's return type contains a borrowed value, but the signature does not say which one of `a`'s 2 lifetimes it is borrowed from
+help: consider introducing a named lifetime parameter
+ |
+LL | fn f<'a>(a: &'a S<'a>, b: i32) -> &'a i32 {
+ | ++++ ++ ++++ ++
+
+error[E0106]: missing lifetime specifier
+ --> $DIR/issue-30255.rs:14:34
+ |
+LL | fn g(a: &S, b: bool, c: &i32) -> &i32 {
+ | -- ---- ^ expected named lifetime parameter
+ |
+ = help: this function's return type contains a borrowed value, but the signature does not say whether it is borrowed from one of `a`'s 2 lifetimes or `c`
+help: consider introducing a named lifetime parameter
+ |
+LL | fn g<'a>(a: &'a S<'a>, b: bool, c: &'a i32) -> &'a i32 {
+ | ++++ ++ ++++ ++ ++
+
+error[E0106]: missing lifetime specifier
+ --> $DIR/issue-30255.rs:19:44
+ |
+LL | fn h(a: &bool, b: bool, c: &S, d: &i32) -> &i32 {
+ | ----- -- ---- ^ expected named lifetime parameter
+ |
+ = help: this function's return type contains a borrowed value, but the signature does not say whether it is borrowed from `a`, one of `c`'s 2 lifetimes, or `d`
+help: consider introducing a named lifetime parameter
+ |
+LL | fn h<'a>(a: &'a bool, b: bool, c: &'a S<'a>, d: &'a i32) -> &'a i32 {
+ | ++++ ++ ++ ++++ ++ ++
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0106`.
diff --git a/tests/ui/issues/issue-3026.rs b/tests/ui/issues/issue-3026.rs
new file mode 100644
index 000000000..4619a3fe7
--- /dev/null
+++ b/tests/ui/issues/issue-3026.rs
@@ -0,0 +1,11 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+use std::collections::HashMap;
+
+pub fn main() {
+ let x: Box<_>;
+ let mut buggy_map: HashMap<usize, &usize> = HashMap::new();
+ x = Box::new(1);
+ buggy_map.insert(42, &*x);
+}
diff --git a/tests/ui/issues/issue-3029.rs b/tests/ui/issues/issue-3029.rs
new file mode 100644
index 000000000..a5d30960a
--- /dev/null
+++ b/tests/ui/issues/issue-3029.rs
@@ -0,0 +1,14 @@
+// run-fail
+// error-pattern:so long
+// ignore-emscripten no processes
+
+#![allow(unused_allocation)]
+#![allow(unreachable_code)]
+#![allow(unused_variables)]
+
+fn main() {
+ let mut x = Vec::new();
+ let y = vec![3];
+ panic!("so long");
+ x.extend(y.into_iter());
+}
diff --git a/tests/ui/issues/issue-3037.rs b/tests/ui/issues/issue-3037.rs
new file mode 100644
index 000000000..ff4d32c28
--- /dev/null
+++ b/tests/ui/issues/issue-3037.rs
@@ -0,0 +1,16 @@
+// run-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+#![allow(non_camel_case_types)]
+
+enum what { }
+
+fn what_to_string(x: what) -> String
+{
+ match x {
+ }
+}
+
+pub fn main()
+{
+}
diff --git a/tests/ui/issues/issue-30371.rs b/tests/ui/issues/issue-30371.rs
new file mode 100644
index 000000000..eea548c48
--- /dev/null
+++ b/tests/ui/issues/issue-30371.rs
@@ -0,0 +1,10 @@
+// run-pass
+#![allow(unreachable_code)]
+#![allow(for_loops_over_fallibles)]
+#![deny(unused_variables)]
+
+fn main() {
+ for _ in match return () {
+ () => Some(0),
+ } {}
+}
diff --git a/tests/ui/issues/issue-3038.rs b/tests/ui/issues/issue-3038.rs
new file mode 100644
index 000000000..cf3ba009f
--- /dev/null
+++ b/tests/ui/issues/issue-3038.rs
@@ -0,0 +1,26 @@
+enum F { G(isize, isize) }
+
+enum H { I(J, K) }
+
+enum J { L(isize, isize) }
+enum K { M(isize, isize) }
+
+fn main()
+{
+
+ let _z = match F::G(1, 2) {
+ F::G(x, x) => { println!("{}", x + x); }
+ //~^ ERROR identifier `x` is bound more than once in the same pattern
+ };
+
+ let _z = match H::I(J::L(1, 2), K::M(3, 4)) {
+ H::I(J::L(x, _), K::M(_, x))
+ //~^ ERROR identifier `x` is bound more than once in the same pattern
+ => { println!("{}", x + x); }
+ };
+
+ let _z = match (1, 2) {
+ (x, x) => { x } //~ ERROR identifier `x` is bound more than once in the same pattern
+ };
+
+}
diff --git a/tests/ui/issues/issue-3038.stderr b/tests/ui/issues/issue-3038.stderr
new file mode 100644
index 000000000..210da2cef
--- /dev/null
+++ b/tests/ui/issues/issue-3038.stderr
@@ -0,0 +1,21 @@
+error[E0416]: identifier `x` is bound more than once in the same pattern
+ --> $DIR/issue-3038.rs:12:15
+ |
+LL | F::G(x, x) => { println!("{}", x + x); }
+ | ^ used in a pattern more than once
+
+error[E0416]: identifier `x` is bound more than once in the same pattern
+ --> $DIR/issue-3038.rs:17:32
+ |
+LL | H::I(J::L(x, _), K::M(_, x))
+ | ^ used in a pattern more than once
+
+error[E0416]: identifier `x` is bound more than once in the same pattern
+ --> $DIR/issue-3038.rs:23:13
+ |
+LL | (x, x) => { x }
+ | ^ used in a pattern more than once
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0416`.
diff --git a/tests/ui/issues/issue-30380.rs b/tests/ui/issues/issue-30380.rs
new file mode 100644
index 000000000..48b329c5d
--- /dev/null
+++ b/tests/ui/issues/issue-30380.rs
@@ -0,0 +1,36 @@
+// check that panics in destructors during assignment do not leave
+// destroyed values lying around for other destructors to observe.
+
+// run-fail
+// error-pattern:panicking destructors ftw!
+// ignore-emscripten no processes
+
+struct Observer<'a>(&'a mut FilledOnDrop);
+
+struct FilledOnDrop(u32);
+impl Drop for FilledOnDrop {
+ fn drop(&mut self) {
+ if self.0 == 0 {
+ // this is only set during the destructor - safe
+ // code should not be able to observe this.
+ self.0 = 0x1c1c1c1c;
+ panic!("panicking destructors ftw!");
+ }
+ }
+}
+
+impl<'a> Drop for Observer<'a> {
+ fn drop(&mut self) {
+ assert_eq!(self.0 .0, 1);
+ }
+}
+
+fn foo(b: &mut Observer) {
+ *b.0 = FilledOnDrop(1);
+}
+
+fn main() {
+ let mut bomb = FilledOnDrop(0);
+ let mut observer = Observer(&mut bomb);
+ foo(&mut observer);
+}
diff --git a/tests/ui/issues/issue-30438-a.rs b/tests/ui/issues/issue-30438-a.rs
new file mode 100644
index 000000000..0d4eb796a
--- /dev/null
+++ b/tests/ui/issues/issue-30438-a.rs
@@ -0,0 +1,23 @@
+// Original regression test for Issue #30438.
+
+use std::ops::Index;
+
+struct Test<'a> {
+ s: &'a String
+}
+
+impl <'a> Index<usize> for Test<'a> {
+ type Output = Test<'a>;
+ fn index(&self, _: usize) -> &Self::Output {
+ return &Test { s: &self.s};
+ //~^ ERROR: cannot return reference to temporary value
+ }
+}
+
+fn main() {
+ let s = "Hello World".to_string();
+ let test = Test{s: &s};
+ let r = &test[0];
+ println!("{}", test.s); // OK since test is valid
+ println!("{}", r.s); // Segfault since value pointed by r has already been dropped
+}
diff --git a/tests/ui/issues/issue-30438-a.stderr b/tests/ui/issues/issue-30438-a.stderr
new file mode 100644
index 000000000..53845af82
--- /dev/null
+++ b/tests/ui/issues/issue-30438-a.stderr
@@ -0,0 +1,12 @@
+error[E0515]: cannot return reference to temporary value
+ --> $DIR/issue-30438-a.rs:12:16
+ |
+LL | return &Test { s: &self.s};
+ | ^------------------
+ | ||
+ | |temporary value created here
+ | returns a reference to data owned by the current function
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0515`.
diff --git a/tests/ui/issues/issue-30438-b.rs b/tests/ui/issues/issue-30438-b.rs
new file mode 100644
index 000000000..79510cdb6
--- /dev/null
+++ b/tests/ui/issues/issue-30438-b.rs
@@ -0,0 +1,24 @@
+// Modified regression test for Issue #30438 that exposed an
+// independent issue (see discussion on ticket).
+
+use std::ops::Index;
+
+struct Test<'a> {
+ s: &'a String
+}
+
+impl <'a> Index<usize> for Test<'a> {
+ type Output = Test<'a>;
+ fn index(&self, _: usize) -> &Self::Output {
+ &Test { s: &self.s}
+ //~^ ERROR: cannot return reference to temporary value
+ }
+}
+
+fn main() {
+ let s = "Hello World".to_string();
+ let test = Test{s: &s};
+ let r = &test[0];
+ println!("{}", test.s); // OK since test is valid
+ println!("{}", r.s); // Segfault since value pointed by r has already been dropped
+}
diff --git a/tests/ui/issues/issue-30438-b.stderr b/tests/ui/issues/issue-30438-b.stderr
new file mode 100644
index 000000000..fd6bd25b1
--- /dev/null
+++ b/tests/ui/issues/issue-30438-b.stderr
@@ -0,0 +1,12 @@
+error[E0515]: cannot return reference to temporary value
+ --> $DIR/issue-30438-b.rs:13:9
+ |
+LL | &Test { s: &self.s}
+ | ^------------------
+ | ||
+ | |temporary value created here
+ | returns a reference to data owned by the current function
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0515`.
diff --git a/tests/ui/issues/issue-30438-c.rs b/tests/ui/issues/issue-30438-c.rs
new file mode 100644
index 000000000..4cf634245
--- /dev/null
+++ b/tests/ui/issues/issue-30438-c.rs
@@ -0,0 +1,21 @@
+// Simplified regression test for #30438, inspired by arielb1.
+
+trait Trait { type Out; }
+
+struct Test<'a> { s: &'a str }
+
+fn silly<'y, 'z>(_s: &'y Test<'z>) -> &'y <Test<'z> as Trait>::Out where 'z: 'static {
+ //~^ WARN unnecessary lifetime parameter `'z`
+ let x = Test { s: "this cannot last" };
+ &x
+ //~^ ERROR: cannot return reference to local variable `x`
+}
+
+impl<'b> Trait for Test<'b> { type Out = Test<'b>; }
+
+fn main() {
+ let orig = Test { s: "Hello World" };
+ let r = silly(&orig);
+ println!("{}", orig.s); // OK since `orig` is valid
+ println!("{}", r.s); // Segfault (method does not return a sane value)
+}
diff --git a/tests/ui/issues/issue-30438-c.stderr b/tests/ui/issues/issue-30438-c.stderr
new file mode 100644
index 000000000..a7a5c0500
--- /dev/null
+++ b/tests/ui/issues/issue-30438-c.stderr
@@ -0,0 +1,17 @@
+warning: unnecessary lifetime parameter `'z`
+ --> $DIR/issue-30438-c.rs:7:74
+ |
+LL | fn silly<'y, 'z>(_s: &'y Test<'z>) -> &'y <Test<'z> as Trait>::Out where 'z: 'static {
+ | ^^
+ |
+ = help: you can use the `'static` lifetime directly, in place of `'z`
+
+error[E0515]: cannot return reference to local variable `x`
+ --> $DIR/issue-30438-c.rs:10:5
+ |
+LL | &x
+ | ^^ returns a reference to data owned by the current function
+
+error: aborting due to previous error; 1 warning emitted
+
+For more information about this error, try `rustc --explain E0515`.
diff --git a/tests/ui/issues/issue-30490.rs b/tests/ui/issues/issue-30490.rs
new file mode 100644
index 000000000..4f0eeac8f
--- /dev/null
+++ b/tests/ui/issues/issue-30490.rs
@@ -0,0 +1,102 @@
+// run-pass
+// ignore-emscripten no processes
+// ignore-sgx no processes
+// ignore-fuchsia Child I/O swaps not privileged
+
+// Previously libstd would set stdio descriptors of a child process
+// by `dup`ing the requested descriptors to inherit directly into the
+// stdio descriptors. This, however, would incorrectly handle cases
+// where the descriptors to inherit were already stdio descriptors.
+// This test checks to avoid that regression.
+
+#![cfg_attr(unix, feature(rustc_private))]
+#![cfg_attr(not(unix), allow(unused_imports))]
+
+#[cfg(unix)]
+extern crate libc;
+
+use std::fs::File;
+use std::io::{Read, Write};
+use std::io::{stdout, stderr};
+use std::process::{Command, Stdio};
+
+#[cfg(unix)]
+use std::os::unix::io::FromRawFd;
+
+#[cfg(not(unix))]
+fn main() {
+ // Bug not present in Windows
+}
+
+#[cfg(unix)]
+fn main() {
+ let mut args = std::env::args();
+ let name = args.next().unwrap();
+ let args: Vec<String> = args.collect();
+ if let Some("--child") = args.get(0).map(|s| &**s) {
+ return child();
+ } else if !args.is_empty() {
+ panic!("unknown options");
+ }
+
+ let stdout_backup = unsafe { libc::dup(libc::STDOUT_FILENO) };
+ let stderr_backup = unsafe { libc::dup(libc::STDERR_FILENO) };
+ assert!(stdout_backup > -1);
+ assert!(stderr_backup > -1);
+
+ let (stdout_reader, stdout_writer) = pipe();
+ let (stderr_reader, stderr_writer) = pipe();
+ assert!(unsafe { libc::dup2(stdout_writer, libc::STDOUT_FILENO) } > -1);
+ assert!(unsafe { libc::dup2(stderr_writer, libc::STDERR_FILENO) } > -1);
+
+ // Make sure we close any duplicates of the writer end of the pipe,
+ // otherwise we can get stuck reading from the pipe which has open
+ // writers but no one supplying any input
+ assert_eq!(unsafe { libc::close(stdout_writer) }, 0);
+ assert_eq!(unsafe { libc::close(stderr_writer) }, 0);
+
+ stdout().write_all("parent stdout\n".as_bytes()).expect("failed to write to stdout");
+ stderr().write_all("parent stderr\n".as_bytes()).expect("failed to write to stderr");
+
+ let child = {
+ Command::new(name)
+ .arg("--child")
+ .stdin(Stdio::inherit())
+ .stdout(unsafe { Stdio::from_raw_fd(libc::STDERR_FILENO) })
+ .stderr(unsafe { Stdio::from_raw_fd(libc::STDOUT_FILENO) })
+ .spawn()
+ };
+
+ // The Stdio passed into the Command took over (and closed) std{out, err}
+ // so we should restore them as they were.
+ assert!(unsafe { libc::dup2(stdout_backup, libc::STDOUT_FILENO) } > -1);
+ assert!(unsafe { libc::dup2(stderr_backup, libc::STDERR_FILENO) } > -1);
+
+ // Using File as a shim around the descriptor
+ let mut read = String::new();
+ let mut f: File = unsafe { FromRawFd::from_raw_fd(stdout_reader) };
+ f.read_to_string(&mut read).expect("failed to read from stdout file");
+ assert_eq!(read, "parent stdout\nchild stderr\n");
+
+ // Using File as a shim around the descriptor
+ read.clear();
+ let mut f: File = unsafe { FromRawFd::from_raw_fd(stderr_reader) };
+ f.read_to_string(&mut read).expect("failed to read from stderr file");
+ assert_eq!(read, "parent stderr\nchild stdout\n");
+
+ assert!(child.expect("failed to execute child process").wait().unwrap().success());
+}
+
+#[cfg(unix)]
+fn child() {
+ stdout().write_all("child stdout\n".as_bytes()).expect("child failed to write to stdout");
+ stderr().write_all("child stderr\n".as_bytes()).expect("child failed to write to stderr");
+}
+
+#[cfg(unix)]
+/// Returns a pipe (reader, writer combo)
+fn pipe() -> (i32, i32) {
+ let mut fds = [0; 2];
+ assert_eq!(unsafe { libc::pipe(fds.as_mut_ptr()) }, 0);
+ (fds[0], fds[1])
+}
diff --git a/tests/ui/issues/issue-3052.rs b/tests/ui/issues/issue-3052.rs
new file mode 100644
index 000000000..ee2456da3
--- /dev/null
+++ b/tests/ui/issues/issue-3052.rs
@@ -0,0 +1,13 @@
+// run-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+type Connection = Box<dyn FnMut(Vec<u8>) + 'static>;
+
+fn f() -> Option<Connection> {
+ let mock_connection: Connection = Box::new(|_| {});
+ Some(mock_connection)
+}
+
+pub fn main() {
+}
diff --git a/tests/ui/issues/issue-30530.rs b/tests/ui/issues/issue-30530.rs
new file mode 100644
index 000000000..111fb8aa5
--- /dev/null
+++ b/tests/ui/issues/issue-30530.rs
@@ -0,0 +1,28 @@
+// run-pass
+// Regression test for Issue #30530: alloca's created for storing
+// intermediate scratch values during brace-less match arms need to be
+// initialized with their drop-flag set to "dropped" (or else we end
+// up running the destructors on garbage data at the end of the
+// function).
+
+pub enum Handler {
+ Default,
+ #[allow(dead_code)]
+ Custom(*mut Box<dyn Fn()>),
+}
+
+fn main() {
+ #[allow(unused_must_use)] {
+ take(Handler::Default, Box::new(main));
+ }
+}
+
+#[inline(never)]
+pub fn take(h: Handler, f: Box<dyn Fn()>) -> Box<dyn Fn()> {
+ unsafe {
+ match h {
+ Handler::Custom(ptr) => *Box::from_raw(ptr),
+ Handler::Default => f,
+ }
+ }
+}
diff --git a/tests/ui/issues/issue-30589.rs b/tests/ui/issues/issue-30589.rs
new file mode 100644
index 000000000..94eb58399
--- /dev/null
+++ b/tests/ui/issues/issue-30589.rs
@@ -0,0 +1,9 @@
+use std::fmt;
+
+impl fmt::Display for DecoderError { //~ ERROR cannot find type `DecoderError` in this scope
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ write!(f, "Missing data: {}", self.0)
+ }
+}
+fn main() {
+}
diff --git a/tests/ui/issues/issue-30589.stderr b/tests/ui/issues/issue-30589.stderr
new file mode 100644
index 000000000..4b88547a1
--- /dev/null
+++ b/tests/ui/issues/issue-30589.stderr
@@ -0,0 +1,9 @@
+error[E0412]: cannot find type `DecoderError` in this scope
+ --> $DIR/issue-30589.rs:3:23
+ |
+LL | impl fmt::Display for DecoderError {
+ | ^^^^^^^^^^^^ not found in this scope
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0412`.
diff --git a/tests/ui/issues/issue-30615.rs b/tests/ui/issues/issue-30615.rs
new file mode 100644
index 000000000..c718449d8
--- /dev/null
+++ b/tests/ui/issues/issue-30615.rs
@@ -0,0 +1,5 @@
+// run-pass
+fn main() {
+ &0u8 as *const u8 as *const dyn PartialEq<u8>;
+ &[0u8] as *const [u8; 1] as *const [u8];
+}
diff --git a/tests/ui/issues/issue-30756.rs b/tests/ui/issues/issue-30756.rs
new file mode 100644
index 000000000..836db951b
--- /dev/null
+++ b/tests/ui/issues/issue-30756.rs
@@ -0,0 +1,7 @@
+// run-pass
+#![forbid(unsafe_code)]
+
+thread_local!(static FOO: u8 = 1);
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-30891.rs b/tests/ui/issues/issue-30891.rs
new file mode 100644
index 000000000..30f55e0bd
--- /dev/null
+++ b/tests/ui/issues/issue-30891.rs
@@ -0,0 +1,10 @@
+// run-pass
+const ERROR_CONST: bool = true;
+
+fn get() -> bool {
+ false || ERROR_CONST
+}
+
+pub fn main() {
+ assert_eq!(get(), true);
+}
diff --git a/tests/ui/issues/issue-3091.rs b/tests/ui/issues/issue-3091.rs
new file mode 100644
index 000000000..0c0a41242
--- /dev/null
+++ b/tests/ui/issues/issue-3091.rs
@@ -0,0 +1,7 @@
+// run-pass
+
+pub fn main() {
+ let x = 1;
+ let y = 1;
+ assert_eq!(&x, &y);
+}
diff --git a/tests/ui/issues/issue-3099-a.rs b/tests/ui/issues/issue-3099-a.rs
new file mode 100644
index 000000000..9c3d8cf5a
--- /dev/null
+++ b/tests/ui/issues/issue-3099-a.rs
@@ -0,0 +1,5 @@
+enum A { B, C }
+
+enum A { D, E } //~ ERROR the name `A` is defined multiple times
+
+fn main() {}
diff --git a/tests/ui/issues/issue-3099-a.stderr b/tests/ui/issues/issue-3099-a.stderr
new file mode 100644
index 000000000..e3733cebb
--- /dev/null
+++ b/tests/ui/issues/issue-3099-a.stderr
@@ -0,0 +1,14 @@
+error[E0428]: the name `A` is defined multiple times
+ --> $DIR/issue-3099-a.rs:3:1
+ |
+LL | enum A { B, C }
+ | ------ previous definition of the type `A` here
+LL |
+LL | enum A { D, E }
+ | ^^^^^^ `A` redefined here
+ |
+ = note: `A` must be defined only once in the type namespace of this module
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0428`.
diff --git a/tests/ui/issues/issue-3099-b.rs b/tests/ui/issues/issue-3099-b.rs
new file mode 100644
index 000000000..71952c3b0
--- /dev/null
+++ b/tests/ui/issues/issue-3099-b.rs
@@ -0,0 +1,5 @@
+pub mod a {}
+
+pub mod a {} //~ ERROR the name `a` is defined multiple times
+
+fn main() {}
diff --git a/tests/ui/issues/issue-3099-b.stderr b/tests/ui/issues/issue-3099-b.stderr
new file mode 100644
index 000000000..c0cfefeb9
--- /dev/null
+++ b/tests/ui/issues/issue-3099-b.stderr
@@ -0,0 +1,14 @@
+error[E0428]: the name `a` is defined multiple times
+ --> $DIR/issue-3099-b.rs:3:1
+ |
+LL | pub mod a {}
+ | --------- previous definition of the module `a` here
+LL |
+LL | pub mod a {}
+ | ^^^^^^^^^ `a` redefined here
+ |
+ = note: `a` must be defined only once in the type namespace of this module
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0428`.
diff --git a/tests/ui/issues/issue-3099.rs b/tests/ui/issues/issue-3099.rs
new file mode 100644
index 000000000..ee75b3593
--- /dev/null
+++ b/tests/ui/issues/issue-3099.rs
@@ -0,0 +1,11 @@
+fn a(x: String) -> String {
+ format!("First function with {}", x)
+}
+
+fn a(x: String, y: String) -> String { //~ ERROR the name `a` is defined multiple times
+ format!("Second function with {} and {}", x, y)
+}
+
+fn main() {
+ println!("Result: ");
+}
diff --git a/tests/ui/issues/issue-3099.stderr b/tests/ui/issues/issue-3099.stderr
new file mode 100644
index 000000000..32ee2e1d2
--- /dev/null
+++ b/tests/ui/issues/issue-3099.stderr
@@ -0,0 +1,14 @@
+error[E0428]: the name `a` is defined multiple times
+ --> $DIR/issue-3099.rs:5:1
+ |
+LL | fn a(x: String) -> String {
+ | ------------------------- previous definition of the value `a` here
+...
+LL | fn a(x: String, y: String) -> String {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `a` redefined here
+ |
+ = note: `a` must be defined only once in the value namespace of this module
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0428`.
diff --git a/tests/ui/issues/issue-31011.rs b/tests/ui/issues/issue-31011.rs
new file mode 100644
index 000000000..4dead04c2
--- /dev/null
+++ b/tests/ui/issues/issue-31011.rs
@@ -0,0 +1,29 @@
+macro_rules! log {
+ ( $ctx:expr, $( $args:expr),* ) => {
+ if $ctx.trace {
+ //~^ no field `trace` on type `&T`
+ println!( $( $args, )* );
+ }
+ }
+}
+
+// Create a structure.
+struct Foo {
+ trace: bool,
+}
+
+// Generic wrapper calls log! with a structure.
+fn wrap<T>(context: &T) -> ()
+{
+ log!(context, "entered wrapper");
+ //~^ in this expansion of log!
+}
+
+fn main() {
+ // Create a structure.
+ let x = Foo { trace: true };
+ log!(x, "run started");
+ // Apply a closure which accesses internal fields.
+ wrap(&x);
+ log!(x, "run finished");
+}
diff --git a/tests/ui/issues/issue-31011.stderr b/tests/ui/issues/issue-31011.stderr
new file mode 100644
index 000000000..58c170409
--- /dev/null
+++ b/tests/ui/issues/issue-31011.stderr
@@ -0,0 +1,17 @@
+error[E0609]: no field `trace` on type `&T`
+ --> $DIR/issue-31011.rs:3:17
+ |
+LL | if $ctx.trace {
+ | ^^^^^
+...
+LL | fn wrap<T>(context: &T) -> ()
+ | - type parameter 'T' declared here
+LL | {
+LL | log!(context, "entered wrapper");
+ | -------------------------------- in this macro invocation
+ |
+ = note: this error originates in the macro `log` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0609`.
diff --git a/tests/ui/issues/issue-3109.rs b/tests/ui/issues/issue-3109.rs
new file mode 100644
index 000000000..bd807cad7
--- /dev/null
+++ b/tests/ui/issues/issue-3109.rs
@@ -0,0 +1,4 @@
+// run-pass
+pub fn main() {
+ println!("{:?}", ("hi there!", "you"));
+}
diff --git a/tests/ui/issues/issue-3121.rs b/tests/ui/issues/issue-3121.rs
new file mode 100644
index 000000000..4bf5b9b60
--- /dev/null
+++ b/tests/ui/issues/issue-3121.rs
@@ -0,0 +1,24 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(non_camel_case_types)]
+
+#[derive(Copy, Clone)]
+enum side { mayo, catsup, vinegar }
+#[derive(Copy, Clone)]
+enum order { hamburger, fries(side), shake }
+#[derive(Copy, Clone)]
+enum meal { to_go(order), for_here(order) }
+
+fn foo(m: Box<meal>, cond: bool) {
+ match *m {
+ meal::to_go(_) => { }
+ meal::for_here(_) if cond => {}
+ meal::for_here(order::hamburger) => {}
+ meal::for_here(order::fries(_s)) => {}
+ meal::for_here(order::shake) => {}
+ }
+}
+
+pub fn main() {
+ foo(Box::new(meal::for_here(order::hamburger)), true)
+}
diff --git a/tests/ui/issues/issue-31260.rs b/tests/ui/issues/issue-31260.rs
new file mode 100644
index 000000000..4db7445b0
--- /dev/null
+++ b/tests/ui/issues/issue-31260.rs
@@ -0,0 +1,15 @@
+// check-pass
+#![allow(dead_code)]
+pub struct Struct<K: 'static> {
+ pub field: K,
+}
+
+static STRUCT: Struct<&'static [u8]> = Struct {
+ field: {&[1]}
+};
+
+static STRUCT2: Struct<&'static [u8]> = Struct {
+ field: &[1]
+};
+
+fn main() {}
diff --git a/tests/ui/issues/issue-31267-additional.rs b/tests/ui/issues/issue-31267-additional.rs
new file mode 100644
index 000000000..7f0cbd658
--- /dev/null
+++ b/tests/ui/issues/issue-31267-additional.rs
@@ -0,0 +1,20 @@
+// run-pass
+
+#[derive(Clone, Copy, Debug)]
+struct Bar;
+
+const BAZ: Bar = Bar;
+
+#[derive(Debug)]
+struct Foo(#[allow(unused_tuple_struct_fields)] [Bar; 1]);
+
+struct Biz;
+
+impl Biz {
+ const BAZ: Foo = Foo([BAZ; 1]);
+}
+
+fn main() {
+ let foo = Biz::BAZ;
+ println!("{:?}", foo);
+}
diff --git a/tests/ui/issues/issue-31267.rs b/tests/ui/issues/issue-31267.rs
new file mode 100644
index 000000000..50843c89e
--- /dev/null
+++ b/tests/ui/issues/issue-31267.rs
@@ -0,0 +1,14 @@
+// run-pass
+// Regression test for issue #31267
+
+
+struct Foo;
+
+impl Foo {
+ const FOO: [i32; 3] = [0; 3];
+}
+
+pub fn main() {
+ let foo = Foo::FOO;
+ assert_eq!(foo, [0i32, 0, 0]);
+}
diff --git a/tests/ui/issues/issue-31299.rs b/tests/ui/issues/issue-31299.rs
new file mode 100644
index 000000000..78c3252d3
--- /dev/null
+++ b/tests/ui/issues/issue-31299.rs
@@ -0,0 +1,35 @@
+// run-pass
+// Regression test for #31299. This was generating an overflow error
+// because of eager normalization:
+//
+// proving `M: Sized` requires
+// - proving `PtrBack<Vec<M>>: Sized` requires
+// - normalizing `Vec<<Vec<M> as Front>::Back>>: Sized` requires
+// - proving `Vec<M>: Front` requires
+// - `M: Sized` <-- cycle!
+//
+// If we skip the normalization step, though, everything goes fine.
+//
+// This could be fixed by implementing lazy normalization everywhere.
+//
+// However, we want this to work before then. For that, when checking
+// whether a type is Sized we only check that the tails are Sized. As
+// PtrBack does not have a tail, we don't need to normalize anything
+// and this compiles
+
+trait Front {
+ type Back;
+}
+
+impl<T> Front for Vec<T> {
+ type Back = Vec<T>;
+}
+
+struct PtrBack<T: Front>(#[allow(unused_tuple_struct_fields)] Vec<T::Back>);
+
+struct M(#[allow(unused_tuple_struct_fields)] PtrBack<Vec<M>>);
+
+#[allow(unused_must_use)]
+fn main() {
+ std::mem::size_of::<M>();
+}
diff --git a/tests/ui/issues/issue-3136-b.rs b/tests/ui/issues/issue-3136-b.rs
new file mode 100644
index 000000000..c4ca7236e
--- /dev/null
+++ b/tests/ui/issues/issue-3136-b.rs
@@ -0,0 +1,8 @@
+// run-pass
+// aux-build:issue-3136-a.rc
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_3136_a;
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-3149.rs b/tests/ui/issues/issue-3149.rs
new file mode 100644
index 000000000..6ab3bc846
--- /dev/null
+++ b/tests/ui/issues/issue-3149.rs
@@ -0,0 +1,26 @@
+// check-pass
+#![allow(dead_code)]
+#![allow(non_snake_case)]
+// pretty-expanded FIXME #23616
+
+fn Matrix4<T>(m11: T, m12: T, m13: T, m14: T,
+ m21: T, m22: T, m23: T, m24: T,
+ m31: T, m32: T, m33: T, m34: T,
+ m41: T, m42: T, m43: T, m44: T)
+ -> Matrix4<T> {
+ Matrix4 {
+ m11: m11, m12: m12, m13: m13, m14: m14,
+ m21: m21, m22: m22, m23: m23, m24: m24,
+ m31: m31, m32: m32, m33: m33, m34: m34,
+ m41: m41, m42: m42, m43: m43, m44: m44
+ }
+}
+
+struct Matrix4<T> {
+ m11: T, m12: T, m13: T, m14: T,
+ m21: T, m22: T, m23: T, m24: T,
+ m31: T, m32: T, m33: T, m34: T,
+ m41: T, m42: T, m43: T, m44: T,
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-31511.rs b/tests/ui/issues/issue-31511.rs
new file mode 100644
index 000000000..53fecb016
--- /dev/null
+++ b/tests/ui/issues/issue-31511.rs
@@ -0,0 +1,6 @@
+fn cast_thin_to_fat(x: *const ()) {
+ x as *const [u8];
+ //~^ ERROR: cannot cast thin pointer `*const ()` to fat pointer `*const [u8]`
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-31511.stderr b/tests/ui/issues/issue-31511.stderr
new file mode 100644
index 000000000..cb2991809
--- /dev/null
+++ b/tests/ui/issues/issue-31511.stderr
@@ -0,0 +1,9 @@
+error[E0607]: cannot cast thin pointer `*const ()` to fat pointer `*const [u8]`
+ --> $DIR/issue-31511.rs:2:5
+ |
+LL | x as *const [u8];
+ | ^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0607`.
diff --git a/tests/ui/issues/issue-3154.rs b/tests/ui/issues/issue-3154.rs
new file mode 100644
index 000000000..91c7203c1
--- /dev/null
+++ b/tests/ui/issues/issue-3154.rs
@@ -0,0 +1,11 @@
+struct Thing<'a, Q:'a> {
+ x: &'a Q
+}
+
+fn thing<'a,Q>(x: &Q) -> Thing<'a,Q> {
+ Thing { x: x } //~ ERROR explicit lifetime required in the type of `x` [E0621]
+}
+
+fn main() {
+ thing(&());
+}
diff --git a/tests/ui/issues/issue-3154.stderr b/tests/ui/issues/issue-3154.stderr
new file mode 100644
index 000000000..da2af83ff
--- /dev/null
+++ b/tests/ui/issues/issue-3154.stderr
@@ -0,0 +1,11 @@
+error[E0621]: explicit lifetime required in the type of `x`
+ --> $DIR/issue-3154.rs:6:5
+ |
+LL | fn thing<'a,Q>(x: &Q) -> Thing<'a,Q> {
+ | -- help: add explicit lifetime `'a` to the type of `x`: `&'a Q`
+LL | Thing { x: x }
+ | ^^^^^^^^^^^^^^ lifetime `'a` required
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0621`.
diff --git a/tests/ui/issues/issue-31702.rs b/tests/ui/issues/issue-31702.rs
new file mode 100644
index 000000000..5b24eead3
--- /dev/null
+++ b/tests/ui/issues/issue-31702.rs
@@ -0,0 +1,10 @@
+// run-pass
+// aux-build:issue-31702-1.rs
+// aux-build:issue-31702-2.rs
+
+// this test is actually entirely in the linked library crates
+
+extern crate issue_31702_1;
+extern crate issue_31702_2;
+
+fn main() {}
diff --git a/tests/ui/issues/issue-31769.rs b/tests/ui/issues/issue-31769.rs
new file mode 100644
index 000000000..f56c6ea56
--- /dev/null
+++ b/tests/ui/issues/issue-31769.rs
@@ -0,0 +1,4 @@
+fn main() {
+ #[inline] struct Foo; //~ ERROR attribute should be applied to function or closure
+ #[repr(C)] fn foo() {} //~ ERROR attribute should be applied to a struct, enum, or union
+}
diff --git a/tests/ui/issues/issue-31769.stderr b/tests/ui/issues/issue-31769.stderr
new file mode 100644
index 000000000..03e2f931c
--- /dev/null
+++ b/tests/ui/issues/issue-31769.stderr
@@ -0,0 +1,16 @@
+error[E0518]: attribute should be applied to function or closure
+ --> $DIR/issue-31769.rs:2:5
+ |
+LL | #[inline] struct Foo;
+ | ^^^^^^^^^ ----------- not a function or closure
+
+error[E0517]: attribute should be applied to a struct, enum, or union
+ --> $DIR/issue-31769.rs:3:12
+ |
+LL | #[repr(C)] fn foo() {}
+ | ^ ----------- not a struct, enum, or union
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0517, E0518.
+For more information about an error, try `rustc --explain E0517`.
diff --git a/tests/ui/issues/issue-31776.rs b/tests/ui/issues/issue-31776.rs
new file mode 100644
index 000000000..c86623ce2
--- /dev/null
+++ b/tests/ui/issues/issue-31776.rs
@@ -0,0 +1,55 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(unused_variables)]
+// Various scenarios in which `pub` is required in blocks
+
+struct S;
+
+mod m {
+ fn f() {
+ impl ::S {
+ pub fn s(&self) {}
+ }
+ }
+}
+
+// Scenario 1
+
+pub trait Tr {
+ type A;
+}
+pub struct S1;
+
+fn f() {
+ pub struct Z;
+
+ impl ::Tr for ::S1 {
+ type A = Z; // Private-in-public error unless `struct Z` is pub
+ }
+}
+
+// Scenario 2
+
+trait Tr1 {
+ type A;
+ fn pull(&self) -> Self::A;
+}
+struct S2;
+
+mod m1 {
+ fn f() {
+ pub struct Z {
+ pub field: u8
+ }
+
+ impl ::Tr1 for ::S2 {
+ type A = Z;
+ fn pull(&self) -> Self::A { Z{field: 10} }
+ }
+ }
+}
+
+fn main() {
+ S.s(); // Privacy error, unless `fn s` is pub
+ let a = S2.pull().field; // Privacy error unless `field: u8` is pub
+}
diff --git a/tests/ui/issues/issue-31910.rs b/tests/ui/issues/issue-31910.rs
new file mode 100644
index 000000000..e0655d3f6
--- /dev/null
+++ b/tests/ui/issues/issue-31910.rs
@@ -0,0 +1,11 @@
+enum Enum<T: Trait> {
+ X = Trait::Number,
+ //~^ ERROR mismatched types
+ //~| expected `isize`, found `i32`
+}
+
+trait Trait {
+ const Number: i32 = 1;
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-31910.stderr b/tests/ui/issues/issue-31910.stderr
new file mode 100644
index 000000000..2603c9442
--- /dev/null
+++ b/tests/ui/issues/issue-31910.stderr
@@ -0,0 +1,9 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-31910.rs:2:9
+ |
+LL | X = Trait::Number,
+ | ^^^^^^^^^^^^^ expected `isize`, found `i32`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-32004.rs b/tests/ui/issues/issue-32004.rs
new file mode 100644
index 000000000..b3493508c
--- /dev/null
+++ b/tests/ui/issues/issue-32004.rs
@@ -0,0 +1,19 @@
+enum Foo {
+ Bar(i32),
+ Baz
+}
+
+struct S;
+
+fn main() {
+ match Foo::Baz {
+ Foo::Bar => {}
+ //~^ ERROR expected unit struct, unit variant or constant, found tuple variant `Foo::Bar`
+ _ => {}
+ }
+
+ match S {
+ S(()) => {}
+ //~^ ERROR expected tuple struct or tuple variant, found unit struct `S`
+ }
+}
diff --git a/tests/ui/issues/issue-32004.stderr b/tests/ui/issues/issue-32004.stderr
new file mode 100644
index 000000000..2d2ed5a63
--- /dev/null
+++ b/tests/ui/issues/issue-32004.stderr
@@ -0,0 +1,32 @@
+error[E0532]: expected unit struct, unit variant or constant, found tuple variant `Foo::Bar`
+ --> $DIR/issue-32004.rs:10:9
+ |
+LL | Bar(i32),
+ | -------- `Foo::Bar` defined here
+LL | Baz
+ | --- similarly named unit variant `Baz` defined here
+...
+LL | Foo::Bar => {}
+ | ^^^^^^^^
+ |
+help: use the tuple variant pattern syntax instead
+ |
+LL | Foo::Bar(_) => {}
+ | ~~~~~~~~~~~
+help: a unit variant with a similar name exists
+ |
+LL | Foo::Baz => {}
+ | ~~~
+
+error[E0532]: expected tuple struct or tuple variant, found unit struct `S`
+ --> $DIR/issue-32004.rs:16:9
+ |
+LL | struct S;
+ | --------- `S` defined here
+...
+LL | S(()) => {}
+ | ^^^^^ help: use this syntax instead: `S`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0532`.
diff --git a/tests/ui/issues/issue-32008.rs b/tests/ui/issues/issue-32008.rs
new file mode 100644
index 000000000..6c2e20679
--- /dev/null
+++ b/tests/ui/issues/issue-32008.rs
@@ -0,0 +1,28 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(unused_variables)]
+// Tests that binary operators allow subtyping on both the LHS and RHS,
+// and as such do not introduce unnecessarily strict lifetime constraints.
+
+use std::ops::Add;
+
+struct Foo;
+
+impl<'a> Add<&'a Foo> for &'a Foo {
+ type Output = ();
+ fn add(self, rhs: &'a Foo) {}
+}
+
+fn try_to_add(input: &Foo) {
+ let local = Foo;
+
+ // Manual reborrow worked even with invariant trait search.
+ &*input + &local;
+
+ // Direct use of the reference on the LHS requires additional
+ // subtyping before searching (invariantly) for `LHS: Add<RHS>`.
+ input + &local;
+}
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-32086.rs b/tests/ui/issues/issue-32086.rs
new file mode 100644
index 000000000..d595d1dd7
--- /dev/null
+++ b/tests/ui/issues/issue-32086.rs
@@ -0,0 +1,7 @@
+struct S(u8);
+const C: S = S(10);
+
+fn main() {
+ let C(a) = S(11); //~ ERROR expected tuple struct or tuple variant, found constant `C`
+ let C(..) = S(11); //~ ERROR expected tuple struct or tuple variant, found constant `C`
+}
diff --git a/tests/ui/issues/issue-32086.stderr b/tests/ui/issues/issue-32086.stderr
new file mode 100644
index 000000000..e566dea89
--- /dev/null
+++ b/tests/ui/issues/issue-32086.stderr
@@ -0,0 +1,21 @@
+error[E0532]: expected tuple struct or tuple variant, found constant `C`
+ --> $DIR/issue-32086.rs:5:9
+ |
+LL | struct S(u8);
+ | ------------- similarly named tuple struct `S` defined here
+...
+LL | let C(a) = S(11);
+ | ^ help: a tuple struct with a similar name exists: `S`
+
+error[E0532]: expected tuple struct or tuple variant, found constant `C`
+ --> $DIR/issue-32086.rs:6:9
+ |
+LL | struct S(u8);
+ | ------------- similarly named tuple struct `S` defined here
+...
+LL | let C(..) = S(11);
+ | ^ help: a tuple struct with a similar name exists: `S`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0532`.
diff --git a/tests/ui/issues/issue-32122-1.fixed b/tests/ui/issues/issue-32122-1.fixed
new file mode 100644
index 000000000..4fc5f64ff
--- /dev/null
+++ b/tests/ui/issues/issue-32122-1.fixed
@@ -0,0 +1,17 @@
+// run-rustfix
+use std::ops::Deref;
+
+struct Foo(u8);
+
+impl Deref for Foo {
+ type Target = u8;
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+
+fn main() {
+ let a = Foo(0);
+ // Should suggest `&*` when coercing &ty to *const ty
+ let _: *const u8 = &*a; //~ ERROR mismatched types
+}
diff --git a/tests/ui/issues/issue-32122-1.rs b/tests/ui/issues/issue-32122-1.rs
new file mode 100644
index 000000000..3c4859f07
--- /dev/null
+++ b/tests/ui/issues/issue-32122-1.rs
@@ -0,0 +1,17 @@
+// run-rustfix
+use std::ops::Deref;
+
+struct Foo(u8);
+
+impl Deref for Foo {
+ type Target = u8;
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+
+fn main() {
+ let a = Foo(0);
+ // Should suggest `&*` when coercing &ty to *const ty
+ let _: *const u8 = &a; //~ ERROR mismatched types
+}
diff --git a/tests/ui/issues/issue-32122-1.stderr b/tests/ui/issues/issue-32122-1.stderr
new file mode 100644
index 000000000..10b0c0967
--- /dev/null
+++ b/tests/ui/issues/issue-32122-1.stderr
@@ -0,0 +1,18 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-32122-1.rs:16:24
+ |
+LL | let _: *const u8 = &a;
+ | --------- ^^ expected `u8`, found struct `Foo`
+ | |
+ | expected due to this
+ |
+ = note: expected raw pointer `*const u8`
+ found reference `&Foo`
+help: consider dereferencing
+ |
+LL | let _: *const u8 = &*a;
+ | +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-32122-2.fixed b/tests/ui/issues/issue-32122-2.fixed
new file mode 100644
index 000000000..cee0e5929
--- /dev/null
+++ b/tests/ui/issues/issue-32122-2.fixed
@@ -0,0 +1,28 @@
+// run-rustfix
+use std::ops::Deref;
+struct Bar(u8);
+struct Foo(Bar);
+struct Emm(Foo);
+impl Deref for Bar{
+ type Target = u8;
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+impl Deref for Foo {
+ type Target = Bar;
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+impl Deref for Emm {
+ type Target = Foo;
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+fn main() {
+ let a = Emm(Foo(Bar(0)));
+ // Should suggest `&***` even when deref is pretty deep
+ let _: *const u8 = &***a; //~ ERROR mismatched types
+}
diff --git a/tests/ui/issues/issue-32122-2.rs b/tests/ui/issues/issue-32122-2.rs
new file mode 100644
index 000000000..39e9df422
--- /dev/null
+++ b/tests/ui/issues/issue-32122-2.rs
@@ -0,0 +1,28 @@
+// run-rustfix
+use std::ops::Deref;
+struct Bar(u8);
+struct Foo(Bar);
+struct Emm(Foo);
+impl Deref for Bar{
+ type Target = u8;
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+impl Deref for Foo {
+ type Target = Bar;
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+impl Deref for Emm {
+ type Target = Foo;
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+fn main() {
+ let a = Emm(Foo(Bar(0)));
+ // Should suggest `&***` even when deref is pretty deep
+ let _: *const u8 = &a; //~ ERROR mismatched types
+}
diff --git a/tests/ui/issues/issue-32122-2.stderr b/tests/ui/issues/issue-32122-2.stderr
new file mode 100644
index 000000000..5c3dade8e
--- /dev/null
+++ b/tests/ui/issues/issue-32122-2.stderr
@@ -0,0 +1,18 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-32122-2.rs:27:24
+ |
+LL | let _: *const u8 = &a;
+ | --------- ^^ expected `u8`, found struct `Emm`
+ | |
+ | expected due to this
+ |
+ = note: expected raw pointer `*const u8`
+ found reference `&Emm`
+help: consider dereferencing
+ |
+LL | let _: *const u8 = &***a;
+ | +++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-3214.rs b/tests/ui/issues/issue-3214.rs
new file mode 100644
index 000000000..928a65938
--- /dev/null
+++ b/tests/ui/issues/issue-3214.rs
@@ -0,0 +1,11 @@
+fn foo<T>() {
+ struct Foo {
+ x: T, //~ ERROR can't use generic parameters from outer function
+ }
+
+ impl<T> Drop for Foo<T> {
+ //~^ ERROR this struct takes 0 generic arguments but 1 generic argument
+ fn drop(&mut self) {}
+ }
+}
+fn main() {}
diff --git a/tests/ui/issues/issue-3214.stderr b/tests/ui/issues/issue-3214.stderr
new file mode 100644
index 000000000..aa0b5ce64
--- /dev/null
+++ b/tests/ui/issues/issue-3214.stderr
@@ -0,0 +1,28 @@
+error[E0401]: can't use generic parameters from outer function
+ --> $DIR/issue-3214.rs:3:12
+ |
+LL | fn foo<T>() {
+ | - type parameter from outer function
+LL | struct Foo {
+ | - help: try using a local generic parameter instead: `<T>`
+LL | x: T,
+ | ^ use of generic parameter from outer function
+
+error[E0107]: this struct takes 0 generic arguments but 1 generic argument was supplied
+ --> $DIR/issue-3214.rs:6:22
+ |
+LL | impl<T> Drop for Foo<T> {
+ | ^^^--- help: remove these generics
+ | |
+ | expected 0 generic arguments
+ |
+note: struct defined here, with 0 generic parameters
+ --> $DIR/issue-3214.rs:2:12
+ |
+LL | struct Foo {
+ | ^^^
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0107, E0401.
+For more information about an error, try `rustc --explain E0107`.
diff --git a/tests/ui/issues/issue-3220.rs b/tests/ui/issues/issue-3220.rs
new file mode 100644
index 000000000..7dc672edb
--- /dev/null
+++ b/tests/ui/issues/issue-3220.rs
@@ -0,0 +1,25 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(non_camel_case_types)]
+// pretty-expanded FIXME #23616
+
+struct thing { x: isize, }
+
+impl Drop for thing {
+ fn drop(&mut self) {}
+}
+
+fn thing() -> thing {
+ thing {
+ x: 0
+ }
+}
+
+impl thing {
+ pub fn f(self) {}
+}
+
+pub fn main() {
+ let z = thing();
+ (z).f();
+}
diff --git a/tests/ui/issues/issue-32292.rs b/tests/ui/issues/issue-32292.rs
new file mode 100644
index 000000000..99b865391
--- /dev/null
+++ b/tests/ui/issues/issue-32292.rs
@@ -0,0 +1,9 @@
+// run-pass
+#![deny(warnings)]
+
+#[derive(Hash, Ord, PartialOrd, Eq, PartialEq, Debug, Clone, Copy)]
+struct Foo;
+
+fn main() {
+ let _ = Foo;
+}
diff --git a/tests/ui/issues/issue-32323.rs b/tests/ui/issues/issue-32323.rs
new file mode 100644
index 000000000..5078f5523
--- /dev/null
+++ b/tests/ui/issues/issue-32323.rs
@@ -0,0 +1,8 @@
+pub trait Tr<'a> {
+ type Out;
+}
+
+pub fn f<'a, T: Tr<'a>>() -> <T as Tr<'a>>::Out {}
+//~^ ERROR mismatched types
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-32323.stderr b/tests/ui/issues/issue-32323.stderr
new file mode 100644
index 000000000..8212c607e
--- /dev/null
+++ b/tests/ui/issues/issue-32323.stderr
@@ -0,0 +1,18 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-32323.rs:5:30
+ |
+LL | pub fn f<'a, T: Tr<'a>>() -> <T as Tr<'a>>::Out {}
+ | - ^^^^^^^^^^^^^^^^^^ expected associated type, found `()`
+ | |
+ | implicitly returns `()` as its body has no tail or `return` expression
+ |
+ = note: expected associated type `<T as Tr<'a>>::Out`
+ found unit type `()`
+help: consider constraining the associated type `<T as Tr<'a>>::Out` to `()`
+ |
+LL | pub fn f<'a, T: Tr<'a, Out = ()>>() -> <T as Tr<'a>>::Out {}
+ | ++++++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-32324.rs b/tests/ui/issues/issue-32324.rs
new file mode 100644
index 000000000..2df547b2e
--- /dev/null
+++ b/tests/ui/issues/issue-32324.rs
@@ -0,0 +1,24 @@
+// check-pass
+#![allow(dead_code)]
+
+trait Resources {
+ type Buffer: Copy;
+}
+
+#[derive(Copy, Clone)]
+struct ConstantBufferSet<R: Resources>(
+ pub R::Buffer
+);
+
+#[derive(Copy, Clone)]
+enum It {}
+impl Resources for It {
+ type Buffer = u8;
+}
+
+#[derive(Copy, Clone)]
+enum Command {
+ BindConstantBuffers(ConstantBufferSet<It>)
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-32326.rs b/tests/ui/issues/issue-32326.rs
new file mode 100644
index 000000000..e928c66e2
--- /dev/null
+++ b/tests/ui/issues/issue-32326.rs
@@ -0,0 +1,10 @@
+// Regression test for #32326. We ran out of memory because we
+// attempted to expand this case up to the recursion limit, and 2^N is
+// too big.
+
+enum Expr { //~ ERROR E0072
+ Plus(Expr, Expr),
+ Literal(i64),
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-32326.stderr b/tests/ui/issues/issue-32326.stderr
new file mode 100644
index 000000000..dc51198d9
--- /dev/null
+++ b/tests/ui/issues/issue-32326.stderr
@@ -0,0 +1,16 @@
+error[E0072]: recursive type `Expr` has infinite size
+ --> $DIR/issue-32326.rs:5:1
+ |
+LL | enum Expr {
+ | ^^^^^^^^^
+LL | Plus(Expr, Expr),
+ | ---- recursive without indirection
+ |
+help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle
+ |
+LL | Plus(Box<Expr>, Expr),
+ | ++++ +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0072`.
diff --git a/tests/ui/issues/issue-32377.rs b/tests/ui/issues/issue-32377.rs
new file mode 100644
index 000000000..555f6abd7
--- /dev/null
+++ b/tests/ui/issues/issue-32377.rs
@@ -0,0 +1,19 @@
+// normalize-stderr-test "\d+ bits" -> "N bits"
+
+use std::mem;
+use std::marker::PhantomData;
+
+trait Foo {
+ type Error;
+}
+
+struct Bar<U: Foo> {
+ stream: PhantomData<U::Error>,
+}
+
+fn foo<U: Foo>(x: [usize; 2]) -> Bar<U> {
+ unsafe { mem::transmute(x) }
+ //~^ ERROR cannot transmute between types of different sizes, or dependently-sized types
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-32377.stderr b/tests/ui/issues/issue-32377.stderr
new file mode 100644
index 000000000..5e870eb3e
--- /dev/null
+++ b/tests/ui/issues/issue-32377.stderr
@@ -0,0 +1,12 @@
+error[E0512]: cannot transmute between types of different sizes, or dependently-sized types
+ --> $DIR/issue-32377.rs:15:14
+ |
+LL | unsafe { mem::transmute(x) }
+ | ^^^^^^^^^^^^^^
+ |
+ = note: source type: `[usize; 2]` (N bits)
+ = note: target type: `Bar<U>` (N bits)
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0512`.
diff --git a/tests/ui/issues/issue-32389.rs b/tests/ui/issues/issue-32389.rs
new file mode 100644
index 000000000..cc94cc819
--- /dev/null
+++ b/tests/ui/issues/issue-32389.rs
@@ -0,0 +1,11 @@
+// run-pass
+fn foo<T>() -> T { loop {} }
+
+fn test() {
+ let ref mut a: &mut dyn FnMut((i8,), i16) = foo();
+ a((0,), 0);
+}
+
+fn main() {
+ let _ = test;
+}
diff --git a/tests/ui/issues/issue-32518.rs b/tests/ui/issues/issue-32518.rs
new file mode 100644
index 000000000..808b40f71
--- /dev/null
+++ b/tests/ui/issues/issue-32518.rs
@@ -0,0 +1,13 @@
+// run-pass
+// no-prefer-dynamic
+// aux-build:cgu_test.rs
+// aux-build:cgu_test_a.rs
+// aux-build:cgu_test_b.rs
+
+extern crate cgu_test_a;
+extern crate cgu_test_b;
+
+fn main() {
+ cgu_test_a::a::a();
+ cgu_test_b::a::a();
+}
diff --git a/tests/ui/issues/issue-32655.rs b/tests/ui/issues/issue-32655.rs
new file mode 100644
index 000000000..f52e09231
--- /dev/null
+++ b/tests/ui/issues/issue-32655.rs
@@ -0,0 +1,19 @@
+macro_rules! foo (
+ () => (
+ #[derive_Clone] //~ ERROR cannot find attribute `derive_Clone` in this scope
+ struct T;
+ );
+);
+
+macro_rules! bar (
+ ($e:item) => ($e)
+);
+
+foo!();
+
+bar!(
+ #[derive_Clone] //~ ERROR cannot find attribute `derive_Clone` in this scope
+ struct S;
+);
+
+fn main() {}
diff --git a/tests/ui/issues/issue-32655.stderr b/tests/ui/issues/issue-32655.stderr
new file mode 100644
index 000000000..b8362499b
--- /dev/null
+++ b/tests/ui/issues/issue-32655.stderr
@@ -0,0 +1,25 @@
+error: cannot find attribute `derive_Clone` in this scope
+ --> $DIR/issue-32655.rs:3:11
+ |
+LL | #[derive_Clone]
+ | ^^^^^^^^^^^^ help: an attribute macro with a similar name exists: `derive_const`
+...
+LL | foo!();
+ | ------ in this macro invocation
+ --> $SRC_DIR/core/src/macros/mod.rs:LL:COL
+ |
+ = note: similarly named attribute macro `derive_const` defined here
+ |
+ = note: this error originates in the macro `foo` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: cannot find attribute `derive_Clone` in this scope
+ --> $DIR/issue-32655.rs:15:7
+ |
+LL | #[derive_Clone]
+ | ^^^^^^^^^^^^ help: an attribute macro with a similar name exists: `derive_const`
+ --> $SRC_DIR/core/src/macros/mod.rs:LL:COL
+ |
+ = note: similarly named attribute macro `derive_const` defined here
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/issues/issue-32709.rs b/tests/ui/issues/issue-32709.rs
new file mode 100644
index 000000000..c05bfdc4c
--- /dev/null
+++ b/tests/ui/issues/issue-32709.rs
@@ -0,0 +1,8 @@
+// Make sure that the span of try shorthand does not include the trailing
+// semicolon;
+fn a() -> Result<i32, ()> {
+ Err(5)?; //~ ERROR
+ Ok(1)
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-32709.stderr b/tests/ui/issues/issue-32709.stderr
new file mode 100644
index 000000000..1d595ca56
--- /dev/null
+++ b/tests/ui/issues/issue-32709.stderr
@@ -0,0 +1,17 @@
+error[E0277]: `?` couldn't convert the error to `()`
+ --> $DIR/issue-32709.rs:4:11
+ |
+LL | fn a() -> Result<i32, ()> {
+ | --------------- expected `()` because of this
+LL | Err(5)?;
+ | ^ the trait `From<{integer}>` is not implemented for `()`
+ |
+ = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
+ = help: the following other types implement trait `FromResidual<R>`:
+ <Result<T, F> as FromResidual<Result<Infallible, E>>>
+ <Result<T, F> as FromResidual<Yeet<E>>>
+ = note: required for `Result<i32, ()>` to implement `FromResidual<Result<Infallible, {integer}>>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-32782.rs b/tests/ui/issues/issue-32782.rs
new file mode 100644
index 000000000..e3aa9f3bf
--- /dev/null
+++ b/tests/ui/issues/issue-32782.rs
@@ -0,0 +1,13 @@
+macro_rules! bar (
+ () => ()
+);
+
+macro_rules! foo (
+ () => (
+ #[allow_internal_unstable] //~ ERROR allow_internal_unstable side-steps
+ bar!();
+ );
+);
+
+foo!();
+fn main() {}
diff --git a/tests/ui/issues/issue-32782.stderr b/tests/ui/issues/issue-32782.stderr
new file mode 100644
index 000000000..a6c55ba03
--- /dev/null
+++ b/tests/ui/issues/issue-32782.stderr
@@ -0,0 +1,15 @@
+error[E0658]: allow_internal_unstable side-steps feature gating and stability checks
+ --> $DIR/issue-32782.rs:7:9
+ |
+LL | #[allow_internal_unstable]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+...
+LL | foo!();
+ | ------ in this macro invocation
+ |
+ = help: add `#![feature(allow_internal_unstable)]` to the crate attributes to enable
+ = note: this error originates in the macro `foo` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0658`.
diff --git a/tests/ui/issues/issue-32797.rs b/tests/ui/issues/issue-32797.rs
new file mode 100644
index 000000000..b12b929f8
--- /dev/null
+++ b/tests/ui/issues/issue-32797.rs
@@ -0,0 +1,13 @@
+// check-pass
+
+pub use bar::*;
+mod bar {
+ pub use super::*;
+}
+
+pub use baz::*;
+mod baz {
+ pub use main as f;
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-32805.rs b/tests/ui/issues/issue-32805.rs
new file mode 100644
index 000000000..23c194739
--- /dev/null
+++ b/tests/ui/issues/issue-32805.rs
@@ -0,0 +1,10 @@
+// run-pass
+fn const_mir() -> f32 { 9007199791611905.0 }
+
+fn main() {
+ let original = "9007199791611905.0"; // (1<<53)+(1<<29)+1
+ let expected = "9007200000000000";
+
+ assert_eq!(const_mir().to_string(), expected);
+ assert_eq!(original.parse::<f32>().unwrap().to_string(), expected);
+}
diff --git a/tests/ui/issues/issue-3290.rs b/tests/ui/issues/issue-3290.rs
new file mode 100644
index 000000000..7014d517f
--- /dev/null
+++ b/tests/ui/issues/issue-3290.rs
@@ -0,0 +1,8 @@
+// run-pass
+#![allow(dead_code)]
+
+pub fn main() {
+ let mut x: Box<_> = Box::new(3);
+ x = x;
+ assert_eq!(*x, 3);
+}
diff --git a/tests/ui/issues/issue-32950.rs b/tests/ui/issues/issue-32950.rs
new file mode 100644
index 000000000..27d68a11c
--- /dev/null
+++ b/tests/ui/issues/issue-32950.rs
@@ -0,0 +1,9 @@
+#![feature(concat_idents)]
+
+#[derive(Debug)]
+struct Baz<T>(
+ concat_idents!(Foo, Bar) //~ ERROR `derive` cannot be used on items with type macros
+ //~^ ERROR cannot find type `FooBar` in this scope
+);
+
+fn main() {}
diff --git a/tests/ui/issues/issue-32950.stderr b/tests/ui/issues/issue-32950.stderr
new file mode 100644
index 000000000..f6635d982
--- /dev/null
+++ b/tests/ui/issues/issue-32950.stderr
@@ -0,0 +1,17 @@
+error: `derive` cannot be used on items with type macros
+ --> $DIR/issue-32950.rs:5:5
+ |
+LL | concat_idents!(Foo, Bar)
+ | ^^^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0412]: cannot find type `FooBar` in this scope
+ --> $DIR/issue-32950.rs:5:5
+ |
+LL | concat_idents!(Foo, Bar)
+ | ^^^^^^^^^^^^^^^^^^^^^^^^ not found in this scope
+ |
+ = note: this error originates in the macro `concat_idents` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0412`.
diff --git a/tests/ui/issues/issue-32995-2.rs b/tests/ui/issues/issue-32995-2.rs
new file mode 100644
index 000000000..e713a64d3
--- /dev/null
+++ b/tests/ui/issues/issue-32995-2.rs
@@ -0,0 +1,13 @@
+fn main() {
+ { fn f<X: ::std::marker()::Send>() {} }
+ //~^ ERROR parenthesized type parameters may only be used with a `Fn` trait
+
+ { fn f() -> impl ::std::marker()::Send { } }
+ //~^ ERROR parenthesized type parameters may only be used with a `Fn` trait
+}
+
+#[derive(Clone)]
+struct X;
+
+impl ::std::marker()::Copy for X {}
+//~^ ERROR parenthesized type parameters may only be used with a `Fn` trait
diff --git a/tests/ui/issues/issue-32995-2.stderr b/tests/ui/issues/issue-32995-2.stderr
new file mode 100644
index 000000000..6c2d772a2
--- /dev/null
+++ b/tests/ui/issues/issue-32995-2.stderr
@@ -0,0 +1,21 @@
+error[E0214]: parenthesized type parameters may only be used with a `Fn` trait
+ --> $DIR/issue-32995-2.rs:2:22
+ |
+LL | { fn f<X: ::std::marker()::Send>() {} }
+ | ^^^^^^^^ only `Fn` traits may use parentheses
+
+error[E0214]: parenthesized type parameters may only be used with a `Fn` trait
+ --> $DIR/issue-32995-2.rs:5:29
+ |
+LL | { fn f() -> impl ::std::marker()::Send { } }
+ | ^^^^^^^^ only `Fn` traits may use parentheses
+
+error[E0214]: parenthesized type parameters may only be used with a `Fn` trait
+ --> $DIR/issue-32995-2.rs:12:13
+ |
+LL | impl ::std::marker()::Copy for X {}
+ | ^^^^^^^^ only `Fn` traits may use parentheses
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0214`.
diff --git a/tests/ui/issues/issue-32995.rs b/tests/ui/issues/issue-32995.rs
new file mode 100644
index 000000000..0d07a7693
--- /dev/null
+++ b/tests/ui/issues/issue-32995.rs
@@ -0,0 +1,24 @@
+fn main() {
+ let x: usize() = 1;
+ //~^ ERROR parenthesized type parameters may only be used with a `Fn` trait
+
+ let b: ::std::boxed()::Box<_> = Box::new(1);
+ //~^ ERROR parenthesized type parameters may only be used with a `Fn` trait
+
+ let p = ::std::str::()::from_utf8(b"foo").unwrap();
+ //~^ ERROR parenthesized type parameters may only be used with a `Fn` trait
+
+ let p = ::std::str::from_utf8::()(b"foo").unwrap();
+ //~^ ERROR parenthesized type parameters may only be used with a `Fn` trait
+
+ let o : Box<dyn (::std::marker()::Send)> = Box::new(1);
+ //~^ ERROR parenthesized type parameters may only be used with a `Fn` trait
+
+ let o : Box<dyn Send + ::std::marker()::Sync> = Box::new(1);
+ //~^ ERROR parenthesized type parameters may only be used with a `Fn` trait
+}
+
+fn foo<X:Default>() {
+ let d : X() = Default::default();
+ //~^ ERROR parenthesized type parameters may only be used with a `Fn` trait
+}
diff --git a/tests/ui/issues/issue-32995.stderr b/tests/ui/issues/issue-32995.stderr
new file mode 100644
index 000000000..b868011b9
--- /dev/null
+++ b/tests/ui/issues/issue-32995.stderr
@@ -0,0 +1,45 @@
+error[E0214]: parenthesized type parameters may only be used with a `Fn` trait
+ --> $DIR/issue-32995.rs:2:12
+ |
+LL | let x: usize() = 1;
+ | ^^^^^^^ only `Fn` traits may use parentheses
+
+error[E0214]: parenthesized type parameters may only be used with a `Fn` trait
+ --> $DIR/issue-32995.rs:5:19
+ |
+LL | let b: ::std::boxed()::Box<_> = Box::new(1);
+ | ^^^^^^^ only `Fn` traits may use parentheses
+
+error[E0214]: parenthesized type parameters may only be used with a `Fn` trait
+ --> $DIR/issue-32995.rs:8:20
+ |
+LL | let p = ::std::str::()::from_utf8(b"foo").unwrap();
+ | ^^^^^^^ only `Fn` traits may use parentheses
+
+error[E0214]: parenthesized type parameters may only be used with a `Fn` trait
+ --> $DIR/issue-32995.rs:11:25
+ |
+LL | let p = ::std::str::from_utf8::()(b"foo").unwrap();
+ | ^^^^^^^^^^^^^ only `Fn` traits may use parentheses
+
+error[E0214]: parenthesized type parameters may only be used with a `Fn` trait
+ --> $DIR/issue-32995.rs:14:29
+ |
+LL | let o : Box<dyn (::std::marker()::Send)> = Box::new(1);
+ | ^^^^^^^^ only `Fn` traits may use parentheses
+
+error[E0214]: parenthesized type parameters may only be used with a `Fn` trait
+ --> $DIR/issue-32995.rs:17:35
+ |
+LL | let o : Box<dyn Send + ::std::marker()::Sync> = Box::new(1);
+ | ^^^^^^^^ only `Fn` traits may use parentheses
+
+error[E0214]: parenthesized type parameters may only be used with a `Fn` trait
+ --> $DIR/issue-32995.rs:22:13
+ |
+LL | let d : X() = Default::default();
+ | ^^^ only `Fn` traits may use parentheses
+
+error: aborting due to 7 previous errors
+
+For more information about this error, try `rustc --explain E0214`.
diff --git a/tests/ui/issues/issue-33096.rs b/tests/ui/issues/issue-33096.rs
new file mode 100644
index 000000000..2501e1430
--- /dev/null
+++ b/tests/ui/issues/issue-33096.rs
@@ -0,0 +1,19 @@
+// run-pass
+// compile-flags: -g
+// ignore-asmjs wasm2js does not support source maps yet
+
+use std::ops::Deref;
+
+trait Foo {
+ fn foo() {}
+}
+
+impl Foo for u8 {}
+
+fn bar<T: Deref>() where T::Target: Foo {
+ <<T as Deref>::Target as Foo>::foo()
+}
+
+fn main() {
+ bar::<&u8>();
+}
diff --git a/tests/ui/issues/issue-33187.rs b/tests/ui/issues/issue-33187.rs
new file mode 100644
index 000000000..8db9e0058
--- /dev/null
+++ b/tests/ui/issues/issue-33187.rs
@@ -0,0 +1,23 @@
+// run-pass
+
+struct Foo<A: Repr>(<A as Repr>::Data);
+
+impl<A> Copy for Foo<A> where <A as Repr>::Data: Copy {}
+impl<A> Clone for Foo<A>
+where
+ <A as Repr>::Data: Clone,
+{
+ fn clone(&self) -> Self {
+ Foo(self.0.clone())
+ }
+}
+
+trait Repr {
+ type Data;
+}
+
+impl<A> Repr for A {
+ type Data = u32;
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-33202.rs b/tests/ui/issues/issue-33202.rs
new file mode 100644
index 000000000..11b89ae1b
--- /dev/null
+++ b/tests/ui/issues/issue-33202.rs
@@ -0,0 +1,9 @@
+// run-pass
+#[repr(C)]
+pub enum CPOption<T> {
+ PSome(T),
+}
+
+fn main() {
+ println!("sizeof CPOption<i32> {}", std::mem::size_of::<CPOption<i32>>());
+}
diff --git a/tests/ui/issues/issue-33241.rs b/tests/ui/issues/issue-33241.rs
new file mode 100644
index 000000000..5f9f1e4a7
--- /dev/null
+++ b/tests/ui/issues/issue-33241.rs
@@ -0,0 +1,12 @@
+// check-pass
+
+use std::fmt;
+
+// CoerceUnsized is not implemented for tuples. You can still create
+// an unsized tuple by transmuting a trait object.
+fn any<T>() -> T { unreachable!() }
+
+fn main() {
+ let t: &(u8, dyn fmt::Debug) = any();
+ println!("{:?}", &t.1);
+}
diff --git a/tests/ui/issues/issue-33287.rs b/tests/ui/issues/issue-33287.rs
new file mode 100644
index 000000000..770eb7c02
--- /dev/null
+++ b/tests/ui/issues/issue-33287.rs
@@ -0,0 +1,10 @@
+// build-pass
+#![allow(dead_code)]
+#![allow(unused_variables)]
+const A: [u32; 1] = [0];
+
+fn test() {
+ let range = A[1]..;
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-33293.rs b/tests/ui/issues/issue-33293.rs
new file mode 100644
index 000000000..a6ef007d5
--- /dev/null
+++ b/tests/ui/issues/issue-33293.rs
@@ -0,0 +1,6 @@
+fn main() {
+ match 0 {
+ aaa::bbb(_) => ()
+ //~^ ERROR failed to resolve: use of undeclared crate or module `aaa`
+ };
+}
diff --git a/tests/ui/issues/issue-33293.stderr b/tests/ui/issues/issue-33293.stderr
new file mode 100644
index 000000000..c8450f400
--- /dev/null
+++ b/tests/ui/issues/issue-33293.stderr
@@ -0,0 +1,9 @@
+error[E0433]: failed to resolve: use of undeclared crate or module `aaa`
+ --> $DIR/issue-33293.rs:3:9
+ |
+LL | aaa::bbb(_) => ()
+ | ^^^ use of undeclared crate or module `aaa`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0433`.
diff --git a/tests/ui/issues/issue-33387.rs b/tests/ui/issues/issue-33387.rs
new file mode 100644
index 000000000..499fa7c1f
--- /dev/null
+++ b/tests/ui/issues/issue-33387.rs
@@ -0,0 +1,32 @@
+// run-pass
+#![feature(rustc_attrs)]
+
+use std::sync::Arc;
+
+trait Foo {
+ fn get(&self) -> [u8; 2];
+}
+
+impl Foo for [u8; 2] {
+ fn get(&self) -> [u8; 2] {
+ *self
+ }
+}
+
+struct Bar<T: ?Sized>(T);
+
+fn unsize_fat_ptr<'a>(x: &'a Bar<dyn Foo + Send + 'a>) -> &'a Bar<dyn Foo + 'a> {
+ x
+}
+
+fn unsize_nested_fat_ptr(x: Arc<dyn Foo + Send>) -> Arc<dyn Foo> {
+ x
+}
+
+fn main() {
+ let x: Box<Bar<dyn Foo + Send>> = Box::new(Bar([1,2]));
+ assert_eq!(unsize_fat_ptr(&*x).0.get(), [1, 2]);
+
+ let x: Arc<dyn Foo + Send> = Arc::new([3, 4]);
+ assert_eq!(unsize_nested_fat_ptr(x).get(), [3, 4]);
+}
diff --git a/tests/ui/issues/issue-3344.rs b/tests/ui/issues/issue-3344.rs
new file mode 100644
index 000000000..de764b3d0
--- /dev/null
+++ b/tests/ui/issues/issue-3344.rs
@@ -0,0 +1,7 @@
+#[derive(PartialEq)]
+struct Thing(usize);
+impl PartialOrd for Thing { //~ ERROR not all trait items implemented, missing: `partial_cmp`
+ fn le(&self, other: &Thing) -> bool { true }
+ fn ge(&self, other: &Thing) -> bool { true }
+}
+fn main() {}
diff --git a/tests/ui/issues/issue-3344.stderr b/tests/ui/issues/issue-3344.stderr
new file mode 100644
index 000000000..11d599967
--- /dev/null
+++ b/tests/ui/issues/issue-3344.stderr
@@ -0,0 +1,11 @@
+error[E0046]: not all trait items implemented, missing: `partial_cmp`
+ --> $DIR/issue-3344.rs:3:1
+ |
+LL | impl PartialOrd for Thing {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^ missing `partial_cmp` in implementation
+ |
+ = help: implement the missing item: `fn partial_cmp(&self, _: &Rhs) -> Option<std::cmp::Ordering> { todo!() }`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0046`.
diff --git a/tests/ui/issues/issue-33461.rs b/tests/ui/issues/issue-33461.rs
new file mode 100644
index 000000000..4e01d4d30
--- /dev/null
+++ b/tests/ui/issues/issue-33461.rs
@@ -0,0 +1,28 @@
+// run-pass
+#![allow(unused_variables)]
+use std::marker::PhantomData;
+
+struct TheType<T> {
+ t: PhantomData<T>
+}
+
+pub trait TheTrait {
+ type TheAssociatedType;
+}
+
+impl TheTrait for () {
+ type TheAssociatedType = ();
+}
+
+pub trait Shape<P: TheTrait> {
+ fn doit(&self) {
+ }
+}
+
+impl<P: TheTrait> Shape<P> for TheType<P::TheAssociatedType> {
+}
+
+fn main() {
+ let ball = TheType { t: PhantomData };
+ let handle: &dyn Shape<()> = &ball;
+}
diff --git a/tests/ui/issues/issue-33504.rs b/tests/ui/issues/issue-33504.rs
new file mode 100644
index 000000000..89cc06ede
--- /dev/null
+++ b/tests/ui/issues/issue-33504.rs
@@ -0,0 +1,9 @@
+// Shadowing a unit-like enum in a closure
+
+struct Test;
+
+fn main() {
+ || {
+ let Test = 1; //~ ERROR mismatched types
+ };
+}
diff --git a/tests/ui/issues/issue-33504.stderr b/tests/ui/issues/issue-33504.stderr
new file mode 100644
index 000000000..d9e7c3b16
--- /dev/null
+++ b/tests/ui/issues/issue-33504.stderr
@@ -0,0 +1,16 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-33504.rs:7:13
+ |
+LL | struct Test;
+ | ----------- unit struct defined here
+...
+LL | let Test = 1;
+ | ^^^^ - this expression has type `{integer}`
+ | |
+ | expected integer, found struct `Test`
+ | `Test` is interpreted as a unit struct, not a new binding
+ | help: introduce a new binding instead: `other_test`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-33525.rs b/tests/ui/issues/issue-33525.rs
new file mode 100644
index 000000000..74f21eff2
--- /dev/null
+++ b/tests/ui/issues/issue-33525.rs
@@ -0,0 +1,5 @@
+fn main() {
+ a; //~ ERROR cannot find value `a`
+ "".lorem; //~ ERROR no field
+ "".ipsum; //~ ERROR no field
+}
diff --git a/tests/ui/issues/issue-33525.stderr b/tests/ui/issues/issue-33525.stderr
new file mode 100644
index 000000000..f8d703dc3
--- /dev/null
+++ b/tests/ui/issues/issue-33525.stderr
@@ -0,0 +1,22 @@
+error[E0425]: cannot find value `a` in this scope
+ --> $DIR/issue-33525.rs:2:5
+ |
+LL | a;
+ | ^ not found in this scope
+
+error[E0609]: no field `lorem` on type `&'static str`
+ --> $DIR/issue-33525.rs:3:8
+ |
+LL | "".lorem;
+ | ^^^^^
+
+error[E0609]: no field `ipsum` on type `&'static str`
+ --> $DIR/issue-33525.rs:4:8
+ |
+LL | "".ipsum;
+ | ^^^^^
+
+error: aborting due to 3 previous errors
+
+Some errors have detailed explanations: E0425, E0609.
+For more information about an error, try `rustc --explain E0425`.
diff --git a/tests/ui/issues/issue-33571.rs b/tests/ui/issues/issue-33571.rs
new file mode 100644
index 000000000..2713f47ad
--- /dev/null
+++ b/tests/ui/issues/issue-33571.rs
@@ -0,0 +1,7 @@
+#[derive(Clone,
+ Sync, //~ ERROR cannot find derive macro `Sync` in this scope
+ //~| ERROR cannot find derive macro `Sync` in this scope
+ Copy)]
+enum Foo {}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-33571.stderr b/tests/ui/issues/issue-33571.stderr
new file mode 100644
index 000000000..2a9ba5ba7
--- /dev/null
+++ b/tests/ui/issues/issue-33571.stderr
@@ -0,0 +1,26 @@
+error: cannot find derive macro `Sync` in this scope
+ --> $DIR/issue-33571.rs:2:10
+ |
+LL | Sync,
+ | ^^^^
+ |
+note: unsafe traits like `Sync` should be implemented explicitly
+ --> $DIR/issue-33571.rs:2:10
+ |
+LL | Sync,
+ | ^^^^
+
+error: cannot find derive macro `Sync` in this scope
+ --> $DIR/issue-33571.rs:2:10
+ |
+LL | Sync,
+ | ^^^^
+ |
+note: unsafe traits like `Sync` should be implemented explicitly
+ --> $DIR/issue-33571.rs:2:10
+ |
+LL | Sync,
+ | ^^^^
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/issues/issue-33687.rs b/tests/ui/issues/issue-33687.rs
new file mode 100644
index 000000000..ac802ed86
--- /dev/null
+++ b/tests/ui/issues/issue-33687.rs
@@ -0,0 +1,17 @@
+// run-pass
+#![feature(unboxed_closures)]
+#![feature(fn_traits)]
+
+struct Test;
+
+impl FnOnce<(u32, u32)> for Test {
+ type Output = u32;
+
+ extern "rust-call" fn call_once(self, (a, b): (u32, u32)) -> u32 {
+ a + b
+ }
+}
+
+fn main() {
+ assert_eq!(Test(1u32, 2u32), 3u32);
+}
diff --git a/tests/ui/issues/issue-33770.rs b/tests/ui/issues/issue-33770.rs
new file mode 100644
index 000000000..f3c99015b
--- /dev/null
+++ b/tests/ui/issues/issue-33770.rs
@@ -0,0 +1,94 @@
+// run-pass
+// ignore-emscripten no processes
+// ignore-sgx no processes
+
+use std::process::{Command, Stdio};
+use std::env;
+use std::sync::{Mutex, RwLock};
+use std::time::Duration;
+use std::thread;
+
+fn test_mutex() {
+ let m = Mutex::new(0);
+ let _g = m.lock().unwrap();
+ let _g2 = m.lock().unwrap();
+}
+
+fn test_try_mutex() {
+ let m = Mutex::new(0);
+ let _g = m.lock().unwrap();
+ let _g2 = m.try_lock().unwrap();
+}
+
+fn test_rwlock_ww() {
+ let m = RwLock::new(0);
+ let _g = m.write().unwrap();
+ let _g2 = m.write().unwrap();
+}
+
+fn test_try_rwlock_ww() {
+ let m = RwLock::new(0);
+ let _g = m.write().unwrap();
+ let _g2 = m.try_write().unwrap();
+}
+
+fn test_rwlock_rw() {
+ let m = RwLock::new(0);
+ let _g = m.read().unwrap();
+ let _g2 = m.write().unwrap();
+}
+
+fn test_try_rwlock_rw() {
+ let m = RwLock::new(0);
+ let _g = m.read().unwrap();
+ let _g2 = m.try_write().unwrap();
+}
+
+fn test_rwlock_wr() {
+ let m = RwLock::new(0);
+ let _g = m.write().unwrap();
+ let _g2 = m.read().unwrap();
+}
+
+fn test_try_rwlock_wr() {
+ let m = RwLock::new(0);
+ let _g = m.write().unwrap();
+ let _g2 = m.try_read().unwrap();
+}
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+ if args.len() > 1 {
+ match &*args[1] {
+ "mutex" => test_mutex(),
+ "try_mutex" => test_try_mutex(),
+ "rwlock_ww" => test_rwlock_ww(),
+ "try_rwlock_ww" => test_try_rwlock_ww(),
+ "rwlock_rw" => test_rwlock_rw(),
+ "try_rwlock_rw" => test_try_rwlock_rw(),
+ "rwlock_wr" => test_rwlock_wr(),
+ "try_rwlock_wr" => test_try_rwlock_wr(),
+ _ => unreachable!(),
+ }
+ // If we reach this point then the test failed
+ println!("TEST FAILED: {}", args[1]);
+ } else {
+ let mut v = vec![];
+ v.push(Command::new(&args[0]).arg("mutex").stderr(Stdio::null()).spawn().unwrap());
+ v.push(Command::new(&args[0]).arg("try_mutex").stderr(Stdio::null()).spawn().unwrap());
+ v.push(Command::new(&args[0]).arg("rwlock_ww").stderr(Stdio::null()).spawn().unwrap());
+ v.push(Command::new(&args[0]).arg("try_rwlock_ww").stderr(Stdio::null()).spawn().unwrap());
+ v.push(Command::new(&args[0]).arg("rwlock_rw").stderr(Stdio::null()).spawn().unwrap());
+ v.push(Command::new(&args[0]).arg("try_rwlock_rw").stderr(Stdio::null()).spawn().unwrap());
+ v.push(Command::new(&args[0]).arg("rwlock_wr").stderr(Stdio::null()).spawn().unwrap());
+ v.push(Command::new(&args[0]).arg("try_rwlock_wr").stderr(Stdio::null()).spawn().unwrap());
+
+ thread::sleep(Duration::new(1, 0));
+
+ // Make sure all subprocesses either panicked or were killed because they deadlocked
+ for mut c in v {
+ c.kill().ok();
+ assert!(!c.wait().unwrap().success());
+ }
+ }
+}
diff --git a/tests/ui/issues/issue-3389.rs b/tests/ui/issues/issue-3389.rs
new file mode 100644
index 000000000..294a07229
--- /dev/null
+++ b/tests/ui/issues/issue-3389.rs
@@ -0,0 +1,26 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(non_camel_case_types)]
+
+struct trie_node {
+ content: Vec<String> ,
+ children: Vec<trie_node> ,
+}
+
+fn print_str_vector(vector: Vec<String> ) {
+ for string in &vector {
+ println!("{}", *string);
+ }
+}
+
+pub fn main() {
+ let mut node: trie_node = trie_node {
+ content: Vec::new(),
+ children: Vec::new()
+ };
+ let v = vec!["123".to_string(), "abc".to_string()];
+ node.content = vec!["123".to_string(), "abc".to_string()];
+ print_str_vector(v);
+ print_str_vector(node.content.clone());
+
+}
diff --git a/tests/ui/issues/issue-33903.rs b/tests/ui/issues/issue-33903.rs
new file mode 100644
index 000000000..613aa121a
--- /dev/null
+++ b/tests/ui/issues/issue-33903.rs
@@ -0,0 +1,10 @@
+// check-pass
+#![allow(dead_code)]
+// Issue 33903:
+// Built-in indexing should be used even when the index is not
+// trivially an integer
+// Only built-in indexing can be used in constant expressions
+
+const FOO: i32 = [12, 34][0 + 1];
+
+fn main() {}
diff --git a/tests/ui/issues/issue-33941.rs b/tests/ui/issues/issue-33941.rs
new file mode 100644
index 000000000..e3b6dcf55
--- /dev/null
+++ b/tests/ui/issues/issue-33941.rs
@@ -0,0 +1,9 @@
+// compile-flags: -Zdeduplicate-diagnostics=yes
+
+use std::collections::HashMap;
+
+fn main() {
+ for _ in HashMap::new().iter().cloned() {} //~ ERROR expected `Iter<'_, _, _>` to be an iterator that yields `&_`, but it yields `(&_, &_)`
+ //~^ ERROR expected `Iter<'_, _, _>` to be an iterator that yields `&_`, but it yields `(&_, &_)`
+ //~| ERROR expected `Iter<'_, _, _>` to be an iterator that yields `&_`, but it yields `(&_, &_)`
+}
diff --git a/tests/ui/issues/issue-33941.stderr b/tests/ui/issues/issue-33941.stderr
new file mode 100644
index 000000000..668eaabca
--- /dev/null
+++ b/tests/ui/issues/issue-33941.stderr
@@ -0,0 +1,42 @@
+error[E0271]: expected `Iter<'_, _, _>` to be an iterator that yields `&_`, but it yields `(&_, &_)`
+ --> $DIR/issue-33941.rs:6:36
+ |
+LL | for _ in HashMap::new().iter().cloned() {}
+ | ^^^^^^ expected reference, found tuple
+ |
+ = note: expected reference `&_`
+ found tuple `(&_, &_)`
+note: the method call chain might not have had the expected associated types
+ --> $DIR/issue-33941.rs:6:29
+ |
+LL | for _ in HashMap::new().iter().cloned() {}
+ | -------------- ^^^^^^ `Iterator::Item` is `(&_, &_)` here
+ | |
+ | this expression has type `HashMap<_, _>`
+note: required by a bound in `cloned`
+ --> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
+
+error[E0271]: expected `Iter<'_, _, _>` to be an iterator that yields `&_`, but it yields `(&_, &_)`
+ --> $DIR/issue-33941.rs:6:14
+ |
+LL | for _ in HashMap::new().iter().cloned() {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected tuple, found reference
+ |
+ = note: expected tuple `(&_, &_)`
+ found reference `&_`
+ = note: required for `Cloned<std::collections::hash_map::Iter<'_, _, _>>` to implement `Iterator`
+ = note: required for `Cloned<std::collections::hash_map::Iter<'_, _, _>>` to implement `IntoIterator`
+
+error[E0271]: expected `Iter<'_, _, _>` to be an iterator that yields `&_`, but it yields `(&_, &_)`
+ --> $DIR/issue-33941.rs:6:14
+ |
+LL | for _ in HashMap::new().iter().cloned() {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected tuple, found reference
+ |
+ = note: expected tuple `(&_, &_)`
+ found reference `&_`
+ = note: required for `Cloned<std::collections::hash_map::Iter<'_, _, _>>` to implement `Iterator`
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0271`.
diff --git a/tests/ui/issues/issue-33992.rs b/tests/ui/issues/issue-33992.rs
new file mode 100644
index 000000000..a6b137ba6
--- /dev/null
+++ b/tests/ui/issues/issue-33992.rs
@@ -0,0 +1,32 @@
+// run-pass
+// ignore-windows
+// ignore-macos
+// ignore-emscripten common linkage not implemented right now
+
+#![feature(linkage)]
+
+#[linkage = "common"]
+pub static mut TEST1: u32 = 0u32;
+
+#[linkage = "external"]
+pub static TEST2: bool = true;
+
+#[linkage = "internal"]
+pub static TEST3: bool = true;
+
+#[linkage = "linkonce"]
+pub static TEST4: bool = true;
+
+#[linkage = "linkonce_odr"]
+pub static TEST5: bool = true;
+
+#[linkage = "private"]
+pub static TEST6: bool = true;
+
+#[linkage = "weak"]
+pub static TEST7: bool = true;
+
+#[linkage = "weak_odr"]
+pub static TEST8: bool = true;
+
+fn main() {}
diff --git a/tests/ui/issues/issue-34047.rs b/tests/ui/issues/issue-34047.rs
new file mode 100644
index 000000000..55196177f
--- /dev/null
+++ b/tests/ui/issues/issue-34047.rs
@@ -0,0 +1,8 @@
+const C: u8 = 0;
+
+fn main() {
+ match 1u8 {
+ mut C => {} //~ ERROR match bindings cannot shadow constants
+ _ => {}
+ }
+}
diff --git a/tests/ui/issues/issue-34047.stderr b/tests/ui/issues/issue-34047.stderr
new file mode 100644
index 000000000..f770ded50
--- /dev/null
+++ b/tests/ui/issues/issue-34047.stderr
@@ -0,0 +1,12 @@
+error[E0530]: match bindings cannot shadow constants
+ --> $DIR/issue-34047.rs:5:13
+ |
+LL | const C: u8 = 0;
+ | ---------------- the constant `C` is defined here
+...
+LL | mut C => {}
+ | ^ cannot be named the same as a constant
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0530`.
diff --git a/tests/ui/issues/issue-34074.rs b/tests/ui/issues/issue-34074.rs
new file mode 100644
index 000000000..0600d3937
--- /dev/null
+++ b/tests/ui/issues/issue-34074.rs
@@ -0,0 +1,10 @@
+// run-pass
+// Make sure several unnamed function parameters don't conflict with each other
+
+trait Tr {
+ #[allow(anonymous_parameters)]
+ fn f(u8, u8) {}
+}
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-34209.rs b/tests/ui/issues/issue-34209.rs
new file mode 100644
index 000000000..632ddb91b
--- /dev/null
+++ b/tests/ui/issues/issue-34209.rs
@@ -0,0 +1,11 @@
+enum S {
+ A,
+}
+
+fn bug(l: S) {
+ match l {
+ S::B {} => {}, //~ ERROR no variant named `B` found for enum `S`
+ }
+}
+
+fn main () {}
diff --git a/tests/ui/issues/issue-34209.stderr b/tests/ui/issues/issue-34209.stderr
new file mode 100644
index 000000000..f9a25b69f
--- /dev/null
+++ b/tests/ui/issues/issue-34209.stderr
@@ -0,0 +1,12 @@
+error[E0599]: no variant named `B` found for enum `S`
+ --> $DIR/issue-34209.rs:7:12
+ |
+LL | enum S {
+ | ------ variant `B` not found here
+...
+LL | S::B {} => {},
+ | ^ help: there is a variant with a similar name: `A`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-34229.rs b/tests/ui/issues/issue-34229.rs
new file mode 100644
index 000000000..13e627a49
--- /dev/null
+++ b/tests/ui/issues/issue-34229.rs
@@ -0,0 +1,5 @@
+#[derive(PartialEq)] struct Comparable;
+#[derive(PartialEq, PartialOrd)] struct Nope(Comparable);
+//~^ ERROR can't compare `Comparable`
+
+fn main() {}
diff --git a/tests/ui/issues/issue-34229.stderr b/tests/ui/issues/issue-34229.stderr
new file mode 100644
index 000000000..69ef876d2
--- /dev/null
+++ b/tests/ui/issues/issue-34229.stderr
@@ -0,0 +1,18 @@
+error[E0277]: can't compare `Comparable` with `Comparable`
+ --> $DIR/issue-34229.rs:2:46
+ |
+LL | #[derive(PartialEq, PartialOrd)] struct Nope(Comparable);
+ | ---------- ^^^^^^^^^^ no implementation for `Comparable < Comparable` and `Comparable > Comparable`
+ | |
+ | in this derive macro expansion
+ |
+ = help: the trait `PartialOrd` is not implemented for `Comparable`
+ = note: this error originates in the derive macro `PartialOrd` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: consider annotating `Comparable` with `#[derive(PartialOrd)]`
+ |
+LL | #[derive(PartialEq)] #[derive(PartialOrd)]
+ | +++++++++++++++++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-3424.rs b/tests/ui/issues/issue-3424.rs
new file mode 100644
index 000000000..43d75a652
--- /dev/null
+++ b/tests/ui/issues/issue-3424.rs
@@ -0,0 +1,20 @@
+// check-pass
+#![allow(dead_code)]
+#![allow(non_camel_case_types)]
+// rustc --test ignores2.rs && ./ignores2
+
+pub struct Path;
+
+type rsrc_loader = Box<dyn FnMut(&Path) -> Result<String, String>>;
+
+fn tester()
+{
+ let mut loader: rsrc_loader = Box::new(move |_path| {
+ Ok("more blah".to_string())
+ });
+
+ let path = Path;
+ assert!(loader(&path).is_ok());
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-3429.rs b/tests/ui/issues/issue-3429.rs
new file mode 100644
index 000000000..9d94c3ff6
--- /dev/null
+++ b/tests/ui/issues/issue-3429.rs
@@ -0,0 +1,8 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+pub fn main() {
+ let x = 1_usize;
+ let y = || x;
+ let _z = y();
+}
diff --git a/tests/ui/issues/issue-34334.rs b/tests/ui/issues/issue-34334.rs
new file mode 100644
index 000000000..51486bc40
--- /dev/null
+++ b/tests/ui/issues/issue-34334.rs
@@ -0,0 +1,8 @@
+fn main () {
+ let sr: Vec<(u32, _, _) = vec![];
+ //~^ ERROR expected one of
+
+ let sr2: Vec<(u32, _, _)> = sr.iter().map(|(faction, th_sender, th_receiver)| {}).collect();
+ //~^ ERROR a value of type `Vec<(u32, _, _)>` cannot be built
+
+}
diff --git a/tests/ui/issues/issue-34334.stderr b/tests/ui/issues/issue-34334.stderr
new file mode 100644
index 000000000..9d2c315e4
--- /dev/null
+++ b/tests/ui/issues/issue-34334.stderr
@@ -0,0 +1,38 @@
+error: expected one of `,`, `:`, or `>`, found `=`
+ --> $DIR/issue-34334.rs:2:29
+ |
+LL | let sr: Vec<(u32, _, _) = vec![];
+ | -- - ^ expected one of `,`, `:`, or `>`
+ | | |
+ | | maybe try to close unmatched angle bracket
+ | while parsing the type for `sr`
+ |
+help: you might have meant to end the type parameters here
+ |
+LL | let sr: Vec<(u32, _, _)> = vec![];
+ | +
+
+error[E0277]: a value of type `Vec<(u32, _, _)>` cannot be built from an iterator over elements of type `()`
+ --> $DIR/issue-34334.rs:5:87
+ |
+LL | let sr2: Vec<(u32, _, _)> = sr.iter().map(|(faction, th_sender, th_receiver)| {}).collect();
+ | ^^^^^^^ value of type `Vec<(u32, _, _)>` cannot be built from `std::iter::Iterator<Item=()>`
+ |
+ = help: the trait `FromIterator<()>` is not implemented for `Vec<(u32, _, _)>`
+ = help: the trait `FromIterator<T>` is implemented for `Vec<T>`
+note: the method call chain might not have had the expected associated types
+ --> $DIR/issue-34334.rs:5:43
+ |
+LL | let sr: Vec<(u32, _, _) = vec![];
+ | ------ this expression has type `Vec<(_, _, _)>`
+...
+LL | let sr2: Vec<(u32, _, _)> = sr.iter().map(|(faction, th_sender, th_receiver)| {}).collect();
+ | ------ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `Iterator::Item` changed to `()` here
+ | |
+ | `Iterator::Item` is `&(_, _, _)` here
+note: required by a bound in `collect`
+ --> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-34349.rs b/tests/ui/issues/issue-34349.rs
new file mode 100644
index 000000000..d86180261
--- /dev/null
+++ b/tests/ui/issues/issue-34349.rs
@@ -0,0 +1,22 @@
+// This is a regression test for a problem encountered around upvar
+// inference and trait caching: in particular, we were entering a
+// temporary closure kind during inference, and then caching results
+// based on that temporary kind, which led to no error being reported
+// in this particular test.
+
+fn main() {
+ let inc = || {};
+ inc();
+
+ fn apply<F>(f: F) where F: Fn() {
+ f()
+ }
+
+ let mut farewell = "goodbye".to_owned();
+ let diary = || { //~ ERROR E0525
+ farewell.push_str("!!!");
+ println!("Then I screamed {}.", farewell);
+ };
+
+ apply(diary);
+}
diff --git a/tests/ui/issues/issue-34349.stderr b/tests/ui/issues/issue-34349.stderr
new file mode 100644
index 000000000..8e9a16619
--- /dev/null
+++ b/tests/ui/issues/issue-34349.stderr
@@ -0,0 +1,22 @@
+error[E0525]: expected a closure that implements the `Fn` trait, but this closure only implements `FnMut`
+ --> $DIR/issue-34349.rs:16:17
+ |
+LL | let diary = || {
+ | ^^ this closure implements `FnMut`, not `Fn`
+LL | farewell.push_str("!!!");
+ | -------- closure is `FnMut` because it mutates the variable `farewell` here
+...
+LL | apply(diary);
+ | ----- ----- the requirement to implement `Fn` derives from here
+ | |
+ | required by a bound introduced by this call
+ |
+note: required by a bound in `apply`
+ --> $DIR/issue-34349.rs:11:32
+ |
+LL | fn apply<F>(f: F) where F: Fn() {
+ | ^^^^ required by this bound in `apply`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0525`.
diff --git a/tests/ui/issues/issue-34373.rs b/tests/ui/issues/issue-34373.rs
new file mode 100644
index 000000000..ca24e37d9
--- /dev/null
+++ b/tests/ui/issues/issue-34373.rs
@@ -0,0 +1,11 @@
+#![allow(warnings)]
+
+trait Trait<T> {
+ fn foo(_: T) {}
+}
+
+pub struct Foo<T = Box<Trait<DefaultFoo>>>; //~ ERROR cycle detected
+type DefaultFoo = Foo;
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-34373.stderr b/tests/ui/issues/issue-34373.stderr
new file mode 100644
index 000000000..8be3cfa72
--- /dev/null
+++ b/tests/ui/issues/issue-34373.stderr
@@ -0,0 +1,27 @@
+error[E0391]: cycle detected when computing type of `Foo::T`
+ --> $DIR/issue-34373.rs:7:30
+ |
+LL | pub struct Foo<T = Box<Trait<DefaultFoo>>>;
+ | ^^^^^^^^^^
+ |
+note: ...which requires expanding type alias `DefaultFoo`...
+ --> $DIR/issue-34373.rs:8:19
+ |
+LL | type DefaultFoo = Foo;
+ | ^^^
+ = note: ...which again requires computing type of `Foo::T`, completing the cycle
+note: cycle used when collecting item types in top-level module
+ --> $DIR/issue-34373.rs:1:1
+ |
+LL | / #![allow(warnings)]
+LL | |
+LL | | trait Trait<T> {
+LL | | fn foo(_: T) {}
+... |
+LL | | fn main() {
+LL | | }
+ | |_^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0391`.
diff --git a/tests/ui/issues/issue-34418.rs b/tests/ui/issues/issue-34418.rs
new file mode 100644
index 000000000..6132f744b
--- /dev/null
+++ b/tests/ui/issues/issue-34418.rs
@@ -0,0 +1,19 @@
+// check-pass
+
+macro_rules! make_item {
+ () => { fn f() {} }
+}
+
+macro_rules! make_stmt {
+ () => { let x = 0; }
+}
+
+fn f() {
+ make_item! {}
+}
+
+fn g() {
+ make_stmt! {}
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-34427.rs b/tests/ui/issues/issue-34427.rs
new file mode 100644
index 000000000..a14b5b9e2
--- /dev/null
+++ b/tests/ui/issues/issue-34427.rs
@@ -0,0 +1,17 @@
+// run-pass
+// Issue #34427: On ARM, the code in `foo` at one time was generating
+// a machine code instruction of the form: `str r0, [r0, rN]!` (for
+// some N), which is not legal because the source register and base
+// register cannot be identical in the preindexed form signalled by
+// the `!`.
+//
+// See LLVM bug: https://llvm.org/bugs/show_bug.cgi?id=28809
+
+#[inline(never)]
+fn foo(n: usize) -> Vec<Option<(*mut (), &'static ())>> {
+ (0..n).map(|_| None).collect()
+}
+
+fn main() {
+ let _ = (foo(10), foo(32));
+}
diff --git a/tests/ui/issues/issue-3447.rs b/tests/ui/issues/issue-3447.rs
new file mode 100644
index 000000000..ee5b22778
--- /dev/null
+++ b/tests/ui/issues/issue-3447.rs
@@ -0,0 +1,32 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(non_snake_case)]
+#![allow(non_camel_case_types)]
+
+use std::cell::RefCell;
+
+static S: &'static str = "str";
+
+struct list<T> {
+ element: T,
+ next: Option<Box<RefCell<list<T>>>>
+}
+
+impl<T:'static> list<T> {
+ pub fn addEnd(&mut self, element: T) {
+ let newList = list {
+ element: element,
+ next: None
+ };
+
+ self.next = Some(Box::new(RefCell::new(newList)));
+ }
+}
+
+pub fn main() {
+ let ls = list {
+ element: S,
+ next: None
+ };
+ println!("{}", ls.element);
+}
diff --git a/tests/ui/issues/issue-34503.rs b/tests/ui/issues/issue-34503.rs
new file mode 100644
index 000000000..26e735840
--- /dev/null
+++ b/tests/ui/issues/issue-34503.rs
@@ -0,0 +1,11 @@
+// run-pass
+fn main() {
+ struct X;
+ trait Foo<T> {
+ fn foo(&self) where (T, Option<T>): Ord {}
+ fn bar(&self, x: &Option<T>) -> bool
+ where Option<T>: Ord { *x < *x }
+ }
+ impl Foo<X> for () {}
+ let _ = &() as &dyn Foo<X>;
+}
diff --git a/tests/ui/issues/issue-34569.rs b/tests/ui/issues/issue-34569.rs
new file mode 100644
index 000000000..88dcdd411
--- /dev/null
+++ b/tests/ui/issues/issue-34569.rs
@@ -0,0 +1,18 @@
+// run-pass
+// compile-flags:-g
+// ignore-asmjs wasm2js does not support source maps yet
+
+// In this test we just want to make sure that the code below does not lead to
+// a debuginfo verification assertion during compilation. This was caused by the
+// closure in the guard being codegened twice due to how match expressions are
+// handled.
+//
+// See https://github.com/rust-lang/rust/issues/34569 for details.
+
+fn main() {
+ match 0 {
+ e if (|| { e == 0 })() => {},
+ 1 => {},
+ _ => {}
+ }
+}
diff --git a/tests/ui/issues/issue-34571.rs b/tests/ui/issues/issue-34571.rs
new file mode 100644
index 000000000..5498091da
--- /dev/null
+++ b/tests/ui/issues/issue-34571.rs
@@ -0,0 +1,11 @@
+// run-pass
+#[repr(u8)]
+enum Foo {
+ Foo(#[allow(unused_tuple_struct_fields)] u8),
+}
+
+fn main() {
+ match Foo::Foo(1) {
+ _ => ()
+ }
+}
diff --git a/tests/ui/issues/issue-34721.fixed b/tests/ui/issues/issue-34721.fixed
new file mode 100644
index 000000000..f135ad383
--- /dev/null
+++ b/tests/ui/issues/issue-34721.fixed
@@ -0,0 +1,34 @@
+// run-rustfix
+
+pub trait Foo {
+ fn zero(self) -> Self;
+}
+
+impl Foo for u32 {
+ fn zero(self) -> u32 { 0u32 }
+}
+
+pub mod bar {
+ pub use Foo;
+ pub fn bar<T: Foo>(x: T) -> T {
+ x.zero()
+ }
+}
+
+mod baz {
+ use bar;
+ use Foo;
+ pub fn baz<T: Foo + Copy>(x: T) -> T {
+ if 0 == 1 {
+ bar::bar(x.zero())
+ } else {
+ x.zero()
+ };
+ x.zero()
+ //~^ ERROR use of moved value
+ }
+}
+
+fn main() {
+ let _ = baz::baz(0u32);
+}
diff --git a/tests/ui/issues/issue-34721.rs b/tests/ui/issues/issue-34721.rs
new file mode 100644
index 000000000..14dd01766
--- /dev/null
+++ b/tests/ui/issues/issue-34721.rs
@@ -0,0 +1,34 @@
+// run-rustfix
+
+pub trait Foo {
+ fn zero(self) -> Self;
+}
+
+impl Foo for u32 {
+ fn zero(self) -> u32 { 0u32 }
+}
+
+pub mod bar {
+ pub use Foo;
+ pub fn bar<T: Foo>(x: T) -> T {
+ x.zero()
+ }
+}
+
+mod baz {
+ use bar;
+ use Foo;
+ pub fn baz<T: Foo>(x: T) -> T {
+ if 0 == 1 {
+ bar::bar(x.zero())
+ } else {
+ x.zero()
+ };
+ x.zero()
+ //~^ ERROR use of moved value
+ }
+}
+
+fn main() {
+ let _ = baz::baz(0u32);
+}
diff --git a/tests/ui/issues/issue-34721.stderr b/tests/ui/issues/issue-34721.stderr
new file mode 100644
index 000000000..f2bf22227
--- /dev/null
+++ b/tests/ui/issues/issue-34721.stderr
@@ -0,0 +1,28 @@
+error[E0382]: use of moved value: `x`
+ --> $DIR/issue-34721.rs:27:9
+ |
+LL | pub fn baz<T: Foo>(x: T) -> T {
+ | - move occurs because `x` has type `T`, which does not implement the `Copy` trait
+LL | if 0 == 1 {
+LL | bar::bar(x.zero())
+ | ------ `x` moved due to this method call
+LL | } else {
+LL | x.zero()
+ | ------ `x` moved due to this method call
+LL | };
+LL | x.zero()
+ | ^ value used here after move
+ |
+note: `Foo::zero` takes ownership of the receiver `self`, which moves `x`
+ --> $DIR/issue-34721.rs:4:13
+ |
+LL | fn zero(self) -> Self;
+ | ^^^^
+help: consider further restricting this bound
+ |
+LL | pub fn baz<T: Foo + Copy>(x: T) -> T {
+ | ++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0382`.
diff --git a/tests/ui/issues/issue-34751.rs b/tests/ui/issues/issue-34751.rs
new file mode 100644
index 000000000..6309c0a02
--- /dev/null
+++ b/tests/ui/issues/issue-34751.rs
@@ -0,0 +1,11 @@
+// check-pass
+#![allow(dead_code)]
+// #34751 ICE: 'rustc' panicked at 'assertion failed: !substs.has_regions_escaping_depth(0)'
+
+#[allow(dead_code)]
+
+use std::marker::PhantomData;
+
+fn f<'a>(PhantomData::<&'a u8>: PhantomData<&'a u8>) {}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-3477.rs b/tests/ui/issues/issue-3477.rs
new file mode 100644
index 000000000..3817d0e6a
--- /dev/null
+++ b/tests/ui/issues/issue-3477.rs
@@ -0,0 +1,5 @@
+fn main() {
+ let _p: char = 100;
+ //~^ ERROR mismatched types
+ //~| expected `char`, found `u8`
+}
diff --git a/tests/ui/issues/issue-3477.stderr b/tests/ui/issues/issue-3477.stderr
new file mode 100644
index 000000000..fd5f7dcf6
--- /dev/null
+++ b/tests/ui/issues/issue-3477.stderr
@@ -0,0 +1,11 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-3477.rs:2:20
+ |
+LL | let _p: char = 100;
+ | ---- ^^^ expected `char`, found `u8`
+ | |
+ | expected due to this
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-34780.rs b/tests/ui/issues/issue-34780.rs
new file mode 100644
index 000000000..fbedad35b
--- /dev/null
+++ b/tests/ui/issues/issue-34780.rs
@@ -0,0 +1,11 @@
+// check-pass
+#![allow(stable_features)]
+#![feature(associated_consts)]
+
+use std::marker::PhantomData;
+
+trait Tr<'a> {
+ const C: PhantomData<&'a u8> = PhantomData::<&'a u8>;
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-34796.rs b/tests/ui/issues/issue-34796.rs
new file mode 100644
index 000000000..88d5c50a2
--- /dev/null
+++ b/tests/ui/issues/issue-34796.rs
@@ -0,0 +1,28 @@
+// run-pass
+#![allow(dead_code)]
+// This test case exposes conditions where the encoding of a trait object type
+// with projection predicates would differ between this crate and the upstream
+// crate, because the predicates were encoded in different order within each
+// crate. This led to different symbol hashes of functions using these type,
+// which in turn led to linker errors because the two crates would not agree on
+// the symbol name.
+// The fix was to make the order in which predicates get encoded stable.
+
+// aux-build:issue-34796-aux.rs
+extern crate issue_34796_aux;
+
+fn mk<T>() -> T { loop {} }
+
+struct Data<T, E> {
+ data: T,
+ error: E,
+}
+
+fn main() {
+ issue_34796_aux::bar(|()| {
+ Data::<(), std::io::Error> {
+ data: mk(),
+ error: mk(),
+ }
+ })
+}
diff --git a/tests/ui/issues/issue-34839.rs b/tests/ui/issues/issue-34839.rs
new file mode 100644
index 000000000..8ffed827e
--- /dev/null
+++ b/tests/ui/issues/issue-34839.rs
@@ -0,0 +1,19 @@
+// check-pass
+
+trait RegularExpression: Sized {
+ type Text;
+}
+
+struct ExecNoSyncStr<'a>(&'a u8);
+
+impl<'c> RegularExpression for ExecNoSyncStr<'c> {
+ type Text = u8;
+}
+
+struct FindCaptures<'t, R>(&'t R::Text) where R: RegularExpression, R::Text: 't;
+
+enum FindCapturesInner<'r, 't> {
+ Dynamic(FindCaptures<'t, ExecNoSyncStr<'r>>),
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-34932.rs b/tests/ui/issues/issue-34932.rs
new file mode 100644
index 000000000..ab568fd01
--- /dev/null
+++ b/tests/ui/issues/issue-34932.rs
@@ -0,0 +1,11 @@
+// run-pass
+// compile-flags:--test
+#![cfg(any())] // This test should be configured away
+#![feature(rustc_attrs)] // Test that this is allowed on stable/beta
+#![feature(iter_arith_traits)] // Test that this is not unused
+#![deny(unused_features)]
+
+#[test]
+fn dummy() {
+ let () = "this should not reach type-checking";
+}
diff --git a/tests/ui/issues/issue-3500.rs b/tests/ui/issues/issue-3500.rs
new file mode 100644
index 000000000..7b39cc16c
--- /dev/null
+++ b/tests/ui/issues/issue-3500.rs
@@ -0,0 +1,10 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+pub fn main() {
+ let x = &Some(1);
+ match x {
+ &Some(_) => (),
+ &None => (),
+ }
+}
diff --git a/tests/ui/issues/issue-35139.rs b/tests/ui/issues/issue-35139.rs
new file mode 100644
index 000000000..e462f3543
--- /dev/null
+++ b/tests/ui/issues/issue-35139.rs
@@ -0,0 +1,26 @@
+use std::fmt;
+
+pub trait MethodType {
+ type GetProp: ?Sized;
+}
+
+pub struct MTFn;
+
+impl<'a> MethodType for MTFn { //~ ERROR E0207
+ type GetProp = dyn fmt::Debug + 'a;
+}
+
+fn bad(a: Box<<MTFn as MethodType>::GetProp>) -> Box<dyn fmt::Debug+'static> {
+ a
+}
+
+fn dangling(a: &str) -> Box<dyn fmt::Debug> {
+ bad(Box::new(a))
+}
+
+fn main() {
+ let mut s = "hello".to_string();
+ let x = dangling(&s);
+ s = String::new();
+ println!("{:?}", x);
+}
diff --git a/tests/ui/issues/issue-35139.stderr b/tests/ui/issues/issue-35139.stderr
new file mode 100644
index 000000000..79e889b7e
--- /dev/null
+++ b/tests/ui/issues/issue-35139.stderr
@@ -0,0 +1,9 @@
+error[E0207]: the lifetime parameter `'a` is not constrained by the impl trait, self type, or predicates
+ --> $DIR/issue-35139.rs:9:6
+ |
+LL | impl<'a> MethodType for MTFn {
+ | ^^ unconstrained lifetime parameter
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0207`.
diff --git a/tests/ui/issues/issue-3521-2.fixed b/tests/ui/issues/issue-3521-2.fixed
new file mode 100644
index 000000000..140c24b93
--- /dev/null
+++ b/tests/ui/issues/issue-3521-2.fixed
@@ -0,0 +1,9 @@
+// run-rustfix
+fn main() {
+ let foo = 100;
+
+ let y: isize = foo + 1;
+ //~^ ERROR attempt to use a non-constant value in a constant
+
+ println!("{}", y);
+}
diff --git a/tests/ui/issues/issue-3521-2.rs b/tests/ui/issues/issue-3521-2.rs
new file mode 100644
index 000000000..f66efec45
--- /dev/null
+++ b/tests/ui/issues/issue-3521-2.rs
@@ -0,0 +1,9 @@
+// run-rustfix
+fn main() {
+ let foo = 100;
+
+ static y: isize = foo + 1;
+ //~^ ERROR attempt to use a non-constant value in a constant
+
+ println!("{}", y);
+}
diff --git a/tests/ui/issues/issue-3521-2.stderr b/tests/ui/issues/issue-3521-2.stderr
new file mode 100644
index 000000000..84c7a9efa
--- /dev/null
+++ b/tests/ui/issues/issue-3521-2.stderr
@@ -0,0 +1,11 @@
+error[E0435]: attempt to use a non-constant value in a constant
+ --> $DIR/issue-3521-2.rs:5:23
+ |
+LL | static y: isize = foo + 1;
+ | -------- ^^^ non-constant value
+ | |
+ | help: consider using `let` instead of `static`: `let y`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0435`.
diff --git a/tests/ui/issues/issue-35241.rs b/tests/ui/issues/issue-35241.rs
new file mode 100644
index 000000000..2fa762475
--- /dev/null
+++ b/tests/ui/issues/issue-35241.rs
@@ -0,0 +1,5 @@
+struct Foo(u32);
+
+fn test() -> Foo { Foo } //~ ERROR mismatched types
+
+fn main() {}
diff --git a/tests/ui/issues/issue-35241.stderr b/tests/ui/issues/issue-35241.stderr
new file mode 100644
index 000000000..d600e934b
--- /dev/null
+++ b/tests/ui/issues/issue-35241.stderr
@@ -0,0 +1,21 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-35241.rs:3:20
+ |
+LL | struct Foo(u32);
+ | ---------- `Foo` defines a struct constructor here, which should be called
+LL |
+LL | fn test() -> Foo { Foo }
+ | --- ^^^ expected struct `Foo`, found struct constructor
+ | |
+ | expected `Foo` because of return type
+ |
+ = note: expected struct `Foo`
+ found struct constructor `fn(u32) -> Foo {Foo}`
+help: use parentheses to construct this tuple struct
+ |
+LL | fn test() -> Foo { Foo(/* u32 */) }
+ | +++++++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-35423.rs b/tests/ui/issues/issue-35423.rs
new file mode 100644
index 000000000..202ffcc1d
--- /dev/null
+++ b/tests/ui/issues/issue-35423.rs
@@ -0,0 +1,9 @@
+// run-pass
+fn main () {
+ let x = 4;
+ match x {
+ ref r if *r < 0 => println!("got negative num {} < 0", r),
+ e @ 1 ..= 100 => println!("got number within range [1,100] {}", e),
+ _ => println!("no"),
+ }
+}
diff --git a/tests/ui/issues/issue-3556.rs b/tests/ui/issues/issue-3556.rs
new file mode 100644
index 000000000..3c1934ade
--- /dev/null
+++ b/tests/ui/issues/issue-3556.rs
@@ -0,0 +1,36 @@
+// run-pass
+#![allow(dead_code)]
+
+#[derive(Debug)]
+enum Token {
+ Text(String),
+ ETag(Vec<String>, String),
+ UTag(Vec<String>, String),
+ Section(Vec<String>, bool, Vec<Token>, String,
+ String, String, String, String),
+ IncompleteSection(Vec<String>, bool, String, bool),
+ Partial(String, String, String),
+}
+
+fn check_strs(actual: &str, expected: &str) -> bool
+{
+ if actual != expected
+ {
+ println!("Found {}, but expected {}", actual, expected);
+ return false;
+ }
+ return true;
+}
+
+pub fn main()
+{
+ let t = Token::Text("foo".to_string());
+ let u = Token::Section(vec!["alpha".to_string()],
+ true,
+ vec![t],
+ "foo".to_string(),
+ "foo".to_string(), "foo".to_string(), "foo".to_string(),
+ "foo".to_string());
+ let v = format!("{:?}", u); // this is the line that causes the seg fault
+ assert!(!v.is_empty());
+}
diff --git a/tests/ui/issues/issue-35570.rs b/tests/ui/issues/issue-35570.rs
new file mode 100644
index 000000000..a2b0222d4
--- /dev/null
+++ b/tests/ui/issues/issue-35570.rs
@@ -0,0 +1,29 @@
+use std::mem;
+
+trait Trait1<T> {}
+trait Trait2<'a> {
+ type Ty;
+}
+
+fn _ice(param: Box<dyn for <'a> Trait1<<() as Trait2<'a>>::Ty>>) {
+ //~^ ERROR the trait bound `for<'a> (): Trait2<'a>` is not satisfied
+ //~| ERROR the trait bound `for<'a> (): Trait2<'a>` is not satisfied
+ let _e: (usize, usize) = unsafe{mem::transmute(param)};
+}
+
+trait Lifetime<'a> {
+ type Out;
+}
+impl<'a> Lifetime<'a> for () {
+ type Out = &'a ();
+}
+fn foo<'a>(x: &'a ()) -> <() as Lifetime<'a>>::Out {
+ x
+}
+
+fn takes_lifetime(_f: for<'a> fn(&'a ()) -> <() as Lifetime<'a>>::Out) {
+}
+
+fn main() {
+ takes_lifetime(foo);
+}
diff --git a/tests/ui/issues/issue-35570.stderr b/tests/ui/issues/issue-35570.stderr
new file mode 100644
index 000000000..3dc33729d
--- /dev/null
+++ b/tests/ui/issues/issue-35570.stderr
@@ -0,0 +1,19 @@
+error[E0277]: the trait bound `for<'a> (): Trait2<'a>` is not satisfied
+ --> $DIR/issue-35570.rs:8:40
+ |
+LL | fn _ice(param: Box<dyn for <'a> Trait1<<() as Trait2<'a>>::Ty>>) {
+ | ^^^^^^^^^^^^^^^^^^^^^^ the trait `for<'a> Trait2<'a>` is not implemented for `()`
+
+error[E0277]: the trait bound `for<'a> (): Trait2<'a>` is not satisfied
+ --> $DIR/issue-35570.rs:8:1
+ |
+LL | / fn _ice(param: Box<dyn for <'a> Trait1<<() as Trait2<'a>>::Ty>>) {
+LL | |
+LL | |
+LL | | let _e: (usize, usize) = unsafe{mem::transmute(param)};
+LL | | }
+ | |_^ the trait `for<'a> Trait2<'a>` is not implemented for `()`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-3559.rs b/tests/ui/issues/issue-3559.rs
new file mode 100644
index 000000000..9d498584a
--- /dev/null
+++ b/tests/ui/issues/issue-3559.rs
@@ -0,0 +1,18 @@
+// run-pass
+use std::collections::HashMap;
+
+fn check_strs(actual: &str, expected: &str) -> bool {
+ if actual != expected {
+ println!("Found {}, but expected {}", actual, expected);
+ return false;
+ }
+ return true;
+}
+
+pub fn main() {
+ let mut table = HashMap::new();
+ table.insert("one".to_string(), 1);
+ table.insert("two".to_string(), 2);
+ assert!(check_strs(&format!("{:?}", table), "{\"one\": 1, \"two\": 2}") ||
+ check_strs(&format!("{:?}", table), "{\"two\": 2, \"one\": 1}"));
+}
diff --git a/tests/ui/issues/issue-35600.rs b/tests/ui/issues/issue-35600.rs
new file mode 100644
index 000000000..f0bab6010
--- /dev/null
+++ b/tests/ui/issues/issue-35600.rs
@@ -0,0 +1,18 @@
+// run-pass
+#![allow(non_camel_case_types)]
+#![allow(unused_variables)]
+
+trait Foo {
+ type bar;
+ fn bar();
+}
+
+impl Foo for () {
+ type bar = ();
+ fn bar() {}
+}
+
+fn main() {
+ let x: <() as Foo>::bar = ();
+ <()>::bar();
+}
diff --git a/tests/ui/issues/issue-3563-3.rs b/tests/ui/issues/issue-3563-3.rs
new file mode 100644
index 000000000..bedfdab97
--- /dev/null
+++ b/tests/ui/issues/issue-3563-3.rs
@@ -0,0 +1,180 @@
+// run-pass
+#![allow(unused_imports)]
+#![allow(non_snake_case)]
+
+// ASCII art shape renderer. Demonstrates traits, impls, operator overloading,
+// non-copyable struct, unit testing. To run execute: rustc --test shapes.rs &&
+// ./shapes
+
+// Rust's std library is tightly bound to the language itself so it is
+// automatically linked in. However the extra library is designed to be
+// optional (for code that must run on constrained environments like embedded
+// devices or special environments like kernel code) so it must be explicitly
+// linked in.
+
+// Extern mod controls linkage. Use controls the visibility of names to modules
+// that are already linked in. Using WriterUtil allows us to use the write_line
+// method.
+
+use std::fmt;
+use std::iter::repeat;
+use std::slice;
+
+// Represents a position on a canvas.
+#[derive(Copy, Clone)]
+struct Point {
+ x: isize,
+ y: isize,
+}
+
+// Represents an offset on a canvas. (This has the same structure as a Point.
+// but different semantics).
+#[derive(Copy, Clone)]
+struct Size {
+ width: isize,
+ height: isize,
+}
+
+#[derive(Copy, Clone)]
+struct Rect {
+ top_left: Point,
+ size: Size,
+}
+
+// Contains the information needed to do shape rendering via ASCII art.
+struct AsciiArt {
+ width: usize,
+ height: usize,
+ fill: char,
+ lines: Vec<Vec<char> > ,
+
+ // This struct can be quite large so we'll disable copying: developers need
+ // to either pass these structs around via references or move them.
+}
+
+impl Drop for AsciiArt {
+ fn drop(&mut self) {}
+}
+
+// It's common to define a constructor sort of function to create struct instances.
+// If there is a canonical constructor it is typically named the same as the type.
+// Other constructor sort of functions are typically named from_foo, from_bar, etc.
+fn AsciiArt(width: usize, height: usize, fill: char) -> AsciiArt {
+ // Build a vector of vectors containing blank characters for each position in
+ // our canvas.
+ let lines = vec![vec!['.'; width]; height];
+
+ // Rust code often returns values by omitting the trailing semi-colon
+ // instead of using an explicit return statement.
+ AsciiArt {width: width, height: height, fill: fill, lines: lines}
+}
+
+// Methods particular to the AsciiArt struct.
+impl AsciiArt {
+ fn add_pt(&mut self, x: isize, y: isize) {
+ if x >= 0 && x < self.width as isize {
+ if y >= 0 && y < self.height as isize {
+ // Note that numeric types don't implicitly convert to each other.
+ let v = y as usize;
+ let h = x as usize;
+
+ // Vector subscripting will normally copy the element, but &v[i]
+ // will return a reference which is what we need because the
+ // element is:
+ // 1) potentially large
+ // 2) needs to be modified
+ let row = &mut self.lines[v];
+ row[h] = self.fill;
+ }
+ }
+ }
+}
+
+// Allows AsciiArt to be converted to a string using the libcore ToString trait.
+// Note that the %s fmt! specifier will not call this automatically.
+impl fmt::Display for AsciiArt {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ // Convert each line into a string.
+ let lines = self.lines.iter()
+ .map(|line| line.iter().cloned().collect())
+ .collect::<Vec<String>>();
+
+ // Concatenate the lines together using a new-line.
+ write!(f, "{}", lines.join("\n"))
+ }
+}
+
+// This is similar to an interface in other languages: it defines a protocol which
+// developers can implement for arbitrary concrete types.
+trait Canvas {
+ fn add_point(&mut self, shape: Point);
+ fn add_rect(&mut self, shape: Rect);
+
+ // Unlike interfaces traits support default implementations.
+ // Got an ICE as soon as I added this method.
+ fn add_points(&mut self, shapes: &[Point]) {
+ for pt in shapes {self.add_point(*pt)};
+ }
+}
+
+// Here we provide an implementation of the Canvas methods for AsciiArt.
+// Other implementations could also be provided (e.g., for PDF or Apple's Quartz)
+// and code can use them polymorphically via the Canvas trait.
+impl Canvas for AsciiArt {
+ fn add_point(&mut self, shape: Point) {
+ self.add_pt(shape.x, shape.y);
+ }
+
+ fn add_rect(&mut self, shape: Rect) {
+ // Add the top and bottom lines.
+ for x in shape.top_left.x..shape.top_left.x + shape.size.width {
+ self.add_pt(x, shape.top_left.y);
+ self.add_pt(x, shape.top_left.y + shape.size.height - 1);
+ }
+
+ // Add the left and right lines.
+ for y in shape.top_left.y..shape.top_left.y + shape.size.height {
+ self.add_pt(shape.top_left.x, y);
+ self.add_pt(shape.top_left.x + shape.size.width - 1, y);
+ }
+ }
+}
+
+// Rust's unit testing framework is currently a bit under-developed so we'll use
+// this little helper.
+pub fn check_strs(actual: &str, expected: &str) -> bool {
+ if actual != expected {
+ println!("Found:\n{}\nbut expected\n{}", actual, expected);
+ return false;
+ }
+ return true;
+}
+
+
+fn test_ascii_art_ctor() {
+ let art = AsciiArt(3, 3, '*');
+ assert!(check_strs(&art.to_string(), "...\n...\n..."));
+}
+
+
+fn test_add_pt() {
+ let mut art = AsciiArt(3, 3, '*');
+ art.add_pt(0, 0);
+ art.add_pt(0, -10);
+ art.add_pt(1, 2);
+ assert!(check_strs(&art.to_string(), "*..\n...\n.*."));
+}
+
+
+fn test_shapes() {
+ let mut art = AsciiArt(4, 4, '*');
+ art.add_rect(Rect {top_left: Point {x: 0, y: 0}, size: Size {width: 4, height: 4}});
+ art.add_point(Point {x: 2, y: 2});
+ assert!(check_strs(&art.to_string(), "****\n*..*\n*.**\n****"));
+}
+
+pub fn main() {
+ test_ascii_art_ctor();
+ test_add_pt();
+ test_shapes();
+}
diff --git a/tests/ui/issues/issue-3574.rs b/tests/ui/issues/issue-3574.rs
new file mode 100644
index 000000000..eb967577f
--- /dev/null
+++ b/tests/ui/issues/issue-3574.rs
@@ -0,0 +1,14 @@
+// run-pass
+// rustc --test match_borrowed_str.rs.rs && ./match_borrowed_str.rs
+
+
+fn compare(x: &str, y: &str) -> bool {
+ match x {
+ "foo" => y == "foo",
+ _ => y == "bar",
+ }
+}
+
+pub fn main() {
+ assert!(compare("foo", "foo"));
+}
diff --git a/tests/ui/issues/issue-35815.rs b/tests/ui/issues/issue-35815.rs
new file mode 100644
index 000000000..05fd1b15d
--- /dev/null
+++ b/tests/ui/issues/issue-35815.rs
@@ -0,0 +1,15 @@
+// run-pass
+#![allow(dead_code)]
+use std::mem;
+
+struct Foo<T: ?Sized> {
+ a: i64,
+ b: bool,
+ c: T,
+}
+
+fn main() {
+ let foo: &Foo<i32> = &Foo { a: 1, b: false, c: 2i32 };
+ let foo_unsized: &Foo<dyn Send> = foo;
+ assert_eq!(mem::size_of_val(foo), mem::size_of_val(foo_unsized));
+}
diff --git a/tests/ui/issues/issue-35976.rs b/tests/ui/issues/issue-35976.rs
new file mode 100644
index 000000000..aa6f74cb5
--- /dev/null
+++ b/tests/ui/issues/issue-35976.rs
@@ -0,0 +1,24 @@
+// revisions: imported unimported
+//[imported] check-pass
+
+mod private {
+ pub trait Future {
+ //[unimported]~^^ HELP perhaps add a `use` for it
+ fn wait(&self) where Self: Sized;
+ }
+
+ impl Future for Box<dyn Future> {
+ fn wait(&self) { }
+ }
+}
+
+#[cfg(imported)]
+use private::Future;
+
+fn bar(arg: Box<dyn private::Future>) {
+ // Importing the trait means that we don't autoderef `Box<dyn Future>`
+ arg.wait();
+ //[unimported]~^ ERROR the `wait` method cannot be invoked on a trait object
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-35976.unimported.stderr b/tests/ui/issues/issue-35976.unimported.stderr
new file mode 100644
index 000000000..5d61bb8ea
--- /dev/null
+++ b/tests/ui/issues/issue-35976.unimported.stderr
@@ -0,0 +1,16 @@
+error: the `wait` method cannot be invoked on a trait object
+ --> $DIR/issue-35976.rs:20:9
+ |
+LL | fn wait(&self) where Self: Sized;
+ | ----- this has a `Sized` requirement
+...
+LL | arg.wait();
+ | ^^^^
+ |
+help: another candidate was found in the following trait, perhaps add a `use` for it:
+ |
+LL | use private::Future;
+ |
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-35988.rs b/tests/ui/issues/issue-35988.rs
new file mode 100644
index 000000000..5cf2f8e52
--- /dev/null
+++ b/tests/ui/issues/issue-35988.rs
@@ -0,0 +1,6 @@
+enum E {
+ V([Box<E>]),
+ //~^ ERROR the size for values of type
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-35988.stderr b/tests/ui/issues/issue-35988.stderr
new file mode 100644
index 000000000..55988844c
--- /dev/null
+++ b/tests/ui/issues/issue-35988.stderr
@@ -0,0 +1,21 @@
+error[E0277]: the size for values of type `[Box<E>]` cannot be known at compilation time
+ --> $DIR/issue-35988.rs:2:7
+ |
+LL | V([Box<E>]),
+ | ^^^^^^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `[Box<E>]`
+ = note: no field of an enum variant may have a dynamically sized type
+ = help: change the field's type to have a statically known size
+help: borrowed types always have a statically known size
+ |
+LL | V(&[Box<E>]),
+ | +
+help: the `Box` type always has a statically known size and allocates its contents in the heap
+ |
+LL | V(Box<[Box<E>]>),
+ | ++++ +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-36023.rs b/tests/ui/issues/issue-36023.rs
new file mode 100644
index 000000000..64d92bf8c
--- /dev/null
+++ b/tests/ui/issues/issue-36023.rs
@@ -0,0 +1,24 @@
+// run-pass
+#![allow(unused_variables)]
+use std::ops::Deref;
+
+fn main() {
+ if env_var("FOOBAR").as_ref().map(Deref::deref).ok() == Some("yes") {
+ panic!()
+ }
+
+ let env_home: Result<String, ()> = Ok("foo-bar-baz".to_string());
+ let env_home = env_home.as_ref().map(Deref::deref).ok();
+
+ if env_home == Some("") { panic!() }
+}
+
+#[inline(never)]
+fn env_var(s: &str) -> Result<String, VarError> {
+ Err(VarError::NotPresent)
+}
+
+pub enum VarError {
+ NotPresent,
+ NotUnicode(String),
+}
diff --git a/tests/ui/issues/issue-36036-associated-type-layout.rs b/tests/ui/issues/issue-36036-associated-type-layout.rs
new file mode 100644
index 000000000..022f9a5d5
--- /dev/null
+++ b/tests/ui/issues/issue-36036-associated-type-layout.rs
@@ -0,0 +1,27 @@
+// run-pass
+// Issue 36036: computing the layout of a type composed from another
+// trait's associated type caused compiler to ICE when the associated
+// type was allowed to be unsized, even though the known instantiated
+// type is itself sized.
+
+#![allow(dead_code)]
+
+trait Context {
+ type Container: ?Sized;
+}
+
+impl Context for u16 {
+ type Container = u8;
+}
+
+struct Wrapper<C: Context+'static> {
+ container: &'static C::Container
+}
+
+fn foobar(_: Wrapper<u16>) {}
+
+static VALUE: u8 = 0;
+
+fn main() {
+ foobar(Wrapper { container: &VALUE });
+}
diff --git a/tests/ui/issues/issue-36075.rs b/tests/ui/issues/issue-36075.rs
new file mode 100644
index 000000000..bc5bdc3ff
--- /dev/null
+++ b/tests/ui/issues/issue-36075.rs
@@ -0,0 +1,14 @@
+// check-pass
+#![allow(dead_code)]
+trait DeclarationParser {
+ type Declaration;
+}
+
+struct DeclarationListParser<'i, I, P>
+ where P: DeclarationParser<Declaration = I>
+{
+ input: &'i (),
+ parser: P
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-3609.rs b/tests/ui/issues/issue-3609.rs
new file mode 100644
index 000000000..57ff12a08
--- /dev/null
+++ b/tests/ui/issues/issue-3609.rs
@@ -0,0 +1,30 @@
+// check-pass
+#![allow(unused_must_use)]
+#![allow(dead_code)]
+#![allow(unused_mut)]
+use std::thread;
+use std::sync::mpsc::Sender;
+
+type RingBuffer = Vec<f64> ;
+type SamplesFn = Box<dyn FnMut(&RingBuffer) + Send>;
+
+enum Msg
+{
+ GetSamples(String, SamplesFn), // sample set name, callback which receives samples
+}
+
+fn foo(name: String, samples_chan: Sender<Msg>) {
+ thread::spawn(move|| {
+ let mut samples_chan = samples_chan;
+
+ let callback: SamplesFn = Box::new(move |buffer| {
+ for i in 0..buffer.len() {
+ println!("{}: {}", i, buffer[i])
+ }
+ });
+
+ samples_chan.send(Msg::GetSamples(name.clone(), callback));
+ }).join();
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-36116.rs b/tests/ui/issues/issue-36116.rs
new file mode 100644
index 000000000..c7c70c7af
--- /dev/null
+++ b/tests/ui/issues/issue-36116.rs
@@ -0,0 +1,25 @@
+// Unnecessary path disambiguator is ok
+
+// check-pass
+
+macro_rules! m {
+ ($p: path) => {
+ let _ = $p(0);
+ let _: $p;
+ }
+}
+
+struct Foo<T> {
+ _a: T,
+}
+
+struct S<T>(T);
+
+fn f() {
+ let f = Some(Foo { _a: 42 }).map(|a| a as Foo::<i32>);
+ let g: Foo::<i32> = Foo { _a: 42 };
+
+ m!(S::<u8>);
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-36260.rs b/tests/ui/issues/issue-36260.rs
new file mode 100644
index 000000000..d96dc80ea
--- /dev/null
+++ b/tests/ui/issues/issue-36260.rs
@@ -0,0 +1,13 @@
+// run-pass
+// Make sure this compiles without getting a linker error because of missing
+// drop-glue because the collector missed adding drop-glue for the closure:
+
+fn create_fn() -> Box<dyn Fn()> {
+ let text = String::new();
+
+ Box::new(move || { let _ = &text; })
+}
+
+fn main() {
+ let _ = create_fn();
+}
diff --git a/tests/ui/issues/issue-36278-prefix-nesting.rs b/tests/ui/issues/issue-36278-prefix-nesting.rs
new file mode 100644
index 000000000..a809f7f13
--- /dev/null
+++ b/tests/ui/issues/issue-36278-prefix-nesting.rs
@@ -0,0 +1,20 @@
+// run-pass
+// Issue 36278: On an unsized struct with >1 level of nontrivial
+// nesting, ensure we are computing dynamic size of prefix correctly.
+
+use std::mem;
+
+const SZ: usize = 100;
+#[allow(unused_tuple_struct_fields)]
+struct P<T: ?Sized>([u8; SZ], T);
+
+type Ack<T> = P<P<T>>;
+
+fn main() {
+ let size_of_sized; let size_of_unsized;
+ let x: Box<Ack<[u8; 0]>> = Box::new(P([0; SZ], P([0; SZ], [0; 0])));
+ size_of_sized = mem::size_of_val::<Ack<_>>(&x);
+ let y: Box<Ack<[u8 ]>> = x;
+ size_of_unsized = mem::size_of_val::<Ack<_>>(&y);
+ assert_eq!(size_of_sized, size_of_unsized);
+}
diff --git a/tests/ui/issues/issue-36299.rs b/tests/ui/issues/issue-36299.rs
new file mode 100644
index 000000000..7b68420b7
--- /dev/null
+++ b/tests/ui/issues/issue-36299.rs
@@ -0,0 +1,5 @@
+struct Foo<'a, A> {}
+//~^ ERROR parameter `'a` is never used
+//~| ERROR parameter `A` is never used
+
+fn main() {}
diff --git a/tests/ui/issues/issue-36299.stderr b/tests/ui/issues/issue-36299.stderr
new file mode 100644
index 000000000..dc24fb353
--- /dev/null
+++ b/tests/ui/issues/issue-36299.stderr
@@ -0,0 +1,20 @@
+error[E0392]: parameter `'a` is never used
+ --> $DIR/issue-36299.rs:1:12
+ |
+LL | struct Foo<'a, A> {}
+ | ^^ unused parameter
+ |
+ = help: consider removing `'a`, referring to it in a field, or using a marker such as `PhantomData`
+
+error[E0392]: parameter `A` is never used
+ --> $DIR/issue-36299.rs:1:16
+ |
+LL | struct Foo<'a, A> {}
+ | ^ unused parameter
+ |
+ = help: consider removing `A`, referring to it in a field, or using a marker such as `PhantomData`
+ = help: if you intended `A` to be a const parameter, use `const A: usize` instead
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0392`.
diff --git a/tests/ui/issues/issue-36379.rs b/tests/ui/issues/issue-36379.rs
new file mode 100644
index 000000000..3a3e6f470
--- /dev/null
+++ b/tests/ui/issues/issue-36379.rs
@@ -0,0 +1,5 @@
+// check-pass
+
+fn _test() -> impl Default { }
+
+fn main() {}
diff --git a/tests/ui/issues/issue-36400.rs b/tests/ui/issues/issue-36400.rs
new file mode 100644
index 000000000..a405f9b11
--- /dev/null
+++ b/tests/ui/issues/issue-36400.rs
@@ -0,0 +1,6 @@
+fn f(x: &mut u32) {}
+
+fn main() {
+ let x = Box::new(3);
+ f(&mut *x); //~ ERROR cannot borrow `*x` as mutable, as `x` is not declared as mutable
+}
diff --git a/tests/ui/issues/issue-36400.stderr b/tests/ui/issues/issue-36400.stderr
new file mode 100644
index 000000000..5b753c69d
--- /dev/null
+++ b/tests/ui/issues/issue-36400.stderr
@@ -0,0 +1,14 @@
+error[E0596]: cannot borrow `*x` as mutable, as `x` is not declared as mutable
+ --> $DIR/issue-36400.rs:5:7
+ |
+LL | f(&mut *x);
+ | ^^^^^^^ cannot borrow as mutable
+ |
+help: consider changing this to be mutable
+ |
+LL | let mut x = Box::new(3);
+ | +++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0596`.
diff --git a/tests/ui/issues/issue-36401.rs b/tests/ui/issues/issue-36401.rs
new file mode 100644
index 000000000..f51197b01
--- /dev/null
+++ b/tests/ui/issues/issue-36401.rs
@@ -0,0 +1,16 @@
+// run-pass
+#[derive(Debug)]
+pub enum Event {
+ Key(u8),
+ Resize,
+ Unknown(u16),
+}
+
+static XTERM_SINGLE_BYTES : [(u8, Event); 1] = [(1, Event::Resize)];
+
+fn main() {
+ match XTERM_SINGLE_BYTES[0] {
+ (1, Event::Resize) => {},
+ ref bad => panic!("unexpected {:?}", bad)
+ }
+}
diff --git a/tests/ui/issues/issue-36474.rs b/tests/ui/issues/issue-36474.rs
new file mode 100644
index 000000000..90ee5b3cd
--- /dev/null
+++ b/tests/ui/issues/issue-36474.rs
@@ -0,0 +1,31 @@
+// run-pass
+fn main() {
+ remove_axis(&3, 0);
+}
+
+trait Dimension {
+ fn slice(&self) -> &[usize];
+}
+
+impl Dimension for () {
+ fn slice(&self) -> &[usize] { &[] }
+}
+
+impl Dimension for usize {
+ fn slice(&self) -> &[usize] {
+ unsafe {
+ ::std::slice::from_raw_parts(self, 1)
+ }
+ }
+}
+
+fn remove_axis(value: &usize, axis: usize) -> () {
+ let tup = ();
+ let mut it = tup.slice().iter();
+ for (i, _) in value.slice().iter().enumerate() {
+ if i == axis {
+ continue;
+ }
+ it.next();
+ }
+}
diff --git a/tests/ui/issues/issue-3656.rs b/tests/ui/issues/issue-3656.rs
new file mode 100644
index 000000000..4a9f94306
--- /dev/null
+++ b/tests/ui/issues/issue-3656.rs
@@ -0,0 +1,27 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(improper_ctypes)]
+// Issue #3656
+// Incorrect struct size computation in the FFI, because of not taking
+// the alignment of elements into account.
+
+// pretty-expanded FIXME #23616
+// ignore-wasm32-bare no libc to test with
+#![feature(rustc_private)]
+
+extern crate libc;
+use libc::{c_uint, c_void};
+
+pub struct KEYGEN {
+ hash_algorithm: [c_uint; 2],
+ count: u32,
+ salt: *const c_void,
+ salt_size: u32,
+}
+
+extern "C" {
+ // Bogus signature, just need to test if it compiles.
+ pub fn malloc(data: KEYGEN);
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-3668-2.fixed b/tests/ui/issues/issue-3668-2.fixed
new file mode 100644
index 000000000..a95781c6e
--- /dev/null
+++ b/tests/ui/issues/issue-3668-2.fixed
@@ -0,0 +1,8 @@
+// run-rustfix
+#![allow(unused_variables, dead_code)]
+fn f(x:isize) {
+ let child: isize = x + 1;
+ //~^ ERROR attempt to use a non-constant value in a constant
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-3668-2.rs b/tests/ui/issues/issue-3668-2.rs
new file mode 100644
index 000000000..8aa0897ec
--- /dev/null
+++ b/tests/ui/issues/issue-3668-2.rs
@@ -0,0 +1,8 @@
+// run-rustfix
+#![allow(unused_variables, dead_code)]
+fn f(x:isize) {
+ static child: isize = x + 1;
+ //~^ ERROR attempt to use a non-constant value in a constant
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-3668-2.stderr b/tests/ui/issues/issue-3668-2.stderr
new file mode 100644
index 000000000..ba9651041
--- /dev/null
+++ b/tests/ui/issues/issue-3668-2.stderr
@@ -0,0 +1,11 @@
+error[E0435]: attempt to use a non-constant value in a constant
+ --> $DIR/issue-3668-2.rs:4:27
+ |
+LL | static child: isize = x + 1;
+ | ------------ ^ non-constant value
+ | |
+ | help: consider using `let` instead of `static`: `let child`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0435`.
diff --git a/tests/ui/issues/issue-3668.rs b/tests/ui/issues/issue-3668.rs
new file mode 100644
index 000000000..0e1f19a75
--- /dev/null
+++ b/tests/ui/issues/issue-3668.rs
@@ -0,0 +1,14 @@
+struct P { child: Option<Box<P>> }
+trait PTrait {
+ fn getChildOption(&self) -> Option<Box<P>>;
+}
+
+impl PTrait for P {
+ fn getChildOption(&self) -> Option<Box<P>> {
+ static childVal: Box<P> = self.child.get();
+ //~^ ERROR attempt to use a non-constant value in a constant
+ panic!();
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-3668.stderr b/tests/ui/issues/issue-3668.stderr
new file mode 100644
index 000000000..edc49979c
--- /dev/null
+++ b/tests/ui/issues/issue-3668.stderr
@@ -0,0 +1,11 @@
+error[E0435]: attempt to use a non-constant value in a constant
+ --> $DIR/issue-3668.rs:8:34
+ |
+LL | static childVal: Box<P> = self.child.get();
+ | --------------- ^^^^ non-constant value
+ | |
+ | help: consider using `let` instead of `static`: `let childVal`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0435`.
diff --git a/tests/ui/issues/issue-36744-bitcast-args-if-needed.rs b/tests/ui/issues/issue-36744-bitcast-args-if-needed.rs
new file mode 100644
index 000000000..34bbb66d9
--- /dev/null
+++ b/tests/ui/issues/issue-36744-bitcast-args-if-needed.rs
@@ -0,0 +1,23 @@
+// run-pass
+// This tests for an ICE (and, if ignored, subsequent LLVM abort) when
+// a lifetime-parametric fn is passed into a context whose expected
+// type has a differing lifetime parameterization.
+
+struct A<'a> {
+ _a: &'a i32,
+}
+
+fn call<T>(s: T, functions: &Vec<for <'n> fn(&'n T)>) {
+ for function in functions {
+ function(&s);
+ }
+}
+
+fn f(a: &A) { println!("a holds {}", a._a); }
+
+fn main() {
+ let a = A { _a: &10 };
+
+ let vec: Vec<for <'u,'v> fn(&'u A<'v>)> = vec![f];
+ call(a, &vec);
+}
diff --git a/tests/ui/issues/issue-36744-without-calls.rs b/tests/ui/issues/issue-36744-without-calls.rs
new file mode 100644
index 000000000..dc5dc4f13
--- /dev/null
+++ b/tests/ui/issues/issue-36744-without-calls.rs
@@ -0,0 +1,13 @@
+// build-pass
+// Tests for an LLVM abort when storing a lifetime-parametric fn into
+// context that is expecting one that is not lifetime-parametric
+// (i.e., has no `for <'_>`).
+
+pub struct A<'a>(&'a ());
+pub struct S<T>(T);
+
+pub fn bad<'s>(v: &mut S<fn(A<'s>)>, y: S<for<'b> fn(A<'b>)>) {
+ *v = y;
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-36786-resolve-call.rs b/tests/ui/issues/issue-36786-resolve-call.rs
new file mode 100644
index 000000000..e5341ba7d
--- /dev/null
+++ b/tests/ui/issues/issue-36786-resolve-call.rs
@@ -0,0 +1,8 @@
+// run-pass
+// Ensure that types that rely on obligations are autoderefed
+// correctly
+
+fn main() {
+ let x : Vec<Box<dyn Fn()>> = vec![Box::new(|| ())];
+ x[0]()
+}
diff --git a/tests/ui/issues/issue-36792.rs b/tests/ui/issues/issue-36792.rs
new file mode 100644
index 000000000..99ae633dd
--- /dev/null
+++ b/tests/ui/issues/issue-36792.rs
@@ -0,0 +1,7 @@
+// run-pass
+fn foo() -> impl Copy {
+ foo
+}
+fn main() {
+ foo();
+}
diff --git a/tests/ui/issues/issue-3680.rs b/tests/ui/issues/issue-3680.rs
new file mode 100644
index 000000000..37c9000c0
--- /dev/null
+++ b/tests/ui/issues/issue-3680.rs
@@ -0,0 +1,9 @@
+fn main() {
+ match None {
+ Err(_) => ()
+ //~^ ERROR mismatched types
+ //~| expected enum `Option<_>`
+ //~| found enum `Result<_, _>`
+ //~| expected enum `Option`, found enum `Result`
+ }
+}
diff --git a/tests/ui/issues/issue-3680.stderr b/tests/ui/issues/issue-3680.stderr
new file mode 100644
index 000000000..29ba44f13
--- /dev/null
+++ b/tests/ui/issues/issue-3680.stderr
@@ -0,0 +1,18 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-3680.rs:3:9
+ |
+LL | match None {
+ | ---- this expression has type `Option<_>`
+LL | Err(_) => ()
+ | ^^^^^^ expected enum `Option`, found enum `Result`
+ |
+ = note: expected enum `Option<_>`
+ found enum `Result<_, _>`
+help: try wrapping the pattern in `Some`
+ |
+LL | Some(Err(_)) => ()
+ | +++++ +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-36816.rs b/tests/ui/issues/issue-36816.rs
new file mode 100644
index 000000000..54690b43c
--- /dev/null
+++ b/tests/ui/issues/issue-36816.rs
@@ -0,0 +1,7 @@
+// run-pass
+macro_rules! m { () => { 1 } }
+macro_rules! n { () => { 1 + m!() } }
+
+fn main() {
+ let _: [u32; n!()] = [0, 0];
+}
diff --git a/tests/ui/issues/issue-36836.rs b/tests/ui/issues/issue-36836.rs
new file mode 100644
index 000000000..99c562131
--- /dev/null
+++ b/tests/ui/issues/issue-36836.rs
@@ -0,0 +1,15 @@
+// Previously, in addition to the real cause of the problem as seen below,
+// the compiler would tell the user:
+//
+// ```
+// error[E0207]: the type parameter `T` is not constrained by the impl trait, self type, or
+// predicates
+// ```
+//
+// With this test, we check that only the relevant error is emitted.
+
+trait Foo {}
+
+impl<T> Foo for Bar<T> {} //~ ERROR cannot find type `Bar` in this scope
+
+fn main() {}
diff --git a/tests/ui/issues/issue-36836.stderr b/tests/ui/issues/issue-36836.stderr
new file mode 100644
index 000000000..418194fac
--- /dev/null
+++ b/tests/ui/issues/issue-36836.stderr
@@ -0,0 +1,9 @@
+error[E0412]: cannot find type `Bar` in this scope
+ --> $DIR/issue-36836.rs:13:17
+ |
+LL | impl<T> Foo for Bar<T> {}
+ | ^^^ not found in this scope
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0412`.
diff --git a/tests/ui/issues/issue-36839.rs b/tests/ui/issues/issue-36839.rs
new file mode 100644
index 000000000..ca3d66b1c
--- /dev/null
+++ b/tests/ui/issues/issue-36839.rs
@@ -0,0 +1,21 @@
+// check-pass
+
+pub trait Foo {
+ type Bar;
+}
+
+pub trait Broken {
+ type Assoc;
+ fn broken(&self) where Self::Assoc: Foo;
+}
+
+impl<T> Broken for T {
+ type Assoc = ();
+ fn broken(&self) where Self::Assoc: Foo {
+ let _x: <Self::Assoc as Foo>::Bar;
+ }
+}
+
+fn main() {
+ let _m: &dyn Broken<Assoc=()> = &();
+}
diff --git a/tests/ui/issues/issue-36856.rs b/tests/ui/issues/issue-36856.rs
new file mode 100644
index 000000000..5657ba69f
--- /dev/null
+++ b/tests/ui/issues/issue-36856.rs
@@ -0,0 +1,16 @@
+// run-pass
+// Regression test for #36856.
+
+// compile-flags:-g
+// ignore-asmjs wasm2js does not support source maps yet
+
+fn g() -> bool {
+ false
+}
+
+pub fn main() {
+ let a = !g();
+ if a != !g() {
+ panic!();
+ }
+}
diff --git a/tests/ui/issues/issue-36936.rs b/tests/ui/issues/issue-36936.rs
new file mode 100644
index 000000000..486a422b7
--- /dev/null
+++ b/tests/ui/issues/issue-36936.rs
@@ -0,0 +1,26 @@
+// run-pass
+// check that casts are not being treated as lexprs.
+
+fn main() {
+ let mut a = 0i32;
+ let b = &(a as i32);
+ a = 1;
+ assert_ne!(&a as *const i32, b as *const i32);
+ assert_eq!(*b, 0);
+
+ assert_eq!(issue_36936(), 1);
+}
+
+
+struct A(u32);
+
+impl Drop for A {
+ fn drop(&mut self) {
+ self.0 = 0;
+ }
+}
+
+fn issue_36936() -> u32 {
+ let a = &(A(1) as A);
+ a.0
+}
diff --git a/tests/ui/issues/issue-36954.rs b/tests/ui/issues/issue-36954.rs
new file mode 100644
index 000000000..56ff9926e
--- /dev/null
+++ b/tests/ui/issues/issue-36954.rs
@@ -0,0 +1,8 @@
+// run-pass
+// aux-build:issue-36954.rs
+
+extern crate issue_36954 as lib;
+
+fn main() {
+ let _ = lib::FOO;
+}
diff --git a/tests/ui/issues/issue-3702-2.rs b/tests/ui/issues/issue-3702-2.rs
new file mode 100644
index 000000000..d47f6d248
--- /dev/null
+++ b/tests/ui/issues/issue-3702-2.rs
@@ -0,0 +1,20 @@
+pub trait ToPrimitive {
+ fn to_int(&self) -> isize { 0 }
+}
+
+impl ToPrimitive for i32 {}
+impl ToPrimitive for isize {}
+
+trait Add {
+ fn to_int(&self) -> isize;
+ fn add_dynamic(&self, other: &dyn Add) -> isize;
+}
+
+impl Add for isize {
+ fn to_int(&self) -> isize { *self }
+ fn add_dynamic(&self, other: &dyn Add) -> isize {
+ self.to_int() + other.to_int() //~ ERROR multiple applicable items in scope
+ }
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-3702-2.stderr b/tests/ui/issues/issue-3702-2.stderr
new file mode 100644
index 000000000..1fd64ca90
--- /dev/null
+++ b/tests/ui/issues/issue-3702-2.stderr
@@ -0,0 +1,28 @@
+error[E0034]: multiple applicable items in scope
+ --> $DIR/issue-3702-2.rs:16:14
+ |
+LL | self.to_int() + other.to_int()
+ | ^^^^^^ multiple `to_int` found
+ |
+note: candidate #1 is defined in an impl of the trait `ToPrimitive` for the type `isize`
+ --> $DIR/issue-3702-2.rs:2:5
+ |
+LL | fn to_int(&self) -> isize { 0 }
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^
+note: candidate #2 is defined in an impl of the trait `Add` for the type `isize`
+ --> $DIR/issue-3702-2.rs:14:5
+ |
+LL | fn to_int(&self) -> isize { *self }
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^
+help: disambiguate the associated function for candidate #1
+ |
+LL | ToPrimitive::to_int(&self) + other.to_int()
+ | ~~~~~~~~~~~~~~~~~~~~~~~~~~
+help: disambiguate the associated function for candidate #2
+ |
+LL | Add::to_int(&self) + other.to_int()
+ | ~~~~~~~~~~~~~~~~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0034`.
diff --git a/tests/ui/issues/issue-3702.rs b/tests/ui/issues/issue-3702.rs
new file mode 100644
index 000000000..f48d549b3
--- /dev/null
+++ b/tests/ui/issues/issue-3702.rs
@@ -0,0 +1,13 @@
+// run-pass
+#![allow(dead_code)]
+
+pub fn main() {
+ trait Text {
+ fn to_string(&self) -> String;
+ }
+
+ fn to_string(t: Box<dyn Text>) {
+ println!("{}", (*t).to_string());
+ }
+
+}
diff --git a/tests/ui/issues/issue-37051.rs b/tests/ui/issues/issue-37051.rs
new file mode 100644
index 000000000..9cae6cf5e
--- /dev/null
+++ b/tests/ui/issues/issue-37051.rs
@@ -0,0 +1,18 @@
+// check-pass
+
+#![feature(associated_type_defaults)]
+
+trait State: Sized {
+ type NextState: State = StateMachineEnded;
+ fn execute(self) -> Option<Self::NextState>;
+}
+
+struct StateMachineEnded;
+
+impl State for StateMachineEnded {
+ fn execute(self) -> Option<Self::NextState> {
+ None
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-3707.rs b/tests/ui/issues/issue-3707.rs
new file mode 100644
index 000000000..0817c51ee
--- /dev/null
+++ b/tests/ui/issues/issue-3707.rs
@@ -0,0 +1,18 @@
+struct Obj {
+ member: usize
+}
+
+impl Obj {
+ pub fn boom() -> bool {
+ return 1+1 == 2
+ }
+ pub fn chirp(&self) {
+ self.boom(); //~ ERROR no method named `boom` found
+ }
+}
+
+fn main() {
+ let o = Obj { member: 0 };
+ o.chirp();
+ 1 + 1;
+}
diff --git a/tests/ui/issues/issue-3707.stderr b/tests/ui/issues/issue-3707.stderr
new file mode 100644
index 000000000..07c8101cb
--- /dev/null
+++ b/tests/ui/issues/issue-3707.stderr
@@ -0,0 +1,19 @@
+error[E0599]: no method named `boom` found for reference `&Obj` in the current scope
+ --> $DIR/issue-3707.rs:10:14
+ |
+LL | self.boom();
+ | -----^^^^--
+ | | |
+ | | this is an associated function, not a method
+ | help: use associated function syntax instead: `Obj::boom()`
+ |
+ = note: found the following associated functions; to be used as methods, functions must have a `self` parameter
+note: the candidate is defined in an impl for the type `Obj`
+ --> $DIR/issue-3707.rs:6:5
+ |
+LL | pub fn boom() -> bool {
+ | ^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-37109.rs b/tests/ui/issues/issue-37109.rs
new file mode 100644
index 000000000..1e57d5f95
--- /dev/null
+++ b/tests/ui/issues/issue-37109.rs
@@ -0,0 +1,16 @@
+// run-pass
+trait ToRef<'a> {
+ type Ref: 'a;
+}
+
+impl<'a, U: 'a> ToRef<'a> for U {
+ type Ref = &'a U;
+}
+
+fn example<'a, T>(value: &'a T) -> (<T as ToRef<'a>>::Ref, u32) {
+ (value, 0)
+}
+
+fn main() {
+ example(&0);
+}
diff --git a/tests/ui/issues/issue-37131.rs b/tests/ui/issues/issue-37131.rs
new file mode 100644
index 000000000..ac2d1d1ed
--- /dev/null
+++ b/tests/ui/issues/issue-37131.rs
@@ -0,0 +1,9 @@
+// Tests that compiling for a target which is not installed will result in a helpful
+// error message.
+
+// compile-flags: --target=thumbv6m-none-eabi
+// ignore-arm
+// needs-llvm-components: arm
+
+// error-pattern:target may not be installed
+fn main() { }
diff --git a/tests/ui/issues/issue-37131.stderr b/tests/ui/issues/issue-37131.stderr
new file mode 100644
index 000000000..9ecae3e7a
--- /dev/null
+++ b/tests/ui/issues/issue-37131.stderr
@@ -0,0 +1,11 @@
+error[E0463]: can't find crate for `std`
+ |
+ = note: the `thumbv6m-none-eabi` target may not be installed
+ = help: consider downloading the target with `rustup target add thumbv6m-none-eabi`
+ = help: consider building the standard library from source with `cargo build -Zbuild-std`
+
+error: requires `sized` lang_item
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0463`.
diff --git a/tests/ui/issues/issue-37291/auxiliary/lib.rs b/tests/ui/issues/issue-37291/auxiliary/lib.rs
new file mode 100644
index 000000000..1b163ee13
--- /dev/null
+++ b/tests/ui/issues/issue-37291/auxiliary/lib.rs
@@ -0,0 +1,42 @@
+#![crate_type = "lib"]
+
+use std::ops::Mul;
+
+pub trait A {}
+pub trait B {
+ type AT: A;
+}
+pub trait C {
+ type BT: B;
+}
+
+pub struct AV;
+impl A for AV {}
+
+pub struct BV;
+impl B for BV {
+ type AT = AV;
+}
+
+pub struct CV;
+impl C for CV {
+ type BT = BV;
+}
+
+pub struct WrapperB<T>(pub T);
+pub struct WrapperC<T>(pub T);
+
+impl<C1> Mul<WrapperB<<C1::BT as B>::AT>> for WrapperC<C1>
+ where C1: C
+{
+ type Output = u8;
+ fn mul(self, _: WrapperB<<C1::BT as B>::AT>) -> Self::Output {
+ loop {}
+ }
+}
+impl<C1> Mul<WrapperC<C1>> for WrapperC<C1> {
+ type Output = u8;
+ fn mul(self, _: WrapperC<C1>) -> Self::Output {
+ loop {}
+ }
+}
diff --git a/tests/ui/issues/issue-37291/main.rs b/tests/ui/issues/issue-37291/main.rs
new file mode 100644
index 000000000..6fb6b50da
--- /dev/null
+++ b/tests/ui/issues/issue-37291/main.rs
@@ -0,0 +1,21 @@
+// run-pass
+#![allow(unused_imports)]
+// aux-build:lib.rs
+
+// Regression test for #37291. The problem was that the starting
+// environment for a specialization check was not including the
+// where-clauses from the impl when attempting to normalize the impl's
+// trait-ref, so things like `<C as Foo>::Item` could not resolve,
+// since the `C: Foo` trait bound was not included in the environment.
+
+extern crate lib;
+
+use lib::{CV, WrapperB, WrapperC};
+
+fn main() {
+ let a = WrapperC(CV);
+ let b = WrapperC(CV);
+ if false {
+ let _ = a * b;
+ }
+}
diff --git a/tests/ui/issues/issue-37311-type-length-limit/issue-37311.polonius.stderr b/tests/ui/issues/issue-37311-type-length-limit/issue-37311.polonius.stderr
new file mode 100644
index 000000000..3a1c0b82c
--- /dev/null
+++ b/tests/ui/issues/issue-37311-type-length-limit/issue-37311.polonius.stderr
@@ -0,0 +1,15 @@
+error: reached the recursion limit while instantiating `<(&(&(&(&(&(&(&(&(&(&(&(&(&(&(&(.....), ...), ...) as Foo>::recurse`
+ --> $DIR/issue-37311.rs:17:9
+ |
+LL | (self, self).recurse();
+ | ^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: `<T as Foo>::recurse` defined here
+ --> $DIR/issue-37311.rs:16:5
+ |
+LL | fn recurse(&self) {
+ | ^^^^^^^^^^^^^^^^^
+ = note: the full type name has been written to '$TEST_BUILD_DIR/issues/issue-37311-type-length-limit/issue-37311.polonius/issue-37311.long-type.txt'
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-37311-type-length-limit/issue-37311.rs b/tests/ui/issues/issue-37311-type-length-limit/issue-37311.rs
new file mode 100644
index 000000000..50d1f166c
--- /dev/null
+++ b/tests/ui/issues/issue-37311-type-length-limit/issue-37311.rs
@@ -0,0 +1,23 @@
+// build-fail
+// normalize-stderr-test: ".nll/" -> "/"
+
+trait Mirror {
+ type Image;
+}
+
+impl<T> Mirror for T { type Image = T; }
+
+trait Foo {
+ fn recurse(&self);
+}
+
+impl<T> Foo for T {
+ #[allow(unconditional_recursion)]
+ fn recurse(&self) {
+ (self, self).recurse(); //~ ERROR reached the recursion limit
+ }
+}
+
+fn main() {
+ ().recurse();
+}
diff --git a/tests/ui/issues/issue-37311-type-length-limit/issue-37311.stderr b/tests/ui/issues/issue-37311-type-length-limit/issue-37311.stderr
new file mode 100644
index 000000000..5b8299fe8
--- /dev/null
+++ b/tests/ui/issues/issue-37311-type-length-limit/issue-37311.stderr
@@ -0,0 +1,15 @@
+error: reached the recursion limit while instantiating `<(&(&(..., ...), ...), ...) as Foo>::recurse`
+ --> $DIR/issue-37311.rs:17:9
+ |
+LL | (self, self).recurse();
+ | ^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: `<T as Foo>::recurse` defined here
+ --> $DIR/issue-37311.rs:16:5
+ |
+LL | fn recurse(&self) {
+ | ^^^^^^^^^^^^^^^^^
+ = note: the full type name has been written to '$TEST_BUILD_DIR/issues/issue-37311-type-length-limit/issue-37311/issue-37311.long-type.txt'
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-3743.rs b/tests/ui/issues/issue-3743.rs
new file mode 100644
index 000000000..07741914f
--- /dev/null
+++ b/tests/ui/issues/issue-3743.rs
@@ -0,0 +1,55 @@
+// run-pass
+// If `Mul` used an associated type for its output, this test would
+// work more smoothly.
+
+use std::ops::Mul;
+
+#[derive(Copy, Clone)]
+struct Vec2 {
+ x: f64,
+ y: f64
+}
+
+// methods we want to export as methods as well as operators
+impl Vec2 {
+#[inline(always)]
+ fn vmul(self, other: f64) -> Vec2 {
+ Vec2 { x: self.x * other, y: self.y * other }
+ }
+}
+
+// Right-hand-side operator visitor pattern
+trait RhsOfVec2Mul {
+ type Result;
+
+ fn mul_vec2_by(&self, lhs: &Vec2) -> Self::Result;
+}
+
+// Vec2's implementation of Mul "from the other side" using the above trait
+impl<Res, Rhs: RhsOfVec2Mul<Result=Res>> Mul<Rhs> for Vec2 {
+ type Output = Res;
+
+ fn mul(self, rhs: Rhs) -> Res { rhs.mul_vec2_by(&self) }
+}
+
+// Implementation of 'f64 as right-hand-side of Vec2::Mul'
+impl RhsOfVec2Mul for f64 {
+ type Result = Vec2;
+
+ fn mul_vec2_by(&self, lhs: &Vec2) -> Vec2 { lhs.vmul(*self) }
+}
+
+// Usage with failing inference
+pub fn main() {
+ let a = Vec2 { x: 3.0f64, y: 4.0f64 };
+
+ // the following compiles and works properly
+ let v1: Vec2 = a * 3.0f64;
+ println!("{} {}", v1.x, v1.y);
+
+ // the following compiles but v2 will not be Vec2 yet and
+ // using it later will cause an error that the type of v2
+ // must be known
+ let v2 = a * 3.0f64;
+ println!("{} {}", v2.x, v2.y); // error regarding v2's type
+}
diff --git a/tests/ui/issues/issue-37510.rs b/tests/ui/issues/issue-37510.rs
new file mode 100644
index 000000000..2081c9f7e
--- /dev/null
+++ b/tests/ui/issues/issue-37510.rs
@@ -0,0 +1,14 @@
+// check-pass
+
+fn foo(_: &mut i32) -> bool { true }
+
+fn main() {
+ let opt = Some(92);
+ let mut x = 62;
+
+ if let Some(_) = opt {
+
+ } else if foo(&mut x) {
+
+ }
+}
diff --git a/tests/ui/issues/issue-3753.rs b/tests/ui/issues/issue-3753.rs
new file mode 100644
index 000000000..dc9e42bad
--- /dev/null
+++ b/tests/ui/issues/issue-3753.rs
@@ -0,0 +1,32 @@
+// run-pass
+// Issue #3656
+// Issue Name: pub method preceded by attribute can't be parsed
+// Abstract: Visibility parsing failed when compiler parsing
+
+use std::f64;
+
+#[derive(Copy, Clone)]
+pub struct Point {
+ x: f64,
+ y: f64
+}
+
+#[derive(Copy, Clone)]
+pub enum Shape {
+ Circle(Point, f64),
+ Rectangle(Point, Point)
+}
+
+impl Shape {
+ pub fn area(&self, sh: Shape) -> f64 {
+ match sh {
+ Shape::Circle(_, size) => f64::consts::PI * size * size,
+ Shape::Rectangle(Point {x, y}, Point {x: x2, y: y2}) => (x2 - x) * (y2 - y)
+ }
+ }
+}
+
+pub fn main(){
+ let s = Shape::Circle(Point { x: 1.0, y: 2.0 }, 3.0);
+ println!("{}", s.area(s));
+}
diff --git a/tests/ui/issues/issue-37534.rs b/tests/ui/issues/issue-37534.rs
new file mode 100644
index 000000000..1e67e9a81
--- /dev/null
+++ b/tests/ui/issues/issue-37534.rs
@@ -0,0 +1,6 @@
+struct Foo<T: ?Hash> { }
+//~^ ERROR expected trait, found derive macro `Hash`
+//~^^ ERROR parameter `T` is never used
+//~^^^ WARN default bound relaxed for a type parameter, but this does nothing
+
+fn main() { }
diff --git a/tests/ui/issues/issue-37534.stderr b/tests/ui/issues/issue-37534.stderr
new file mode 100644
index 000000000..895479986
--- /dev/null
+++ b/tests/ui/issues/issue-37534.stderr
@@ -0,0 +1,29 @@
+error[E0404]: expected trait, found derive macro `Hash`
+ --> $DIR/issue-37534.rs:1:16
+ |
+LL | struct Foo<T: ?Hash> { }
+ | ^^^^ not a trait
+ |
+help: consider importing this trait instead
+ |
+LL | use std::hash::Hash;
+ |
+
+warning: default bound relaxed for a type parameter, but this does nothing because the given bound is not a default; only `?Sized` is supported
+ --> $DIR/issue-37534.rs:1:12
+ |
+LL | struct Foo<T: ?Hash> { }
+ | ^
+
+error[E0392]: parameter `T` is never used
+ --> $DIR/issue-37534.rs:1:12
+ |
+LL | struct Foo<T: ?Hash> { }
+ | ^ unused parameter
+ |
+ = help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
+
+error: aborting due to 2 previous errors; 1 warning emitted
+
+Some errors have detailed explanations: E0392, E0404.
+For more information about an error, try `rustc --explain E0392`.
diff --git a/tests/ui/issues/issue-37576.rs b/tests/ui/issues/issue-37576.rs
new file mode 100644
index 000000000..e7f933ab2
--- /dev/null
+++ b/tests/ui/issues/issue-37576.rs
@@ -0,0 +1,45 @@
+fn main() {
+ 'test_1: while break 'test_1 {}
+ while break {}
+ //~^ ERROR `break` or `continue` with no label
+
+ 'test_2: while let true = break 'test_2 {}
+ while let true = break {}
+ //~^ ERROR `break` or `continue` with no label
+
+ loop { 'test_3: while break 'test_3 {} }
+ loop { while break {} }
+ //~^ ERROR `break` or `continue` with no label
+
+ loop {
+ 'test_4: while break 'test_4 {}
+ break;
+ }
+ loop {
+ while break {}
+ //~^ ERROR `break` or `continue` with no label
+ break;
+ }
+
+ 'test_5: while continue 'test_5 {}
+ while continue {}
+ //~^ ERROR `break` or `continue` with no label
+
+ 'test_6: while let true = continue 'test_6 {}
+ while let true = continue {}
+ //~^ ERROR `break` or `continue` with no label
+
+ loop { 'test_7: while continue 'test_7 {} }
+ loop { while continue {} }
+ //~^ ERROR `break` or `continue` with no label
+
+ loop {
+ 'test_8: while continue 'test_8 {}
+ continue;
+ }
+ loop {
+ while continue {}
+ //~^ ERROR `break` or `continue` with no label
+ continue;
+ }
+}
diff --git a/tests/ui/issues/issue-37576.stderr b/tests/ui/issues/issue-37576.stderr
new file mode 100644
index 000000000..d19e1f453
--- /dev/null
+++ b/tests/ui/issues/issue-37576.stderr
@@ -0,0 +1,51 @@
+error[E0590]: `break` or `continue` with no label in the condition of a `while` loop
+ --> $DIR/issue-37576.rs:3:11
+ |
+LL | while break {}
+ | ^^^^^ unlabeled `break` in the condition of a `while` loop
+
+error[E0590]: `break` or `continue` with no label in the condition of a `while` loop
+ --> $DIR/issue-37576.rs:7:22
+ |
+LL | while let true = break {}
+ | ^^^^^ unlabeled `break` in the condition of a `while` loop
+
+error[E0590]: `break` or `continue` with no label in the condition of a `while` loop
+ --> $DIR/issue-37576.rs:11:18
+ |
+LL | loop { while break {} }
+ | ^^^^^ unlabeled `break` in the condition of a `while` loop
+
+error[E0590]: `break` or `continue` with no label in the condition of a `while` loop
+ --> $DIR/issue-37576.rs:19:15
+ |
+LL | while break {}
+ | ^^^^^ unlabeled `break` in the condition of a `while` loop
+
+error[E0590]: `break` or `continue` with no label in the condition of a `while` loop
+ --> $DIR/issue-37576.rs:25:11
+ |
+LL | while continue {}
+ | ^^^^^^^^ unlabeled `continue` in the condition of a `while` loop
+
+error[E0590]: `break` or `continue` with no label in the condition of a `while` loop
+ --> $DIR/issue-37576.rs:29:22
+ |
+LL | while let true = continue {}
+ | ^^^^^^^^ unlabeled `continue` in the condition of a `while` loop
+
+error[E0590]: `break` or `continue` with no label in the condition of a `while` loop
+ --> $DIR/issue-37576.rs:33:18
+ |
+LL | loop { while continue {} }
+ | ^^^^^^^^ unlabeled `continue` in the condition of a `while` loop
+
+error[E0590]: `break` or `continue` with no label in the condition of a `while` loop
+ --> $DIR/issue-37576.rs:41:15
+ |
+LL | while continue {}
+ | ^^^^^^^^ unlabeled `continue` in the condition of a `while` loop
+
+error: aborting due to 8 previous errors
+
+For more information about this error, try `rustc --explain E0590`.
diff --git a/tests/ui/issues/issue-37598.rs b/tests/ui/issues/issue-37598.rs
new file mode 100644
index 000000000..458e999c3
--- /dev/null
+++ b/tests/ui/issues/issue-37598.rs
@@ -0,0 +1,11 @@
+// check-pass
+
+fn check(list: &[u8]) {
+ match list {
+ &[] => {},
+ &[_u1, _u2, ref _next @ ..] => {},
+ &[_u1] => {},
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-3763.rs b/tests/ui/issues/issue-3763.rs
new file mode 100644
index 000000000..25ad6b319
--- /dev/null
+++ b/tests/ui/issues/issue-3763.rs
@@ -0,0 +1,29 @@
+// compile-flags: -Zsave-analysis
+// Also regression test for #69416
+
+mod my_mod {
+ pub struct MyStruct {
+ priv_field: isize
+ }
+ pub fn MyStruct () -> MyStruct {
+ MyStruct {priv_field: 4}
+ }
+ impl MyStruct {
+ fn happyfun(&self) {}
+ }
+}
+
+fn main() {
+ let my_struct = my_mod::MyStruct();
+ let _woohoo = (&my_struct).priv_field;
+ //~^ ERROR field `priv_field` of struct `MyStruct` is private
+
+ let _woohoo = (Box::new(my_struct)).priv_field;
+ //~^ ERROR field `priv_field` of struct `MyStruct` is private
+
+ (&my_struct).happyfun(); //~ ERROR associated function `happyfun` is private
+
+ (Box::new(my_struct)).happyfun(); //~ ERROR associated function `happyfun` is private
+ let nope = my_struct.priv_field;
+ //~^ ERROR field `priv_field` of struct `MyStruct` is private
+}
diff --git a/tests/ui/issues/issue-3763.stderr b/tests/ui/issues/issue-3763.stderr
new file mode 100644
index 000000000..6f4567546
--- /dev/null
+++ b/tests/ui/issues/issue-3763.stderr
@@ -0,0 +1,40 @@
+error[E0616]: field `priv_field` of struct `MyStruct` is private
+ --> $DIR/issue-3763.rs:18:32
+ |
+LL | let _woohoo = (&my_struct).priv_field;
+ | ^^^^^^^^^^ private field
+
+error[E0616]: field `priv_field` of struct `MyStruct` is private
+ --> $DIR/issue-3763.rs:21:41
+ |
+LL | let _woohoo = (Box::new(my_struct)).priv_field;
+ | ^^^^^^^^^^ private field
+
+error[E0624]: associated function `happyfun` is private
+ --> $DIR/issue-3763.rs:24:18
+ |
+LL | fn happyfun(&self) {}
+ | ------------------ private associated function defined here
+...
+LL | (&my_struct).happyfun();
+ | ^^^^^^^^ private associated function
+
+error[E0624]: associated function `happyfun` is private
+ --> $DIR/issue-3763.rs:26:27
+ |
+LL | fn happyfun(&self) {}
+ | ------------------ private associated function defined here
+...
+LL | (Box::new(my_struct)).happyfun();
+ | ^^^^^^^^ private associated function
+
+error[E0616]: field `priv_field` of struct `MyStruct` is private
+ --> $DIR/issue-3763.rs:27:26
+ |
+LL | let nope = my_struct.priv_field;
+ | ^^^^^^^^^^ private field
+
+error: aborting due to 5 previous errors
+
+Some errors have detailed explanations: E0616, E0624.
+For more information about an error, try `rustc --explain E0616`.
diff --git a/tests/ui/issues/issue-37665.rs b/tests/ui/issues/issue-37665.rs
new file mode 100644
index 000000000..81ff478aa
--- /dev/null
+++ b/tests/ui/issues/issue-37665.rs
@@ -0,0 +1,10 @@
+// compile-flags: -Z unpretty=mir
+
+use std::path::MAIN_SEPARATOR;
+
+fn main() {
+ let mut foo : String = "hello".to_string();
+ foo.push(MAIN_SEPARATOR);
+ println!("{}", foo);
+ let x: () = 0; //~ ERROR: mismatched types
+}
diff --git a/tests/ui/issues/issue-37665.stderr b/tests/ui/issues/issue-37665.stderr
new file mode 100644
index 000000000..1e1f451b4
--- /dev/null
+++ b/tests/ui/issues/issue-37665.stderr
@@ -0,0 +1,11 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-37665.rs:9:17
+ |
+LL | let x: () = 0;
+ | -- ^ expected `()`, found integer
+ | |
+ | expected due to this
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-37686.rs b/tests/ui/issues/issue-37686.rs
new file mode 100644
index 000000000..ba58e9e9d
--- /dev/null
+++ b/tests/ui/issues/issue-37686.rs
@@ -0,0 +1,7 @@
+// run-pass
+fn main() {
+ match (0, 0) {
+ (usize::MIN, usize::MAX) => {}
+ _ => {}
+ }
+}
diff --git a/tests/ui/issues/issue-37725.rs b/tests/ui/issues/issue-37725.rs
new file mode 100644
index 000000000..1c6df0da6
--- /dev/null
+++ b/tests/ui/issues/issue-37725.rs
@@ -0,0 +1,12 @@
+// build-pass
+// compiler-opts: -Zmir-opt-level=2
+
+#![allow(dead_code)]
+trait Foo {
+ fn foo(&self);
+}
+
+fn foo<'a>(s: &'a mut ()) where &'a mut (): Foo {
+ s.foo();
+}
+fn main() {}
diff --git a/tests/ui/issues/issue-37733.rs b/tests/ui/issues/issue-37733.rs
new file mode 100644
index 000000000..e211e2c33
--- /dev/null
+++ b/tests/ui/issues/issue-37733.rs
@@ -0,0 +1,7 @@
+// build-pass
+#![allow(dead_code)]
+type A = for<> fn();
+
+type B = for<'a,> fn();
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-3779.rs b/tests/ui/issues/issue-3779.rs
new file mode 100644
index 000000000..901c1be80
--- /dev/null
+++ b/tests/ui/issues/issue-3779.rs
@@ -0,0 +1,8 @@
+struct S {
+ //~^ ERROR E0072
+ element: Option<S>
+}
+
+fn main() {
+ let x = S { element: None };
+}
diff --git a/tests/ui/issues/issue-3779.stderr b/tests/ui/issues/issue-3779.stderr
new file mode 100644
index 000000000..a0dbcc920
--- /dev/null
+++ b/tests/ui/issues/issue-3779.stderr
@@ -0,0 +1,17 @@
+error[E0072]: recursive type `S` has infinite size
+ --> $DIR/issue-3779.rs:1:1
+ |
+LL | struct S {
+ | ^^^^^^^^
+LL |
+LL | element: Option<S>
+ | - recursive without indirection
+ |
+help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle
+ |
+LL | element: Option<Box<S>>
+ | ++++ +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0072`.
diff --git a/tests/ui/issues/issue-37884.rs b/tests/ui/issues/issue-37884.rs
new file mode 100644
index 000000000..ee37481b2
--- /dev/null
+++ b/tests/ui/issues/issue-37884.rs
@@ -0,0 +1,14 @@
+struct RepeatMut<'a, T>(T, &'a ());
+
+impl<'a, T: 'a> Iterator for RepeatMut<'a, T> {
+
+ type Item = &'a mut T;
+ fn next(&'a mut self) -> Option<Self::Item>
+ //~^ ERROR method not compatible with trait
+ //~| lifetime mismatch
+ {
+ Some(&mut self.0)
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-37884.stderr b/tests/ui/issues/issue-37884.stderr
new file mode 100644
index 000000000..7ddb36c8e
--- /dev/null
+++ b/tests/ui/issues/issue-37884.stderr
@@ -0,0 +1,22 @@
+error[E0308]: method not compatible with trait
+ --> $DIR/issue-37884.rs:6:5
+ |
+LL | fn next(&'a mut self) -> Option<Self::Item>
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
+ |
+ = note: expected signature `fn(&mut RepeatMut<'a, T>) -> Option<_>`
+ found signature `fn(&'a mut RepeatMut<'a, T>) -> Option<_>`
+note: the anonymous lifetime as defined here...
+ --> $DIR/issue-37884.rs:6:5
+ |
+LL | fn next(&'a mut self) -> Option<Self::Item>
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+note: ...does not necessarily outlive the lifetime `'a` as defined here
+ --> $DIR/issue-37884.rs:3:6
+ |
+LL | impl<'a, T: 'a> Iterator for RepeatMut<'a, T> {
+ | ^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-3794.rs b/tests/ui/issues/issue-3794.rs
new file mode 100644
index 000000000..b1f028fbc
--- /dev/null
+++ b/tests/ui/issues/issue-3794.rs
@@ -0,0 +1,32 @@
+// run-pass
+#![allow(dead_code)]
+
+trait T {
+ fn print(&self);
+}
+
+#[derive(Debug)]
+struct S {
+ s: isize,
+}
+
+impl T for S {
+ fn print(&self) {
+ println!("{:?}", self);
+ }
+}
+
+fn print_t(t: &dyn T) {
+ t.print();
+}
+
+fn print_s(s: &S) {
+ s.print();
+}
+
+pub fn main() {
+ let s: Box<S> = Box::new(S { s: 5 });
+ print_s(&*s);
+ let t: Box<dyn T> = s as Box<dyn T>;
+ print_t(&*t);
+}
diff --git a/tests/ui/issues/issue-38160.rs b/tests/ui/issues/issue-38160.rs
new file mode 100644
index 000000000..0da8b7900
--- /dev/null
+++ b/tests/ui/issues/issue-38160.rs
@@ -0,0 +1,19 @@
+// check-pass
+
+trait MyTrait {
+ const MY_CONST: &'static str;
+}
+
+macro_rules! my_macro {
+ () => {
+ struct MyStruct;
+
+ impl MyTrait for MyStruct {
+ const MY_CONST: &'static str = stringify!(abc);
+ }
+ }
+}
+
+my_macro!();
+
+fn main() {}
diff --git a/tests/ui/issues/issue-38190.rs b/tests/ui/issues/issue-38190.rs
new file mode 100644
index 000000000..cfa0420c8
--- /dev/null
+++ b/tests/ui/issues/issue-38190.rs
@@ -0,0 +1,15 @@
+// run-pass
+// aux-build:issue-38190.rs
+// ignore-pretty issue #37195
+
+#[macro_use]
+extern crate issue_38190;
+
+mod auxiliary {
+ m!([
+ #[path = "issue-38190.rs"]
+ mod issue_38190;
+ ]);
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-38226.rs b/tests/ui/issues/issue-38226.rs
new file mode 100644
index 000000000..3213e3618
--- /dev/null
+++ b/tests/ui/issues/issue-38226.rs
@@ -0,0 +1,15 @@
+// run-pass
+// This test makes sure that we don't run into a linker error because of the
+// middle::reachable pass missing trait methods with default impls.
+
+// aux-build:issue-38226-aux.rs
+
+// Need -Cno-prepopulate-passes to really disable inlining, otherwise the faulty
+// code gets optimized out:
+// compile-flags: -Cno-prepopulate-passes -Cpasses=name-anon-globals
+
+extern crate issue_38226_aux;
+
+fn main() {
+ issue_38226_aux::foo::<()>();
+}
diff --git a/tests/ui/issues/issue-38381.rs b/tests/ui/issues/issue-38381.rs
new file mode 100644
index 000000000..82d4a4e32
--- /dev/null
+++ b/tests/ui/issues/issue-38381.rs
@@ -0,0 +1,7 @@
+// check-pass
+
+use std::ops::Deref;
+
+fn main() {
+ let _x: fn(&i32) -> <&i32 as Deref>::Target = unimplemented!();
+}
diff --git a/tests/ui/issues/issue-38412.rs b/tests/ui/issues/issue-38412.rs
new file mode 100644
index 000000000..96bd93af5
--- /dev/null
+++ b/tests/ui/issues/issue-38412.rs
@@ -0,0 +1,10 @@
+fn main() {
+ let Box(a) = loop { };
+ //~^ ERROR cannot match against a tuple struct which contains private fields
+
+ // (The below is a trick to allow compiler to infer a type for
+ // variable `a` without attempting to ascribe a type to the
+ // pattern or otherwise attempting to name the Box type, which
+ // would run afoul of issue #22207)
+ let _b: *mut i32 = *a;
+}
diff --git a/tests/ui/issues/issue-38412.stderr b/tests/ui/issues/issue-38412.stderr
new file mode 100644
index 000000000..610696f84
--- /dev/null
+++ b/tests/ui/issues/issue-38412.stderr
@@ -0,0 +1,9 @@
+error[E0532]: cannot match against a tuple struct which contains private fields
+ --> $DIR/issue-38412.rs:2:9
+ |
+LL | let Box(a) = loop { };
+ | ^^^ constructor is not visible here due to private fields
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0532`.
diff --git a/tests/ui/issues/issue-38437.rs b/tests/ui/issues/issue-38437.rs
new file mode 100644
index 000000000..e14121690
--- /dev/null
+++ b/tests/ui/issues/issue-38437.rs
@@ -0,0 +1,46 @@
+// run-pass
+#![allow(dead_code)]
+// Check that drop elaboration clears the "master" discriminant
+// drop flag even if it protects no fields.
+
+struct Good(usize);
+impl Drop for Good {
+ #[inline(never)]
+ fn drop(&mut self) {
+ println!("dropping Good({})", self.0);
+ }
+}
+
+struct Void;
+impl Drop for Void {
+ #[inline(never)]
+ fn drop(&mut self) {
+ panic!("Suddenly, a Void appears.");
+ }
+}
+
+enum E {
+ Never(Void),
+ Fine(Good)
+}
+
+fn main() {
+ let mut go = true;
+
+ loop {
+ let next;
+ match go {
+ true => next = E::Fine(Good(123)),
+ false => return,
+ }
+
+ match next {
+ E::Never(_) => return,
+ E::Fine(_good) => go = false,
+ }
+
+ // `next` is dropped and StorageDead'd here. We must reset the
+ // discriminant's drop flag to avoid random variants being
+ // dropped.
+ }
+}
diff --git a/tests/ui/issues/issue-38458.rs b/tests/ui/issues/issue-38458.rs
new file mode 100644
index 000000000..665a8fdf8
--- /dev/null
+++ b/tests/ui/issues/issue-38458.rs
@@ -0,0 +1,5 @@
+const x: () = {
+ return; //~ ERROR return statement outside of function body
+};
+
+fn main() {}
diff --git a/tests/ui/issues/issue-38458.stderr b/tests/ui/issues/issue-38458.stderr
new file mode 100644
index 000000000..c04a01118
--- /dev/null
+++ b/tests/ui/issues/issue-38458.stderr
@@ -0,0 +1,9 @@
+error[E0572]: return statement outside of function body
+ --> $DIR/issue-38458.rs:2:5
+ |
+LL | return;
+ | ^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0572`.
diff --git a/tests/ui/issues/issue-3847.rs b/tests/ui/issues/issue-3847.rs
new file mode 100644
index 000000000..16e0b00b3
--- /dev/null
+++ b/tests/ui/issues/issue-3847.rs
@@ -0,0 +1,13 @@
+// run-pass
+mod buildings {
+ pub struct Tower { pub height: usize }
+}
+
+pub fn main() {
+ let sears = buildings::Tower { height: 1451 };
+ let h: usize = match sears {
+ buildings::Tower { height: h } => { h }
+ };
+
+ println!("{}", h);
+}
diff --git a/tests/ui/issues/issue-38556.rs b/tests/ui/issues/issue-38556.rs
new file mode 100644
index 000000000..63fd9db08
--- /dev/null
+++ b/tests/ui/issues/issue-38556.rs
@@ -0,0 +1,13 @@
+// run-pass
+#![allow(dead_code)]
+pub struct Foo;
+
+macro_rules! reexport {
+ () => { use Foo as Bar; }
+}
+
+reexport!();
+
+fn main() {
+ fn f(_: Bar) {}
+}
diff --git a/tests/ui/issues/issue-38727.rs b/tests/ui/issues/issue-38727.rs
new file mode 100644
index 000000000..2d418b652
--- /dev/null
+++ b/tests/ui/issues/issue-38727.rs
@@ -0,0 +1,13 @@
+// build-pass
+#![allow(dead_code)]
+#[repr(u64)]
+enum A {
+ A = 0u64,
+ B = !0u64,
+}
+
+fn cmp() -> A {
+ A::B
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-3874.rs b/tests/ui/issues/issue-3874.rs
new file mode 100644
index 000000000..f9553d88d
--- /dev/null
+++ b/tests/ui/issues/issue-3874.rs
@@ -0,0 +1,12 @@
+// build-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+enum PureCounter { PureCounterVariant(usize) }
+
+fn each<F>(thing: PureCounter, blk: F) where F: FnOnce(&usize) {
+ let PureCounter::PureCounterVariant(ref x) = thing;
+ blk(x);
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-38763.rs b/tests/ui/issues/issue-38763.rs
new file mode 100644
index 000000000..a966cf217
--- /dev/null
+++ b/tests/ui/issues/issue-38763.rs
@@ -0,0 +1,13 @@
+// run-pass
+// ignore-emscripten
+
+#[repr(C)]
+pub struct Foo(i128);
+
+#[no_mangle]
+#[allow(improper_ctypes_definitions)]
+pub extern "C" fn foo(x: Foo) -> Foo { x }
+
+fn main() {
+ foo(Foo(1));
+}
diff --git a/tests/ui/issues/issue-3878.rs b/tests/ui/issues/issue-3878.rs
new file mode 100644
index 000000000..6de3405af
--- /dev/null
+++ b/tests/ui/issues/issue-3878.rs
@@ -0,0 +1,9 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+#![allow(path_statements)]
+
+pub fn main() {
+ let y: Box<_> = Box::new(1);
+ y;
+}
diff --git a/tests/ui/issues/issue-38821.rs b/tests/ui/issues/issue-38821.rs
new file mode 100644
index 000000000..6753860e9
--- /dev/null
+++ b/tests/ui/issues/issue-38821.rs
@@ -0,0 +1,33 @@
+pub struct Nullable<T: NotNull>(T);
+
+pub trait NotNull {}
+
+pub trait IntoNullable {
+ type Nullable;
+}
+
+impl<T: NotNull> IntoNullable for T {
+ type Nullable = Nullable<T>;
+}
+
+impl<T: NotNull> IntoNullable for Nullable<T> {
+ type Nullable = Nullable<T>;
+}
+
+pub trait Expression {
+ type SqlType;
+}
+
+pub trait Column: Expression {}
+
+#[derive(Debug, Copy, Clone)]
+//~^ ERROR the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
+pub enum ColumnInsertValue<Col, Expr> where
+ Col: Column,
+ Expr: Expression<SqlType=<Col::SqlType as IntoNullable>::Nullable>,
+{
+ Expression(Col, Expr),
+ Default(Col),
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-38821.stderr b/tests/ui/issues/issue-38821.stderr
new file mode 100644
index 000000000..a52a9c138
--- /dev/null
+++ b/tests/ui/issues/issue-38821.stderr
@@ -0,0 +1,22 @@
+error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
+ --> $DIR/issue-38821.rs:23:17
+ |
+LL | #[derive(Debug, Copy, Clone)]
+ | ^^^^ the trait `NotNull` is not implemented for `<Col as Expression>::SqlType`
+ |
+note: required for `<Col as Expression>::SqlType` to implement `IntoNullable`
+ --> $DIR/issue-38821.rs:9:18
+ |
+LL | impl<T: NotNull> IntoNullable for T {
+ | ------- ^^^^^^^^^^^^ ^
+ | |
+ | unsatisfied trait bound introduced here
+ = note: this error originates in the derive macro `Copy` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: consider further restricting the associated type
+ |
+LL | Expr: Expression<SqlType=<Col::SqlType as IntoNullable>::Nullable>, <Col as Expression>::SqlType: NotNull,
+ | +++++++++++++++++++++++++++++++++++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-38857.rs b/tests/ui/issues/issue-38857.rs
new file mode 100644
index 000000000..81d881c10
--- /dev/null
+++ b/tests/ui/issues/issue-38857.rs
@@ -0,0 +1,5 @@
+fn main() {
+ let a = std::sys::imp::process::process_common::StdioPipes { ..panic!() };
+ //~^ ERROR failed to resolve: could not find `imp` in `sys` [E0433]
+ //~^^ ERROR module `sys` is private [E0603]
+}
diff --git a/tests/ui/issues/issue-38857.stderr b/tests/ui/issues/issue-38857.stderr
new file mode 100644
index 000000000..4d505784b
--- /dev/null
+++ b/tests/ui/issues/issue-38857.stderr
@@ -0,0 +1,19 @@
+error[E0433]: failed to resolve: could not find `imp` in `sys`
+ --> $DIR/issue-38857.rs:2:23
+ |
+LL | let a = std::sys::imp::process::process_common::StdioPipes { ..panic!() };
+ | ^^^ could not find `imp` in `sys`
+
+error[E0603]: module `sys` is private
+ --> $DIR/issue-38857.rs:2:18
+ |
+LL | let a = std::sys::imp::process::process_common::StdioPipes { ..panic!() };
+ | ^^^ private module
+ |
+note: the module `sys` is defined here
+ --> $SRC_DIR/std/src/lib.rs:LL:COL
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0433, E0603.
+For more information about an error, try `rustc --explain E0433`.
diff --git a/tests/ui/issues/issue-38875/auxiliary/issue-38875-b.rs b/tests/ui/issues/issue-38875/auxiliary/issue-38875-b.rs
new file mode 100644
index 000000000..e9f7fefb6
--- /dev/null
+++ b/tests/ui/issues/issue-38875/auxiliary/issue-38875-b.rs
@@ -0,0 +1 @@
+pub const FOO: usize = *&0;
diff --git a/tests/ui/issues/issue-38875/issue-38875.rs b/tests/ui/issues/issue-38875/issue-38875.rs
new file mode 100644
index 000000000..124e4d6fd
--- /dev/null
+++ b/tests/ui/issues/issue-38875/issue-38875.rs
@@ -0,0 +1,8 @@
+// aux-build:issue-38875-b.rs
+// check-pass
+
+extern crate issue_38875_b;
+
+fn main() {
+ let test_x = [0; issue_38875_b::FOO];
+}
diff --git a/tests/ui/issues/issue-3888-2.rs b/tests/ui/issues/issue-3888-2.rs
new file mode 100644
index 000000000..d1ef914bd
--- /dev/null
+++ b/tests/ui/issues/issue-3888-2.rs
@@ -0,0 +1,9 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+fn vec_peek<'r, T>(v: &'r [T]) -> &'r [T] {
+ &v[1..5]
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-38919.rs b/tests/ui/issues/issue-38919.rs
new file mode 100644
index 000000000..3d28f1936
--- /dev/null
+++ b/tests/ui/issues/issue-38919.rs
@@ -0,0 +1,5 @@
+fn foo<T: Iterator>() {
+ T::Item; //~ ERROR no associated item named `Item` found
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-38919.stderr b/tests/ui/issues/issue-38919.stderr
new file mode 100644
index 000000000..f9ab8a515
--- /dev/null
+++ b/tests/ui/issues/issue-38919.stderr
@@ -0,0 +1,11 @@
+error[E0599]: no associated item named `Item` found for type parameter `T` in the current scope
+ --> $DIR/issue-38919.rs:2:8
+ |
+LL | fn foo<T: Iterator>() {
+ | - associated item `Item` not found for this type parameter
+LL | T::Item;
+ | ^^^^ associated item not found in `T`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-38942.rs b/tests/ui/issues/issue-38942.rs
new file mode 100644
index 000000000..308bdd6e2
--- /dev/null
+++ b/tests/ui/issues/issue-38942.rs
@@ -0,0 +1,17 @@
+// run-pass
+// See https://github.com/rust-lang/rust/issues/38942
+
+#[repr(u64)]
+pub enum NSEventType {
+ NSEventTypePressure,
+}
+
+pub const A: u64 = NSEventType::NSEventTypePressure as u64;
+
+fn banana() -> u64 {
+ A
+}
+
+fn main() {
+ println!("banana! {}", banana());
+}
diff --git a/tests/ui/issues/issue-3895.rs b/tests/ui/issues/issue-3895.rs
new file mode 100644
index 000000000..c560ca60d
--- /dev/null
+++ b/tests/ui/issues/issue-3895.rs
@@ -0,0 +1,11 @@
+// run-pass
+#![allow(dead_code)]
+
+pub fn main() {
+ enum State { BadChar, BadSyntax }
+
+ match State::BadChar {
+ _ if true => State::BadChar,
+ State::BadChar | State::BadSyntax => panic!() ,
+ };
+}
diff --git a/tests/ui/issues/issue-38954.rs b/tests/ui/issues/issue-38954.rs
new file mode 100644
index 000000000..61df411b1
--- /dev/null
+++ b/tests/ui/issues/issue-38954.rs
@@ -0,0 +1,4 @@
+fn _test(ref _p: str) {}
+//~^ ERROR the size for values of type
+
+fn main() { }
diff --git a/tests/ui/issues/issue-38954.stderr b/tests/ui/issues/issue-38954.stderr
new file mode 100644
index 000000000..ab15bb1af
--- /dev/null
+++ b/tests/ui/issues/issue-38954.stderr
@@ -0,0 +1,16 @@
+error[E0277]: the size for values of type `str` cannot be known at compilation time
+ --> $DIR/issue-38954.rs:1:10
+ |
+LL | fn _test(ref _p: str) {}
+ | ^^^^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `str`
+ = help: unsized fn params are gated as an unstable feature
+help: function arguments must have a statically known size, borrowed types always have a known size
+ |
+LL | fn _test(ref _p: &str) {}
+ | +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-38987.rs b/tests/ui/issues/issue-38987.rs
new file mode 100644
index 000000000..cb4e1b0d4
--- /dev/null
+++ b/tests/ui/issues/issue-38987.rs
@@ -0,0 +1,4 @@
+// run-pass
+fn main() {
+ let _ = -0x8000_0000_0000_0000_0000_0000_0000_0000i128;
+}
diff --git a/tests/ui/issues/issue-39089.rs b/tests/ui/issues/issue-39089.rs
new file mode 100644
index 000000000..c7d4f8bd3
--- /dev/null
+++ b/tests/ui/issues/issue-39089.rs
@@ -0,0 +1,5 @@
+// check-pass
+#![allow(dead_code)]
+fn f<T: ?for<'a> Sized>() {}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-39175.rs b/tests/ui/issues/issue-39175.rs
new file mode 100644
index 000000000..3866e0651
--- /dev/null
+++ b/tests/ui/issues/issue-39175.rs
@@ -0,0 +1,16 @@
+// This test ignores some platforms as the particular extension trait used
+// to demonstrate the issue is only available on unix. This is fine as
+// the fix to suggested paths is not platform-dependent and will apply on
+// these platforms also.
+
+// ignore-windows
+// ignore-emscripten
+// ignore-sgx no processes
+
+use std::process::Command;
+// use std::os::unix::process::CommandExt;
+
+fn main() {
+ Command::new("echo").arg("hello").exec();
+//~^ ERROR no method named `exec`
+}
diff --git a/tests/ui/issues/issue-39175.stderr b/tests/ui/issues/issue-39175.stderr
new file mode 100644
index 000000000..afceae82e
--- /dev/null
+++ b/tests/ui/issues/issue-39175.stderr
@@ -0,0 +1,15 @@
+error[E0599]: no method named `exec` found for mutable reference `&mut Command` in the current scope
+ --> $DIR/issue-39175.rs:14:39
+ |
+LL | Command::new("echo").arg("hello").exec();
+ | ^^^^ method not found in `&mut Command`
+ |
+ = help: items from traits can only be used if the trait is in scope
+help: the following trait is implemented but not in scope; perhaps add a `use` for it:
+ |
+LL | use std::os::unix::process::CommandExt;
+ |
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-39211.rs b/tests/ui/issues/issue-39211.rs
new file mode 100644
index 000000000..6f3834d51
--- /dev/null
+++ b/tests/ui/issues/issue-39211.rs
@@ -0,0 +1,13 @@
+trait VecN {
+ const DIM: usize;
+}
+trait Mat {
+ type Row: VecN;
+}
+
+fn m<M: Mat>() {
+ let a = [3; M::Row::DIM];
+ //~^ ERROR constant expression depends on a generic parameter
+}
+fn main() {
+}
diff --git a/tests/ui/issues/issue-39211.stderr b/tests/ui/issues/issue-39211.stderr
new file mode 100644
index 000000000..cd2a014bb
--- /dev/null
+++ b/tests/ui/issues/issue-39211.stderr
@@ -0,0 +1,10 @@
+error: constant expression depends on a generic parameter
+ --> $DIR/issue-39211.rs:9:17
+ |
+LL | let a = [3; M::Row::DIM];
+ | ^^^^^^^^^^^
+ |
+ = note: this may fail depending on what value the parameter takes
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-39292.rs b/tests/ui/issues/issue-39292.rs
new file mode 100644
index 000000000..968cf0891
--- /dev/null
+++ b/tests/ui/issues/issue-39292.rs
@@ -0,0 +1,17 @@
+// run-pass
+// Regression test for issue #39292. The object vtable was being
+// incorrectly left with a null pointer.
+
+trait Foo<T> {
+ fn print<'a>(&'a self) where T: 'a { println!("foo"); }
+}
+
+impl<'a> Foo<&'a ()> for () { }
+
+trait Bar: for<'a> Foo<&'a ()> { }
+
+impl Bar for () {}
+
+fn main() {
+ (&() as &dyn Bar).print(); // Segfault
+}
diff --git a/tests/ui/issues/issue-39367.rs b/tests/ui/issues/issue-39367.rs
new file mode 100644
index 000000000..e7beb8a03
--- /dev/null
+++ b/tests/ui/issues/issue-39367.rs
@@ -0,0 +1,42 @@
+// run-pass
+// revisions: mir thir
+// [thir]compile-flags: -Zthir-unsafeck
+
+use std::ops::Deref;
+
+struct ArenaSet<U: Deref, V=<U as Deref>::Target>(U, &'static V)
+ where V: 'static + ?Sized;
+
+static Z: [u8; 4] = [1,2,3,4];
+
+fn arena() -> &'static ArenaSet<Vec<u8>> {
+ fn __static_ref_initialize() -> ArenaSet<Vec<u8>> {
+ ArenaSet(vec![], &Z)
+ }
+ unsafe {
+ use std::sync::Once;
+ fn require_sync<T: Sync>(_: &T) { }
+ unsafe fn __stability() -> &'static ArenaSet<Vec<u8>> {
+ use std::mem::transmute;
+ static mut DATA: *const ArenaSet<Vec<u8>> = std::ptr::null_mut();
+
+ static mut ONCE: Once = Once::new();
+ ONCE.call_once(|| {
+ DATA = transmute
+ ::<Box<ArenaSet<Vec<u8>>>, *const ArenaSet<Vec<u8>>>
+ (Box::new(__static_ref_initialize()));
+ });
+
+ &*DATA
+ }
+ let static_ref = __stability();
+ require_sync(static_ref);
+ static_ref
+ }
+}
+
+fn main() {
+ let &ArenaSet(ref u, v) = arena();
+ assert!(u.is_empty());
+ assert_eq!(v, Z);
+}
diff --git a/tests/ui/issues/issue-39467.rs b/tests/ui/issues/issue-39467.rs
new file mode 100644
index 000000000..397751e4e
--- /dev/null
+++ b/tests/ui/issues/issue-39467.rs
@@ -0,0 +1,11 @@
+// check-pass
+#![allow(dead_code)]
+macro_rules! expr { () => { () } }
+
+enum A {}
+
+impl A {
+ const A: () = expr!();
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-39548.rs b/tests/ui/issues/issue-39548.rs
new file mode 100644
index 000000000..304e37bf3
--- /dev/null
+++ b/tests/ui/issues/issue-39548.rs
@@ -0,0 +1,6 @@
+// run-pass
+type Array = [(); ((1 < 2) == false) as usize];
+
+fn main() {
+ let _: Array = [];
+}
diff --git a/tests/ui/issues/issue-39687.rs b/tests/ui/issues/issue-39687.rs
new file mode 100644
index 000000000..cbb721fbb
--- /dev/null
+++ b/tests/ui/issues/issue-39687.rs
@@ -0,0 +1,6 @@
+#![feature(fn_traits)]
+
+fn main() {
+ <fn() as Fn()>::call;
+ //~^ ERROR associated type bindings are not allowed here [E0229]
+}
diff --git a/tests/ui/issues/issue-39687.stderr b/tests/ui/issues/issue-39687.stderr
new file mode 100644
index 000000000..b1b3041ea
--- /dev/null
+++ b/tests/ui/issues/issue-39687.stderr
@@ -0,0 +1,9 @@
+error[E0229]: associated type bindings are not allowed here
+ --> $DIR/issue-39687.rs:4:14
+ |
+LL | <fn() as Fn()>::call;
+ | ^^^^ associated type not allowed here
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0229`.
diff --git a/tests/ui/issues/issue-39709.rs b/tests/ui/issues/issue-39709.rs
new file mode 100644
index 000000000..69ef2700e
--- /dev/null
+++ b/tests/ui/issues/issue-39709.rs
@@ -0,0 +1,5 @@
+// run-pass
+#![allow(unused_macros)]
+fn main() {
+ println!("{}", { macro_rules! x { ($(t:tt)*) => {} } 33 });
+}
diff --git a/tests/ui/issues/issue-3979-2.rs b/tests/ui/issues/issue-3979-2.rs
new file mode 100644
index 000000000..4ec128a45
--- /dev/null
+++ b/tests/ui/issues/issue-3979-2.rs
@@ -0,0 +1,18 @@
+// check-pass
+// pretty-expanded FIXME #23616
+
+trait A {
+ fn a_method(&self);
+}
+
+trait B: A {
+ fn b_method(&self);
+}
+
+trait C: B {
+ fn c_method(&self) {
+ self.a_method();
+ }
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-3979-generics.rs b/tests/ui/issues/issue-3979-generics.rs
new file mode 100644
index 000000000..519de1cad
--- /dev/null
+++ b/tests/ui/issues/issue-3979-generics.rs
@@ -0,0 +1,36 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(non_snake_case)]
+
+use std::ops::Add;
+
+trait Positioned<S> {
+ fn SetX(&mut self, _: S);
+ fn X(&self) -> S;
+}
+
+trait Movable<S: Add<Output=S>>: Positioned<S> {
+ fn translate(&mut self, dx: S) {
+ let x = self.X() + dx;
+ self.SetX(x);
+ }
+}
+
+struct Point { x: isize, y: isize }
+
+impl Positioned<isize> for Point {
+ fn SetX(&mut self, x: isize) {
+ self.x = x;
+ }
+ fn X(&self) -> isize {
+ self.x
+ }
+}
+
+impl Movable<isize> for Point {}
+
+pub fn main() {
+ let mut p = Point{ x: 1, y: 2};
+ p.translate(3);
+ assert_eq!(p.X(), 4);
+}
diff --git a/tests/ui/issues/issue-3979-xcrate.rs b/tests/ui/issues/issue-3979-xcrate.rs
new file mode 100644
index 000000000..fcb1f55c3
--- /dev/null
+++ b/tests/ui/issues/issue-3979-xcrate.rs
@@ -0,0 +1,25 @@
+// run-pass
+#![allow(dead_code)]
+// aux-build:issue-3979-traits.rs
+
+extern crate issue_3979_traits;
+use issue_3979_traits::{Positioned, Movable};
+
+struct Point { x: isize, y: isize }
+
+impl Positioned for Point {
+ fn SetX(&mut self, x: isize) {
+ self.x = x;
+ }
+ fn X(&self) -> isize {
+ self.x
+ }
+}
+
+impl Movable for Point {}
+
+pub fn main() {
+ let mut p = Point{ x: 1, y: 2};
+ p.translate(3);
+ assert_eq!(p.X(), 4);
+}
diff --git a/tests/ui/issues/issue-3979.rs b/tests/ui/issues/issue-3979.rs
new file mode 100644
index 000000000..72949d8c7
--- /dev/null
+++ b/tests/ui/issues/issue-3979.rs
@@ -0,0 +1,34 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(non_snake_case)]
+
+trait Positioned {
+ fn SetX(&mut self, _: isize);
+ fn X(&self) -> isize;
+}
+
+trait Movable: Positioned {
+ fn translate(&mut self, dx: isize) {
+ let x = self.X();
+ self.SetX(x + dx);
+ }
+}
+
+struct Point { x: isize, y: isize }
+
+impl Positioned for Point {
+ fn SetX(&mut self, x: isize) {
+ self.x = x;
+ }
+ fn X(&self) -> isize {
+ self.x
+ }
+}
+
+impl Movable for Point {}
+
+pub fn main() {
+ let mut p = Point{ x: 1, y: 2};
+ p.translate(3);
+ assert_eq!(p.X(), 4);
+}
diff --git a/tests/ui/issues/issue-39808.rs b/tests/ui/issues/issue-39808.rs
new file mode 100644
index 000000000..a47013673
--- /dev/null
+++ b/tests/ui/issues/issue-39808.rs
@@ -0,0 +1,17 @@
+// run-pass
+#![allow(unreachable_code)]
+
+// Regression test for #39808. The type parameter of `Owned` was
+// considered to be "unconstrained" because the type resulting from
+// `format!` (`String`) was not being propagated upward, owing to the
+// fact that the expression diverges.
+
+use std::borrow::Cow;
+
+fn main() {
+ let _ = if false {
+ Cow::Owned(format!("{:?}", panic!()))
+ } else {
+ Cow::Borrowed("")
+ };
+}
diff --git a/tests/ui/issues/issue-39827.rs b/tests/ui/issues/issue-39827.rs
new file mode 100644
index 000000000..782c668c8
--- /dev/null
+++ b/tests/ui/issues/issue-39827.rs
@@ -0,0 +1,34 @@
+// run-pass
+#![feature(core_intrinsics)]
+
+use std::intrinsics::{ volatile_copy_memory, volatile_store, volatile_load,
+ volatile_copy_nonoverlapping_memory,
+ volatile_set_memory };
+
+//
+// This test ensures that volatile intrinsics can be specialised with
+// zero-sized types and, in case of copy/set functions, can accept
+// number of elements equal to zero.
+//
+fn main () {
+ let mut dst_pair = (1, 2);
+ let src_pair = (3, 4);
+ let mut dst_empty = ();
+ let src_empty = ();
+
+ const COUNT_0: usize = 0;
+ const COUNT_100: usize = 100;
+
+ unsafe {
+ volatile_copy_memory(&mut dst_pair, &dst_pair, COUNT_0);
+ volatile_copy_nonoverlapping_memory(&mut dst_pair, &src_pair, 0);
+ volatile_copy_memory(&mut dst_empty, &dst_empty, 100);
+ volatile_copy_nonoverlapping_memory(&mut dst_empty, &src_empty,
+ COUNT_100);
+ volatile_set_memory(&mut dst_empty, 0, COUNT_100);
+ volatile_set_memory(&mut dst_pair, 0, COUNT_0);
+ volatile_store(&mut dst_empty, ());
+ volatile_store(&mut dst_empty, src_empty);
+ volatile_load(&src_empty);
+ }
+}
diff --git a/tests/ui/issues/issue-39848.rs b/tests/ui/issues/issue-39848.rs
new file mode 100644
index 000000000..1964d7399
--- /dev/null
+++ b/tests/ui/issues/issue-39848.rs
@@ -0,0 +1,9 @@
+macro_rules! get_opt {
+ ($tgt:expr, $field:ident) => {
+ if $tgt.has_$field() {} //~ ERROR expected `{`, found `foo`
+ }
+}
+
+fn main() {
+ get_opt!(bar, foo);
+}
diff --git a/tests/ui/issues/issue-39848.stderr b/tests/ui/issues/issue-39848.stderr
new file mode 100644
index 000000000..387ef0776
--- /dev/null
+++ b/tests/ui/issues/issue-39848.stderr
@@ -0,0 +1,25 @@
+error: expected `{`, found `foo`
+ --> $DIR/issue-39848.rs:3:21
+ |
+LL | if $tgt.has_$field() {}
+ | ^^^^^^ expected `{`
+...
+LL | get_opt!(bar, foo);
+ | ------------------ in this macro invocation
+ |
+note: the `if` expression is missing a block after this condition
+ --> $DIR/issue-39848.rs:3:12
+ |
+LL | if $tgt.has_$field() {}
+ | ^^^^^^^^^
+...
+LL | get_opt!(bar, foo);
+ | ------------------ in this macro invocation
+ = note: this error originates in the macro `get_opt` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: try placing this code inside a block
+ |
+LL | if $tgt.has_{ $field() } {}
+ | + +
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-3991.rs b/tests/ui/issues/issue-3991.rs
new file mode 100644
index 000000000..4851eddf5
--- /dev/null
+++ b/tests/ui/issues/issue-3991.rs
@@ -0,0 +1,16 @@
+// check-pass
+#![allow(dead_code)]
+
+// pretty-expanded FIXME #23616
+
+struct HasNested {
+ nest: Vec<Vec<isize> > ,
+}
+
+impl HasNested {
+ fn method_push_local(&mut self) {
+ self.nest[0].push(0);
+ }
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-3993.rs b/tests/ui/issues/issue-3993.rs
new file mode 100644
index 000000000..9dea54ea7
--- /dev/null
+++ b/tests/ui/issues/issue-3993.rs
@@ -0,0 +1,10 @@
+use zoo::fly; //~ ERROR: function `fly` is private
+
+mod zoo {
+ fn fly() {}
+}
+
+
+fn main() {
+ fly();
+}
diff --git a/tests/ui/issues/issue-3993.stderr b/tests/ui/issues/issue-3993.stderr
new file mode 100644
index 000000000..deecf7a9d
--- /dev/null
+++ b/tests/ui/issues/issue-3993.stderr
@@ -0,0 +1,15 @@
+error[E0603]: function `fly` is private
+ --> $DIR/issue-3993.rs:1:10
+ |
+LL | use zoo::fly;
+ | ^^^ private function
+ |
+note: the function `fly` is defined here
+ --> $DIR/issue-3993.rs:4:5
+ |
+LL | fn fly() {}
+ | ^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0603`.
diff --git a/tests/ui/issues/issue-39970.rs b/tests/ui/issues/issue-39970.rs
new file mode 100644
index 000000000..f51e3b522
--- /dev/null
+++ b/tests/ui/issues/issue-39970.rs
@@ -0,0 +1,21 @@
+trait Array<'a> {
+ type Element: 'a;
+}
+
+trait Visit {
+ fn visit() {}
+}
+
+impl<'a> Array<'a> for () {
+ type Element = &'a ();
+}
+
+impl Visit for () where
+ //(): for<'a> Array<'a, Element=&'a ()>, // No ICE
+ (): for<'a> Array<'a, Element=()>, // ICE
+{}
+
+fn main() {
+ <() as Visit>::visit();
+ //~^ ERROR type mismatch resolving `for<'a> <() as Array<'a>>::Element == ()`
+}
diff --git a/tests/ui/issues/issue-39970.stderr b/tests/ui/issues/issue-39970.stderr
new file mode 100644
index 000000000..0cabdf7f2
--- /dev/null
+++ b/tests/ui/issues/issue-39970.stderr
@@ -0,0 +1,23 @@
+error[E0271]: type mismatch resolving `for<'a> <() as Array<'a>>::Element == ()`
+ --> $DIR/issue-39970.rs:19:5
+ |
+LL | <() as Visit>::visit();
+ | ^^^^^^^^^^^^^^^^^^^^ type mismatch resolving `for<'a> <() as Array<'a>>::Element == ()`
+ |
+note: expected this to be `()`
+ --> $DIR/issue-39970.rs:10:20
+ |
+LL | type Element = &'a ();
+ | ^^^^^^
+note: required for `()` to implement `Visit`
+ --> $DIR/issue-39970.rs:13:6
+ |
+LL | impl Visit for () where
+ | ^^^^^ ^^
+LL | //(): for<'a> Array<'a, Element=&'a ()>, // No ICE
+LL | (): for<'a> Array<'a, Element=()>, // ICE
+ | ---------- unsatisfied trait bound introduced here
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0271`.
diff --git a/tests/ui/issues/issue-39984.rs b/tests/ui/issues/issue-39984.rs
new file mode 100644
index 000000000..1c9ae26ca
--- /dev/null
+++ b/tests/ui/issues/issue-39984.rs
@@ -0,0 +1,14 @@
+// check-pass
+#![allow(dead_code)]
+#![allow(unreachable_code)]
+// Regression test for issue #39984.
+//
+// The key here is that the error type of the `Ok` call ought to be
+// constrained to `String`, even though it is dead-code.
+
+fn main() {}
+
+fn t() -> Result<(), String> {
+ return Err("".into());
+ Ok(())
+}
diff --git a/tests/ui/issues/issue-40000.rs b/tests/ui/issues/issue-40000.rs
new file mode 100644
index 000000000..a6e05e7ba
--- /dev/null
+++ b/tests/ui/issues/issue-40000.rs
@@ -0,0 +1,9 @@
+fn main() {
+ let bar: fn(&mut u32) = |_| {};
+
+ fn foo(x: Box<dyn Fn(&i32)>) {}
+ let bar = Box::new(|x: &i32| {}) as Box<dyn Fn(_)>;
+ foo(bar);
+ //~^ ERROR mismatched types
+ //~| ERROR mismatched types
+}
diff --git a/tests/ui/issues/issue-40000.stderr b/tests/ui/issues/issue-40000.stderr
new file mode 100644
index 000000000..c41fbb9d2
--- /dev/null
+++ b/tests/ui/issues/issue-40000.stderr
@@ -0,0 +1,21 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-40000.rs:6:9
+ |
+LL | foo(bar);
+ | ^^^ one type is more general than the other
+ |
+ = note: expected trait object `dyn for<'a> Fn(&'a i32)`
+ found trait object `dyn Fn(&i32)`
+
+error[E0308]: mismatched types
+ --> $DIR/issue-40000.rs:6:9
+ |
+LL | foo(bar);
+ | ^^^ one type is more general than the other
+ |
+ = note: expected trait object `dyn for<'a> Fn(&'a i32)`
+ found trait object `dyn Fn(&i32)`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-40003.rs b/tests/ui/issues/issue-40003.rs
new file mode 100644
index 000000000..5e61361f9
--- /dev/null
+++ b/tests/ui/issues/issue-40003.rs
@@ -0,0 +1,178 @@
+// run-pass
+#![allow(unused_must_use)]
+fn main() {
+ if false { test(); }
+}
+
+fn test() {
+ let rx = Err::<Vec<usize>, u32>(1).into_future();
+
+ rx.map(|l: Vec<usize>| stream::iter(l.into_iter().map(|i| Ok(i))))
+ .flatten_stream()
+ .chunks(50)
+ .buffer_unordered(5);
+}
+
+use future::{Future, IntoFuture};
+mod future {
+ use std::result;
+
+ use {stream, Stream};
+
+ pub trait Future {
+ type Item;
+ type Error;
+
+ fn map<F, U>(self, _: F) -> Map<Self, F>
+ where F: FnOnce(Self::Item) -> U,
+ Self: Sized,
+ {
+ panic!()
+ }
+
+ fn flatten_stream(self) -> FlattenStream<Self>
+ where <Self as Future>::Item: stream::Stream<Error=Self::Error>,
+ Self: Sized
+ {
+ panic!()
+ }
+ }
+
+ pub trait IntoFuture {
+ type Future: Future<Item=Self::Item, Error=Self::Error>;
+ type Item;
+ type Error;
+ fn into_future(self) -> Self::Future;
+ }
+
+ impl<F: Future> IntoFuture for F {
+ type Future = F;
+ type Item = F::Item;
+ type Error = F::Error;
+
+ fn into_future(self) -> F {
+ panic!()
+ }
+ }
+
+ impl<T, E> IntoFuture for result::Result<T, E> {
+ type Future = FutureResult<T, E>;
+ type Item = T;
+ type Error = E;
+
+ fn into_future(self) -> FutureResult<T, E> {
+ panic!()
+ }
+ }
+
+ pub struct Map<A, F> {
+ _a: (A, F),
+ }
+
+ impl<U, A, F> Future for Map<A, F>
+ where A: Future,
+ F: FnOnce(A::Item) -> U,
+ {
+ type Item = U;
+ type Error = A::Error;
+ }
+
+ pub struct FlattenStream<F> {
+ _f: F,
+ }
+
+ impl<F> Stream for FlattenStream<F>
+ where F: Future,
+ <F as Future>::Item: Stream<Error=F::Error>,
+ {
+ type Item = <F::Item as Stream>::Item;
+ type Error = <F::Item as Stream>::Error;
+ }
+
+ pub struct FutureResult<T, E> {
+ _inner: (T, E),
+ }
+
+ impl<T, E> Future for FutureResult<T, E> {
+ type Item = T;
+ type Error = E;
+ }
+}
+
+mod stream {
+ use IntoFuture;
+
+ pub trait Stream {
+ type Item;
+ type Error;
+
+ fn buffer_unordered(self, amt: usize) -> BufferUnordered<Self>
+ where Self::Item: IntoFuture<Error = <Self as Stream>::Error>,
+ Self: Sized
+ {
+ new(self, amt)
+ }
+
+ fn chunks(self, _capacity: usize) -> Chunks<Self>
+ where Self: Sized
+ {
+ panic!()
+ }
+ }
+
+ pub struct IterStream<I> {
+ _iter: I,
+ }
+
+ pub fn iter<J, T, E>(_: J) -> IterStream<J::IntoIter>
+ where J: IntoIterator<Item=Result<T, E>>,
+ {
+ panic!()
+ }
+
+ impl<I, T, E> Stream for IterStream<I>
+ where I: Iterator<Item=Result<T, E>>,
+ {
+ type Item = T;
+ type Error = E;
+ }
+
+ pub struct Chunks<S> {
+ _stream: S
+ }
+
+ impl<S> Stream for Chunks<S>
+ where S: Stream
+ {
+ type Item = Result<Vec<<S as Stream>::Item>, u32>;
+ type Error = <S as Stream>::Error;
+ }
+
+ pub struct BufferUnordered<S> {
+ _stream: S,
+ }
+
+ enum Slot<T> {
+ Next(#[allow(unused_tuple_struct_fields)] usize),
+ _Data { _a: T },
+ }
+
+ fn new<S>(_s: S, _amt: usize) -> BufferUnordered<S>
+ where S: Stream,
+ S::Item: IntoFuture<Error=<S as Stream>::Error>,
+ {
+ (0..0).map(|_| {
+ Slot::Next::<<S::Item as IntoFuture>::Future>(1)
+ }).collect::<Vec<_>>();
+ panic!()
+ }
+
+ impl<S> Stream for BufferUnordered<S>
+ where S: Stream,
+ S::Item: IntoFuture<Error=<S as Stream>::Error>,
+ {
+ type Item = <S::Item as IntoFuture>::Item;
+ type Error = <S as Stream>::Error;
+ }
+}
+use stream::Stream;
diff --git a/tests/ui/issues/issue-40085.rs b/tests/ui/issues/issue-40085.rs
new file mode 100644
index 000000000..132044cfd
--- /dev/null
+++ b/tests/ui/issues/issue-40085.rs
@@ -0,0 +1,13 @@
+// run-pass
+use std::ops::Index;
+fn bar() {}
+static UNIT: () = ();
+struct S;
+impl Index<fn()> for S {
+ type Output = ();
+ fn index(&self, _: fn()) -> &() { &UNIT }
+}
+fn main() {
+ S.index(bar);
+ S[bar];
+}
diff --git a/tests/ui/issues/issue-40136.rs b/tests/ui/issues/issue-40136.rs
new file mode 100644
index 000000000..29d3fc2d5
--- /dev/null
+++ b/tests/ui/issues/issue-40136.rs
@@ -0,0 +1,15 @@
+// check-pass
+#![allow(dead_code)]
+
+macro_rules! m { () => { 0 } }
+
+trait T {
+ const C: i32 = m!();
+}
+
+struct S;
+impl S {
+ const C: i32 = m!();
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-40235.rs b/tests/ui/issues/issue-40235.rs
new file mode 100644
index 000000000..0f799c350
--- /dev/null
+++ b/tests/ui/issues/issue-40235.rs
@@ -0,0 +1,8 @@
+// run-pass
+#![allow(unused_variables)]
+fn foo() {}
+
+fn main() {
+ while let Some(foo) = Some(1) { break }
+ foo();
+}
diff --git a/tests/ui/issues/issue-4025.rs b/tests/ui/issues/issue-4025.rs
new file mode 100644
index 000000000..dc534c64c
--- /dev/null
+++ b/tests/ui/issues/issue-4025.rs
@@ -0,0 +1,25 @@
+// check-pass
+#![allow(dead_code)]
+#![allow(unused_mut)]
+/*
+# if b { x } else { y } requires identical types for x and y
+*/
+
+fn print1(b: bool, s1: &str, s2: &str) {
+ println!("{}", if b { s1 } else { s2 });
+}
+fn print2<'a, 'b>(b: bool, s1: &'a str, s2: &'b str) {
+ println!("{}", if b { s1 } else { s2 });
+}
+fn print3(b: bool, s1: &str, s2: &str) {
+ let mut s: &str;
+ if b { s = s1; } else { s = s2; }
+ println!("{}", s);
+}
+fn print4<'a, 'b>(b: bool, s1: &'a str, s2: &'b str) {
+ let mut s: &str;
+ if b { s = s1; } else { s = s2; }
+ println!("{}", s);
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-40288-2.rs b/tests/ui/issues/issue-40288-2.rs
new file mode 100644
index 000000000..032a2e65f
--- /dev/null
+++ b/tests/ui/issues/issue-40288-2.rs
@@ -0,0 +1,31 @@
+fn prove_static<T: 'static + ?Sized>(_: &'static T) {}
+
+fn lifetime_transmute_slice<'a, T: ?Sized>(x: &'a T, y: &T) -> &'a T {
+ let mut out = [x];
+ {
+ let slice: &mut [_] = &mut out;
+ slice[0] = y;
+ }
+ out[0]
+ //~^ ERROR explicit lifetime required in the type of `y` [E0621]
+}
+
+struct Struct<T, U: ?Sized> {
+ head: T,
+ _tail: U
+}
+
+fn lifetime_transmute_struct<'a, T: ?Sized>(x: &'a T, y: &T) -> &'a T {
+ let mut out = Struct { head: x, _tail: [()] };
+ {
+ let dst: &mut Struct<_, [()]> = &mut out;
+ dst.head = y;
+ }
+ out.head
+ //~^ ERROR explicit lifetime required in the type of `y` [E0621]
+}
+
+fn main() {
+ prove_static(lifetime_transmute_slice("", &String::from("foo")));
+ prove_static(lifetime_transmute_struct("", &String::from("bar")));
+}
diff --git a/tests/ui/issues/issue-40288-2.stderr b/tests/ui/issues/issue-40288-2.stderr
new file mode 100644
index 000000000..2c64856b0
--- /dev/null
+++ b/tests/ui/issues/issue-40288-2.stderr
@@ -0,0 +1,21 @@
+error[E0621]: explicit lifetime required in the type of `y`
+ --> $DIR/issue-40288-2.rs:9:5
+ |
+LL | fn lifetime_transmute_slice<'a, T: ?Sized>(x: &'a T, y: &T) -> &'a T {
+ | -- help: add explicit lifetime `'a` to the type of `y`: `&'a T`
+...
+LL | out[0]
+ | ^^^^^^ lifetime `'a` required
+
+error[E0621]: explicit lifetime required in the type of `y`
+ --> $DIR/issue-40288-2.rs:24:5
+ |
+LL | fn lifetime_transmute_struct<'a, T: ?Sized>(x: &'a T, y: &T) -> &'a T {
+ | -- help: add explicit lifetime `'a` to the type of `y`: `&'a T`
+...
+LL | out.head
+ | ^^^^^^^^ lifetime `'a` required
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0621`.
diff --git a/tests/ui/issues/issue-40288.rs b/tests/ui/issues/issue-40288.rs
new file mode 100644
index 000000000..60204c117
--- /dev/null
+++ b/tests/ui/issues/issue-40288.rs
@@ -0,0 +1,20 @@
+fn save_ref<'a>(refr: &'a i32, to: &mut [&'a i32]) {
+ for val in &mut *to {
+ *val = refr;
+ }
+}
+
+fn main() {
+ let ref init = 0i32;
+ let ref mut refr = 1i32;
+
+ let mut out = [init];
+
+ save_ref(&*refr, &mut out);
+
+ // This shouldn't be allowed as `refr` is borrowed
+ *refr = 3; //~ ERROR cannot assign to `*refr` because it is borrowed
+
+ // Prints 3?!
+ println!("{:?}", out[0]);
+}
diff --git a/tests/ui/issues/issue-40288.stderr b/tests/ui/issues/issue-40288.stderr
new file mode 100644
index 000000000..fb4ecab36
--- /dev/null
+++ b/tests/ui/issues/issue-40288.stderr
@@ -0,0 +1,15 @@
+error[E0506]: cannot assign to `*refr` because it is borrowed
+ --> $DIR/issue-40288.rs:16:5
+ |
+LL | save_ref(&*refr, &mut out);
+ | ------ borrow of `*refr` occurs here
+...
+LL | *refr = 3;
+ | ^^^^^^^^^ assignment to borrowed `*refr` occurs here
+...
+LL | println!("{:?}", out[0]);
+ | ------ borrow later used here
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0506`.
diff --git a/tests/ui/issues/issue-40350.rs b/tests/ui/issues/issue-40350.rs
new file mode 100644
index 000000000..a39a8519a
--- /dev/null
+++ b/tests/ui/issues/issue-40350.rs
@@ -0,0 +1,10 @@
+// check-pass
+
+enum E {
+ A = {
+ enum F { B }
+ 0
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-40402-ref-hints/issue-40402-1.rs b/tests/ui/issues/issue-40402-ref-hints/issue-40402-1.rs
new file mode 100644
index 000000000..254956ae3
--- /dev/null
+++ b/tests/ui/issues/issue-40402-ref-hints/issue-40402-1.rs
@@ -0,0 +1,10 @@
+// Check that we do not suggest `ref f` here in the `main()` function.
+struct Foo {
+ pub v: Vec<String>,
+}
+
+fn main() {
+ let mut f = Foo { v: Vec::new() };
+ f.v.push("hello".to_string());
+ let e = f.v[0]; //~ ERROR cannot move out of index
+}
diff --git a/tests/ui/issues/issue-40402-ref-hints/issue-40402-1.stderr b/tests/ui/issues/issue-40402-ref-hints/issue-40402-1.stderr
new file mode 100644
index 000000000..e15eed656
--- /dev/null
+++ b/tests/ui/issues/issue-40402-ref-hints/issue-40402-1.stderr
@@ -0,0 +1,14 @@
+error[E0507]: cannot move out of index of `Vec<String>`
+ --> $DIR/issue-40402-1.rs:9:13
+ |
+LL | let e = f.v[0];
+ | ^^^^^^ move occurs because value has type `String`, which does not implement the `Copy` trait
+ |
+help: consider borrowing here
+ |
+LL | let e = &f.v[0];
+ | +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0507`.
diff --git a/tests/ui/issues/issue-40402-ref-hints/issue-40402-2.rs b/tests/ui/issues/issue-40402-ref-hints/issue-40402-2.rs
new file mode 100644
index 000000000..1fb6e31e9
--- /dev/null
+++ b/tests/ui/issues/issue-40402-ref-hints/issue-40402-2.rs
@@ -0,0 +1,6 @@
+// Check that we do suggest `(ref a, ref b)` here, since `a` and `b`
+// are nested within a pattern
+fn main() {
+ let x = vec![(String::new(), String::new())];
+ let (a, b) = x[0]; //~ ERROR cannot move out of index
+}
diff --git a/tests/ui/issues/issue-40402-ref-hints/issue-40402-2.stderr b/tests/ui/issues/issue-40402-ref-hints/issue-40402-2.stderr
new file mode 100644
index 000000000..1bc554efb
--- /dev/null
+++ b/tests/ui/issues/issue-40402-ref-hints/issue-40402-2.stderr
@@ -0,0 +1,18 @@
+error[E0507]: cannot move out of index of `Vec<(String, String)>`
+ --> $DIR/issue-40402-2.rs:5:18
+ |
+LL | let (a, b) = x[0];
+ | - - ^^^^
+ | | |
+ | | ...and here
+ | data moved here
+ |
+ = note: move occurs because these variables have types that don't implement the `Copy` trait
+help: consider borrowing here
+ |
+LL | let (a, b) = &x[0];
+ | +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0507`.
diff --git a/tests/ui/issues/issue-40408.rs b/tests/ui/issues/issue-40408.rs
new file mode 100644
index 000000000..81acc41cb
--- /dev/null
+++ b/tests/ui/issues/issue-40408.rs
@@ -0,0 +1,7 @@
+// run-pass
+fn main() {
+ println!("{}", 0E+10);
+ println!("{}", 0e+10);
+ println!("{}", 00e+10);
+ println!("{}", 00E+10);
+}
diff --git a/tests/ui/issues/issue-40510-1.migrate.stderr b/tests/ui/issues/issue-40510-1.migrate.stderr
new file mode 100644
index 000000000..776a724d3
--- /dev/null
+++ b/tests/ui/issues/issue-40510-1.migrate.stderr
@@ -0,0 +1,13 @@
+error: captured variable cannot escape `FnMut` closure body
+ --> $DIR/issue-40510-1.rs:11:9
+ |
+LL | || {
+ | - inferred to be a `FnMut` closure
+LL | &mut x
+ | ^^^^^^ returns a reference to a captured variable which escapes the closure body
+ |
+ = note: `FnMut` closures only have access to their captured variables while they are executing...
+ = note: ...therefore, they cannot allow references to captured variables to escape
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-40510-1.rs b/tests/ui/issues/issue-40510-1.rs
new file mode 100644
index 000000000..ca53dcd9b
--- /dev/null
+++ b/tests/ui/issues/issue-40510-1.rs
@@ -0,0 +1,12 @@
+#![allow(unused)]
+
+fn f() {
+ let mut x: Box<()> = Box::new(());
+
+ || {
+ &mut x
+ };
+ //~^^ ERROR captured variable cannot escape `FnMut` closure body
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-40510-1.stderr b/tests/ui/issues/issue-40510-1.stderr
new file mode 100644
index 000000000..e88f31ea1
--- /dev/null
+++ b/tests/ui/issues/issue-40510-1.stderr
@@ -0,0 +1,19 @@
+error: captured variable cannot escape `FnMut` closure body
+ --> $DIR/issue-40510-1.rs:7:9
+ |
+LL | let mut x: Box<()> = Box::new(());
+ | ----- variable defined here
+LL |
+LL | || {
+ | - inferred to be a `FnMut` closure
+LL | &mut x
+ | ^^^^^-
+ | | |
+ | | variable captured here
+ | returns a reference to a captured variable which escapes the closure body
+ |
+ = note: `FnMut` closures only have access to their captured variables while they are executing...
+ = note: ...therefore, they cannot allow references to captured variables to escape
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-40510-2.rs b/tests/ui/issues/issue-40510-2.rs
new file mode 100644
index 000000000..3ae84be05
--- /dev/null
+++ b/tests/ui/issues/issue-40510-2.rs
@@ -0,0 +1,13 @@
+// check-pass
+#![allow(unused)]
+
+fn f() {
+ let x: Box<()> = Box::new(());
+
+ || {
+ &x
+ };
+}
+
+
+fn main() {}
diff --git a/tests/ui/issues/issue-40510-3.migrate.stderr b/tests/ui/issues/issue-40510-3.migrate.stderr
new file mode 100644
index 000000000..a49475a85
--- /dev/null
+++ b/tests/ui/issues/issue-40510-3.migrate.stderr
@@ -0,0 +1,15 @@
+error: captured variable cannot escape `FnMut` closure body
+ --> $DIR/issue-40510-3.rs:11:9
+ |
+LL | || {
+ | - inferred to be a `FnMut` closure
+LL | / || {
+LL | | x.push(())
+LL | | }
+ | |_________^ returns a closure that contains a reference to a captured variable, which then escapes the closure body
+ |
+ = note: `FnMut` closures only have access to their captured variables while they are executing...
+ = note: ...therefore, they cannot allow references to captured variables to escape
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-40510-3.rs b/tests/ui/issues/issue-40510-3.rs
new file mode 100644
index 000000000..181263adc
--- /dev/null
+++ b/tests/ui/issues/issue-40510-3.rs
@@ -0,0 +1,14 @@
+#![allow(unused)]
+
+fn f() {
+ let mut x: Vec<()> = Vec::new();
+
+ || {
+ || {
+ x.push(())
+ }
+ //~^^^ ERROR captured variable cannot escape `FnMut` closure body
+ };
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-40510-3.stderr b/tests/ui/issues/issue-40510-3.stderr
new file mode 100644
index 000000000..eb077415e
--- /dev/null
+++ b/tests/ui/issues/issue-40510-3.stderr
@@ -0,0 +1,23 @@
+error: captured variable cannot escape `FnMut` closure body
+ --> $DIR/issue-40510-3.rs:7:9
+ |
+LL | let mut x: Vec<()> = Vec::new();
+ | ----- variable defined here
+LL |
+LL | || {
+ | - inferred to be a `FnMut` closure
+LL | / || {
+LL | | x.push(())
+ | | - variable captured here
+LL | | }
+ | |_________^ returns a closure that contains a reference to a captured variable, which then escapes the closure body
+ |
+ = note: `FnMut` closures only have access to their captured variables while they are executing...
+ = note: ...therefore, they cannot allow references to captured variables to escape
+help: consider adding 'move' keyword before the nested closure
+ |
+LL | move || {
+ | ++++
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-40510-4.rs b/tests/ui/issues/issue-40510-4.rs
new file mode 100644
index 000000000..48bb8d36f
--- /dev/null
+++ b/tests/ui/issues/issue-40510-4.rs
@@ -0,0 +1,15 @@
+// check-pass
+#![allow(unused)]
+
+fn f() {
+ let x: Vec<()> = Vec::new();
+
+ || {
+ || {
+ x.len()
+ }
+ };
+}
+
+
+fn main() {}
diff --git a/tests/ui/issues/issue-40610.rs b/tests/ui/issues/issue-40610.rs
new file mode 100644
index 000000000..c01233605
--- /dev/null
+++ b/tests/ui/issues/issue-40610.rs
@@ -0,0 +1,6 @@
+fn f(_: &[f32]) {}
+
+fn main() {
+ () + f(&[1.0]);
+ //~^ ERROR cannot add `()` to `()`
+}
diff --git a/tests/ui/issues/issue-40610.stderr b/tests/ui/issues/issue-40610.stderr
new file mode 100644
index 000000000..b4e302dff
--- /dev/null
+++ b/tests/ui/issues/issue-40610.stderr
@@ -0,0 +1,11 @@
+error[E0369]: cannot add `()` to `()`
+ --> $DIR/issue-40610.rs:4:8
+ |
+LL | () + f(&[1.0]);
+ | -- ^ --------- ()
+ | |
+ | ()
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0369`.
diff --git a/tests/ui/issues/issue-40749.rs b/tests/ui/issues/issue-40749.rs
new file mode 100644
index 000000000..0a847853b
--- /dev/null
+++ b/tests/ui/issues/issue-40749.rs
@@ -0,0 +1,6 @@
+fn main() {
+ [0; ..10];
+ //~^ ERROR mismatched types
+ //~| expected type `usize`
+ //~| found struct `RangeTo<{integer}>`
+}
diff --git a/tests/ui/issues/issue-40749.stderr b/tests/ui/issues/issue-40749.stderr
new file mode 100644
index 000000000..fa239f744
--- /dev/null
+++ b/tests/ui/issues/issue-40749.stderr
@@ -0,0 +1,12 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-40749.rs:2:9
+ |
+LL | [0; ..10];
+ | ^^^^ expected `usize`, found struct `RangeTo`
+ |
+ = note: expected type `usize`
+ found struct `RangeTo<{integer}>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-40782.fixed b/tests/ui/issues/issue-40782.fixed
new file mode 100644
index 000000000..305a9c329
--- /dev/null
+++ b/tests/ui/issues/issue-40782.fixed
@@ -0,0 +1,8 @@
+// run-rustfix
+
+fn main() {
+ for _i in 0..2 { //~ ERROR missing `in`
+ }
+ for _i in 0..2 { //~ ERROR missing `in`
+ }
+}
diff --git a/tests/ui/issues/issue-40782.rs b/tests/ui/issues/issue-40782.rs
new file mode 100644
index 000000000..43460ec15
--- /dev/null
+++ b/tests/ui/issues/issue-40782.rs
@@ -0,0 +1,8 @@
+// run-rustfix
+
+fn main() {
+ for _i 0..2 { //~ ERROR missing `in`
+ }
+ for _i of 0..2 { //~ ERROR missing `in`
+ }
+}
diff --git a/tests/ui/issues/issue-40782.stderr b/tests/ui/issues/issue-40782.stderr
new file mode 100644
index 000000000..81f419bf6
--- /dev/null
+++ b/tests/ui/issues/issue-40782.stderr
@@ -0,0 +1,14 @@
+error: missing `in` in `for` loop
+ --> $DIR/issue-40782.rs:4:11
+ |
+LL | for _i 0..2 {
+ | ^ help: try adding `in` here
+
+error: missing `in` in `for` loop
+ --> $DIR/issue-40782.rs:6:12
+ |
+LL | for _i of 0..2 {
+ | ^^ help: try using `in` here instead
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/issues/issue-40827.rs b/tests/ui/issues/issue-40827.rs
new file mode 100644
index 000000000..6e42c5061
--- /dev/null
+++ b/tests/ui/issues/issue-40827.rs
@@ -0,0 +1,17 @@
+use std::rc::Rc;
+use std::sync::Arc;
+
+struct Foo(Arc<Bar>);
+
+enum Bar {
+ A(Rc<Foo>),
+ B(Option<Foo>),
+}
+
+fn f<T: Send>(_: T) {}
+
+fn main() {
+ f(Foo(Arc::new(Bar::B(None))));
+ //~^ ERROR E0277
+ //~| ERROR E0277
+}
diff --git a/tests/ui/issues/issue-40827.stderr b/tests/ui/issues/issue-40827.stderr
new file mode 100644
index 000000000..7f5c578ae
--- /dev/null
+++ b/tests/ui/issues/issue-40827.stderr
@@ -0,0 +1,55 @@
+error[E0277]: `Rc<Foo>` cannot be shared between threads safely
+ --> $DIR/issue-40827.rs:14:7
+ |
+LL | f(Foo(Arc::new(Bar::B(None))));
+ | - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ `Rc<Foo>` cannot be shared between threads safely
+ | |
+ | required by a bound introduced by this call
+ |
+ = help: within `Bar`, the trait `Sync` is not implemented for `Rc<Foo>`
+note: required because it appears within the type `Bar`
+ --> $DIR/issue-40827.rs:6:6
+ |
+LL | enum Bar {
+ | ^^^
+ = note: required for `Arc<Bar>` to implement `Send`
+note: required because it appears within the type `Foo`
+ --> $DIR/issue-40827.rs:4:8
+ |
+LL | struct Foo(Arc<Bar>);
+ | ^^^
+note: required by a bound in `f`
+ --> $DIR/issue-40827.rs:11:9
+ |
+LL | fn f<T: Send>(_: T) {}
+ | ^^^^ required by this bound in `f`
+
+error[E0277]: `Rc<Foo>` cannot be sent between threads safely
+ --> $DIR/issue-40827.rs:14:7
+ |
+LL | f(Foo(Arc::new(Bar::B(None))));
+ | - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ `Rc<Foo>` cannot be sent between threads safely
+ | |
+ | required by a bound introduced by this call
+ |
+ = help: within `Bar`, the trait `Send` is not implemented for `Rc<Foo>`
+note: required because it appears within the type `Bar`
+ --> $DIR/issue-40827.rs:6:6
+ |
+LL | enum Bar {
+ | ^^^
+ = note: required for `Arc<Bar>` to implement `Send`
+note: required because it appears within the type `Foo`
+ --> $DIR/issue-40827.rs:4:8
+ |
+LL | struct Foo(Arc<Bar>);
+ | ^^^
+note: required by a bound in `f`
+ --> $DIR/issue-40827.rs:11:9
+ |
+LL | fn f<T: Send>(_: T) {}
+ | ^^^^ required by this bound in `f`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-40845.rs b/tests/ui/issues/issue-40845.rs
new file mode 100644
index 000000000..a4ede6adf
--- /dev/null
+++ b/tests/ui/issues/issue-40845.rs
@@ -0,0 +1,6 @@
+trait T { m!(); } //~ ERROR cannot find macro `m` in this scope
+
+struct S;
+impl S { m!(); } //~ ERROR cannot find macro `m` in this scope
+
+fn main() {}
diff --git a/tests/ui/issues/issue-40845.stderr b/tests/ui/issues/issue-40845.stderr
new file mode 100644
index 000000000..66bf05320
--- /dev/null
+++ b/tests/ui/issues/issue-40845.stderr
@@ -0,0 +1,14 @@
+error: cannot find macro `m` in this scope
+ --> $DIR/issue-40845.rs:1:11
+ |
+LL | trait T { m!(); }
+ | ^
+
+error: cannot find macro `m` in this scope
+ --> $DIR/issue-40845.rs:4:10
+ |
+LL | impl S { m!(); }
+ | ^
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/issues/issue-40861.rs b/tests/ui/issues/issue-40861.rs
new file mode 100644
index 000000000..d8a8384a5
--- /dev/null
+++ b/tests/ui/issues/issue-40861.rs
@@ -0,0 +1,6 @@
+fn f(_: &[f32]) {}
+
+fn main() {
+ ()[f(&[1.0])];
+ //~^ ERROR cannot index into a value of type `()`
+}
diff --git a/tests/ui/issues/issue-40861.stderr b/tests/ui/issues/issue-40861.stderr
new file mode 100644
index 000000000..84e38b9bb
--- /dev/null
+++ b/tests/ui/issues/issue-40861.stderr
@@ -0,0 +1,11 @@
+error[E0608]: cannot index into a value of type `()`
+ --> $DIR/issue-40861.rs:4:5
+ |
+LL | ()[f(&[1.0])];
+ | ^^^^^^^^^^^^^
+ |
+ = help: to access tuple elements, use tuple indexing syntax (e.g., `tuple.0`)
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0608`.
diff --git a/tests/ui/issues/issue-40883.rs b/tests/ui/issues/issue-40883.rs
new file mode 100644
index 000000000..8a4aef46d
--- /dev/null
+++ b/tests/ui/issues/issue-40883.rs
@@ -0,0 +1,94 @@
+// run-pass
+#![allow(dead_code)]
+// check that we don't have linear stack usage with multiple calls to `push`
+
+#![feature(test)]
+
+extern crate test;
+use std::mem;
+
+fn meal() -> Big {
+ if test::black_box(false) {
+ panic!()
+ }
+ Big { drop_me: [
+ None, None, None, None, None, None, None, None,
+ None, None, None, None, None, None, None, None,
+ None, None, None, None, None, None, None, None,
+ None, None, None, None, None, None, None, None,
+ None, None, None, None, None, None, None, None,
+ None, None, None, None, None, None, None, None,
+ ]}
+}
+
+pub struct Big {
+ drop_me: [Option<Box<u8>>; 48],
+}
+
+#[inline]
+fn push(out: &mut Vec<Big>) {
+ out.push(meal());
+}
+
+#[inline(never)]
+pub fn supersize_me(out: &mut Vec<Big>) {
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out); // 16 calls to `push`
+
+ verify_stack_usage(out);
+
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out);
+ push(out); // 16 calls to `push`
+}
+
+#[inline(never)]
+fn verify_stack_usage(before_ptr: *mut Vec<Big>) {
+ // To check stack usage, create locals before and after
+ // and check the difference in addresses between them.
+ let mut stack_var: Vec<Big> = vec![];
+ test::black_box(&mut stack_var);
+ let stack_usage = isize::abs(
+ (&mut stack_var as *mut _ as isize) -
+ (before_ptr as isize)) as usize;
+ // Give space for 2 copies of `Big` + 272 "misc" bytes
+ // (value observed on x86_64-pc-windows-gnu).
+ if stack_usage > mem::size_of::<Big>() * 2 + 272 {
+ panic!("used {} bytes of stack, but `struct Big` is only {} bytes",
+ stack_usage, mem::size_of::<Big>());
+ }
+
+}
+
+pub fn main() {
+ let mut v = vec![];
+ test::black_box(&mut v);
+ supersize_me(&mut v);
+}
diff --git a/tests/ui/issues/issue-40951.rs b/tests/ui/issues/issue-40951.rs
new file mode 100644
index 000000000..49171eba6
--- /dev/null
+++ b/tests/ui/issues/issue-40951.rs
@@ -0,0 +1,12 @@
+// run-pass
+#![allow(unused_variables)]
+// Regression test for #40951.
+
+const FOO: [&'static str; 1] = ["foo"];
+
+fn find<T: PartialEq>(t: &[T], element: &T) { }
+
+fn main() {
+ let x = format!("hi");
+ find(&FOO, &&*x);
+}
diff --git a/tests/ui/issues/issue-41053.rs b/tests/ui/issues/issue-41053.rs
new file mode 100644
index 000000000..967edfd44
--- /dev/null
+++ b/tests/ui/issues/issue-41053.rs
@@ -0,0 +1,21 @@
+// run-pass
+// aux-build:issue-41053.rs
+
+pub trait Trait { fn foo(&self) {} }
+
+pub struct Foo;
+
+impl Iterator for Foo {
+ type Item = Box<dyn Trait>;
+ fn next(&mut self) -> Option<Box<dyn Trait>> {
+ extern crate issue_41053;
+ impl ::Trait for issue_41053::Test {
+ fn foo(&self) {}
+ }
+ Some(Box::new(issue_41053::Test))
+ }
+}
+
+fn main() {
+ Foo.next().unwrap().foo();
+}
diff --git a/tests/ui/issues/issue-41139.rs b/tests/ui/issues/issue-41139.rs
new file mode 100644
index 000000000..94c53216f
--- /dev/null
+++ b/tests/ui/issues/issue-41139.rs
@@ -0,0 +1,12 @@
+trait Trait {}
+
+fn get_function<'a>() -> &'a dyn Fn() -> dyn Trait {
+ panic!("")
+}
+
+fn main() {
+ // This isn't great. The issue here is that `dyn Trait` is not sized, so
+ // `dyn Fn() -> dyn Trait` is not well-formed.
+ let t: &dyn Trait = &get_function()();
+ //~^ ERROR expected function, found `&dyn Fn() -> (dyn Trait + 'static)`
+}
diff --git a/tests/ui/issues/issue-41139.stderr b/tests/ui/issues/issue-41139.stderr
new file mode 100644
index 000000000..97492e6e0
--- /dev/null
+++ b/tests/ui/issues/issue-41139.stderr
@@ -0,0 +1,12 @@
+error[E0618]: expected function, found `&dyn Fn() -> (dyn Trait + 'static)`
+ --> $DIR/issue-41139.rs:10:26
+ |
+LL | fn get_function<'a>() -> &'a dyn Fn() -> dyn Trait {
+ | -------------------------------------------------- `get_function` defined here returns `&dyn Fn() -> (dyn Trait + 'static)`
+...
+LL | let t: &dyn Trait = &get_function()();
+ | ^^^^^^^^^^^^^^ this trait object returns an unsized value `(dyn Trait + 'static)`, so it cannot be called
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0618`.
diff --git a/tests/ui/issues/issue-41213.rs b/tests/ui/issues/issue-41213.rs
new file mode 100644
index 000000000..5c91bf711
--- /dev/null
+++ b/tests/ui/issues/issue-41213.rs
@@ -0,0 +1,24 @@
+// run-pass
+#![allow(dead_code)]
+enum A {
+ A1,
+ A2,
+ A3,
+}
+
+enum B {
+ B1(String, String),
+ B2(String, String),
+}
+
+fn main() {
+ let a = A::A1;
+ loop {
+ let _ctor = match a {
+ A::A3 => break,
+ A::A1 => B::B1,
+ A::A2 => B::B2,
+ };
+ break;
+ }
+}
diff --git a/tests/ui/issues/issue-41229-ref-str.rs b/tests/ui/issues/issue-41229-ref-str.rs
new file mode 100644
index 000000000..fe5e6cd6e
--- /dev/null
+++ b/tests/ui/issues/issue-41229-ref-str.rs
@@ -0,0 +1,4 @@
+pub fn example(ref s: str) {}
+//~^ ERROR the size for values of type
+
+fn main() {}
diff --git a/tests/ui/issues/issue-41229-ref-str.stderr b/tests/ui/issues/issue-41229-ref-str.stderr
new file mode 100644
index 000000000..31fdf3b72
--- /dev/null
+++ b/tests/ui/issues/issue-41229-ref-str.stderr
@@ -0,0 +1,16 @@
+error[E0277]: the size for values of type `str` cannot be known at compilation time
+ --> $DIR/issue-41229-ref-str.rs:1:16
+ |
+LL | pub fn example(ref s: str) {}
+ | ^^^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `str`
+ = help: unsized fn params are gated as an unstable feature
+help: function arguments must have a statically known size, borrowed types always have a known size
+ |
+LL | pub fn example(ref s: &str) {}
+ | +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-41272.rs b/tests/ui/issues/issue-41272.rs
new file mode 100644
index 000000000..1f4da46f8
--- /dev/null
+++ b/tests/ui/issues/issue-41272.rs
@@ -0,0 +1,21 @@
+// check-pass
+#![allow(dead_code)]
+struct Foo;
+
+impl Foo {
+ fn bar(&mut self) -> bool { true }
+}
+
+fn error(foo: &mut Foo) {
+ if let Some(_) = Some(true) {
+ } else if foo.bar() {}
+}
+
+fn ok(foo: &mut Foo) {
+ if let Some(_) = Some(true) {
+ } else {
+ if foo.bar() {}
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-41298.rs b/tests/ui/issues/issue-41298.rs
new file mode 100644
index 000000000..a1b4de39b
--- /dev/null
+++ b/tests/ui/issues/issue-41298.rs
@@ -0,0 +1,8 @@
+// check-pass
+#![allow(dead_code)]
+struct Function<T, F> { t: T, f: F }
+
+impl<T, R> Function<T, fn() -> R> { fn foo() { } }
+impl<T, R> Function<T, fn() -> R> { fn bar() { } }
+
+fn main() { }
diff --git a/tests/ui/issues/issue-41394-rpass.rs b/tests/ui/issues/issue-41394-rpass.rs
new file mode 100644
index 000000000..37c652523
--- /dev/null
+++ b/tests/ui/issues/issue-41394-rpass.rs
@@ -0,0 +1,8 @@
+// run-pass
+// aux-build:issue-41394.rs
+
+extern crate issue_41394 as lib;
+
+fn main() {
+ assert_eq!(lib::foo() as u32, 42);
+}
diff --git a/tests/ui/issues/issue-41394.rs b/tests/ui/issues/issue-41394.rs
new file mode 100644
index 000000000..07cad8796
--- /dev/null
+++ b/tests/ui/issues/issue-41394.rs
@@ -0,0 +1,11 @@
+enum Foo {
+ A = "" + 1
+ //~^ ERROR cannot add `{integer}` to `&str`
+}
+
+enum Bar {
+ A = Foo::A as isize
+ //~^ const
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-41394.stderr b/tests/ui/issues/issue-41394.stderr
new file mode 100644
index 000000000..1b5c64628
--- /dev/null
+++ b/tests/ui/issues/issue-41394.stderr
@@ -0,0 +1,17 @@
+error[E0369]: cannot add `{integer}` to `&str`
+ --> $DIR/issue-41394.rs:2:12
+ |
+LL | A = "" + 1
+ | -- ^ - {integer}
+ | |
+ | &str
+
+note: erroneous constant used
+ --> $DIR/issue-41394.rs:7:9
+ |
+LL | A = Foo::A as isize
+ | ^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0369`.
diff --git a/tests/ui/issues/issue-41479.rs b/tests/ui/issues/issue-41479.rs
new file mode 100644
index 000000000..6daaf440e
--- /dev/null
+++ b/tests/ui/issues/issue-41479.rs
@@ -0,0 +1,9 @@
+// run-pass
+fn split<A, B>(pair: (A, B)) {
+ let _a = pair.0;
+ let _b = pair.1;
+}
+
+fn main() {
+ split(((), ((), ())));
+}
diff --git a/tests/ui/issues/issue-41498.rs b/tests/ui/issues/issue-41498.rs
new file mode 100644
index 000000000..ad918ecdd
--- /dev/null
+++ b/tests/ui/issues/issue-41498.rs
@@ -0,0 +1,17 @@
+// run-pass
+// regression test for issue #41498.
+
+struct S;
+impl S {
+ fn mutate(&mut self) {}
+}
+
+fn call_and_ref<T, F: FnOnce() -> T>(x: &mut Option<T>, f: F) -> &mut T {
+ *x = Some(f());
+ x.as_mut().unwrap()
+}
+
+fn main() {
+ let mut n = None;
+ call_and_ref(&mut n, || [S])[0].mutate();
+}
diff --git a/tests/ui/issues/issue-41549.rs b/tests/ui/issues/issue-41549.rs
new file mode 100644
index 000000000..d19926a54
--- /dev/null
+++ b/tests/ui/issues/issue-41549.rs
@@ -0,0 +1,12 @@
+// aux-build:issue-41549.rs
+
+
+extern crate issue_41549;
+
+struct S;
+
+impl issue_41549::Trait for S {
+ const CONST: () = (); //~ ERROR incompatible type for trait
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-41549.stderr b/tests/ui/issues/issue-41549.stderr
new file mode 100644
index 000000000..62307d387
--- /dev/null
+++ b/tests/ui/issues/issue-41549.stderr
@@ -0,0 +1,9 @@
+error[E0326]: implemented const `CONST` has an incompatible type for trait
+ --> $DIR/issue-41549.rs:9:18
+ |
+LL | const CONST: () = ();
+ | ^^ expected `u32`, found `()`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0326`.
diff --git a/tests/ui/issues/issue-41604.rs b/tests/ui/issues/issue-41604.rs
new file mode 100644
index 000000000..11a1cc25b
--- /dev/null
+++ b/tests/ui/issues/issue-41604.rs
@@ -0,0 +1,11 @@
+// run-pass
+struct B;
+
+impl B {
+ fn init(&mut self) {}
+}
+
+fn main() {
+ let mut b = [B];
+ b[1-1].init();
+}
diff --git a/tests/ui/issues/issue-41628.rs b/tests/ui/issues/issue-41628.rs
new file mode 100644
index 000000000..92159824e
--- /dev/null
+++ b/tests/ui/issues/issue-41628.rs
@@ -0,0 +1,7 @@
+// check-pass
+#![deny(dead_code)]
+
+#[used]
+static FOO: u32 = 0;
+
+fn main() {}
diff --git a/tests/ui/issues/issue-41652/auxiliary/issue-41652-b.rs b/tests/ui/issues/issue-41652/auxiliary/issue-41652-b.rs
new file mode 100644
index 000000000..2ce21b036
--- /dev/null
+++ b/tests/ui/issues/issue-41652/auxiliary/issue-41652-b.rs
@@ -0,0 +1,6 @@
+pub trait Tr {
+ // Note: The function needs to be declared over multiple lines to reproduce
+ // the crash. DO NOT reformat.
+ fn f()
+ where Self: Sized;
+}
diff --git a/tests/ui/issues/issue-41652/issue-41652.rs b/tests/ui/issues/issue-41652/issue-41652.rs
new file mode 100644
index 000000000..d8a6f4c8d
--- /dev/null
+++ b/tests/ui/issues/issue-41652/issue-41652.rs
@@ -0,0 +1,14 @@
+// aux-build:issue-41652-b.rs
+
+extern crate issue_41652_b;
+
+struct S;
+
+impl issue_41652_b::Tr for S {
+ fn f() {
+ 3.f()
+ //~^ ERROR can't call method `f` on ambiguous numeric type `{integer}`
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-41652/issue-41652.stderr b/tests/ui/issues/issue-41652/issue-41652.stderr
new file mode 100644
index 000000000..1618f0f5a
--- /dev/null
+++ b/tests/ui/issues/issue-41652/issue-41652.stderr
@@ -0,0 +1,14 @@
+error[E0689]: can't call method `f` on ambiguous numeric type `{integer}`
+ --> $DIR/issue-41652.rs:9:11
+ |
+LL | 3.f()
+ | ^
+ |
+help: you must specify a concrete type for this numeric value, like `i32`
+ |
+LL | 3_i32.f()
+ | ~~~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0689`.
diff --git a/tests/ui/issues/issue-41677.rs b/tests/ui/issues/issue-41677.rs
new file mode 100644
index 000000000..afddbc799
--- /dev/null
+++ b/tests/ui/issues/issue-41677.rs
@@ -0,0 +1,28 @@
+// run-pass
+// Regression test for #41677. The local variable was winding up with
+// a type `Receiver<?T, H>` where `?T` was unconstrained, because we
+// failed to enforce the WF obligations and `?T` is a bivariant type
+// parameter position.
+
+#![allow(unused_variables, dead_code)]
+
+use std::marker::PhantomData;
+
+trait Handle {
+ type Inner;
+}
+
+struct ResizingHandle<H>(PhantomData<H>);
+impl<H> Handle for ResizingHandle<H> {
+ type Inner = H;
+}
+
+struct Receiver<T, H: Handle<Inner=T>>(PhantomData<H>);
+
+fn channel<T>(size: usize) -> Receiver<T, ResizingHandle<T>> {
+ let rx = Receiver(PhantomData);
+ rx
+}
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-41696.rs b/tests/ui/issues/issue-41696.rs
new file mode 100644
index 000000000..d094f7194
--- /dev/null
+++ b/tests/ui/issues/issue-41696.rs
@@ -0,0 +1,54 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(unused_variables)]
+#![recursion_limit = "128"]
+// this used to cause exponential code-size blowup during LLVM passes.
+
+#![feature(test)]
+
+extern crate test;
+
+struct MayUnwind;
+
+impl Drop for MayUnwind {
+ fn drop(&mut self) {
+ if test::black_box(false) {
+ panic!()
+ }
+ }
+}
+
+struct DS<U> {
+ may_unwind: MayUnwind,
+ name: String,
+ next: U,
+}
+
+fn add<U>(ds: DS<U>, name: String) -> DS<DS<U>> {
+ DS {
+ may_unwind: MayUnwind,
+ name: "?".to_owned(),
+ next: ds,
+ }
+}
+
+fn main() {
+ let deserializers = DS { may_unwind: MayUnwind, name: "?".to_owned(), next: () };
+ let deserializers = add(deserializers, "?".to_owned());
+ let deserializers = add(deserializers, "?".to_owned());
+ let deserializers = add(deserializers, "?".to_owned());
+ let deserializers = add(deserializers, "?".to_owned());
+ let deserializers = add(deserializers, "?".to_owned());
+ let deserializers = add(deserializers, "?".to_owned());
+ let deserializers = add(deserializers, "?".to_owned()); // 0.7s
+ let deserializers = add(deserializers, "?".to_owned()); // 1.3s
+ let deserializers = add(deserializers, "?".to_owned()); // 2.4s
+ let deserializers = add(deserializers, "?".to_owned()); // 6.7s
+ let deserializers = add(deserializers, "?".to_owned()); // 26.0s
+ let deserializers = add(deserializers, "?".to_owned()); // 114.0s
+ let deserializers = add(deserializers, "?".to_owned()); // 228.0s
+ let deserializers = add(deserializers, "?".to_owned()); // 400.0s
+ let deserializers = add(deserializers, "?".to_owned()); // 800.0s
+ let deserializers = add(deserializers, "?".to_owned()); // 1600.0s
+ let deserializers = add(deserializers, "?".to_owned()); // 3200.0s
+}
diff --git a/tests/ui/issues/issue-41726.rs b/tests/ui/issues/issue-41726.rs
new file mode 100644
index 000000000..39631912c
--- /dev/null
+++ b/tests/ui/issues/issue-41726.rs
@@ -0,0 +1,7 @@
+use std::collections::HashMap;
+fn main() {
+ let things: HashMap<String, Vec<String>> = HashMap::new();
+ for src in things.keys() {
+ things[src.as_str()].sort(); //~ ERROR cannot borrow data in an index of
+ }
+}
diff --git a/tests/ui/issues/issue-41726.stderr b/tests/ui/issues/issue-41726.stderr
new file mode 100644
index 000000000..b05c1fb14
--- /dev/null
+++ b/tests/ui/issues/issue-41726.stderr
@@ -0,0 +1,15 @@
+error[E0596]: cannot borrow data in an index of `HashMap<String, Vec<String>>` as mutable
+ --> $DIR/issue-41726.rs:5:9
+ |
+LL | things[src.as_str()].sort();
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
+ |
+ = help: trait `IndexMut` is required to modify indexed content, but it is not implemented for `HashMap<String, Vec<String>>`
+help: to modify a `HashMap<String, Vec<String>>` use `.get_mut()`
+ |
+LL | things.get_mut(src.as_str()).map(|val| val.sort());
+ | ~~~~~~~~~ ~~~~~~~~~~~~~~~ +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0596`.
diff --git a/tests/ui/issues/issue-41742.rs b/tests/ui/issues/issue-41742.rs
new file mode 100644
index 000000000..afe311b4d
--- /dev/null
+++ b/tests/ui/issues/issue-41742.rs
@@ -0,0 +1,25 @@
+use std::ops::{Index, IndexMut};
+
+struct S;
+struct H;
+
+impl S {
+ fn f(&mut self) {}
+}
+
+impl Index<u32> for H {
+ type Output = S;
+ fn index(&self, index: u32) -> &S {
+ unimplemented!()
+ }
+}
+
+impl IndexMut<u32> for H {
+ fn index_mut(&mut self, index: u32) -> &mut S {
+ unimplemented!()
+ }
+}
+
+fn main() {
+ H["?"].f(); //~ ERROR mismatched types
+}
diff --git a/tests/ui/issues/issue-41742.stderr b/tests/ui/issues/issue-41742.stderr
new file mode 100644
index 000000000..61a0ae5fa
--- /dev/null
+++ b/tests/ui/issues/issue-41742.stderr
@@ -0,0 +1,9 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-41742.rs:24:7
+ |
+LL | H["?"].f();
+ | ^^^ expected `u32`, found `&str`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-41744.rs b/tests/ui/issues/issue-41744.rs
new file mode 100644
index 000000000..dcdd1c21e
--- /dev/null
+++ b/tests/ui/issues/issue-41744.rs
@@ -0,0 +1,7 @@
+// run-pass
+trait Tc {}
+impl Tc for bool {}
+
+fn main() {
+ let _: &[&dyn Tc] = &[&true];
+}
diff --git a/tests/ui/issues/issue-41849-variance-req.rs b/tests/ui/issues/issue-41849-variance-req.rs
new file mode 100644
index 000000000..af081083a
--- /dev/null
+++ b/tests/ui/issues/issue-41849-variance-req.rs
@@ -0,0 +1,35 @@
+// run-pass
+#![allow(dead_code)]
+// Regression test for #41849.
+
+use std::ops::Mul;
+
+const C: usize = 1;
+const CAPACITY: usize = 1 * C;
+
+struct A<X> {
+ f: [X; CAPACITY],
+}
+
+struct B<T> {
+ f: T,
+}
+
+impl<T> Mul for B<T> {
+ type Output = Self;
+ fn mul(self, _rhs: B<T>) -> Self::Output {
+ self
+ }
+}
+
+impl<T> Mul<usize> for B<T> {
+ type Output = Self;
+ fn mul(self, _rhs: usize) -> Self::Output {
+ self
+ }
+}
+
+fn main() {
+ let a = A { f: [1] };
+ let _ = B { f: a };
+}
diff --git a/tests/ui/issues/issue-41880.rs b/tests/ui/issues/issue-41880.rs
new file mode 100644
index 000000000..977c43b71
--- /dev/null
+++ b/tests/ui/issues/issue-41880.rs
@@ -0,0 +1,29 @@
+fn iterate<T, F>(initial: T, f: F) -> Iterate<T, F> {
+ Iterate {
+ state: initial,
+ f: f,
+ }
+}
+
+pub struct Iterate<T, F> {
+ state: T,
+ f: F
+}
+
+impl<T: Clone, F> Iterator for Iterate<T, F> where F: Fn(&T) -> T {
+ type Item = T;
+
+ #[inline]
+ fn next(&mut self) -> Option<Self::Item> {
+ self.state = (self.f)(&self.state);
+ Some(self.state.clone())
+ }
+ #[inline]
+ fn size_hint(&self) -> (usize, Option<usize>) { (usize::MAX, None) }
+}
+
+fn main() {
+ let a = iterate(0, |x| x+1);
+ println!("{:?}", a.iter().take(10).collect::<Vec<usize>>());
+ //~^ ERROR no method named `iter` found
+}
diff --git a/tests/ui/issues/issue-41880.stderr b/tests/ui/issues/issue-41880.stderr
new file mode 100644
index 000000000..00c375f8d
--- /dev/null
+++ b/tests/ui/issues/issue-41880.stderr
@@ -0,0 +1,12 @@
+error[E0599]: no method named `iter` found for struct `Iterate` in the current scope
+ --> $DIR/issue-41880.rs:27:24
+ |
+LL | pub struct Iterate<T, F> {
+ | ------------------------ method `iter` not found for this struct
+...
+LL | println!("{:?}", a.iter().take(10).collect::<Vec<usize>>());
+ | ^^^^ method not found in `Iterate<{integer}, [closure@issue-41880.rs:26:24]>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-41888.rs b/tests/ui/issues/issue-41888.rs
new file mode 100644
index 000000000..32df520f2
--- /dev/null
+++ b/tests/ui/issues/issue-41888.rs
@@ -0,0 +1,34 @@
+// run-pass
+fn main() { let _ = g(Some(E::F(K))); }
+
+type R = Result<(), ()>;
+struct K;
+
+enum E {
+ F(K), // must not be built-in type
+ #[allow(dead_code)]
+ G(Box<E>, Box<E>),
+}
+
+fn translate(x: R) -> R { x }
+
+fn g(mut status: Option<E>) -> R {
+ loop {
+ match status {
+ Some(infix_or_postfix) => match infix_or_postfix {
+ E::F(_op) => { // <- must be captured by value
+ match Ok(()) {
+ Err(err) => return Err(err),
+ Ok(_) => {},
+ };
+ }
+ _ => (),
+ },
+ _ => match translate(Err(())) {
+ Err(err) => return Err(err),
+ Ok(_) => {},
+ }
+ }
+ status = None;
+ }
+}
diff --git a/tests/ui/issues/issue-41936-variance-coerce-unsized-cycle.rs b/tests/ui/issues/issue-41936-variance-coerce-unsized-cycle.rs
new file mode 100644
index 000000000..3d678ba04
--- /dev/null
+++ b/tests/ui/issues/issue-41936-variance-coerce-unsized-cycle.rs
@@ -0,0 +1,30 @@
+// check-pass
+#![allow(dead_code)]
+// Regression test for #41936. The coerce-unsized trait check in
+// coherence was using subtyping, which triggered variance
+// computation, which failed because it required type info for fields
+// that had not (yet) been computed.
+
+#![feature(unsize)]
+#![feature(coerce_unsized)]
+
+use std::{marker,ops};
+
+// Change the array to a non-array, and error disappears
+// Adding a new field to the end keeps the error
+struct LogDataBuf([u8;8]);
+
+struct Aref<T: ?Sized>
+{
+ // Inner structure triggers the error, removing the inner removes the message.
+ ptr: Box<ArefInner<T>>,
+}
+impl<T: ?Sized + marker::Unsize<U>, U: ?Sized> ops::CoerceUnsized<Aref<U>> for Aref<T> {}
+
+struct ArefInner<T: ?Sized>
+{
+ // Even with this field commented out, the error is raised.
+ data: T,
+}
+
+fn main(){}
diff --git a/tests/ui/issues/issue-41974.rs b/tests/ui/issues/issue-41974.rs
new file mode 100644
index 000000000..10c363479
--- /dev/null
+++ b/tests/ui/issues/issue-41974.rs
@@ -0,0 +1,14 @@
+#[derive(Copy, Clone)]
+struct Flags;
+
+trait A {
+}
+
+impl<T> Drop for T where T: A {
+ //~^ ERROR E0120
+ //~| ERROR E0210
+ fn drop(&mut self) {
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-41974.stderr b/tests/ui/issues/issue-41974.stderr
new file mode 100644
index 000000000..e249db9df
--- /dev/null
+++ b/tests/ui/issues/issue-41974.stderr
@@ -0,0 +1,19 @@
+error[E0210]: type parameter `T` must be used as the type parameter for some local type (e.g., `MyStruct<T>`)
+ --> $DIR/issue-41974.rs:7:6
+ |
+LL | impl<T> Drop for T where T: A {
+ | ^ type parameter `T` must be used as the type parameter for some local type
+ |
+ = note: implementing a foreign trait is only possible if at least one of the types for which it is implemented is local
+ = note: only traits defined in the current crate can be implemented for a type parameter
+
+error[E0120]: the `Drop` trait may only be implemented for local structs, enums, and unions
+ --> $DIR/issue-41974.rs:7:18
+ |
+LL | impl<T> Drop for T where T: A {
+ | ^ must be a struct, enum, or union in the current crate
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0120, E0210.
+For more information about an error, try `rustc --explain E0120`.
diff --git a/tests/ui/issues/issue-41998.rs b/tests/ui/issues/issue-41998.rs
new file mode 100644
index 000000000..7696a3108
--- /dev/null
+++ b/tests/ui/issues/issue-41998.rs
@@ -0,0 +1,10 @@
+// check-pass
+
+
+fn main() {
+ if ('x' as char) < ('y' as char) {
+ print!("x");
+ } else {
+ print!("y");
+ }
+}
diff --git a/tests/ui/issues/issue-42007.rs b/tests/ui/issues/issue-42007.rs
new file mode 100644
index 000000000..a477e476e
--- /dev/null
+++ b/tests/ui/issues/issue-42007.rs
@@ -0,0 +1,11 @@
+// run-pass
+#![allow(dead_code)]
+// aux-build:issue-42007-s.rs
+
+extern crate issue_42007_s;
+
+enum I {
+ E(issue_42007_s::E),
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-4208.rs b/tests/ui/issues/issue-4208.rs
new file mode 100644
index 000000000..3b01811a9
--- /dev/null
+++ b/tests/ui/issues/issue-4208.rs
@@ -0,0 +1,12 @@
+// run-pass
+#![allow(dead_code)]
+// aux-build:issue-4208-cc.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate numeric;
+use numeric::{sin, Angle};
+
+fn foo<T, A:Angle<T>>(theta: A) -> T { sin(&theta) }
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-42106.rs b/tests/ui/issues/issue-42106.rs
new file mode 100644
index 000000000..5e688693b
--- /dev/null
+++ b/tests/ui/issues/issue-42106.rs
@@ -0,0 +1,10 @@
+fn do_something<T>(collection: &mut Vec<T>) {
+ let _a = &collection;
+ collection.swap(1, 2); //~ ERROR also borrowed as immutable
+ _a.use_ref();
+}
+
+fn main() { }
+
+trait Fake { fn use_mut(&mut self) { } fn use_ref(&self) { } }
+impl<T> Fake for T { }
diff --git a/tests/ui/issues/issue-42106.stderr b/tests/ui/issues/issue-42106.stderr
new file mode 100644
index 000000000..73cf8652f
--- /dev/null
+++ b/tests/ui/issues/issue-42106.stderr
@@ -0,0 +1,13 @@
+error[E0502]: cannot borrow `*collection` as mutable because it is also borrowed as immutable
+ --> $DIR/issue-42106.rs:3:5
+ |
+LL | let _a = &collection;
+ | ----------- immutable borrow occurs here
+LL | collection.swap(1, 2);
+ | ^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
+LL | _a.use_ref();
+ | ------------ immutable borrow later used here
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0502`.
diff --git a/tests/ui/issues/issue-42148.rs b/tests/ui/issues/issue-42148.rs
new file mode 100644
index 000000000..cb8c0d6ed
--- /dev/null
+++ b/tests/ui/issues/issue-42148.rs
@@ -0,0 +1,6 @@
+// run-pass
+struct Zst;
+
+fn main() {
+ unsafe { ::std::ptr::write_volatile(1 as *mut Zst, Zst) }
+}
diff --git a/tests/ui/issues/issue-42210.rs b/tests/ui/issues/issue-42210.rs
new file mode 100644
index 000000000..01a5d5636
--- /dev/null
+++ b/tests/ui/issues/issue-42210.rs
@@ -0,0 +1,21 @@
+// run-pass
+// Regression test for #42210.
+
+// compile-flags: -g
+// ignore-asmjs wasm2js does not support source maps yet
+
+trait Foo {
+ fn foo() { }
+}
+
+struct Bar;
+
+trait Baz {
+}
+
+impl Foo for (Bar, dyn Baz) { }
+
+
+fn main() {
+ <(Bar, dyn Baz) as Foo>::foo()
+}
diff --git a/tests/ui/issues/issue-4228.rs b/tests/ui/issues/issue-4228.rs
new file mode 100644
index 000000000..491000b65
--- /dev/null
+++ b/tests/ui/issues/issue-4228.rs
@@ -0,0 +1,16 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+struct Foo;
+
+impl Foo {
+ fn first() {}
+}
+impl Foo {
+ fn second() {}
+}
+
+pub fn main() {
+ Foo::first();
+ Foo::second();
+}
diff --git a/tests/ui/issues/issue-42312.rs b/tests/ui/issues/issue-42312.rs
new file mode 100644
index 000000000..426efcbf9
--- /dev/null
+++ b/tests/ui/issues/issue-42312.rs
@@ -0,0 +1,11 @@
+use std::ops::Deref;
+
+pub trait Foo {
+ fn baz(_: Self::Target) where Self: Deref {}
+ //~^ ERROR the size for values of type
+}
+
+pub fn f(_: dyn ToString) {}
+//~^ ERROR the size for values of type
+
+fn main() { }
diff --git a/tests/ui/issues/issue-42312.stderr b/tests/ui/issues/issue-42312.stderr
new file mode 100644
index 000000000..3ca6a2957
--- /dev/null
+++ b/tests/ui/issues/issue-42312.stderr
@@ -0,0 +1,37 @@
+error[E0277]: the size for values of type `<Self as Deref>::Target` cannot be known at compilation time
+ --> $DIR/issue-42312.rs:4:12
+ |
+LL | fn baz(_: Self::Target) where Self: Deref {}
+ | ^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `<Self as Deref>::Target`
+ = help: unsized fn params are gated as an unstable feature
+help: consider further restricting the associated type
+ |
+LL | fn baz(_: Self::Target) where Self: Deref, <Self as Deref>::Target: Sized {}
+ | ++++++++++++++++++++++++++++++++
+help: function arguments must have a statically known size, borrowed types always have a known size
+ |
+LL | fn baz(_: &Self::Target) where Self: Deref {}
+ | +
+
+error[E0277]: the size for values of type `(dyn ToString + 'static)` cannot be known at compilation time
+ --> $DIR/issue-42312.rs:8:10
+ |
+LL | pub fn f(_: dyn ToString) {}
+ | ^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `(dyn ToString + 'static)`
+ = help: unsized fn params are gated as an unstable feature
+help: you can use `impl Trait` as the argument type
+ |
+LL | pub fn f(_: impl ToString) {}
+ | ~~~~
+help: function arguments must have a statically known size, borrowed types always have a known size
+ |
+LL | pub fn f(_: &dyn ToString) {}
+ | +
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-42453.rs b/tests/ui/issues/issue-42453.rs
new file mode 100644
index 000000000..92fefceab
--- /dev/null
+++ b/tests/ui/issues/issue-42453.rs
@@ -0,0 +1,10 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(non_camel_case_types)]
+
+#[derive(Debug)]
+struct builder;
+
+fn main() {
+
+}
diff --git a/tests/ui/issues/issue-42467.rs b/tests/ui/issues/issue-42467.rs
new file mode 100644
index 000000000..afa1bcd13
--- /dev/null
+++ b/tests/ui/issues/issue-42467.rs
@@ -0,0 +1,24 @@
+// check-pass
+#![allow(dead_code)]
+struct Foo<T>(T);
+
+struct IntoIter<T>(T);
+
+impl<'a, T: 'a> Iterator for IntoIter<T> {
+ type Item = ();
+
+ fn next(&mut self) -> Option<()> {
+ None
+ }
+}
+
+impl<T> IntoIterator for Foo<T> {
+ type Item = ();
+ type IntoIter = IntoIter<T>;
+
+ fn into_iter(self) -> IntoIter<T> {
+ IntoIter(self.0)
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-4252.rs b/tests/ui/issues/issue-4252.rs
new file mode 100644
index 000000000..0d47a7f0c
--- /dev/null
+++ b/tests/ui/issues/issue-4252.rs
@@ -0,0 +1,33 @@
+// run-pass
+trait X {
+ fn call<T: std::fmt::Debug>(&self, x: &T);
+ fn default_method<T: std::fmt::Debug>(&self, x: &T) {
+ println!("X::default_method {:?}", x);
+ }
+}
+
+#[derive(Debug)]
+struct Y(#[allow(unused_tuple_struct_fields)] isize);
+
+#[derive(Debug)]
+struct Z<T: X+std::fmt::Debug> {
+ x: T
+}
+
+impl X for Y {
+ fn call<T: std::fmt::Debug>(&self, x: &T) {
+ println!("X::call {:?} {:?}", self, x);
+ }
+}
+
+impl<T: X + std::fmt::Debug> Drop for Z<T> {
+ fn drop(&mut self) {
+ // These statements used to cause an ICE.
+ self.x.call(self);
+ self.x.default_method(self);
+ }
+}
+
+pub fn main() {
+ let _z = Z {x: Y(42)};
+}
diff --git a/tests/ui/issues/issue-42552.rs b/tests/ui/issues/issue-42552.rs
new file mode 100644
index 000000000..50d28a2f0
--- /dev/null
+++ b/tests/ui/issues/issue-42552.rs
@@ -0,0 +1,31 @@
+// run-pass
+// Regression test for an obscure issue with the projection cache.
+
+fn into_iter<I: Iterator>(a: &I) -> Groups<I> {
+ Groups { _a: a }
+}
+
+pub struct Groups<'a, I: 'a> {
+ _a: &'a I,
+}
+
+impl<'a, I: Iterator> Iterator for Groups<'a, I> {
+ type Item = Group<'a, I>;
+ fn next(&mut self) -> Option<Self::Item> {
+ None
+ }
+}
+
+pub struct Group<'a, I: Iterator + 'a>
+ where I::Item: 'a // <-- needed to trigger ICE!
+{
+ _phantom: &'a (),
+ _ice_trigger: I::Item, // <-- needed to trigger ICE!
+}
+
+
+fn main() {
+ let _ = into_iter(&[0].iter().map(|_| 0)).map(|grp| {
+ let _g = grp;
+ });
+}
diff --git a/tests/ui/issues/issue-4265.rs b/tests/ui/issues/issue-4265.rs
new file mode 100644
index 000000000..2596079d3
--- /dev/null
+++ b/tests/ui/issues/issue-4265.rs
@@ -0,0 +1,14 @@
+struct Foo {
+ baz: usize
+}
+
+impl Foo {
+ fn bar() {
+ Foo { baz: 0 }.bar();
+ }
+
+ fn bar() { //~ ERROR duplicate definitions
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-4265.stderr b/tests/ui/issues/issue-4265.stderr
new file mode 100644
index 000000000..8c7303f3c
--- /dev/null
+++ b/tests/ui/issues/issue-4265.stderr
@@ -0,0 +1,12 @@
+error[E0592]: duplicate definitions with name `bar`
+ --> $DIR/issue-4265.rs:10:5
+ |
+LL | fn bar() {
+ | -------- other definition for `bar`
+...
+LL | fn bar() {
+ | ^^^^^^^^ duplicate definitions for `bar`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0592`.
diff --git a/tests/ui/issues/issue-42755.rs b/tests/ui/issues/issue-42755.rs
new file mode 100644
index 000000000..65796fc24
--- /dev/null
+++ b/tests/ui/issues/issue-42755.rs
@@ -0,0 +1,7 @@
+macro_rules! foo {
+ ($($p:vis)*) => {} //~ ERROR repetition matches empty token tree
+}
+
+foo!(a);
+
+fn main() {}
diff --git a/tests/ui/issues/issue-42755.stderr b/tests/ui/issues/issue-42755.stderr
new file mode 100644
index 000000000..12047e22f
--- /dev/null
+++ b/tests/ui/issues/issue-42755.stderr
@@ -0,0 +1,8 @@
+error: repetition matches empty token tree
+ --> $DIR/issue-42755.rs:2:7
+ |
+LL | ($($p:vis)*) => {}
+ | ^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-42796.rs b/tests/ui/issues/issue-42796.rs
new file mode 100644
index 000000000..5e83a1cd6
--- /dev/null
+++ b/tests/ui/issues/issue-42796.rs
@@ -0,0 +1,19 @@
+pub trait Mirror<Smoke> {
+ type Image;
+}
+
+impl<T, Smoke> Mirror<Smoke> for T {
+ type Image = T;
+}
+
+pub fn poison<S>(victim: String) where <String as Mirror<S>>::Image: Copy {
+ loop { drop(victim); }
+}
+
+fn main() {
+ let s = "Hello!".to_owned();
+ let mut s_copy = s;
+ s_copy.push_str("World!");
+ "0wned!".to_owned();
+ println!("{}", s); //~ ERROR borrow of moved value
+}
diff --git a/tests/ui/issues/issue-42796.stderr b/tests/ui/issues/issue-42796.stderr
new file mode 100644
index 000000000..f2971df5d
--- /dev/null
+++ b/tests/ui/issues/issue-42796.stderr
@@ -0,0 +1,20 @@
+error[E0382]: borrow of moved value: `s`
+ --> $DIR/issue-42796.rs:18:20
+ |
+LL | let s = "Hello!".to_owned();
+ | - move occurs because `s` has type `String`, which does not implement the `Copy` trait
+LL | let mut s_copy = s;
+ | - value moved here
+...
+LL | println!("{}", s);
+ | ^ value borrowed here after move
+ |
+ = note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: consider cloning the value if the performance cost is acceptable
+ |
+LL | let mut s_copy = s.clone();
+ | ++++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0382`.
diff --git a/tests/ui/issues/issue-42880.rs b/tests/ui/issues/issue-42880.rs
new file mode 100644
index 000000000..b61ba80e2
--- /dev/null
+++ b/tests/ui/issues/issue-42880.rs
@@ -0,0 +1,8 @@
+type Value = String;
+
+fn main() {
+ let f = |&Value::String(_)| (); //~ ERROR no associated item named
+
+ let vec: Vec<Value> = Vec::new();
+ vec.last().map(f);
+}
diff --git a/tests/ui/issues/issue-42880.stderr b/tests/ui/issues/issue-42880.stderr
new file mode 100644
index 000000000..bec14429d
--- /dev/null
+++ b/tests/ui/issues/issue-42880.stderr
@@ -0,0 +1,9 @@
+error[E0599]: no associated item named `String` found for struct `String` in the current scope
+ --> $DIR/issue-42880.rs:4:22
+ |
+LL | let f = |&Value::String(_)| ();
+ | ^^^^^^ associated item not found in `String`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-42956.rs b/tests/ui/issues/issue-42956.rs
new file mode 100644
index 000000000..e6b3f9ffa
--- /dev/null
+++ b/tests/ui/issues/issue-42956.rs
@@ -0,0 +1,26 @@
+// check-pass
+#![allow(dead_code)]
+#![allow(stable_features)]
+#![feature(associated_consts)]
+
+impl A for i32 {
+ type Foo = u32;
+}
+impl B for u32 {
+ const BAR: i32 = 0;
+}
+
+trait A {
+ type Foo: B;
+}
+
+trait B {
+ const BAR: i32;
+}
+
+fn generic<T: A>() {
+ // This panics if the universal function call syntax is used as well
+ println!("{}", T::Foo::BAR);
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-43057.rs b/tests/ui/issues/issue-43057.rs
new file mode 100644
index 000000000..4ce52af43
--- /dev/null
+++ b/tests/ui/issues/issue-43057.rs
@@ -0,0 +1,14 @@
+// check-pass
+#![allow(unused)]
+
+macro_rules! column {
+ ($i:ident) => {
+ $i
+ };
+}
+
+fn foo() -> ! {
+ panic!();
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-43162.rs b/tests/ui/issues/issue-43162.rs
new file mode 100644
index 000000000..782eb4229
--- /dev/null
+++ b/tests/ui/issues/issue-43162.rs
@@ -0,0 +1,8 @@
+fn foo() -> bool {
+ //~^ ERROR E0308
+ break true; //~ ERROR E0268
+}
+
+fn main() {
+ break {}; //~ ERROR E0268
+}
diff --git a/tests/ui/issues/issue-43162.stderr b/tests/ui/issues/issue-43162.stderr
new file mode 100644
index 000000000..40d920005
--- /dev/null
+++ b/tests/ui/issues/issue-43162.stderr
@@ -0,0 +1,24 @@
+error[E0268]: `break` outside of a loop or labeled block
+ --> $DIR/issue-43162.rs:3:5
+ |
+LL | break true;
+ | ^^^^^^^^^^ cannot `break` outside of a loop or labeled block
+
+error[E0268]: `break` outside of a loop or labeled block
+ --> $DIR/issue-43162.rs:7:5
+ |
+LL | break {};
+ | ^^^^^^^^ cannot `break` outside of a loop or labeled block
+
+error[E0308]: mismatched types
+ --> $DIR/issue-43162.rs:1:13
+ |
+LL | fn foo() -> bool {
+ | --- ^^^^ expected `bool`, found `()`
+ | |
+ | implicitly returns `()` as its body has no tail or `return` expression
+
+error: aborting due to 3 previous errors
+
+Some errors have detailed explanations: E0268, E0308.
+For more information about an error, try `rustc --explain E0268`.
diff --git a/tests/ui/issues/issue-43205.rs b/tests/ui/issues/issue-43205.rs
new file mode 100644
index 000000000..f47d5a347
--- /dev/null
+++ b/tests/ui/issues/issue-43205.rs
@@ -0,0 +1,5 @@
+// run-pass
+fn main() {
+ let _ = &&[()][0];
+ println!("{:?}", &[(),()][1]);
+}
diff --git a/tests/ui/issues/issue-43250.rs b/tests/ui/issues/issue-43250.rs
new file mode 100644
index 000000000..24d70d296
--- /dev/null
+++ b/tests/ui/issues/issue-43250.rs
@@ -0,0 +1,13 @@
+fn main() {
+ let mut y;
+ const C: u32 = 0;
+ macro_rules! m {
+ ($a:expr) => {
+ let $a = 0;
+ }
+ }
+ m!(y);
+ //~^ ERROR arbitrary expressions aren't allowed in patterns
+ m!(C);
+ //~^ ERROR arbitrary expressions aren't allowed in patterns
+}
diff --git a/tests/ui/issues/issue-43250.stderr b/tests/ui/issues/issue-43250.stderr
new file mode 100644
index 000000000..f729c5cf1
--- /dev/null
+++ b/tests/ui/issues/issue-43250.stderr
@@ -0,0 +1,14 @@
+error: arbitrary expressions aren't allowed in patterns
+ --> $DIR/issue-43250.rs:9:8
+ |
+LL | m!(y);
+ | ^
+
+error: arbitrary expressions aren't allowed in patterns
+ --> $DIR/issue-43250.rs:11:8
+ |
+LL | m!(C);
+ | ^
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/issues/issue-43291.rs b/tests/ui/issues/issue-43291.rs
new file mode 100644
index 000000000..52b629e35
--- /dev/null
+++ b/tests/ui/issues/issue-43291.rs
@@ -0,0 +1,9 @@
+// run-pass
+pub fn main() {
+ assert_eq!(!0usize as *const (), foo(0, 1));
+ assert_eq!(!0usize as *const (), (0i8 - 1) as *const ());
+}
+
+pub fn foo(a: i8, b: i8) -> *const () {
+ (a - b) as *const ()
+}
diff --git a/tests/ui/issues/issue-4333.rs b/tests/ui/issues/issue-4333.rs
new file mode 100644
index 000000000..3df319b68
--- /dev/null
+++ b/tests/ui/issues/issue-4333.rs
@@ -0,0 +1,10 @@
+// run-pass
+#![allow(unused_must_use)]
+// pretty-expanded FIXME #23616
+
+use std::io;
+
+pub fn main() {
+ let stdout = &mut io::stdout() as &mut dyn io::Write;
+ stdout.write(b"Hello!");
+}
diff --git a/tests/ui/issues/issue-4335.rs b/tests/ui/issues/issue-4335.rs
new file mode 100644
index 000000000..c5914a17c
--- /dev/null
+++ b/tests/ui/issues/issue-4335.rs
@@ -0,0 +1,13 @@
+#![feature(fn_traits)]
+
+fn id<T>(t: T) -> T { t }
+
+fn f<'r, T>(v: &'r T) -> Box<dyn FnMut() -> T + 'r> {
+ id(Box::new(|| *v))
+ //~^ ERROR E0507
+}
+
+fn main() {
+ let v = &5;
+ println!("{}", f(v).call_mut(()));
+}
diff --git a/tests/ui/issues/issue-4335.stderr b/tests/ui/issues/issue-4335.stderr
new file mode 100644
index 000000000..ecc1fa523
--- /dev/null
+++ b/tests/ui/issues/issue-4335.stderr
@@ -0,0 +1,13 @@
+error[E0507]: cannot move out of `*v`, as `v` is a captured variable in an `FnMut` closure
+ --> $DIR/issue-4335.rs:6:20
+ |
+LL | fn f<'r, T>(v: &'r T) -> Box<dyn FnMut() -> T + 'r> {
+ | - captured outer variable
+LL | id(Box::new(|| *v))
+ | -- ^^ move occurs because `*v` has type `T`, which does not implement the `Copy` trait
+ | |
+ | captured by this `FnMut` closure
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0507`.
diff --git a/tests/ui/issues/issue-43355.rs b/tests/ui/issues/issue-43355.rs
new file mode 100644
index 000000000..bf819af79
--- /dev/null
+++ b/tests/ui/issues/issue-43355.rs
@@ -0,0 +1,19 @@
+pub trait Trait1<X> {
+ type Output;
+}
+
+pub trait Trait2<X> {}
+
+pub struct A;
+
+impl<X, T> Trait1<X> for T where T: Trait2<X> {
+ type Output = ();
+}
+
+impl<X> Trait1<Box<X>> for A {
+//~^ ERROR conflicting implementations of trait
+//~| downstream crates may implement trait `Trait2<std::boxed::Box<_>>` for type `A`
+ type Output = i32;
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-43355.stderr b/tests/ui/issues/issue-43355.stderr
new file mode 100644
index 000000000..57adc8ad5
--- /dev/null
+++ b/tests/ui/issues/issue-43355.stderr
@@ -0,0 +1,14 @@
+error[E0119]: conflicting implementations of trait `Trait1<Box<_>>` for type `A`
+ --> $DIR/issue-43355.rs:13:1
+ |
+LL | impl<X, T> Trait1<X> for T where T: Trait2<X> {
+ | -------------------------- first implementation here
+...
+LL | impl<X> Trait1<Box<X>> for A {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `A`
+ |
+ = note: downstream crates may implement trait `Trait2<std::boxed::Box<_>>` for type `A`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/tests/ui/issues/issue-43357.rs b/tests/ui/issues/issue-43357.rs
new file mode 100644
index 000000000..474c97655
--- /dev/null
+++ b/tests/ui/issues/issue-43357.rs
@@ -0,0 +1,11 @@
+// check-pass
+#![allow(dead_code)]
+trait Trait {
+ type Output;
+}
+
+fn f<T: Trait>() {
+ std::mem::size_of::<T::Output>();
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-43420-no-over-suggest.rs b/tests/ui/issues/issue-43420-no-over-suggest.rs
new file mode 100644
index 000000000..4365bff5a
--- /dev/null
+++ b/tests/ui/issues/issue-43420-no-over-suggest.rs
@@ -0,0 +1,9 @@
+// check that we substitute type parameters before we suggest anything - otherwise
+// we would suggest function such as `as_slice` for the `&[u16]`.
+
+fn foo(b: &[u16]) {}
+
+fn main() {
+ let a: Vec<u8> = Vec::new();
+ foo(&a); //~ ERROR mismatched types
+}
diff --git a/tests/ui/issues/issue-43420-no-over-suggest.stderr b/tests/ui/issues/issue-43420-no-over-suggest.stderr
new file mode 100644
index 000000000..58fd1121a
--- /dev/null
+++ b/tests/ui/issues/issue-43420-no-over-suggest.stderr
@@ -0,0 +1,19 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-43420-no-over-suggest.rs:8:9
+ |
+LL | foo(&a);
+ | --- ^^ expected slice `[u16]`, found struct `Vec`
+ | |
+ | arguments to this function are incorrect
+ |
+ = note: expected reference `&[u16]`
+ found reference `&Vec<u8>`
+note: function defined here
+ --> $DIR/issue-43420-no-over-suggest.rs:4:4
+ |
+LL | fn foo(b: &[u16]) {}
+ | ^^^ ---------
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-43424.rs b/tests/ui/issues/issue-43424.rs
new file mode 100644
index 000000000..b3f76d8b0
--- /dev/null
+++ b/tests/ui/issues/issue-43424.rs
@@ -0,0 +1,12 @@
+#![allow(unused)]
+
+macro_rules! m {
+ ($attr_path: path) => {
+ #[$attr_path]
+ fn f() {}
+ }
+}
+
+m!(inline<u8>); //~ ERROR: unexpected generic arguments in path
+
+fn main() {}
diff --git a/tests/ui/issues/issue-43424.stderr b/tests/ui/issues/issue-43424.stderr
new file mode 100644
index 000000000..8f59d7cc3
--- /dev/null
+++ b/tests/ui/issues/issue-43424.stderr
@@ -0,0 +1,8 @@
+error: unexpected generic arguments in path
+ --> $DIR/issue-43424.rs:10:10
+ |
+LL | m!(inline<u8>);
+ | ^^^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-43431.rs b/tests/ui/issues/issue-43431.rs
new file mode 100644
index 000000000..e7ec35105
--- /dev/null
+++ b/tests/ui/issues/issue-43431.rs
@@ -0,0 +1,14 @@
+#![feature(fn_traits)]
+
+trait CallSingle<A, B> {
+ fn call(&self, a: A) -> B where Self: Sized, Self: Fn(A) -> B;
+}
+
+impl<A, B, F: Fn(A) -> B> CallSingle<A, B> for F {
+ fn call(&self, a: A) -> B {
+ <Self as Fn(A) -> B>::call(self, (a,))
+ //~^ ERROR associated type bindings are not allowed here
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-43431.stderr b/tests/ui/issues/issue-43431.stderr
new file mode 100644
index 000000000..4edb52869
--- /dev/null
+++ b/tests/ui/issues/issue-43431.stderr
@@ -0,0 +1,9 @@
+error[E0229]: associated type bindings are not allowed here
+ --> $DIR/issue-43431.rs:9:27
+ |
+LL | <Self as Fn(A) -> B>::call(self, (a,))
+ | ^ associated type not allowed here
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0229`.
diff --git a/tests/ui/issues/issue-43483.rs b/tests/ui/issues/issue-43483.rs
new file mode 100644
index 000000000..76dd1c2eb
--- /dev/null
+++ b/tests/ui/issues/issue-43483.rs
@@ -0,0 +1,16 @@
+// check-pass
+#![allow(dead_code)]
+#![allow(unused_variables)]
+trait VecN {
+ const DIM: usize;
+}
+
+trait Mat {
+ type Row: VecN;
+}
+
+fn m<M: Mat>() {
+ let x = M::Row::DIM;
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-43692.rs b/tests/ui/issues/issue-43692.rs
new file mode 100644
index 000000000..a9999c226
--- /dev/null
+++ b/tests/ui/issues/issue-43692.rs
@@ -0,0 +1,5 @@
+// run-pass
+fn main() {
+ assert_eq!('\u{10__FFFF}', '\u{10FFFF}');
+ assert_eq!("\u{10_F0FF__}foo\u{1_0_0_0__}", "\u{10F0FF}foo\u{1000}");
+}
diff --git a/tests/ui/issues/issue-43806.rs b/tests/ui/issues/issue-43806.rs
new file mode 100644
index 000000000..8c8cccfb2
--- /dev/null
+++ b/tests/ui/issues/issue-43806.rs
@@ -0,0 +1,23 @@
+// check-pass
+
+#![deny(unused_results)]
+
+enum Void {}
+
+fn foo() {}
+
+fn bar() -> ! {
+ loop {}
+}
+
+fn baz() -> Void {
+ loop {}
+}
+
+fn qux() {
+ foo();
+ bar();
+ baz();
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-43853.rs b/tests/ui/issues/issue-43853.rs
new file mode 100644
index 000000000..dd42c1e3c
--- /dev/null
+++ b/tests/ui/issues/issue-43853.rs
@@ -0,0 +1,17 @@
+// run-pass
+// needs-unwind
+
+use std::panic;
+
+fn test() {
+ wait(|| panic!());
+}
+
+fn wait<T, F: FnOnce() -> T>(f: F) -> F::Output {
+ From::from(f())
+}
+
+fn main() {
+ let result = panic::catch_unwind(move || test());
+ assert!(result.is_err());
+}
diff --git a/tests/ui/issues/issue-4387.rs b/tests/ui/issues/issue-4387.rs
new file mode 100644
index 000000000..84592f16a
--- /dev/null
+++ b/tests/ui/issues/issue-4387.rs
@@ -0,0 +1,6 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+pub fn main() {
+ let _foo = [0; 2*4];
+}
diff --git a/tests/ui/issues/issue-43910.rs b/tests/ui/issues/issue-43910.rs
new file mode 100644
index 000000000..d8c877329
--- /dev/null
+++ b/tests/ui/issues/issue-43910.rs
@@ -0,0 +1,7 @@
+// run-pass
+#![deny(unused_variables)]
+
+fn main() {
+ #[allow(unused_variables)]
+ let x = 12;
+}
diff --git a/tests/ui/issues/issue-43923.rs b/tests/ui/issues/issue-43923.rs
new file mode 100644
index 000000000..ad35a6685
--- /dev/null
+++ b/tests/ui/issues/issue-43923.rs
@@ -0,0 +1,12 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(unused_variables)]
+struct A<T: ?Sized> { ptr: T }
+
+fn foo<T>(x: &A<[T]>) {}
+
+fn main() {
+ let a = foo;
+ let b = A { ptr: [a, a, a] };
+ a(&A { ptr: [()] });
+}
diff --git a/tests/ui/issues/issue-43925.rs b/tests/ui/issues/issue-43925.rs
new file mode 100644
index 000000000..1a2108871
--- /dev/null
+++ b/tests/ui/issues/issue-43925.rs
@@ -0,0 +1,4 @@
+#[link(name = "foo", cfg("rlib"))] //~ ERROR link cfg must have a single predicate argument
+extern "C" {}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-43925.stderr b/tests/ui/issues/issue-43925.stderr
new file mode 100644
index 000000000..b0ad25063
--- /dev/null
+++ b/tests/ui/issues/issue-43925.stderr
@@ -0,0 +1,8 @@
+error: link cfg must have a single predicate argument
+ --> $DIR/issue-43925.rs:1:22
+ |
+LL | #[link(name = "foo", cfg("rlib"))]
+ | ^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-43926.rs b/tests/ui/issues/issue-43926.rs
new file mode 100644
index 000000000..6d3003552
--- /dev/null
+++ b/tests/ui/issues/issue-43926.rs
@@ -0,0 +1,4 @@
+#[link(name = "foo", cfg())] //~ ERROR link cfg must have a single predicate argument
+extern "C" {}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-43926.stderr b/tests/ui/issues/issue-43926.stderr
new file mode 100644
index 000000000..f67f91a6b
--- /dev/null
+++ b/tests/ui/issues/issue-43926.stderr
@@ -0,0 +1,8 @@
+error: link cfg must have a single predicate argument
+ --> $DIR/issue-43926.rs:1:22
+ |
+LL | #[link(name = "foo", cfg())]
+ | ^^^^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-43988.rs b/tests/ui/issues/issue-43988.rs
new file mode 100644
index 000000000..b114e8e03
--- /dev/null
+++ b/tests/ui/issues/issue-43988.rs
@@ -0,0 +1,36 @@
+#![feature(stmt_expr_attributes)]
+
+fn main() {
+
+ #[inline]
+ let _a = 4;
+ //~^^ ERROR attribute should be applied to function or closure
+
+
+ #[inline(XYZ)]
+ let _b = 4;
+ //~^^ ERROR attribute should be applied to function or closure
+
+ #[repr(nothing)]
+ let _x = 0;
+ //~^^ ERROR E0552
+
+ #[repr(something_not_real)]
+ loop {
+ ()
+ };
+ //~^^^^ ERROR E0552
+
+ #[repr]
+ let _y = "123";
+ //~^^ ERROR malformed `repr` attribute
+
+ fn foo() {}
+
+ #[inline(ABC)]
+ foo();
+ //~^^ ERROR attribute should be applied to function or closure
+
+ let _z = #[repr] 1;
+ //~^ ERROR malformed `repr` attribute
+}
diff --git a/tests/ui/issues/issue-43988.stderr b/tests/ui/issues/issue-43988.stderr
new file mode 100644
index 000000000..02c5dd5bf
--- /dev/null
+++ b/tests/ui/issues/issue-43988.stderr
@@ -0,0 +1,56 @@
+error: malformed `repr` attribute input
+ --> $DIR/issue-43988.rs:24:5
+ |
+LL | #[repr]
+ | ^^^^^^^ help: must be of the form: `#[repr(C)]`
+
+error: malformed `repr` attribute input
+ --> $DIR/issue-43988.rs:34:14
+ |
+LL | let _z = #[repr] 1;
+ | ^^^^^^^ help: must be of the form: `#[repr(C)]`
+
+error[E0518]: attribute should be applied to function or closure
+ --> $DIR/issue-43988.rs:5:5
+ |
+LL | #[inline]
+ | ^^^^^^^^^
+LL | let _a = 4;
+ | ----------- not a function or closure
+
+error[E0518]: attribute should be applied to function or closure
+ --> $DIR/issue-43988.rs:10:5
+ |
+LL | #[inline(XYZ)]
+ | ^^^^^^^^^^^^^^
+LL | let _b = 4;
+ | ----------- not a function or closure
+
+error[E0552]: unrecognized representation hint
+ --> $DIR/issue-43988.rs:14:12
+ |
+LL | #[repr(nothing)]
+ | ^^^^^^^
+ |
+ = help: valid reprs are `C`, `align`, `packed`, `transparent`, `simd`, `i8`, `u8`, `i16`, `u16`, `i32`, `u32`, `i64`, `u64`, `i128`, `u128`, `isize`, `usize`
+
+error[E0552]: unrecognized representation hint
+ --> $DIR/issue-43988.rs:18:12
+ |
+LL | #[repr(something_not_real)]
+ | ^^^^^^^^^^^^^^^^^^
+ |
+ = help: valid reprs are `C`, `align`, `packed`, `transparent`, `simd`, `i8`, `u8`, `i16`, `u16`, `i32`, `u32`, `i64`, `u64`, `i128`, `u128`, `isize`, `usize`
+
+error[E0518]: attribute should be applied to function or closure
+ --> $DIR/issue-43988.rs:30:5
+ |
+LL | #[inline(ABC)]
+ | ^^^^^^^^^^^^^^
+LL | foo();
+ | ----- not a function or closure
+
+error: aborting due to 7 previous errors
+
+Some errors have detailed explanations: E0518, E0552.
+For more information about an error, try `rustc --explain E0518`.
diff --git a/tests/ui/issues/issue-44023.rs b/tests/ui/issues/issue-44023.rs
new file mode 100644
index 000000000..e4320b7da
--- /dev/null
+++ b/tests/ui/issues/issue-44023.rs
@@ -0,0 +1,4 @@
+pub fn main () {}
+
+fn საჭმელად_გემრიელი_სადილი ( ) -> isize { //~ ERROR mismatched types
+}
diff --git a/tests/ui/issues/issue-44023.stderr b/tests/ui/issues/issue-44023.stderr
new file mode 100644
index 000000000..9e9701241
--- /dev/null
+++ b/tests/ui/issues/issue-44023.stderr
@@ -0,0 +1,11 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-44023.rs:3:36
+ |
+LL | fn საჭმელად_გემრიელი_სადილი ( ) -> isize {
+ | ------------------------ ^^^^^ expected `isize`, found `()`
+ | |
+ | implicitly returns `()` as its body has no tail or `return` expression
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-44056.rs b/tests/ui/issues/issue-44056.rs
new file mode 100644
index 000000000..a4903ed2c
--- /dev/null
+++ b/tests/ui/issues/issue-44056.rs
@@ -0,0 +1,6 @@
+// build-pass (FIXME(55996): should be run on targets supporting avx)
+// only-x86_64
+// no-prefer-dynamic
+// compile-flags: -Ctarget-feature=+avx -Clto
+
+fn main() {}
diff --git a/tests/ui/issues/issue-44078.rs b/tests/ui/issues/issue-44078.rs
new file mode 100644
index 000000000..b8c0e285f
--- /dev/null
+++ b/tests/ui/issues/issue-44078.rs
@@ -0,0 +1,3 @@
+fn main() {
+ "😊""; //~ ERROR unterminated double quote
+}
diff --git a/tests/ui/issues/issue-44078.stderr b/tests/ui/issues/issue-44078.stderr
new file mode 100644
index 000000000..daf67219f
--- /dev/null
+++ b/tests/ui/issues/issue-44078.stderr
@@ -0,0 +1,11 @@
+error[E0765]: unterminated double quote string
+ --> $DIR/issue-44078.rs:2:8
+ |
+LL | "😊"";
+ | _________^
+LL | | }
+ | |__^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0765`.
diff --git a/tests/ui/issues/issue-44216-add-instant.rs b/tests/ui/issues/issue-44216-add-instant.rs
new file mode 100644
index 000000000..78cfecf2f
--- /dev/null
+++ b/tests/ui/issues/issue-44216-add-instant.rs
@@ -0,0 +1,10 @@
+// run-fail
+// error-pattern:overflow
+// ignore-emscripten no processes
+
+use std::time::{Instant, Duration};
+
+fn main() {
+ let now = Instant::now();
+ let _ = now + Duration::from_secs(u64::MAX);
+}
diff --git a/tests/ui/issues/issue-44216-add-system-time.rs b/tests/ui/issues/issue-44216-add-system-time.rs
new file mode 100644
index 000000000..7e9a3f802
--- /dev/null
+++ b/tests/ui/issues/issue-44216-add-system-time.rs
@@ -0,0 +1,10 @@
+// run-fail
+// error-pattern:overflow
+// ignore-emscripten no processes
+
+use std::time::{Duration, SystemTime};
+
+fn main() {
+ let now = SystemTime::now();
+ let _ = now + Duration::from_secs(u64::MAX);
+}
diff --git a/tests/ui/issues/issue-44216-sub-instant.rs b/tests/ui/issues/issue-44216-sub-instant.rs
new file mode 100644
index 000000000..e40f80d44
--- /dev/null
+++ b/tests/ui/issues/issue-44216-sub-instant.rs
@@ -0,0 +1,10 @@
+// run-fail
+// error-pattern:overflow
+// ignore-emscripten no processes
+
+use std::time::{Instant, Duration};
+
+fn main() {
+ let now = Instant::now();
+ let _ = now - Duration::from_secs(u64::MAX);
+}
diff --git a/tests/ui/issues/issue-44216-sub-system-time.rs b/tests/ui/issues/issue-44216-sub-system-time.rs
new file mode 100644
index 000000000..2c5a000fa
--- /dev/null
+++ b/tests/ui/issues/issue-44216-sub-system-time.rs
@@ -0,0 +1,10 @@
+// run-fail
+// error-pattern:overflow
+// ignore-emscripten no processes
+
+use std::time::{Duration, SystemTime};
+
+fn main() {
+ let now = SystemTime::now();
+ let _ = now - Duration::from_secs(u64::MAX);
+}
diff --git a/tests/ui/issues/issue-44239.fixed b/tests/ui/issues/issue-44239.fixed
new file mode 100644
index 000000000..e6c29cee9
--- /dev/null
+++ b/tests/ui/issues/issue-44239.fixed
@@ -0,0 +1,11 @@
+// run-rustfix
+#![allow(dead_code, non_upper_case_globals)]
+fn main() {
+ const n: usize = 0;
+
+ struct Foo;
+ impl Foo {
+ const N: usize = n;
+ //~^ ERROR attempt to use a non-constant value
+ }
+}
diff --git a/tests/ui/issues/issue-44239.rs b/tests/ui/issues/issue-44239.rs
new file mode 100644
index 000000000..482ed194c
--- /dev/null
+++ b/tests/ui/issues/issue-44239.rs
@@ -0,0 +1,11 @@
+// run-rustfix
+#![allow(dead_code, non_upper_case_globals)]
+fn main() {
+ let n: usize = 0;
+
+ struct Foo;
+ impl Foo {
+ const N: usize = n;
+ //~^ ERROR attempt to use a non-constant value
+ }
+}
diff --git a/tests/ui/issues/issue-44239.stderr b/tests/ui/issues/issue-44239.stderr
new file mode 100644
index 000000000..2a245c92c
--- /dev/null
+++ b/tests/ui/issues/issue-44239.stderr
@@ -0,0 +1,12 @@
+error[E0435]: attempt to use a non-constant value in a constant
+ --> $DIR/issue-44239.rs:8:26
+ |
+LL | let n: usize = 0;
+ | ----- help: consider using `const` instead of `let`: `const n`
+...
+LL | const N: usize = n;
+ | ^ non-constant value
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0435`.
diff --git a/tests/ui/issues/issue-44247.rs b/tests/ui/issues/issue-44247.rs
new file mode 100644
index 000000000..3544880fa
--- /dev/null
+++ b/tests/ui/issues/issue-44247.rs
@@ -0,0 +1,19 @@
+// check-pass
+#![allow(dead_code)]
+trait T {
+ type X;
+ const X: Self::X;
+}
+fn foo<X: T>() {
+ let _: X::X = X::X;
+}
+
+trait S {
+ const X: Self::X;
+ type X;
+}
+fn bar<X: S>() {
+ let _: X::X = X::X;
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-44255.rs b/tests/ui/issues/issue-44255.rs
new file mode 100644
index 000000000..224503204
--- /dev/null
+++ b/tests/ui/issues/issue-44255.rs
@@ -0,0 +1,29 @@
+// run-pass
+
+use std::marker::PhantomData;
+
+fn main() {
+ let _arr = [1; <Multiply<Five, Five>>::VAL];
+}
+
+trait TypeVal<T> {
+ const VAL: T;
+}
+
+struct Five;
+
+impl TypeVal<usize> for Five {
+ const VAL: usize = 5;
+}
+
+struct Multiply<N, M> {
+ _n: PhantomData<N>,
+ _m: PhantomData<M>,
+}
+
+impl<N, M> TypeVal<usize> for Multiply<N, M>
+ where N: TypeVal<usize>,
+ M: TypeVal<usize>,
+{
+ const VAL: usize = N::VAL * M::VAL;
+}
diff --git a/tests/ui/issues/issue-44405.rs b/tests/ui/issues/issue-44405.rs
new file mode 100644
index 000000000..d404b9044
--- /dev/null
+++ b/tests/ui/issues/issue-44405.rs
@@ -0,0 +1,22 @@
+use std::ops::Index;
+
+struct Test;
+struct Container(Test);
+
+impl Test {
+ fn test(&mut self) {}
+}
+
+impl<'a> Index<&'a bool> for Container {
+ type Output = Test;
+
+ fn index(&self, _index: &'a bool) -> &Test {
+ &self.0
+ }
+}
+
+fn main() {
+ let container = Container(Test);
+ let mut val = true;
+ container[&mut val].test(); //~ ERROR: cannot borrow data
+}
diff --git a/tests/ui/issues/issue-44405.stderr b/tests/ui/issues/issue-44405.stderr
new file mode 100644
index 000000000..626cb2999
--- /dev/null
+++ b/tests/ui/issues/issue-44405.stderr
@@ -0,0 +1,11 @@
+error[E0596]: cannot borrow data in an index of `Container` as mutable
+ --> $DIR/issue-44405.rs:21:5
+ |
+LL | container[&mut val].test();
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
+ |
+ = help: trait `IndexMut` is required to modify indexed content, but it is not implemented for `Container`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0596`.
diff --git a/tests/ui/issues/issue-4464.rs b/tests/ui/issues/issue-4464.rs
new file mode 100644
index 000000000..7ac107150
--- /dev/null
+++ b/tests/ui/issues/issue-4464.rs
@@ -0,0 +1,7 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+fn broken(v: &[u8], i: usize, j: usize) -> &[u8] { &v[i..j] }
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-44730.rs b/tests/ui/issues/issue-44730.rs
new file mode 100644
index 000000000..0493811b2
--- /dev/null
+++ b/tests/ui/issues/issue-44730.rs
@@ -0,0 +1,15 @@
+// check-pass
+//! dox
+
+#![deny(missing_docs)]
+
+macro_rules! doc {
+ ($e:expr) => (
+ #[doc = $e]
+ pub struct Foo;
+ )
+}
+
+doc!("a");
+
+fn main() {}
diff --git a/tests/ui/issues/issue-44851.rs b/tests/ui/issues/issue-44851.rs
new file mode 100644
index 000000000..23daaeb0f
--- /dev/null
+++ b/tests/ui/issues/issue-44851.rs
@@ -0,0 +1,15 @@
+// check-pass
+macro_rules! a {
+ () => { "a" }
+}
+
+macro_rules! b {
+ ($doc:expr) => {
+ #[doc = $doc]
+ pub struct B;
+ }
+}
+
+b!(a!());
+
+fn main() {}
diff --git a/tests/ui/issues/issue-4517.rs b/tests/ui/issues/issue-4517.rs
new file mode 100644
index 000000000..caf85d44a
--- /dev/null
+++ b/tests/ui/issues/issue-4517.rs
@@ -0,0 +1,8 @@
+fn bar(int_param: usize) {}
+
+fn main() {
+ let foo: [u8; 4] = [1; 4];
+ bar(foo);
+ //~^ ERROR mismatched types
+ //~| expected `usize`, found array `[u8; 4]`
+}
diff --git a/tests/ui/issues/issue-4517.stderr b/tests/ui/issues/issue-4517.stderr
new file mode 100644
index 000000000..70b4ca5ec
--- /dev/null
+++ b/tests/ui/issues/issue-4517.stderr
@@ -0,0 +1,17 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-4517.rs:5:9
+ |
+LL | bar(foo);
+ | --- ^^^ expected `usize`, found array `[u8; 4]`
+ | |
+ | arguments to this function are incorrect
+ |
+note: function defined here
+ --> $DIR/issue-4517.rs:1:4
+ |
+LL | fn bar(int_param: usize) {}
+ | ^^^ ----------------
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-4541.rs b/tests/ui/issues/issue-4541.rs
new file mode 100644
index 000000000..e7f26d021
--- /dev/null
+++ b/tests/ui/issues/issue-4541.rs
@@ -0,0 +1,22 @@
+// run-pass
+
+fn parse_args() -> String {
+ let args: Vec<_> = ::std::env::args().collect();
+ let mut n = 0;
+
+ while n < args.len() {
+ match &*args[n] {
+ "-v" => (),
+ s => {
+ return s.to_string();
+ }
+ }
+ n += 1;
+ }
+
+ return "".to_string()
+}
+
+pub fn main() {
+ println!("{}", parse_args());
+}
diff --git a/tests/ui/issues/issue-4542.rs b/tests/ui/issues/issue-4542.rs
new file mode 100644
index 000000000..2386561c3
--- /dev/null
+++ b/tests/ui/issues/issue-4542.rs
@@ -0,0 +1,12 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+use std::env;
+
+pub fn main() {
+ for arg in env::args() {
+ match arg.clone() {
+ _s => { }
+ }
+ }
+}
diff --git a/tests/ui/issues/issue-45425.rs b/tests/ui/issues/issue-45425.rs
new file mode 100644
index 000000000..10ce374ea
--- /dev/null
+++ b/tests/ui/issues/issue-45425.rs
@@ -0,0 +1,12 @@
+// check-pass
+#![allow(dead_code)]
+use std::ops::Add;
+
+fn ref_add<T>(a: &T, b: &T) -> T
+where
+ for<'x> &'x T: Add<&'x T, Output = T>,
+{
+ a + b
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-4545.rs b/tests/ui/issues/issue-4545.rs
new file mode 100644
index 000000000..86fcf9af2
--- /dev/null
+++ b/tests/ui/issues/issue-4545.rs
@@ -0,0 +1,7 @@
+// run-pass
+// aux-build:issue-4545.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_4545 as somelib;
+pub fn main() { somelib::mk::<isize>(); }
diff --git a/tests/ui/issues/issue-45510.rs b/tests/ui/issues/issue-45510.rs
new file mode 100644
index 000000000..9e104ce6c
--- /dev/null
+++ b/tests/ui/issues/issue-45510.rs
@@ -0,0 +1,32 @@
+// Test overloaded resolution of fn_traits.
+// run-pass
+
+#![feature(fn_traits)]
+#![feature(unboxed_closures)]
+
+#[derive(Debug, PartialEq, Eq)]
+struct Ishmael;
+#[derive(Debug, PartialEq, Eq)]
+struct Maybe;
+struct CallMe;
+
+impl FnOnce<(Ishmael,)> for CallMe {
+ type Output = Ishmael;
+ extern "rust-call" fn call_once(self, _args: (Ishmael,)) -> Ishmael {
+ println!("Split your lungs with blood and thunder!");
+ Ishmael
+ }
+}
+
+impl FnOnce<(Maybe,)> for CallMe {
+ type Output = Maybe;
+ extern "rust-call" fn call_once(self, _args: (Maybe,)) -> Maybe {
+ println!("So we just met, and this is crazy");
+ Maybe
+ }
+}
+
+fn main() {
+ assert_eq!(CallMe(Ishmael), Ishmael);
+ assert_eq!(CallMe(Maybe), Maybe);
+}
diff --git a/tests/ui/issues/issue-45562.fixed b/tests/ui/issues/issue-45562.fixed
new file mode 100644
index 000000000..ac700fbd0
--- /dev/null
+++ b/tests/ui/issues/issue-45562.fixed
@@ -0,0 +1,6 @@
+// run-rustfix
+
+#[no_mangle] pub static RAH: usize = 5;
+//~^ ERROR const items should never be `#[no_mangle]`
+
+fn main() {}
diff --git a/tests/ui/issues/issue-45562.rs b/tests/ui/issues/issue-45562.rs
new file mode 100644
index 000000000..eabb5a5ce
--- /dev/null
+++ b/tests/ui/issues/issue-45562.rs
@@ -0,0 +1,6 @@
+// run-rustfix
+
+#[no_mangle] pub const RAH: usize = 5;
+//~^ ERROR const items should never be `#[no_mangle]`
+
+fn main() {}
diff --git a/tests/ui/issues/issue-45562.stderr b/tests/ui/issues/issue-45562.stderr
new file mode 100644
index 000000000..be259d3f8
--- /dev/null
+++ b/tests/ui/issues/issue-45562.stderr
@@ -0,0 +1,12 @@
+error: const items should never be `#[no_mangle]`
+ --> $DIR/issue-45562.rs:3:14
+ |
+LL | #[no_mangle] pub const RAH: usize = 5;
+ | ---------^^^^^^^^^^^^^^^^
+ | |
+ | help: try a static value: `pub static`
+ |
+ = note: `#[deny(no_mangle_const_items)]` on by default
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-45697-1.rs b/tests/ui/issues/issue-45697-1.rs
new file mode 100644
index 000000000..b45f1170b
--- /dev/null
+++ b/tests/ui/issues/issue-45697-1.rs
@@ -0,0 +1,25 @@
+// Test that assignments to an `&mut` pointer which is found in a
+// borrowed (but otherwise non-aliasable) location is illegal.
+
+// compile-flags: -C overflow-checks=on
+
+struct S<'a> {
+ pointer: &'a mut isize
+}
+
+fn copy_borrowed_ptr<'a>(p: &'a mut S<'a>) -> S<'a> {
+ S { pointer: &mut *p.pointer }
+}
+
+fn main() {
+ let mut x = 1;
+
+ {
+ let mut y = S { pointer: &mut x };
+ let z = copy_borrowed_ptr(&mut y);
+ *y.pointer += 1;
+ //~^ ERROR cannot use `*y.pointer` because it was mutably borrowed [E0503]
+ //~| ERROR cannot assign to `*y.pointer` because it is borrowed [E0506]
+ *z.pointer += 1;
+ }
+}
diff --git a/tests/ui/issues/issue-45697-1.stderr b/tests/ui/issues/issue-45697-1.stderr
new file mode 100644
index 000000000..30c69f196
--- /dev/null
+++ b/tests/ui/issues/issue-45697-1.stderr
@@ -0,0 +1,26 @@
+error[E0503]: cannot use `*y.pointer` because it was mutably borrowed
+ --> $DIR/issue-45697-1.rs:20:9
+ |
+LL | let z = copy_borrowed_ptr(&mut y);
+ | ------ borrow of `y` occurs here
+LL | *y.pointer += 1;
+ | ^^^^^^^^^^^^^^^ use of borrowed `y`
+...
+LL | *z.pointer += 1;
+ | --------------- borrow later used here
+
+error[E0506]: cannot assign to `*y.pointer` because it is borrowed
+ --> $DIR/issue-45697-1.rs:20:9
+ |
+LL | let z = copy_borrowed_ptr(&mut y);
+ | ------ borrow of `*y.pointer` occurs here
+LL | *y.pointer += 1;
+ | ^^^^^^^^^^^^^^^ assignment to borrowed `*y.pointer` occurs here
+...
+LL | *z.pointer += 1;
+ | --------------- borrow later used here
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0503, E0506.
+For more information about an error, try `rustc --explain E0503`.
diff --git a/tests/ui/issues/issue-45697.rs b/tests/ui/issues/issue-45697.rs
new file mode 100644
index 000000000..db6d1d8fa
--- /dev/null
+++ b/tests/ui/issues/issue-45697.rs
@@ -0,0 +1,25 @@
+// Test that assignments to an `&mut` pointer which is found in a
+// borrowed (but otherwise non-aliasable) location is illegal.
+
+// compile-flags: -C overflow-checks=off
+
+struct S<'a> {
+ pointer: &'a mut isize
+}
+
+fn copy_borrowed_ptr<'a>(p: &'a mut S<'a>) -> S<'a> {
+ S { pointer: &mut *p.pointer }
+}
+
+fn main() {
+ let mut x = 1;
+
+ {
+ let mut y = S { pointer: &mut x };
+ let z = copy_borrowed_ptr(&mut y);
+ *y.pointer += 1;
+ //~^ ERROR cannot use `*y.pointer` because it was mutably borrowed [E0503]
+ //~| ERROR cannot assign to `*y.pointer` because it is borrowed [E0506]
+ *z.pointer += 1;
+ }
+}
diff --git a/tests/ui/issues/issue-45697.stderr b/tests/ui/issues/issue-45697.stderr
new file mode 100644
index 000000000..26749d36f
--- /dev/null
+++ b/tests/ui/issues/issue-45697.stderr
@@ -0,0 +1,26 @@
+error[E0503]: cannot use `*y.pointer` because it was mutably borrowed
+ --> $DIR/issue-45697.rs:20:9
+ |
+LL | let z = copy_borrowed_ptr(&mut y);
+ | ------ borrow of `y` occurs here
+LL | *y.pointer += 1;
+ | ^^^^^^^^^^^^^^^ use of borrowed `y`
+...
+LL | *z.pointer += 1;
+ | --------------- borrow later used here
+
+error[E0506]: cannot assign to `*y.pointer` because it is borrowed
+ --> $DIR/issue-45697.rs:20:9
+ |
+LL | let z = copy_borrowed_ptr(&mut y);
+ | ------ borrow of `*y.pointer` occurs here
+LL | *y.pointer += 1;
+ | ^^^^^^^^^^^^^^^ assignment to borrowed `*y.pointer` occurs here
+...
+LL | *z.pointer += 1;
+ | --------------- borrow later used here
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0503, E0506.
+For more information about an error, try `rustc --explain E0503`.
diff --git a/tests/ui/issues/issue-45730.rs b/tests/ui/issues/issue-45730.rs
new file mode 100644
index 000000000..3776759fe
--- /dev/null
+++ b/tests/ui/issues/issue-45730.rs
@@ -0,0 +1,9 @@
+use std::fmt;
+fn main() {
+ let x: *const _ = 0 as _; //~ ERROR cannot cast
+
+ let x: *const _ = 0 as *const _; //~ ERROR cannot cast
+ let y: Option<*const dyn fmt::Debug> = Some(x) as _;
+
+ let x = 0 as *const i32 as *const _ as *mut _; //~ ERROR cannot cast
+}
diff --git a/tests/ui/issues/issue-45730.stderr b/tests/ui/issues/issue-45730.stderr
new file mode 100644
index 000000000..d00f3d91b
--- /dev/null
+++ b/tests/ui/issues/issue-45730.stderr
@@ -0,0 +1,27 @@
+error[E0641]: cannot cast to a pointer of an unknown kind
+ --> $DIR/issue-45730.rs:3:28
+ |
+LL | let x: *const _ = 0 as _;
+ | ^ needs more type information
+ |
+ = note: the type information given here is insufficient to check whether the pointer cast is valid
+
+error[E0641]: cannot cast to a pointer of an unknown kind
+ --> $DIR/issue-45730.rs:5:28
+ |
+LL | let x: *const _ = 0 as *const _;
+ | ^^^^^^^^ needs more type information
+ |
+ = note: the type information given here is insufficient to check whether the pointer cast is valid
+
+error[E0641]: cannot cast to a pointer of an unknown kind
+ --> $DIR/issue-45730.rs:8:44
+ |
+LL | let x = 0 as *const i32 as *const _ as *mut _;
+ | ^^^^^^ needs more type information
+ |
+ = note: the type information given here is insufficient to check whether the pointer cast is valid
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0641`.
diff --git a/tests/ui/issues/issue-45731.rs b/tests/ui/issues/issue-45731.rs
new file mode 100644
index 000000000..5c5ac5987
--- /dev/null
+++ b/tests/ui/issues/issue-45731.rs
@@ -0,0 +1,27 @@
+// run-pass
+#![allow(unused_variables)]
+// compile-flags:--test -g
+// ignore-asmjs wasm2js does not support source maps yet
+
+#[cfg(target_os = "macos")]
+#[test]
+fn simple_test() {
+ use std::{env, panic, fs};
+
+ // Find our dSYM and replace the DWARF binary with an empty file
+ let mut dsym_path = env::current_exe().unwrap();
+ let executable_name = dsym_path.file_name().unwrap().to_str().unwrap().to_string();
+ assert!(dsym_path.pop()); // Pop executable
+ dsym_path.push(format!("{}.dSYM/Contents/Resources/DWARF/{0}", executable_name));
+ {
+ let file = fs::OpenOptions::new().read(false).write(true).truncate(true).create(false)
+ .open(&dsym_path).unwrap();
+ }
+
+ env::set_var("RUST_BACKTRACE", "1");
+
+ // We don't need to die of panic, just trigger a backtrace
+ let _ = panic::catch_unwind(|| {
+ assert!(false);
+ });
+}
diff --git a/tests/ui/issues/issue-45801.rs b/tests/ui/issues/issue-45801.rs
new file mode 100644
index 000000000..780baa896
--- /dev/null
+++ b/tests/ui/issues/issue-45801.rs
@@ -0,0 +1,25 @@
+struct Params;
+
+pub trait Plugin<E: ?Sized> {
+ type Error;
+}
+
+pub trait Pluggable {
+ fn get_ref<P: Plugin<Self>>(&mut self) -> Option<P::Error> {
+ None
+ }
+}
+
+struct Foo;
+impl Plugin<Foo> for Params {
+ type Error = ();
+}
+
+impl<T: Copy> Pluggable for T {}
+
+fn handle(req: &mut i32) {
+ req.get_ref::<Params>();
+ //~^ ERROR the trait bound `Params: Plugin<i32>` is not satisfied
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-45801.stderr b/tests/ui/issues/issue-45801.stderr
new file mode 100644
index 000000000..8967f49df
--- /dev/null
+++ b/tests/ui/issues/issue-45801.stderr
@@ -0,0 +1,11 @@
+error[E0277]: the trait bound `Params: Plugin<i32>` is not satisfied
+ --> $DIR/issue-45801.rs:21:9
+ |
+LL | req.get_ref::<Params>();
+ | ^^^^^^^ the trait `Plugin<i32>` is not implemented for `Params`
+ |
+ = help: the trait `Plugin<Foo>` is implemented for `Params`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-45965.rs b/tests/ui/issues/issue-45965.rs
new file mode 100644
index 000000000..15649f777
--- /dev/null
+++ b/tests/ui/issues/issue-45965.rs
@@ -0,0 +1,4 @@
+fn main() {
+ let a = |r: f64| if r != 0.0(r != 0.0) { 1.0 } else { 0.0 };
+ //~^ ERROR expected function, found `{float}`
+}
diff --git a/tests/ui/issues/issue-45965.stderr b/tests/ui/issues/issue-45965.stderr
new file mode 100644
index 000000000..f3eaa9176
--- /dev/null
+++ b/tests/ui/issues/issue-45965.stderr
@@ -0,0 +1,11 @@
+error[E0618]: expected function, found `{float}`
+ --> $DIR/issue-45965.rs:2:30
+ |
+LL | let a = |r: f64| if r != 0.0(r != 0.0) { 1.0 } else { 0.0 };
+ | ^^^----------
+ | |
+ | call expression requires function
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0618`.
diff --git a/tests/ui/issues/issue-46069.rs b/tests/ui/issues/issue-46069.rs
new file mode 100644
index 000000000..c418128c1
--- /dev/null
+++ b/tests/ui/issues/issue-46069.rs
@@ -0,0 +1,23 @@
+// run-pass
+use std::iter::{Fuse, Cloned};
+use std::slice::Iter;
+
+struct Foo<'a, T: 'a>(#[allow(unused_tuple_struct_fields)] &'a T);
+impl<'a, T: 'a> Copy for Foo<'a, T> {}
+impl<'a, T: 'a> Clone for Foo<'a, T> {
+ fn clone(&self) -> Self { *self }
+}
+
+fn copy_ex() {
+ let s = 2;
+ let k1 = || s;
+ let upvar = Foo(&k1);
+ let k = || upvar;
+ k();
+}
+
+fn main() {
+ let _f: *mut <Fuse<Cloned<Iter<u8>>> as Iterator>::Item = std::ptr::null_mut();
+
+ copy_ex();
+}
diff --git a/tests/ui/issues/issue-46101.rs b/tests/ui/issues/issue-46101.rs
new file mode 100644
index 000000000..ab3d30d40
--- /dev/null
+++ b/tests/ui/issues/issue-46101.rs
@@ -0,0 +1,6 @@
+trait Foo {}
+#[derive(Foo::Anything)] //~ ERROR failed to resolve: partially resolved path in a derive macro
+ //~| ERROR failed to resolve: partially resolved path in a derive macro
+struct S;
+
+fn main() {}
diff --git a/tests/ui/issues/issue-46101.stderr b/tests/ui/issues/issue-46101.stderr
new file mode 100644
index 000000000..40295b8a1
--- /dev/null
+++ b/tests/ui/issues/issue-46101.stderr
@@ -0,0 +1,15 @@
+error[E0433]: failed to resolve: partially resolved path in a derive macro
+ --> $DIR/issue-46101.rs:2:10
+ |
+LL | #[derive(Foo::Anything)]
+ | ^^^^^^^^^^^^^ partially resolved path in a derive macro
+
+error[E0433]: failed to resolve: partially resolved path in a derive macro
+ --> $DIR/issue-46101.rs:2:10
+ |
+LL | #[derive(Foo::Anything)]
+ | ^^^^^^^^^^^^^ partially resolved path in a derive macro
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0433`.
diff --git a/tests/ui/issues/issue-46302.rs b/tests/ui/issues/issue-46302.rs
new file mode 100644
index 000000000..ba681d84e
--- /dev/null
+++ b/tests/ui/issues/issue-46302.rs
@@ -0,0 +1,9 @@
+fn foo() {
+ let s = "abc";
+ let u: &str = if true { s[..2] } else { s };
+ //~^ ERROR mismatched types
+}
+
+fn main() {
+ foo();
+}
diff --git a/tests/ui/issues/issue-46302.stderr b/tests/ui/issues/issue-46302.stderr
new file mode 100644
index 000000000..a6f97c3c9
--- /dev/null
+++ b/tests/ui/issues/issue-46302.stderr
@@ -0,0 +1,12 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-46302.rs:3:27
+ |
+LL | let u: &str = if true { s[..2] } else { s };
+ | ^^^^^^
+ | |
+ | expected `&str`, found `str`
+ | help: consider borrowing here: `&s[..2]`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-46311.rs b/tests/ui/issues/issue-46311.rs
new file mode 100644
index 000000000..1233a49c5
--- /dev/null
+++ b/tests/ui/issues/issue-46311.rs
@@ -0,0 +1,4 @@
+fn main() {
+ 'break: loop { //~ ERROR invalid label name `'break`
+ }
+}
diff --git a/tests/ui/issues/issue-46311.stderr b/tests/ui/issues/issue-46311.stderr
new file mode 100644
index 000000000..d72d6477d
--- /dev/null
+++ b/tests/ui/issues/issue-46311.stderr
@@ -0,0 +1,8 @@
+error: invalid label name `'break`
+ --> $DIR/issue-46311.rs:2:5
+ |
+LL | 'break: loop {
+ | ^^^^^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-46332.rs b/tests/ui/issues/issue-46332.rs
new file mode 100644
index 000000000..bed74e313
--- /dev/null
+++ b/tests/ui/issues/issue-46332.rs
@@ -0,0 +1,11 @@
+// Original Levenshtein distance for both of this is 1. We improved accuracy with
+// additional case insensitive comparison.
+
+struct TyUint {}
+
+struct TyInt {}
+
+fn main() {
+ TyUInt {};
+ //~^ ERROR cannot find struct, variant or union type `TyUInt` in this scope
+}
diff --git a/tests/ui/issues/issue-46332.stderr b/tests/ui/issues/issue-46332.stderr
new file mode 100644
index 000000000..890ef8014
--- /dev/null
+++ b/tests/ui/issues/issue-46332.stderr
@@ -0,0 +1,12 @@
+error[E0422]: cannot find struct, variant or union type `TyUInt` in this scope
+ --> $DIR/issue-46332.rs:9:5
+ |
+LL | struct TyUint {}
+ | ------------- similarly named struct `TyUint` defined here
+...
+LL | TyUInt {};
+ | ^^^^^^ help: a struct with a similar name exists (notice the capitalization): `TyUint`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0422`.
diff --git a/tests/ui/issues/issue-46438.rs b/tests/ui/issues/issue-46438.rs
new file mode 100644
index 000000000..d78b95846
--- /dev/null
+++ b/tests/ui/issues/issue-46438.rs
@@ -0,0 +1,13 @@
+macro_rules! m {
+ ($my_type: ty) => {
+ impl $my_type for u8 {}
+ }
+}
+
+trait Tr {}
+
+m!(Tr);
+
+m!(&'static u8); //~ ERROR expected a trait, found type
+
+fn main() {}
diff --git a/tests/ui/issues/issue-46438.stderr b/tests/ui/issues/issue-46438.stderr
new file mode 100644
index 000000000..c1fad44b8
--- /dev/null
+++ b/tests/ui/issues/issue-46438.stderr
@@ -0,0 +1,8 @@
+error: expected a trait, found type
+ --> $DIR/issue-46438.rs:11:4
+ |
+LL | m!(&'static u8);
+ | ^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-46471-1.rs b/tests/ui/issues/issue-46471-1.rs
new file mode 100644
index 000000000..aa161d40f
--- /dev/null
+++ b/tests/ui/issues/issue-46471-1.rs
@@ -0,0 +1,8 @@
+fn main() {
+ let y = {
+ let mut z = 0;
+ &mut z
+ };
+ //~^^ ERROR `z` does not live long enough [E0597]
+ println!("{}", y);
+}
diff --git a/tests/ui/issues/issue-46471-1.stderr b/tests/ui/issues/issue-46471-1.stderr
new file mode 100644
index 000000000..b09f31729
--- /dev/null
+++ b/tests/ui/issues/issue-46471-1.stderr
@@ -0,0 +1,14 @@
+error[E0597]: `z` does not live long enough
+ --> $DIR/issue-46471-1.rs:4:9
+ |
+LL | &mut z
+ | ^^^^^^
+ | |
+ | borrowed value does not live long enough
+ | borrow later used here
+LL | };
+ | - `z` dropped here while still borrowed
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0597`.
diff --git a/tests/ui/issues/issue-46472.rs b/tests/ui/issues/issue-46472.rs
new file mode 100644
index 000000000..b9e20e8db
--- /dev/null
+++ b/tests/ui/issues/issue-46472.rs
@@ -0,0 +1,6 @@
+fn bar<'a>() -> &'a mut u32 {
+ &mut 4
+ //~^ ERROR cannot return reference to temporary value [E0515]
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-46472.stderr b/tests/ui/issues/issue-46472.stderr
new file mode 100644
index 000000000..6e561e03a
--- /dev/null
+++ b/tests/ui/issues/issue-46472.stderr
@@ -0,0 +1,12 @@
+error[E0515]: cannot return reference to temporary value
+ --> $DIR/issue-46472.rs:2:5
+ |
+LL | &mut 4
+ | ^^^^^-
+ | | |
+ | | temporary value created here
+ | returns a reference to data owned by the current function
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0515`.
diff --git a/tests/ui/issues/issue-46604.rs b/tests/ui/issues/issue-46604.rs
new file mode 100644
index 000000000..6ec6e7bdc
--- /dev/null
+++ b/tests/ui/issues/issue-46604.rs
@@ -0,0 +1,7 @@
+static buf: &mut [u8] = &mut [1u8,2,3,4,5,7]; //~ ERROR mutable references are not allowed
+fn write<T: AsRef<[u8]>>(buffer: T) { }
+
+fn main() {
+ write(&buf);
+ buf[0]=2; //~ ERROR E0594
+}
diff --git a/tests/ui/issues/issue-46604.stderr b/tests/ui/issues/issue-46604.stderr
new file mode 100644
index 000000000..7faa2d79b
--- /dev/null
+++ b/tests/ui/issues/issue-46604.stderr
@@ -0,0 +1,16 @@
+error[E0764]: mutable references are not allowed in the final value of statics
+ --> $DIR/issue-46604.rs:1:25
+ |
+LL | static buf: &mut [u8] = &mut [1u8,2,3,4,5,7];
+ | ^^^^^^^^^^^^^^^^^^^^
+
+error[E0594]: cannot assign to `buf[_]`, as `buf` is an immutable static item
+ --> $DIR/issue-46604.rs:6:5
+ |
+LL | buf[0]=2;
+ | ^^^^^^^^ cannot assign
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0594, E0764.
+For more information about an error, try `rustc --explain E0594`.
diff --git a/tests/ui/issues/issue-46756-consider-borrowing-cast-or-binexpr.fixed b/tests/ui/issues/issue-46756-consider-borrowing-cast-or-binexpr.fixed
new file mode 100644
index 000000000..8668d8acd
--- /dev/null
+++ b/tests/ui/issues/issue-46756-consider-borrowing-cast-or-binexpr.fixed
@@ -0,0 +1,16 @@
+// run-rustfix
+
+#![allow(unused)]
+
+fn light_flows_our_war_of_mocking_words(and_yet: &usize) -> usize {
+ and_yet + 1
+}
+
+fn main() {
+ let behold: isize = 2;
+ let with_tears: usize = 3;
+ light_flows_our_war_of_mocking_words(&(behold as usize));
+ //~^ ERROR mismatched types [E0308]
+ light_flows_our_war_of_mocking_words(&(with_tears + 4));
+ //~^ ERROR mismatched types [E0308]
+}
diff --git a/tests/ui/issues/issue-46756-consider-borrowing-cast-or-binexpr.rs b/tests/ui/issues/issue-46756-consider-borrowing-cast-or-binexpr.rs
new file mode 100644
index 000000000..c8494612c
--- /dev/null
+++ b/tests/ui/issues/issue-46756-consider-borrowing-cast-or-binexpr.rs
@@ -0,0 +1,16 @@
+// run-rustfix
+
+#![allow(unused)]
+
+fn light_flows_our_war_of_mocking_words(and_yet: &usize) -> usize {
+ and_yet + 1
+}
+
+fn main() {
+ let behold: isize = 2;
+ let with_tears: usize = 3;
+ light_flows_our_war_of_mocking_words(behold as usize);
+ //~^ ERROR mismatched types [E0308]
+ light_flows_our_war_of_mocking_words(with_tears + 4);
+ //~^ ERROR mismatched types [E0308]
+}
diff --git a/tests/ui/issues/issue-46756-consider-borrowing-cast-or-binexpr.stderr b/tests/ui/issues/issue-46756-consider-borrowing-cast-or-binexpr.stderr
new file mode 100644
index 000000000..e874ded8e
--- /dev/null
+++ b/tests/ui/issues/issue-46756-consider-borrowing-cast-or-binexpr.stderr
@@ -0,0 +1,35 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-46756-consider-borrowing-cast-or-binexpr.rs:12:42
+ |
+LL | light_flows_our_war_of_mocking_words(behold as usize);
+ | ------------------------------------ ^^^^^^^^^^^^^^^
+ | | |
+ | | expected `&usize`, found `usize`
+ | | help: consider borrowing here: `&(behold as usize)`
+ | arguments to this function are incorrect
+ |
+note: function defined here
+ --> $DIR/issue-46756-consider-borrowing-cast-or-binexpr.rs:5:4
+ |
+LL | fn light_flows_our_war_of_mocking_words(and_yet: &usize) -> usize {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ---------------
+
+error[E0308]: mismatched types
+ --> $DIR/issue-46756-consider-borrowing-cast-or-binexpr.rs:14:42
+ |
+LL | light_flows_our_war_of_mocking_words(with_tears + 4);
+ | ------------------------------------ ^^^^^^^^^^^^^^
+ | | |
+ | | expected `&usize`, found `usize`
+ | | help: consider borrowing here: `&(with_tears + 4)`
+ | arguments to this function are incorrect
+ |
+note: function defined here
+ --> $DIR/issue-46756-consider-borrowing-cast-or-binexpr.rs:5:4
+ |
+LL | fn light_flows_our_war_of_mocking_words(and_yet: &usize) -> usize {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ---------------
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-46771.rs b/tests/ui/issues/issue-46771.rs
new file mode 100644
index 000000000..22be8d6af
--- /dev/null
+++ b/tests/ui/issues/issue-46771.rs
@@ -0,0 +1,4 @@
+fn main() {
+ struct Foo;
+ (1 .. 2).find(|_| Foo(0) == 0); //~ ERROR expected function, found `Foo`
+}
diff --git a/tests/ui/issues/issue-46771.stderr b/tests/ui/issues/issue-46771.stderr
new file mode 100644
index 000000000..512827b2d
--- /dev/null
+++ b/tests/ui/issues/issue-46771.stderr
@@ -0,0 +1,13 @@
+error[E0618]: expected function, found `Foo`
+ --> $DIR/issue-46771.rs:3:23
+ |
+LL | struct Foo;
+ | ---------- `Foo` defined here
+LL | (1 .. 2).find(|_| Foo(0) == 0);
+ | ^^^---
+ | |
+ | call expression requires function
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0618`.
diff --git a/tests/ui/issues/issue-46855.rs b/tests/ui/issues/issue-46855.rs
new file mode 100644
index 000000000..aa6378f85
--- /dev/null
+++ b/tests/ui/issues/issue-46855.rs
@@ -0,0 +1,24 @@
+// run-pass
+#![allow(dead_code)]
+// compile-flags: -Zmir-opt-level=1
+
+use std::mem;
+
+#[derive(Copy, Clone)]
+enum Never {}
+
+union Foo {
+ a: u64,
+ b: Never
+}
+
+fn foo(xs: [(Never, u32); 1]) -> u32 { xs[0].1 }
+
+fn bar([(_, x)]: [(Never, u32); 1]) -> u32 { x }
+
+fn main() {
+ println!("{}", mem::size_of::<Foo>());
+
+ let f = [Foo { a: 42 }, Foo { a: 10 }];
+ println!("{:?}", unsafe { f[0].a });
+}
diff --git a/tests/ui/issues/issue-46964.rs b/tests/ui/issues/issue-46964.rs
new file mode 100644
index 000000000..28fa92f20
--- /dev/null
+++ b/tests/ui/issues/issue-46964.rs
@@ -0,0 +1,19 @@
+// check-pass
+mod my_mod {
+ #[derive(Clone, Copy, Eq, PartialEq, PartialOrd, Ord, Hash)]
+ pub struct Name<'a> {
+ source: &'a str,
+ }
+
+ pub const JSON: Name = Name { source: "JSON" };
+}
+
+pub fn crash() -> bool {
+ match (my_mod::JSON, None) {
+ (_, Some(my_mod::JSON)) => true,
+ (my_mod::JSON, None) => true,
+ _ => false,
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-46983.rs b/tests/ui/issues/issue-46983.rs
new file mode 100644
index 000000000..4bd49a879
--- /dev/null
+++ b/tests/ui/issues/issue-46983.rs
@@ -0,0 +1,6 @@
+fn foo(x: &u32) -> &'static u32 {
+ &*x
+ //~^ ERROR lifetime may not live long enough
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-46983.stderr b/tests/ui/issues/issue-46983.stderr
new file mode 100644
index 000000000..38a219bbd
--- /dev/null
+++ b/tests/ui/issues/issue-46983.stderr
@@ -0,0 +1,10 @@
+error: lifetime may not live long enough
+ --> $DIR/issue-46983.rs:2:5
+ |
+LL | fn foo(x: &u32) -> &'static u32 {
+ | - let's call the lifetime of this reference `'1`
+LL | &*x
+ | ^^^ returning this value requires that `'1` must outlive `'static`
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-47073-zero-padded-tuple-struct-indices.rs b/tests/ui/issues/issue-47073-zero-padded-tuple-struct-indices.rs
new file mode 100644
index 000000000..6cd1f1443
--- /dev/null
+++ b/tests/ui/issues/issue-47073-zero-padded-tuple-struct-indices.rs
@@ -0,0 +1,12 @@
+type Guilty = bool;
+type FineDollars = u32;
+
+struct Verdict(Guilty, Option<FineDollars>);
+
+fn main() {
+ let justice = Verdict(true, Some(2718));
+ let _condemned = justice.00;
+ //~^ ERROR no field `00` on type `Verdict`
+ let _punishment = justice.001;
+ //~^ ERROR no field `001` on type `Verdict`
+}
diff --git a/tests/ui/issues/issue-47073-zero-padded-tuple-struct-indices.stderr b/tests/ui/issues/issue-47073-zero-padded-tuple-struct-indices.stderr
new file mode 100644
index 000000000..5e1b816de
--- /dev/null
+++ b/tests/ui/issues/issue-47073-zero-padded-tuple-struct-indices.stderr
@@ -0,0 +1,17 @@
+error[E0609]: no field `00` on type `Verdict`
+ --> $DIR/issue-47073-zero-padded-tuple-struct-indices.rs:8:30
+ |
+LL | let _condemned = justice.00;
+ | ^^ help: a field with a similar name exists: `0`
+
+error[E0609]: no field `001` on type `Verdict`
+ --> $DIR/issue-47073-zero-padded-tuple-struct-indices.rs:10:31
+ |
+LL | let _punishment = justice.001;
+ | ^^^ unknown field
+ |
+ = note: available fields are: `0`, `1`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0609`.
diff --git a/tests/ui/issues/issue-47094.rs b/tests/ui/issues/issue-47094.rs
new file mode 100644
index 000000000..c5d37feb1
--- /dev/null
+++ b/tests/ui/issues/issue-47094.rs
@@ -0,0 +1,16 @@
+#[repr(C, u8)] //~ ERROR conflicting representation hints
+//~^ WARN this was previously accepted
+enum Foo {
+ A,
+ B,
+}
+
+#[repr(C)] //~ ERROR conflicting representation hints
+//~^ WARN this was previously accepted
+#[repr(u8)]
+enum Bar {
+ A,
+ B,
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-47094.stderr b/tests/ui/issues/issue-47094.stderr
new file mode 100644
index 000000000..970e31847
--- /dev/null
+++ b/tests/ui/issues/issue-47094.stderr
@@ -0,0 +1,25 @@
+error[E0566]: conflicting representation hints
+ --> $DIR/issue-47094.rs:1:8
+ |
+LL | #[repr(C, u8)]
+ | ^ ^^
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #68585 <https://github.com/rust-lang/rust/issues/68585>
+ = note: `#[deny(conflicting_repr_hints)]` on by default
+
+error[E0566]: conflicting representation hints
+ --> $DIR/issue-47094.rs:8:8
+ |
+LL | #[repr(C)]
+ | ^
+LL |
+LL | #[repr(u8)]
+ | ^^
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #68585 <https://github.com/rust-lang/rust/issues/68585>
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0566`.
diff --git a/tests/ui/issues/issue-47184.rs b/tests/ui/issues/issue-47184.rs
new file mode 100644
index 000000000..2f78ce000
--- /dev/null
+++ b/tests/ui/issues/issue-47184.rs
@@ -0,0 +1,4 @@
+fn main() {
+ let _vec: Vec<&'static String> = vec![&String::new()];
+ //~^ ERROR temporary value dropped while borrowed [E0716]
+}
diff --git a/tests/ui/issues/issue-47184.stderr b/tests/ui/issues/issue-47184.stderr
new file mode 100644
index 000000000..c2c7df7a3
--- /dev/null
+++ b/tests/ui/issues/issue-47184.stderr
@@ -0,0 +1,12 @@
+error[E0716]: temporary value dropped while borrowed
+ --> $DIR/issue-47184.rs:2:44
+ |
+LL | let _vec: Vec<&'static String> = vec![&String::new()];
+ | -------------------- ^^^^^^^^^^^^^ - temporary value is freed at the end of this statement
+ | | |
+ | | creates a temporary value which is freed while still in use
+ | type annotation requires that borrow lasts for `'static`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0716`.
diff --git a/tests/ui/issues/issue-47309.rs b/tests/ui/issues/issue-47309.rs
new file mode 100644
index 000000000..abed9687b
--- /dev/null
+++ b/tests/ui/issues/issue-47309.rs
@@ -0,0 +1,21 @@
+// Make sure that the mono-item collector does not crash when trying to
+// instantiate a default impl of a method with lifetime parameters.
+// See https://github.com/rust-lang/rust/issues/47309
+
+// compile-flags:-Clink-dead-code
+// build-pass
+
+#![crate_type="rlib"]
+
+pub trait EnvFuture {
+ type Item;
+
+ fn boxed_result<'a>(self) where Self: Sized, Self::Item: 'a, {
+ }
+}
+
+struct Foo;
+
+impl<'a> EnvFuture for &'a Foo {
+ type Item = ();
+}
diff --git a/tests/ui/issues/issue-4734.rs b/tests/ui/issues/issue-4734.rs
new file mode 100644
index 000000000..29c965d7f
--- /dev/null
+++ b/tests/ui/issues/issue-4734.rs
@@ -0,0 +1,37 @@
+// run-pass
+#![allow(dead_code)]
+// Ensures that destructors are run for expressions of the form "e;" where
+// `e` is a type which requires a destructor.
+
+
+#![allow(path_statements)]
+
+struct A { n: isize }
+struct B;
+
+static mut NUM_DROPS: usize = 0;
+
+impl Drop for A {
+ fn drop(&mut self) {
+ unsafe { NUM_DROPS += 1; }
+ }
+}
+
+impl Drop for B {
+ fn drop(&mut self) {
+ unsafe { NUM_DROPS += 1; }
+ }
+}
+
+fn main() {
+ assert_eq!(unsafe { NUM_DROPS }, 0);
+ { let _a = A { n: 1 }; }
+ assert_eq!(unsafe { NUM_DROPS }, 1);
+ { A { n: 3 }; }
+ assert_eq!(unsafe { NUM_DROPS }, 2);
+
+ { let _b = B; }
+ assert_eq!(unsafe { NUM_DROPS }, 3);
+ { B; }
+ assert_eq!(unsafe { NUM_DROPS }, 4);
+}
diff --git a/tests/ui/issues/issue-4735.rs b/tests/ui/issues/issue-4735.rs
new file mode 100644
index 000000000..3ea4b01cd
--- /dev/null
+++ b/tests/ui/issues/issue-4735.rs
@@ -0,0 +1,19 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+use std::mem::transmute;
+
+struct NonCopyable(*const u8);
+
+impl Drop for NonCopyable {
+ fn drop(&mut self) {
+ let NonCopyable(p) = *self;
+ let _v = unsafe { transmute::<*const u8, Box<isize>>(p) };
+ }
+}
+
+pub fn main() {
+ let t = Box::new(0);
+ let p = unsafe { transmute::<Box<isize>, *const u8>(t) };
+ let _z = NonCopyable(p);
+}
diff --git a/tests/ui/issues/issue-4736.rs b/tests/ui/issues/issue-4736.rs
new file mode 100644
index 000000000..799d2d480
--- /dev/null
+++ b/tests/ui/issues/issue-4736.rs
@@ -0,0 +1,5 @@
+struct NonCopyable(());
+
+fn main() {
+ let z = NonCopyable{ p: () }; //~ ERROR struct `NonCopyable` has no field named `p`
+}
diff --git a/tests/ui/issues/issue-4736.stderr b/tests/ui/issues/issue-4736.stderr
new file mode 100644
index 000000000..2a1f1819c
--- /dev/null
+++ b/tests/ui/issues/issue-4736.stderr
@@ -0,0 +1,17 @@
+error[E0560]: struct `NonCopyable` has no field named `p`
+ --> $DIR/issue-4736.rs:4:26
+ |
+LL | struct NonCopyable(());
+ | ----------- `NonCopyable` defined here
+...
+LL | let z = NonCopyable{ p: () };
+ | ^ field does not exist
+ |
+help: `NonCopyable` is a tuple struct, use the appropriate syntax
+ |
+LL | let z = NonCopyable(/* fields */);
+ | ~~~~~~~~~~~~~~~~~~~~~~~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0560`.
diff --git a/tests/ui/issues/issue-47364.rs b/tests/ui/issues/issue-47364.rs
new file mode 100644
index 000000000..b524354d9
--- /dev/null
+++ b/tests/ui/issues/issue-47364.rs
@@ -0,0 +1,59 @@
+// run-pass
+#![allow(unused_variables)]
+// compile-flags: -C codegen-units=8 -O
+#![allow(non_snake_case)]
+
+fn main() {
+ nom_sql::selection(b"x ");
+}
+
+pub enum Err<P>{
+ Position(P),
+ NodePosition(u32),
+}
+
+pub enum IResult<I,O> {
+ Done(I,O),
+ Error(Err<I>),
+ Incomplete(u32, u64)
+}
+
+pub fn multispace<T: Copy>(input: T) -> ::IResult<i8, i8> {
+ ::IResult::Done(0, 0)
+}
+
+mod nom_sql {
+ fn where_clause(i: &[u8]) -> ::IResult<&[u8], Option<String>> {
+ let X = match ::multispace(i) {
+ ::IResult::Done(..) => ::IResult::Done(i, None::<String>),
+ _ => ::IResult::Error(::Err::NodePosition(0)),
+ };
+ match X {
+ ::IResult::Done(_, _) => ::IResult::Done(i, None),
+ _ => X
+ }
+ }
+
+ pub fn selection(i: &[u8]) {
+ let Y = match {
+ match {
+ where_clause(i)
+ } {
+ ::IResult::Done(_, o) => ::IResult::Done(i, Some(o)),
+ ::IResult::Error(_) => ::IResult::Done(i, None),
+ _ => ::IResult::Incomplete(0, 0),
+ }
+ } {
+ ::IResult::Done(z, _) => ::IResult::Done(z, None::<String>),
+ _ => return ()
+ };
+ match Y {
+ ::IResult::Done(x, _) => {
+ let bytes = b"; ";
+ let len = x.len();
+ bytes[len];
+ }
+ _ => ()
+ }
+ }
+}
diff --git a/tests/ui/issues/issue-47377.rs b/tests/ui/issues/issue-47377.rs
new file mode 100644
index 000000000..7a2e0fe6d
--- /dev/null
+++ b/tests/ui/issues/issue-47377.rs
@@ -0,0 +1,6 @@
+// ignore-tidy-tab
+fn main() {
+ let b = "hello";
+ let _a = b + ", World!";
+ //~^ ERROR E0369
+}
diff --git a/tests/ui/issues/issue-47377.stderr b/tests/ui/issues/issue-47377.stderr
new file mode 100644
index 000000000..4f0fd948e
--- /dev/null
+++ b/tests/ui/issues/issue-47377.stderr
@@ -0,0 +1,18 @@
+error[E0369]: cannot add `&str` to `&str`
+ --> $DIR/issue-47377.rs:4:14
+ |
+LL | let _a = b + ", World!";
+ | - ^ ---------- &str
+ | | |
+ | | `+` cannot be used to concatenate two `&str` strings
+ | &str
+ |
+ = note: string concatenation requires an owned `String` on the left
+help: create an owned `String` from a string reference
+ |
+LL | let _a = b.to_owned() + ", World!";
+ | +++++++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0369`.
diff --git a/tests/ui/issues/issue-47380.rs b/tests/ui/issues/issue-47380.rs
new file mode 100644
index 000000000..61e096622
--- /dev/null
+++ b/tests/ui/issues/issue-47380.rs
@@ -0,0 +1,5 @@
+fn main() {
+ let b = "hello";
+ println!("🦀🦀🦀🦀🦀"); let _a = b + ", World!";
+ //~^ ERROR E0369
+}
diff --git a/tests/ui/issues/issue-47380.stderr b/tests/ui/issues/issue-47380.stderr
new file mode 100644
index 000000000..b04ac5536
--- /dev/null
+++ b/tests/ui/issues/issue-47380.stderr
@@ -0,0 +1,18 @@
+error[E0369]: cannot add `&str` to `&str`
+ --> $DIR/issue-47380.rs:3:35
+ |
+LL | println!("🦀🦀🦀🦀🦀"); let _a = b + ", World!";
+ | - ^ ---------- &str
+ | | |
+ | | `+` cannot be used to concatenate two `&str` strings
+ | &str
+ |
+ = note: string concatenation requires an owned `String` on the left
+help: create an owned `String` from a string reference
+ |
+LL | println!("🦀🦀🦀🦀🦀"); let _a = b.to_owned() + ", World!";
+ | +++++++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0369`.
diff --git a/tests/ui/issues/issue-47486.rs b/tests/ui/issues/issue-47486.rs
new file mode 100644
index 000000000..d686f02a9
--- /dev/null
+++ b/tests/ui/issues/issue-47486.rs
@@ -0,0 +1,4 @@
+fn main() {
+ () < std::mem::size_of::<_>(); //~ ERROR: mismatched types
+ [0u8; std::mem::size_of::<_>()]; //~ ERROR: type annotations needed
+}
diff --git a/tests/ui/issues/issue-47486.stderr b/tests/ui/issues/issue-47486.stderr
new file mode 100644
index 000000000..c7e9af70e
--- /dev/null
+++ b/tests/ui/issues/issue-47486.stderr
@@ -0,0 +1,18 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-47486.rs:2:10
+ |
+LL | () < std::mem::size_of::<_>();
+ | -- ^^^^^^^^^^^^^^^^^^^^^^^^ expected `()`, found `usize`
+ | |
+ | expected because this is `()`
+
+error[E0282]: type annotations needed
+ --> $DIR/issue-47486.rs:3:11
+ |
+LL | [0u8; std::mem::size_of::<_>()];
+ | ^^^^^^^^^^^^^^^^^^^^^^ cannot infer type of the type parameter `T` declared on the function `size_of`
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0282, E0308.
+For more information about an error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-4759-1.rs b/tests/ui/issues/issue-4759-1.rs
new file mode 100644
index 000000000..96fae0fec
--- /dev/null
+++ b/tests/ui/issues/issue-4759-1.rs
@@ -0,0 +1,4 @@
+// run-pass
+trait U { fn f(self); }
+impl U for isize { fn f(self) {} }
+pub fn main() { 4.f(); }
diff --git a/tests/ui/issues/issue-4759.rs b/tests/ui/issues/issue-4759.rs
new file mode 100644
index 000000000..e5b9e2ed5
--- /dev/null
+++ b/tests/ui/issues/issue-4759.rs
@@ -0,0 +1,18 @@
+// run-pass
+// pretty-expanded FIXME #23616
+#![allow(non_shorthand_field_patterns)]
+
+struct T { a: Box<isize> }
+
+trait U {
+ fn f(self);
+}
+
+impl U for Box<isize> {
+ fn f(self) { }
+}
+
+pub fn main() {
+ let T { a: a } = T { a: Box::new(0) };
+ a.f();
+}
diff --git a/tests/ui/issues/issue-47638.rs b/tests/ui/issues/issue-47638.rs
new file mode 100644
index 000000000..a1ed3c365
--- /dev/null
+++ b/tests/ui/issues/issue-47638.rs
@@ -0,0 +1,10 @@
+// run-pass
+#![allow(unused_variables)]
+fn id<'c, 'b>(f: &'c &'b dyn Fn(&i32)) -> &'c &'b dyn Fn(&'static i32) {
+ f
+}
+
+fn main() {
+ let f: &dyn Fn(&i32) = &|x| {};
+ id(&f);
+}
diff --git a/tests/ui/issues/issue-47646.rs b/tests/ui/issues/issue-47646.rs
new file mode 100644
index 000000000..ace6cdce8
--- /dev/null
+++ b/tests/ui/issues/issue-47646.rs
@@ -0,0 +1,13 @@
+use std::collections::BinaryHeap;
+
+fn main() {
+ let mut heap: BinaryHeap<i32> = BinaryHeap::new();
+ let borrow = heap.peek_mut();
+
+ match (borrow, ()) {
+ (Some(_), ()) => {
+ println!("{:?}", heap); //~ ERROR cannot borrow `heap` as immutable
+ }
+ _ => {}
+ };
+}
diff --git a/tests/ui/issues/issue-47646.stderr b/tests/ui/issues/issue-47646.stderr
new file mode 100644
index 000000000..84cf9237a
--- /dev/null
+++ b/tests/ui/issues/issue-47646.stderr
@@ -0,0 +1,20 @@
+error[E0502]: cannot borrow `heap` as immutable because it is also borrowed as mutable
+ --> $DIR/issue-47646.rs:9:30
+ |
+LL | let borrow = heap.peek_mut();
+ | --------------- mutable borrow occurs here
+LL |
+LL | match (borrow, ()) {
+ | ------------ a temporary with access to the mutable borrow is created here ...
+LL | (Some(_), ()) => {
+LL | println!("{:?}", heap);
+ | ^^^^ immutable borrow occurs here
+...
+LL | };
+ | - ... and the mutable borrow might be used here, when that temporary is dropped and runs the destructor for type `(Option<PeekMut<'_, i32>>, ())`
+ |
+ = note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0502`.
diff --git a/tests/ui/issues/issue-47673.rs b/tests/ui/issues/issue-47673.rs
new file mode 100644
index 000000000..b5f0febfb
--- /dev/null
+++ b/tests/ui/issues/issue-47673.rs
@@ -0,0 +1,6 @@
+// check-pass
+#![allow(unused_imports)]
+
+use {{}, {}};
+
+fn main() {}
diff --git a/tests/ui/issues/issue-47703-1.rs b/tests/ui/issues/issue-47703-1.rs
new file mode 100644
index 000000000..61d684c2a
--- /dev/null
+++ b/tests/ui/issues/issue-47703-1.rs
@@ -0,0 +1,23 @@
+// check-pass
+
+struct AtomicRefMut<'a> {
+ value: &'a mut i32,
+ borrow: AtomicBorrowRefMut,
+}
+
+struct AtomicBorrowRefMut {
+}
+
+impl Drop for AtomicBorrowRefMut {
+ fn drop(&mut self) {
+ }
+}
+
+fn map(orig: AtomicRefMut) -> AtomicRefMut {
+ AtomicRefMut {
+ value: orig.value,
+ borrow: orig.borrow,
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-47703-tuple.rs b/tests/ui/issues/issue-47703-tuple.rs
new file mode 100644
index 000000000..bad187ead
--- /dev/null
+++ b/tests/ui/issues/issue-47703-tuple.rs
@@ -0,0 +1,11 @@
+// check-pass
+
+struct WithDrop;
+
+impl Drop for WithDrop {
+ fn drop(&mut self) {}
+}
+
+fn consume(x: (&mut (), WithDrop)) -> &mut () { x.0 }
+
+fn main() {}
diff --git a/tests/ui/issues/issue-47703.rs b/tests/ui/issues/issue-47703.rs
new file mode 100644
index 000000000..38be6f5d2
--- /dev/null
+++ b/tests/ui/issues/issue-47703.rs
@@ -0,0 +1,18 @@
+// check-pass
+
+struct MyStruct<'a> {
+ field: &'a mut (),
+ field2: WithDrop
+}
+
+struct WithDrop;
+
+impl Drop for WithDrop {
+ fn drop(&mut self) {}
+}
+
+impl<'a> MyStruct<'a> {
+ fn consume(self) -> &'a mut () { self.field }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-47715.rs b/tests/ui/issues/issue-47715.rs
new file mode 100644
index 000000000..b8088c18d
--- /dev/null
+++ b/tests/ui/issues/issue-47715.rs
@@ -0,0 +1,28 @@
+trait Foo {}
+
+trait Bar<T> {}
+
+trait Iterable {
+ type Item;
+}
+
+struct Container<T: Iterable<Item = impl Foo>> {
+ //~^ ERROR `impl Trait` only allowed in function and inherent method return types
+ field: T
+}
+
+enum Enum<T: Iterable<Item = impl Foo>> {
+ //~^ ERROR `impl Trait` only allowed in function and inherent method return types
+ A(T),
+}
+
+union Union<T: Iterable<Item = impl Foo> + Copy> {
+ //~^ ERROR `impl Trait` only allowed in function and inherent method return types
+ x: T,
+}
+
+type Type<T: Iterable<Item = impl Foo>> = T;
+//~^ ERROR `impl Trait` only allowed in function and inherent method return types
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-47715.stderr b/tests/ui/issues/issue-47715.stderr
new file mode 100644
index 000000000..0ee9388bf
--- /dev/null
+++ b/tests/ui/issues/issue-47715.stderr
@@ -0,0 +1,27 @@
+error[E0562]: `impl Trait` only allowed in function and inherent method return types, not in generic
+ --> $DIR/issue-47715.rs:9:37
+ |
+LL | struct Container<T: Iterable<Item = impl Foo>> {
+ | ^^^^^^^^
+
+error[E0562]: `impl Trait` only allowed in function and inherent method return types, not in generic
+ --> $DIR/issue-47715.rs:14:30
+ |
+LL | enum Enum<T: Iterable<Item = impl Foo>> {
+ | ^^^^^^^^
+
+error[E0562]: `impl Trait` only allowed in function and inherent method return types, not in generic
+ --> $DIR/issue-47715.rs:19:32
+ |
+LL | union Union<T: Iterable<Item = impl Foo> + Copy> {
+ | ^^^^^^^^
+
+error[E0562]: `impl Trait` only allowed in function and inherent method return types, not in generic
+ --> $DIR/issue-47715.rs:24:30
+ |
+LL | type Type<T: Iterable<Item = impl Foo>> = T;
+ | ^^^^^^^^
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0562`.
diff --git a/tests/ui/issues/issue-47722.rs b/tests/ui/issues/issue-47722.rs
new file mode 100644
index 000000000..5645a6343
--- /dev/null
+++ b/tests/ui/issues/issue-47722.rs
@@ -0,0 +1,17 @@
+// check-pass
+
+// Tests that automatic coercions from &mut T to *mut T
+// allow borrows of T to expire immediately - essentially, that
+// they work identically to 'foo as *mut T'
+
+struct SelfReference {
+ self_reference: *mut SelfReference,
+}
+
+impl SelfReference {
+ fn set_self_ref(&mut self) {
+ self.self_reference = self;
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-47725.rs b/tests/ui/issues/issue-47725.rs
new file mode 100644
index 000000000..9ec55be58
--- /dev/null
+++ b/tests/ui/issues/issue-47725.rs
@@ -0,0 +1,28 @@
+#![warn(unused_attributes)] //~ NOTE lint level is defined here
+
+#[link_name = "foo"]
+//~^ WARN attribute should be applied to a foreign function or static [unused_attributes]
+//~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+struct Foo; //~ NOTE not a foreign function or static
+
+#[link_name = "foobar"]
+//~^ WARN attribute should be applied to a foreign function or static [unused_attributes]
+//~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+//~| HELP try `#[link(name = "foobar")]` instead
+extern "C" {
+ fn foo() -> u32;
+}
+//~^^^ NOTE not a foreign function or static
+
+#[link_name]
+//~^ ERROR malformed `link_name` attribute input
+//~| HELP must be of the form
+//~| WARN attribute should be applied to a foreign function or static [unused_attributes]
+//~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+//~| HELP try `#[link(name = "...")]` instead
+extern "C" {
+ fn bar() -> u32;
+}
+//~^^^ NOTE not a foreign function or static
+
+fn main() {}
diff --git a/tests/ui/issues/issue-47725.stderr b/tests/ui/issues/issue-47725.stderr
new file mode 100644
index 000000000..7143fb4d6
--- /dev/null
+++ b/tests/ui/issues/issue-47725.stderr
@@ -0,0 +1,60 @@
+error: malformed `link_name` attribute input
+ --> $DIR/issue-47725.rs:17:1
+ |
+LL | #[link_name]
+ | ^^^^^^^^^^^^ help: must be of the form: `#[link_name = "name"]`
+
+warning: attribute should be applied to a foreign function or static
+ --> $DIR/issue-47725.rs:3:1
+ |
+LL | #[link_name = "foo"]
+ | ^^^^^^^^^^^^^^^^^^^^
+...
+LL | struct Foo;
+ | ----------- not a foreign function or static
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+note: the lint level is defined here
+ --> $DIR/issue-47725.rs:1:9
+ |
+LL | #![warn(unused_attributes)]
+ | ^^^^^^^^^^^^^^^^^
+
+warning: attribute should be applied to a foreign function or static
+ --> $DIR/issue-47725.rs:8:1
+ |
+LL | #[link_name = "foobar"]
+ | ^^^^^^^^^^^^^^^^^^^^^^^
+...
+LL | / extern "C" {
+LL | | fn foo() -> u32;
+LL | | }
+ | |_- not a foreign function or static
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+help: try `#[link(name = "foobar")]` instead
+ --> $DIR/issue-47725.rs:8:1
+ |
+LL | #[link_name = "foobar"]
+ | ^^^^^^^^^^^^^^^^^^^^^^^
+
+warning: attribute should be applied to a foreign function or static
+ --> $DIR/issue-47725.rs:17:1
+ |
+LL | #[link_name]
+ | ^^^^^^^^^^^^
+...
+LL | / extern "C" {
+LL | | fn bar() -> u32;
+LL | | }
+ | |_- not a foreign function or static
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+help: try `#[link(name = "...")]` instead
+ --> $DIR/issue-47725.rs:17:1
+ |
+LL | #[link_name]
+ | ^^^^^^^^^^^^
+
+error: aborting due to previous error; 3 warnings emitted
+
diff --git a/tests/ui/issues/issue-48006.rs b/tests/ui/issues/issue-48006.rs
new file mode 100644
index 000000000..cfef270e5
--- /dev/null
+++ b/tests/ui/issues/issue-48006.rs
@@ -0,0 +1,15 @@
+// run-pass
+
+#![feature(step_trait)]
+
+use std::iter::Step;
+
+#[cfg(target_pointer_width = "16")]
+fn main() {
+ assert!(Step::steps_between(&0u32, &u32::MAX).is_none());
+}
+
+#[cfg(any(target_pointer_width = "32", target_pointer_width = "64"))]
+fn main() {
+ assert!(Step::steps_between(&0u32, &u32::MAX).is_some());
+}
diff --git a/tests/ui/issues/issue-48131.mir.stderr b/tests/ui/issues/issue-48131.mir.stderr
new file mode 100644
index 000000000..6817e8830
--- /dev/null
+++ b/tests/ui/issues/issue-48131.mir.stderr
@@ -0,0 +1,20 @@
+error: unnecessary `unsafe` block
+ --> $DIR/issue-48131.rs:12:9
+ |
+LL | unsafe { /* unnecessary */ }
+ | ^^^^^^ unnecessary `unsafe` block
+ |
+note: the lint level is defined here
+ --> $DIR/issue-48131.rs:6:9
+ |
+LL | #![deny(unused_unsafe)]
+ | ^^^^^^^^^^^^^
+
+error: unnecessary `unsafe` block
+ --> $DIR/issue-48131.rs:23:13
+ |
+LL | unsafe { /* unnecessary */ }
+ | ^^^^^^ unnecessary `unsafe` block
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/issues/issue-48131.rs b/tests/ui/issues/issue-48131.rs
new file mode 100644
index 000000000..df9854708
--- /dev/null
+++ b/tests/ui/issues/issue-48131.rs
@@ -0,0 +1,33 @@
+// revisions: mir thir
+// [thir]compile-flags: -Z thir-unsafeck
+
+// This note is annotated because the purpose of the test
+// is to ensure that certain other notes are not generated.
+#![deny(unused_unsafe)] //~ NOTE
+
+
+// (test that no note is generated on this unsafe fn)
+pub unsafe fn a() {
+ fn inner() {
+ unsafe { /* unnecessary */ } //~ ERROR unnecessary `unsafe`
+ //~^ NOTE
+ }
+
+ inner()
+}
+
+pub fn b() {
+ // (test that no note is generated on this unsafe block)
+ unsafe {
+ fn inner() {
+ unsafe { /* unnecessary */ } //~ ERROR unnecessary `unsafe`
+ //~^ NOTE
+ }
+ // `()` is fine to zero-initialize as it is zero sized and inhabited.
+ let () = ::std::mem::zeroed();
+
+ inner()
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-48131.thir.stderr b/tests/ui/issues/issue-48131.thir.stderr
new file mode 100644
index 000000000..6817e8830
--- /dev/null
+++ b/tests/ui/issues/issue-48131.thir.stderr
@@ -0,0 +1,20 @@
+error: unnecessary `unsafe` block
+ --> $DIR/issue-48131.rs:12:9
+ |
+LL | unsafe { /* unnecessary */ }
+ | ^^^^^^ unnecessary `unsafe` block
+ |
+note: the lint level is defined here
+ --> $DIR/issue-48131.rs:6:9
+ |
+LL | #![deny(unused_unsafe)]
+ | ^^^^^^^^^^^^^
+
+error: unnecessary `unsafe` block
+ --> $DIR/issue-48131.rs:23:13
+ |
+LL | unsafe { /* unnecessary */ }
+ | ^^^^^^ unnecessary `unsafe` block
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/issues/issue-48132.rs b/tests/ui/issues/issue-48132.rs
new file mode 100644
index 000000000..f564aefe7
--- /dev/null
+++ b/tests/ui/issues/issue-48132.rs
@@ -0,0 +1,31 @@
+// Regression test for #48132. This was failing due to problems around
+// the projection caching and dropck type enumeration.
+
+// run-pass
+
+#![allow(dead_code)]
+
+struct Inner<I, V> {
+ iterator: I,
+ item: V,
+}
+
+struct Outer<I: Iterator> {
+ inner: Inner<I, I::Item>,
+}
+
+fn outer<I>(iterator: I) -> Outer<I>
+where I: Iterator,
+ I::Item: Default,
+{
+ Outer {
+ inner: Inner {
+ iterator: iterator,
+ item: Default::default(),
+ }
+ }
+}
+
+fn main() {
+ outer(std::iter::once(&1).cloned());
+}
diff --git a/tests/ui/issues/issue-48159.rs b/tests/ui/issues/issue-48159.rs
new file mode 100644
index 000000000..fc8f31fb1
--- /dev/null
+++ b/tests/ui/issues/issue-48159.rs
@@ -0,0 +1,27 @@
+// run-pass
+#![allow(non_camel_case_types)]
+
+use std::mem;
+
+pub enum c_void {}
+
+type uintptr_t = usize;
+type int16_t = u16;
+type uint16_t = int16_t;
+type uint32_t = u32;
+type intptr_t = uintptr_t;
+
+#[repr(C)]
+#[repr(packed(4))]
+pub struct kevent {
+ pub ident: uintptr_t,
+ pub filter: int16_t,
+ pub flags: uint16_t,
+ pub fflags: uint32_t,
+ pub data: intptr_t,
+ pub udata: *mut c_void,
+}
+
+fn main() {
+ assert_eq!(mem::align_of::<kevent>(), 4);
+}
diff --git a/tests/ui/issues/issue-48179.rs b/tests/ui/issues/issue-48179.rs
new file mode 100644
index 000000000..f81203dc4
--- /dev/null
+++ b/tests/ui/issues/issue-48179.rs
@@ -0,0 +1,38 @@
+// Regression test for #48132. This was failing due to problems around
+// the projection caching and dropck type enumeration.
+
+// check-pass
+
+pub struct Container<T: Iterator> {
+ value: Option<T::Item>,
+}
+
+impl<T: Iterator> Container<T> {
+ pub fn new(iter: T) -> Self {
+ panic!()
+ }
+}
+
+pub struct Wrapper<'a> {
+ content: &'a Content,
+}
+
+impl<'a, 'de> Wrapper<'a> {
+ pub fn new(content: &'a Content) -> Self {
+ Wrapper {
+ content: content,
+ }
+ }
+}
+
+pub struct Content;
+
+fn crash_it(content: Content) {
+ let items = vec![content];
+ let map = items.iter().map(|ref o| Wrapper::new(o));
+
+ let mut map_visitor = Container::new(map);
+
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-48276.rs b/tests/ui/issues/issue-48276.rs
new file mode 100644
index 000000000..f55c056fa
--- /dev/null
+++ b/tests/ui/issues/issue-48276.rs
@@ -0,0 +1,33 @@
+// Regression test for issue #48276 - ICE when self type does not match what is
+// required by a trait and regions are involved.
+
+trait MyFrom<A> {
+ fn from(a: A) -> Self;
+}
+
+struct A;
+
+impl<'a, 'b> MyFrom<A> for &'a str {
+ fn from(self: &'a Self) -> &'b str {
+ //~^ ERROR: method `from` has a `&self` declaration in the impl, but not in the trait
+ "asdf"
+ }
+}
+
+struct B;
+
+impl From<A> for B {
+ fn from(&self) -> B {
+ //~^ ERROR: method `from` has a `&self` declaration in the impl, but not in the trait
+ B
+ }
+}
+
+impl From<A> for &'static str {
+ fn from(&self) -> &'static str {
+ //~^ ERROR: method `from` has a `&self` declaration in the impl, but not in the trait
+ ""
+ }
+}
+
+fn main(){}
diff --git a/tests/ui/issues/issue-48276.stderr b/tests/ui/issues/issue-48276.stderr
new file mode 100644
index 000000000..370905ee0
--- /dev/null
+++ b/tests/ui/issues/issue-48276.stderr
@@ -0,0 +1,28 @@
+error[E0185]: method `from` has a `&self` declaration in the impl, but not in the trait
+ --> $DIR/issue-48276.rs:11:5
+ |
+LL | fn from(a: A) -> Self;
+ | ---------------------- trait method declared without `&self`
+...
+LL | fn from(self: &'a Self) -> &'b str {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `&self` used in impl
+
+error[E0185]: method `from` has a `&self` declaration in the impl, but not in the trait
+ --> $DIR/issue-48276.rs:20:5
+ |
+LL | fn from(&self) -> B {
+ | ^^^^^^^^^^^^^^^^^^^ `&self` used in impl
+ |
+ = note: `from` from trait: `fn(T) -> Self`
+
+error[E0185]: method `from` has a `&self` declaration in the impl, but not in the trait
+ --> $DIR/issue-48276.rs:27:5
+ |
+LL | fn from(&self) -> &'static str {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `&self` used in impl
+ |
+ = note: `from` from trait: `fn(T) -> Self`
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0185`.
diff --git a/tests/ui/issues/issue-4830.rs b/tests/ui/issues/issue-4830.rs
new file mode 100644
index 000000000..a8553bd6b
--- /dev/null
+++ b/tests/ui/issues/issue-4830.rs
@@ -0,0 +1,11 @@
+// check-pass
+#![allow(dead_code)]
+
+// pretty-expanded FIXME #23616
+
+pub struct Scheduler {
+ /// The event loop used to drive the scheduler and perform I/O
+ event_loop: Box<isize>
+}
+
+pub fn main() { }
diff --git a/tests/ui/issues/issue-48364.rs b/tests/ui/issues/issue-48364.rs
new file mode 100644
index 000000000..14ee75e7c
--- /dev/null
+++ b/tests/ui/issues/issue-48364.rs
@@ -0,0 +1,6 @@
+fn foo() -> bool {
+ b"".starts_with(stringify!(foo))
+ //~^ ERROR mismatched types
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-48364.stderr b/tests/ui/issues/issue-48364.stderr
new file mode 100644
index 000000000..60bbfc0c6
--- /dev/null
+++ b/tests/ui/issues/issue-48364.stderr
@@ -0,0 +1,17 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-48364.rs:2:21
+ |
+LL | b"".starts_with(stringify!(foo))
+ | ----------- ^^^^^^^^^^^^^^^ expected slice `[u8]`, found `str`
+ | |
+ | arguments to this method are incorrect
+ |
+ = note: expected reference `&[u8]`
+ found reference `&'static str`
+note: associated function defined here
+ --> $SRC_DIR/core/src/slice/mod.rs:LL:COL
+ = note: this error originates in the macro `stringify` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-48728.rs b/tests/ui/issues/issue-48728.rs
new file mode 100644
index 000000000..cbdc10bd2
--- /dev/null
+++ b/tests/ui/issues/issue-48728.rs
@@ -0,0 +1,13 @@
+// Regression test for #48728, an ICE that occurred computing
+// coherence "help" information.
+
+#[derive(Clone)] //~ ERROR conflicting implementations of trait `Clone`
+struct Node<T: ?Sized>(Box<T>);
+
+impl<T: Clone + ?Sized> Clone for Node<[T]> {
+ fn clone(&self) -> Self {
+ Node(Box::clone(&self.0))
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-48728.stderr b/tests/ui/issues/issue-48728.stderr
new file mode 100644
index 000000000..0bb46724f
--- /dev/null
+++ b/tests/ui/issues/issue-48728.stderr
@@ -0,0 +1,15 @@
+error[E0119]: conflicting implementations of trait `Clone` for type `Node<[_]>`
+ --> $DIR/issue-48728.rs:4:10
+ |
+LL | #[derive(Clone)]
+ | ^^^^^ conflicting implementation for `Node<[_]>`
+...
+LL | impl<T: Clone + ?Sized> Clone for Node<[T]> {
+ | ------------------------------------------- first implementation here
+ |
+ = note: upstream crates may add a new impl of trait `std::clone::Clone` for type `[_]` in future versions
+ = note: this error originates in the derive macro `Clone` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/tests/ui/issues/issue-4875.rs b/tests/ui/issues/issue-4875.rs
new file mode 100644
index 000000000..8d361314f
--- /dev/null
+++ b/tests/ui/issues/issue-4875.rs
@@ -0,0 +1,15 @@
+// run-pass
+#![allow(dead_code)]
+// regression test for issue 4875
+
+// pretty-expanded FIXME #23616
+
+pub struct Foo<T> {
+ data: T,
+}
+
+fn foo<T>(Foo{..}: Foo<T>) {
+}
+
+pub fn main() {
+}
diff --git a/tests/ui/issues/issue-48838.rs b/tests/ui/issues/issue-48838.rs
new file mode 100644
index 000000000..057a424df
--- /dev/null
+++ b/tests/ui/issues/issue-48838.rs
@@ -0,0 +1,5 @@
+enum Functions {
+ Square = |x| x, //~ ERROR mismatched types
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-48838.stderr b/tests/ui/issues/issue-48838.stderr
new file mode 100644
index 000000000..3502af702
--- /dev/null
+++ b/tests/ui/issues/issue-48838.stderr
@@ -0,0 +1,12 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-48838.rs:2:14
+ |
+LL | Square = |x| x,
+ | ^^^^^ expected `isize`, found closure
+ |
+ = note: expected type `isize`
+ found closure `[closure@$DIR/issue-48838.rs:2:14: 2:17]`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-48984.rs b/tests/ui/issues/issue-48984.rs
new file mode 100644
index 000000000..cb340f848
--- /dev/null
+++ b/tests/ui/issues/issue-48984.rs
@@ -0,0 +1,9 @@
+// run-pass
+#![allow(dead_code)]
+// aux-build:issue-48984-aux.rs
+extern crate issue48984aux;
+use issue48984aux::Bar;
+
+fn do_thing<T: Bar>() { }
+
+fn main() { }
diff --git a/tests/ui/issues/issue-49298.rs b/tests/ui/issues/issue-49298.rs
new file mode 100644
index 000000000..e3ffa8e7c
--- /dev/null
+++ b/tests/ui/issues/issue-49298.rs
@@ -0,0 +1,42 @@
+// run-pass
+#![feature(test)]
+#![allow(unused_mut)] // under NLL we get warning about `x` below: rust-lang/rust#54499
+
+// This test is bogus (i.e., should be check-fail) during the period
+// where #54986 is implemented and #54987 is *not* implemented. For
+// now: just ignore it
+//
+// ignore-test
+
+// This test is checking that the space allocated for `x.1` does not
+// overlap with `y`. (The reason why such a thing happened at one
+// point was because `x.0: Void` and thus the whole type of `x` was
+// uninhabited, and so the compiler thought it was safe to use the
+// space of `x.1` to hold `y`.)
+//
+// That's a fine thing to test when this code is accepted by the
+// compiler, and this code is being transcribed accordingly into
+// the ui test issue-21232-partial-init-and-use.rs
+
+extern crate test;
+
+enum Void {}
+
+fn main() {
+ let mut x: (Void, usize);
+ let mut y = 42;
+ x.1 = 13;
+
+ // Make sure `y` stays on the stack.
+ test::black_box(&mut y);
+
+ // Check that the write to `x.1` did not overwrite `y`.
+ // Note that this doesn't fail with optimizations enabled,
+ // because we can't keep `x.1` on the stack, like we can `y`,
+ // as we can't borrow partially initialized variables.
+ assert_eq!(y.to_string(), "42");
+
+ // Check that `(Void, usize)` has space for the `usize` field.
+ assert_eq!(std::mem::size_of::<(Void, usize)>(),
+ std::mem::size_of::<usize>());
+}
diff --git a/tests/ui/issues/issue-4935.rs b/tests/ui/issues/issue-4935.rs
new file mode 100644
index 000000000..c95020a0c
--- /dev/null
+++ b/tests/ui/issues/issue-4935.rs
@@ -0,0 +1,6 @@
+// Regression test for issue #4935
+
+fn foo(a: usize) {}
+//~^ defined here
+fn main() { foo(5, 6) }
+//~^ ERROR function takes 1 argument but 2 arguments were supplied
diff --git a/tests/ui/issues/issue-4935.stderr b/tests/ui/issues/issue-4935.stderr
new file mode 100644
index 000000000..bb45fa083
--- /dev/null
+++ b/tests/ui/issues/issue-4935.stderr
@@ -0,0 +1,19 @@
+error[E0061]: this function takes 1 argument but 2 arguments were supplied
+ --> $DIR/issue-4935.rs:5:13
+ |
+LL | fn main() { foo(5, 6) }
+ | ^^^ - argument of type `{integer}` unexpected
+ |
+note: function defined here
+ --> $DIR/issue-4935.rs:3:4
+ |
+LL | fn foo(a: usize) {}
+ | ^^^ --------
+help: remove the extra argument
+ |
+LL | fn main() { foo(5) }
+ | ~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0061`.
diff --git a/tests/ui/issues/issue-49544.rs b/tests/ui/issues/issue-49544.rs
new file mode 100644
index 000000000..ed356275f
--- /dev/null
+++ b/tests/ui/issues/issue-49544.rs
@@ -0,0 +1,9 @@
+// aux-build:issue-49544.rs
+// check-pass
+
+extern crate issue_49544;
+use issue_49544::foo;
+
+fn main() {
+ let _ = foo();
+}
diff --git a/tests/ui/issues/issue-49588-non-shorthand-field-patterns-in-pattern-macro.rs b/tests/ui/issues/issue-49588-non-shorthand-field-patterns-in-pattern-macro.rs
new file mode 100644
index 000000000..f30d7e2ed
--- /dev/null
+++ b/tests/ui/issues/issue-49588-non-shorthand-field-patterns-in-pattern-macro.rs
@@ -0,0 +1,16 @@
+// run-pass
+#![allow(unused_variables)]
+#![deny(non_shorthand_field_patterns)]
+
+pub struct Value<A> { pub value: A }
+
+#[macro_export]
+macro_rules! pat {
+ ($a:pat) => {
+ Value { value: $a }
+ };
+}
+
+fn main() {
+ let pat!(value) = Value { value: () };
+}
diff --git a/tests/ui/issues/issue-49632.rs b/tests/ui/issues/issue-49632.rs
new file mode 100644
index 000000000..155fd0d24
--- /dev/null
+++ b/tests/ui/issues/issue-49632.rs
@@ -0,0 +1,8 @@
+// run-pass
+#![feature(stmt_expr_attributes)]
+
+pub fn main() {
+ let _x = #[inline(always)] || {};
+ let _y = #[inline(never)] || {};
+ let _z = #[inline] || {};
+}
diff --git a/tests/ui/issues/issue-4968.rs b/tests/ui/issues/issue-4968.rs
new file mode 100644
index 000000000..634bd698d
--- /dev/null
+++ b/tests/ui/issues/issue-4968.rs
@@ -0,0 +1,10 @@
+// Regression test for issue #4968
+
+const A: (isize,isize) = (4,2);
+fn main() {
+ match 42 { A => () }
+ //~^ ERROR mismatched types
+ //~| expected type `{integer}`
+ //~| found tuple `(isize, isize)`
+ //~| expected integer, found tuple
+}
diff --git a/tests/ui/issues/issue-4968.stderr b/tests/ui/issues/issue-4968.stderr
new file mode 100644
index 000000000..bbaca4ed2
--- /dev/null
+++ b/tests/ui/issues/issue-4968.stderr
@@ -0,0 +1,20 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-4968.rs:5:16
+ |
+LL | const A: (isize,isize) = (4,2);
+ | ---------------------- constant defined here
+LL | fn main() {
+LL | match 42 { A => () }
+ | -- ^
+ | | |
+ | | expected integer, found tuple
+ | | `A` is interpreted as a constant, not a new binding
+ | | help: introduce a new binding instead: `other_a`
+ | this expression has type `{integer}`
+ |
+ = note: expected type `{integer}`
+ found tuple `(isize, isize)`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-4972.rs b/tests/ui/issues/issue-4972.rs
new file mode 100644
index 000000000..3f1c6f855
--- /dev/null
+++ b/tests/ui/issues/issue-4972.rs
@@ -0,0 +1,17 @@
+#![feature(box_patterns)]
+
+trait MyTrait {
+ fn dummy(&self) {}
+}
+
+pub enum TraitWrapper {
+ A(Box<dyn MyTrait + 'static>),
+}
+
+fn get_tw_map(tw: &TraitWrapper) -> &dyn MyTrait {
+ match *tw {
+ TraitWrapper::A(box ref map) => map, //~ ERROR cannot be dereferenced
+ }
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-4972.stderr b/tests/ui/issues/issue-4972.stderr
new file mode 100644
index 000000000..83daded7e
--- /dev/null
+++ b/tests/ui/issues/issue-4972.stderr
@@ -0,0 +1,9 @@
+error[E0033]: type `Box<(dyn MyTrait + 'static)>` cannot be dereferenced
+ --> $DIR/issue-4972.rs:13:25
+ |
+LL | TraitWrapper::A(box ref map) => map,
+ | ^^^^^^^^^^^ type `Box<(dyn MyTrait + 'static)>` cannot be dereferenced
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0033`.
diff --git a/tests/ui/issues/issue-49824.rs b/tests/ui/issues/issue-49824.rs
new file mode 100644
index 000000000..bc1cd6856
--- /dev/null
+++ b/tests/ui/issues/issue-49824.rs
@@ -0,0 +1,9 @@
+fn main() {
+ let mut x = 0;
+ || {
+ || {
+ //~^ ERROR captured variable cannot escape `FnMut` closure body
+ let _y = &mut x;
+ }
+ };
+}
diff --git a/tests/ui/issues/issue-49824.stderr b/tests/ui/issues/issue-49824.stderr
new file mode 100644
index 000000000..14beadece
--- /dev/null
+++ b/tests/ui/issues/issue-49824.stderr
@@ -0,0 +1,23 @@
+error: captured variable cannot escape `FnMut` closure body
+ --> $DIR/issue-49824.rs:4:9
+ |
+LL | let mut x = 0;
+ | ----- variable defined here
+LL | || {
+ | - inferred to be a `FnMut` closure
+LL | / || {
+LL | |
+LL | | let _y = &mut x;
+ | | - variable captured here
+LL | | }
+ | |_________^ returns a closure that contains a reference to a captured variable, which then escapes the closure body
+ |
+ = note: `FnMut` closures only have access to their captured variables while they are executing...
+ = note: ...therefore, they cannot allow references to captured variables to escape
+help: consider adding 'move' keyword before the nested closure
+ |
+LL | move || {
+ | ++++
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-49851/compiler-builtins-error.rs b/tests/ui/issues/issue-49851/compiler-builtins-error.rs
new file mode 100644
index 000000000..4e56cca33
--- /dev/null
+++ b/tests/ui/issues/issue-49851/compiler-builtins-error.rs
@@ -0,0 +1,13 @@
+//~ ERROR can't find crate for `core`
+//~^ ERROR can't find crate for `compiler_builtins`
+
+// compile-flags: --target thumbv7em-none-eabihf
+// needs-llvm-components: arm
+#![deny(unsafe_code)]
+#![deny(warnings)]
+#![no_std]
+
+extern crate cortex_m;
+//~^ ERROR can't find crate for `cortex_m`
+
+fn main() {}
diff --git a/tests/ui/issues/issue-49851/compiler-builtins-error.stderr b/tests/ui/issues/issue-49851/compiler-builtins-error.stderr
new file mode 100644
index 000000000..fcfa2bf11
--- /dev/null
+++ b/tests/ui/issues/issue-49851/compiler-builtins-error.stderr
@@ -0,0 +1,19 @@
+error[E0463]: can't find crate for `core`
+ |
+ = note: the `thumbv7em-none-eabihf` target may not be installed
+ = help: consider downloading the target with `rustup target add thumbv7em-none-eabihf`
+ = help: consider building the standard library from source with `cargo build -Zbuild-std`
+
+error[E0463]: can't find crate for `compiler_builtins`
+
+error[E0463]: can't find crate for `cortex_m`
+ --> $DIR/compiler-builtins-error.rs:10:1
+ |
+LL | extern crate cortex_m;
+ | ^^^^^^^^^^^^^^^^^^^^^^ can't find crate
+
+error: requires `sized` lang_item
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0463`.
diff --git a/tests/ui/issues/issue-49854.rs b/tests/ui/issues/issue-49854.rs
new file mode 100644
index 000000000..0e1db00a3
--- /dev/null
+++ b/tests/ui/issues/issue-49854.rs
@@ -0,0 +1,9 @@
+// run-pass
+use std::ffi::OsString;
+
+fn main() {
+ let os_str = OsString::from("Hello Rust!");
+
+ assert_eq!(os_str, "Hello Rust!");
+ assert_eq!("Hello Rust!", os_str);
+}
diff --git a/tests/ui/issues/issue-49919.rs b/tests/ui/issues/issue-49919.rs
new file mode 100644
index 000000000..780f33868
--- /dev/null
+++ b/tests/ui/issues/issue-49919.rs
@@ -0,0 +1,7 @@
+fn foo<'a, T: 'a>(t: T) -> Box<dyn Fn() -> &'a T + 'a> {
+ let foo: Box<dyn for <'c> Fn() -> &'c T> = Box::new(move || &t);
+ //~^ ERROR: binding for associated type
+ unimplemented!()
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-49919.stderr b/tests/ui/issues/issue-49919.stderr
new file mode 100644
index 000000000..8098be5cc
--- /dev/null
+++ b/tests/ui/issues/issue-49919.stderr
@@ -0,0 +1,9 @@
+error[E0582]: binding for associated type `Output` references lifetime `'c`, which does not appear in the trait input types
+ --> $DIR/issue-49919.rs:2:39
+ |
+LL | let foo: Box<dyn for <'c> Fn() -> &'c T> = Box::new(move || &t);
+ | ^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0582`.
diff --git a/tests/ui/issues/issue-49934-errors.rs b/tests/ui/issues/issue-49934-errors.rs
new file mode 100644
index 000000000..dd14bac5e
--- /dev/null
+++ b/tests/ui/issues/issue-49934-errors.rs
@@ -0,0 +1,8 @@
+fn foo<#[derive(Debug)] T>() { //~ ERROR expected non-macro attribute, found attribute macro
+ match 0 {
+ #[derive(Debug)] //~ ERROR expected non-macro attribute, found attribute macro
+ _ => (),
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-49934-errors.stderr b/tests/ui/issues/issue-49934-errors.stderr
new file mode 100644
index 000000000..8c4c54170
--- /dev/null
+++ b/tests/ui/issues/issue-49934-errors.stderr
@@ -0,0 +1,14 @@
+error: expected non-macro attribute, found attribute macro `derive`
+ --> $DIR/issue-49934-errors.rs:1:10
+ |
+LL | fn foo<#[derive(Debug)] T>() {
+ | ^^^^^^ not a non-macro attribute
+
+error: expected non-macro attribute, found attribute macro `derive`
+ --> $DIR/issue-49934-errors.rs:3:11
+ |
+LL | #[derive(Debug)]
+ | ^^^^^^ not a non-macro attribute
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/issues/issue-49934.rs b/tests/ui/issues/issue-49934.rs
new file mode 100644
index 000000000..119d84a06
--- /dev/null
+++ b/tests/ui/issues/issue-49934.rs
@@ -0,0 +1,30 @@
+#![feature(stmt_expr_attributes)]
+
+fn main() {
+ // fold_stmt (Item)
+ #[allow(dead_code)]
+ #[derive(Debug)] // should not warn
+ struct Foo;
+
+ // fold_stmt (Mac)
+ #[derive(Debug)] //~ ERROR `derive` may only be applied to `struct`s, `enum`s and `union`s
+ println!("Hello, world!");
+
+ // fold_stmt (Semi)
+ #[derive(Debug)] //~ ERROR `derive` may only be applied to `struct`s, `enum`s and `union`s
+ "Hello, world!";
+
+ // fold_stmt (Local)
+ #[derive(Debug)] //~ ERROR `derive` may only be applied to `struct`s, `enum`s and `union`s
+ let _ = "Hello, world!";
+
+ // visit_expr
+ let _ = #[derive(Debug)] "Hello, world!";
+ //~^ ERROR `derive` may only be applied to `struct`s, `enum`s and `union`s
+
+ let _ = [
+ // filter_map_expr
+ #[derive(Debug)] //~ ERROR `derive` may only be applied to `struct`s, `enum`s and `union`s
+ "Hello, world!",
+ ];
+}
diff --git a/tests/ui/issues/issue-49934.stderr b/tests/ui/issues/issue-49934.stderr
new file mode 100644
index 000000000..f2ff541bb
--- /dev/null
+++ b/tests/ui/issues/issue-49934.stderr
@@ -0,0 +1,43 @@
+error[E0774]: `derive` may only be applied to `struct`s, `enum`s and `union`s
+ --> $DIR/issue-49934.rs:10:5
+ |
+LL | #[derive(Debug)]
+ | ^^^^^^^^^^^^^^^^ not applicable here
+LL | println!("Hello, world!");
+ | -------------------------- not a `struct`, `enum` or `union`
+
+error[E0774]: `derive` may only be applied to `struct`s, `enum`s and `union`s
+ --> $DIR/issue-49934.rs:14:5
+ |
+LL | #[derive(Debug)]
+ | ^^^^^^^^^^^^^^^^ not applicable here
+LL | "Hello, world!";
+ | ---------------- not a `struct`, `enum` or `union`
+
+error[E0774]: `derive` may only be applied to `struct`s, `enum`s and `union`s
+ --> $DIR/issue-49934.rs:18:5
+ |
+LL | #[derive(Debug)]
+ | ^^^^^^^^^^^^^^^^ not applicable here
+LL | let _ = "Hello, world!";
+ | ------------------------ not a `struct`, `enum` or `union`
+
+error[E0774]: `derive` may only be applied to `struct`s, `enum`s and `union`s
+ --> $DIR/issue-49934.rs:22:13
+ |
+LL | let _ = #[derive(Debug)] "Hello, world!";
+ | ^^^^^^^^^^^^^^^^ --------------- not a `struct`, `enum` or `union`
+ | |
+ | not applicable here
+
+error[E0774]: `derive` may only be applied to `struct`s, `enum`s and `union`s
+ --> $DIR/issue-49934.rs:27:9
+ |
+LL | #[derive(Debug)]
+ | ^^^^^^^^^^^^^^^^ not applicable here
+LL | "Hello, world!",
+ | --------------- not a `struct`, `enum` or `union`
+
+error: aborting due to 5 previous errors
+
+For more information about this error, try `rustc --explain E0774`.
diff --git a/tests/ui/issues/issue-49955.rs b/tests/ui/issues/issue-49955.rs
new file mode 100644
index 000000000..f2f3ebff2
--- /dev/null
+++ b/tests/ui/issues/issue-49955.rs
@@ -0,0 +1,20 @@
+// run-pass
+
+const ALL_THE_NUMS: [u32; 1] = [
+ 1
+];
+
+#[inline(never)]
+fn array(i: usize) -> &'static u32 {
+ return &ALL_THE_NUMS[i];
+}
+
+#[inline(never)]
+fn tuple_field() -> &'static u32 {
+ &(42,).0
+}
+
+fn main() {
+ assert_eq!(tuple_field().to_string(), "42");
+ assert_eq!(array(0).to_string(), "1");
+}
diff --git a/tests/ui/issues/issue-49973.rs b/tests/ui/issues/issue-49973.rs
new file mode 100644
index 000000000..af421c52f
--- /dev/null
+++ b/tests/ui/issues/issue-49973.rs
@@ -0,0 +1,11 @@
+// run-pass
+#[derive(Debug)]
+#[repr(i32)]
+enum E {
+ Min = -2147483648i32,
+ _Max = 2147483647i32,
+}
+
+fn main() {
+ assert_eq!(Some(E::Min).unwrap() as i32, -2147483648i32);
+}
diff --git a/tests/ui/issues/issue-5008-borrowed-traitobject-method-call.rs b/tests/ui/issues/issue-5008-borrowed-traitobject-method-call.rs
new file mode 100644
index 000000000..fc869ae4f
--- /dev/null
+++ b/tests/ui/issues/issue-5008-borrowed-traitobject-method-call.rs
@@ -0,0 +1,34 @@
+// run-pass
+/*
+
+#5008 cast to &Trait causes code to segfault on method call
+
+It fixes itself if the &Trait is changed to @Trait.
+*/
+
+trait Debuggable {
+ fn debug_name(&self) -> String;
+}
+
+#[derive(Clone)]
+struct Thing {
+ name: String,
+}
+
+impl Thing {
+ fn new() -> Thing { Thing { name: "dummy".to_string() } }
+}
+
+impl Debuggable for Thing {
+ fn debug_name(&self) -> String { self.name.clone() }
+}
+
+fn print_name(x: &dyn Debuggable)
+{
+ println!("debug_name = {}", x.debug_name());
+}
+
+pub fn main() {
+ let thing = Thing::new();
+ print_name(&thing as &dyn Debuggable);
+}
diff --git a/tests/ui/issues/issue-50187.rs b/tests/ui/issues/issue-50187.rs
new file mode 100644
index 000000000..4b0aeaab4
--- /dev/null
+++ b/tests/ui/issues/issue-50187.rs
@@ -0,0 +1,39 @@
+// check-pass
+
+#![feature(decl_macro)]
+
+mod type_ns {
+ pub type A = u8;
+}
+mod value_ns {
+ pub const A: u8 = 0;
+}
+mod macro_ns {
+ pub macro A() {}
+}
+
+mod merge2 {
+ pub use type_ns::A;
+ pub use value_ns::A;
+}
+mod merge3 {
+ pub use type_ns::A;
+ pub use value_ns::A;
+ pub use macro_ns::A;
+}
+
+mod use2 {
+ pub use merge2::A;
+}
+mod use3 {
+ pub use merge3::A;
+}
+
+fn main() {
+ type B2 = use2::A;
+ let a2 = use2::A;
+
+ type B3 = use3::A;
+ let a3 = use3::A;
+ use3::A!();
+}
diff --git a/tests/ui/issues/issue-50264-inner-deref-trait/option-as_deref.rs b/tests/ui/issues/issue-50264-inner-deref-trait/option-as_deref.rs
new file mode 100644
index 000000000..160cfc3d4
--- /dev/null
+++ b/tests/ui/issues/issue-50264-inner-deref-trait/option-as_deref.rs
@@ -0,0 +1,4 @@
+fn main() {
+ let _result = &Some(42).as_deref();
+//~^ ERROR the method
+}
diff --git a/tests/ui/issues/issue-50264-inner-deref-trait/option-as_deref.stderr b/tests/ui/issues/issue-50264-inner-deref-trait/option-as_deref.stderr
new file mode 100644
index 000000000..ce8173169
--- /dev/null
+++ b/tests/ui/issues/issue-50264-inner-deref-trait/option-as_deref.stderr
@@ -0,0 +1,12 @@
+error[E0599]: the method `as_deref` exists for enum `Option<{integer}>`, but its trait bounds were not satisfied
+ --> $DIR/option-as_deref.rs:2:29
+ |
+LL | let _result = &Some(42).as_deref();
+ | ^^^^^^^^
+ |
+ = note: the following trait bounds were not satisfied:
+ `{integer}: Deref`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-50264-inner-deref-trait/option-as_deref_mut.rs b/tests/ui/issues/issue-50264-inner-deref-trait/option-as_deref_mut.rs
new file mode 100644
index 000000000..ff5095ce3
--- /dev/null
+++ b/tests/ui/issues/issue-50264-inner-deref-trait/option-as_deref_mut.rs
@@ -0,0 +1,4 @@
+fn main() {
+ let _result = &mut Some(42).as_deref_mut();
+//~^ ERROR the method
+}
diff --git a/tests/ui/issues/issue-50264-inner-deref-trait/option-as_deref_mut.stderr b/tests/ui/issues/issue-50264-inner-deref-trait/option-as_deref_mut.stderr
new file mode 100644
index 000000000..943f77486
--- /dev/null
+++ b/tests/ui/issues/issue-50264-inner-deref-trait/option-as_deref_mut.stderr
@@ -0,0 +1,12 @@
+error[E0599]: the method `as_deref_mut` exists for enum `Option<{integer}>`, but its trait bounds were not satisfied
+ --> $DIR/option-as_deref_mut.rs:2:33
+ |
+LL | let _result = &mut Some(42).as_deref_mut();
+ | ^^^^^^^^^^^^
+ |
+ = note: the following trait bounds were not satisfied:
+ `{integer}: Deref`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-50264-inner-deref-trait/result-as_deref.rs b/tests/ui/issues/issue-50264-inner-deref-trait/result-as_deref.rs
new file mode 100644
index 000000000..4232f14d2
--- /dev/null
+++ b/tests/ui/issues/issue-50264-inner-deref-trait/result-as_deref.rs
@@ -0,0 +1,4 @@
+fn main() {
+ let _result = &Ok(42).as_deref();
+//~^ ERROR the method
+}
diff --git a/tests/ui/issues/issue-50264-inner-deref-trait/result-as_deref.stderr b/tests/ui/issues/issue-50264-inner-deref-trait/result-as_deref.stderr
new file mode 100644
index 000000000..a3b9ac677
--- /dev/null
+++ b/tests/ui/issues/issue-50264-inner-deref-trait/result-as_deref.stderr
@@ -0,0 +1,12 @@
+error[E0599]: the method `as_deref` exists for enum `Result<{integer}, _>`, but its trait bounds were not satisfied
+ --> $DIR/result-as_deref.rs:2:27
+ |
+LL | let _result = &Ok(42).as_deref();
+ | ^^^^^^^^
+ |
+ = note: the following trait bounds were not satisfied:
+ `{integer}: Deref`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-50264-inner-deref-trait/result-as_deref_mut.rs b/tests/ui/issues/issue-50264-inner-deref-trait/result-as_deref_mut.rs
new file mode 100644
index 000000000..3507d1d8e
--- /dev/null
+++ b/tests/ui/issues/issue-50264-inner-deref-trait/result-as_deref_mut.rs
@@ -0,0 +1,4 @@
+fn main() {
+ let _result = &mut Ok(42).as_deref_mut();
+//~^ ERROR the method
+}
diff --git a/tests/ui/issues/issue-50264-inner-deref-trait/result-as_deref_mut.stderr b/tests/ui/issues/issue-50264-inner-deref-trait/result-as_deref_mut.stderr
new file mode 100644
index 000000000..aa771e4c0
--- /dev/null
+++ b/tests/ui/issues/issue-50264-inner-deref-trait/result-as_deref_mut.stderr
@@ -0,0 +1,12 @@
+error[E0599]: the method `as_deref_mut` exists for enum `Result<{integer}, _>`, but its trait bounds were not satisfied
+ --> $DIR/result-as_deref_mut.rs:2:31
+ |
+LL | let _result = &mut Ok(42).as_deref_mut();
+ | ^^^^^^^^^^^^
+ |
+ = note: the following trait bounds were not satisfied:
+ `{integer}: Deref`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-50403.rs b/tests/ui/issues/issue-50403.rs
new file mode 100644
index 000000000..012057fc2
--- /dev/null
+++ b/tests/ui/issues/issue-50403.rs
@@ -0,0 +1,5 @@
+#![feature(concat_idents)]
+
+fn main() {
+ let x = concat_idents!(); //~ ERROR concat_idents! takes 1 or more arguments
+}
diff --git a/tests/ui/issues/issue-50403.stderr b/tests/ui/issues/issue-50403.stderr
new file mode 100644
index 000000000..a3a2ed044
--- /dev/null
+++ b/tests/ui/issues/issue-50403.stderr
@@ -0,0 +1,8 @@
+error: concat_idents! takes 1 or more arguments
+ --> $DIR/issue-50403.rs:4:13
+ |
+LL | let x = concat_idents!();
+ | ^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-50411.rs b/tests/ui/issues/issue-50411.rs
new file mode 100644
index 000000000..cd728b152
--- /dev/null
+++ b/tests/ui/issues/issue-50411.rs
@@ -0,0 +1,11 @@
+// Regression test for #50411: the MIR inliner was causing problems
+// here because it would inline promoted code (which had already had
+// elaborate-drops invoked on it) and then try to elaboate drops a
+// second time. Uncool.
+
+// compile-flags:-Zmir-opt-level=4
+// build-pass
+
+fn main() {
+ let _ = (0 .. 1).filter(|_| [1].iter().all(|_| true)).count();
+}
diff --git a/tests/ui/issues/issue-50415.rs b/tests/ui/issues/issue-50415.rs
new file mode 100644
index 000000000..151b9fe44
--- /dev/null
+++ b/tests/ui/issues/issue-50415.rs
@@ -0,0 +1,16 @@
+// run-pass
+fn main() {
+ // Simplified test case
+ let _ = || 0..=1;
+
+ // Original test case
+ let full_length = 1024;
+ let range = {
+ // do some stuff, omit here
+ None
+ };
+
+ let range = range.map(|(s, t)| s..=t).unwrap_or(0..=(full_length-1));
+
+ assert_eq!(range, 0..=1023);
+}
diff --git a/tests/ui/issues/issue-50442.rs b/tests/ui/issues/issue-50442.rs
new file mode 100644
index 000000000..25c7dde7a
--- /dev/null
+++ b/tests/ui/issues/issue-50442.rs
@@ -0,0 +1,13 @@
+// run-pass
+#![allow(dead_code)]
+enum Void {}
+
+enum Foo {
+ A(i32),
+ B(Void),
+ C(i32)
+}
+
+fn main() {
+ let _foo = Foo::A(0);
+}
diff --git a/tests/ui/issues/issue-50471.rs b/tests/ui/issues/issue-50471.rs
new file mode 100644
index 000000000..7278c392d
--- /dev/null
+++ b/tests/ui/issues/issue-50471.rs
@@ -0,0 +1,9 @@
+// check-pass
+
+fn main() {
+ assert!({false});
+
+ assert!(r"\u{41}" == "A");
+
+ assert!(r"\u{".is_empty());
+}
diff --git a/tests/ui/issues/issue-50518.rs b/tests/ui/issues/issue-50518.rs
new file mode 100644
index 000000000..1e7b77949
--- /dev/null
+++ b/tests/ui/issues/issue-50518.rs
@@ -0,0 +1,40 @@
+// check-pass
+use std::marker::PhantomData;
+
+struct Meta<A> {
+ value: i32,
+ type_: PhantomData<A>
+}
+
+trait MetaTrait {
+ fn get_value(&self) -> i32;
+}
+
+impl<A> MetaTrait for Meta<A> {
+ fn get_value(&self) -> i32 { self.value }
+}
+
+trait Bar {
+ fn get_const(&self) -> &dyn MetaTrait;
+}
+
+struct Foo<A> {
+ _value: A
+}
+
+impl<A: 'static> Foo<A> {
+ const CONST: &'static dyn MetaTrait = &Meta::<Self> {
+ value: 10,
+ type_: PhantomData
+ };
+}
+
+impl<A: 'static> Bar for Foo<A> {
+ fn get_const(&self) -> &dyn MetaTrait { Self::CONST }
+}
+
+fn main() {
+ let foo = Foo::<i32> { _value: 10 };
+ let bar: &dyn Bar = &foo;
+ println!("const {}", bar.get_const().get_value());
+}
diff --git a/tests/ui/issues/issue-50571.fixed b/tests/ui/issues/issue-50571.fixed
new file mode 100644
index 000000000..2f8c925b8
--- /dev/null
+++ b/tests/ui/issues/issue-50571.fixed
@@ -0,0 +1,8 @@
+// run-rustfix
+
+trait Foo {
+ fn foo(_: [i32; 2]) {}
+ //~^ ERROR: patterns aren't allowed in methods without bodies
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-50571.rs b/tests/ui/issues/issue-50571.rs
new file mode 100644
index 000000000..56f422e7d
--- /dev/null
+++ b/tests/ui/issues/issue-50571.rs
@@ -0,0 +1,8 @@
+// run-rustfix
+
+trait Foo {
+ fn foo([a, b]: [i32; 2]) {}
+ //~^ ERROR: patterns aren't allowed in methods without bodies
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-50571.stderr b/tests/ui/issues/issue-50571.stderr
new file mode 100644
index 000000000..f69963bb7
--- /dev/null
+++ b/tests/ui/issues/issue-50571.stderr
@@ -0,0 +1,14 @@
+error[E0642]: patterns aren't allowed in methods without bodies
+ --> $DIR/issue-50571.rs:4:12
+ |
+LL | fn foo([a, b]: [i32; 2]) {}
+ | ^^^^^^
+ |
+help: give this argument a name or use an underscore to ignore it
+ |
+LL | fn foo(_: [i32; 2]) {}
+ | ~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0642`.
diff --git a/tests/ui/issues/issue-50576.rs b/tests/ui/issues/issue-50576.rs
new file mode 100644
index 000000000..e0c36b827
--- /dev/null
+++ b/tests/ui/issues/issue-50576.rs
@@ -0,0 +1,6 @@
+fn main() {
+ |bool: [u8; break 'L]| 0;
+ //~^ ERROR [E0426]
+ //~| ERROR [E0268]
+ Vec::<[u8; break]>::new(); //~ ERROR [E0268]
+}
diff --git a/tests/ui/issues/issue-50576.stderr b/tests/ui/issues/issue-50576.stderr
new file mode 100644
index 000000000..4ec22fde9
--- /dev/null
+++ b/tests/ui/issues/issue-50576.stderr
@@ -0,0 +1,22 @@
+error[E0426]: use of undeclared label `'L`
+ --> $DIR/issue-50576.rs:2:23
+ |
+LL | |bool: [u8; break 'L]| 0;
+ | ^^ undeclared label `'L`
+
+error[E0268]: `break` outside of a loop or labeled block
+ --> $DIR/issue-50576.rs:2:17
+ |
+LL | |bool: [u8; break 'L]| 0;
+ | ^^^^^^^^ cannot `break` outside of a loop or labeled block
+
+error[E0268]: `break` outside of a loop or labeled block
+ --> $DIR/issue-50576.rs:5:16
+ |
+LL | Vec::<[u8; break]>::new();
+ | ^^^^^ cannot `break` outside of a loop or labeled block
+
+error: aborting due to 3 previous errors
+
+Some errors have detailed explanations: E0268, E0426.
+For more information about an error, try `rustc --explain E0268`.
diff --git a/tests/ui/issues/issue-50581.rs b/tests/ui/issues/issue-50581.rs
new file mode 100644
index 000000000..12bb9930e
--- /dev/null
+++ b/tests/ui/issues/issue-50581.rs
@@ -0,0 +1,3 @@
+fn main() {
+ |_: [u8; break]| (); //~ ERROR [E0268]
+}
diff --git a/tests/ui/issues/issue-50581.stderr b/tests/ui/issues/issue-50581.stderr
new file mode 100644
index 000000000..07b6df072
--- /dev/null
+++ b/tests/ui/issues/issue-50581.stderr
@@ -0,0 +1,9 @@
+error[E0268]: `break` outside of a loop or labeled block
+ --> $DIR/issue-50581.rs:2:14
+ |
+LL | |_: [u8; break]| ();
+ | ^^^^^ cannot `break` outside of a loop or labeled block
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0268`.
diff --git a/tests/ui/issues/issue-50582.rs b/tests/ui/issues/issue-50582.rs
new file mode 100644
index 000000000..2d5c93587
--- /dev/null
+++ b/tests/ui/issues/issue-50582.rs
@@ -0,0 +1,5 @@
+fn main() {
+ Vec::<[(); 1 + for x in 0..1 {}]>::new();
+ //~^ ERROR cannot add
+ //~| ERROR `for` is not allowed in a `const`
+}
diff --git a/tests/ui/issues/issue-50582.stderr b/tests/ui/issues/issue-50582.stderr
new file mode 100644
index 000000000..53ecc6112
--- /dev/null
+++ b/tests/ui/issues/issue-50582.stderr
@@ -0,0 +1,31 @@
+error[E0658]: `for` is not allowed in a `const`
+ --> $DIR/issue-50582.rs:2:20
+ |
+LL | Vec::<[(); 1 + for x in 0..1 {}]>::new();
+ | ^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #87575 <https://github.com/rust-lang/rust/issues/87575> for more information
+ = help: add `#![feature(const_for)]` to the crate attributes to enable
+
+error[E0277]: cannot add `()` to `{integer}` in const contexts
+ --> $DIR/issue-50582.rs:2:18
+ |
+LL | Vec::<[(); 1 + for x in 0..1 {}]>::new();
+ | ^ no implementation for `{integer} + ()`
+ |
+ = help: the trait `~const Add<()>` is not implemented for `{integer}`
+ = help: the following other types implement trait `Add<Rhs>`:
+ <&'a f32 as Add<f32>>
+ <&'a f64 as Add<f64>>
+ <&'a i128 as Add<i128>>
+ <&'a i16 as Add<i16>>
+ <&'a i32 as Add<i32>>
+ <&'a i64 as Add<i64>>
+ <&'a i8 as Add<i8>>
+ <&'a isize as Add<isize>>
+ and 48 others
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0277, E0658.
+For more information about an error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-50585.rs b/tests/ui/issues/issue-50585.rs
new file mode 100644
index 000000000..a2f11c98d
--- /dev/null
+++ b/tests/ui/issues/issue-50585.rs
@@ -0,0 +1,5 @@
+fn main() {
+ |y: Vec<[(); for x in 0..2 {}]>| {};
+ //~^ ERROR mismatched types
+ //~| ERROR `for` is not allowed in a `const`
+}
diff --git a/tests/ui/issues/issue-50585.stderr b/tests/ui/issues/issue-50585.stderr
new file mode 100644
index 000000000..e43cc20cb
--- /dev/null
+++ b/tests/ui/issues/issue-50585.stderr
@@ -0,0 +1,19 @@
+error[E0658]: `for` is not allowed in a `const`
+ --> $DIR/issue-50585.rs:2:18
+ |
+LL | |y: Vec<[(); for x in 0..2 {}]>| {};
+ | ^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #87575 <https://github.com/rust-lang/rust/issues/87575> for more information
+ = help: add `#![feature(const_for)]` to the crate attributes to enable
+
+error[E0308]: mismatched types
+ --> $DIR/issue-50585.rs:2:18
+ |
+LL | |y: Vec<[(); for x in 0..2 {}]>| {};
+ | ^^^^^^^^^^^^^^^^ expected `usize`, found `()`
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0308, E0658.
+For more information about an error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-50600.rs b/tests/ui/issues/issue-50600.rs
new file mode 100644
index 000000000..963e607af
--- /dev/null
+++ b/tests/ui/issues/issue-50600.rs
@@ -0,0 +1,5 @@
+struct Foo (
+ fn([u8; |x: u8| {}]), //~ ERROR mismatched types
+);
+
+fn main() {}
diff --git a/tests/ui/issues/issue-50600.stderr b/tests/ui/issues/issue-50600.stderr
new file mode 100644
index 000000000..7fea7e5c0
--- /dev/null
+++ b/tests/ui/issues/issue-50600.stderr
@@ -0,0 +1,12 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-50600.rs:2:13
+ |
+LL | fn([u8; |x: u8| {}]),
+ | ^^^^^^^^^^ expected `usize`, found closure
+ |
+ = note: expected type `usize`
+ found closure `[closure@$DIR/issue-50600.rs:2:13: 2:20]`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-50618.rs b/tests/ui/issues/issue-50618.rs
new file mode 100644
index 000000000..5f762bc43
--- /dev/null
+++ b/tests/ui/issues/issue-50618.rs
@@ -0,0 +1,19 @@
+struct Point {
+ pub x: u64,
+ pub y: u64,
+}
+
+const TEMPLATE: Point = Point {
+ x: 0,
+ y: 0
+};
+
+fn main() {
+ let _ = || {
+ Point {
+ nonexistent: 0,
+ //~^ ERROR struct `Point` has no field named `nonexistent`
+ ..TEMPLATE
+ }
+ };
+}
diff --git a/tests/ui/issues/issue-50618.stderr b/tests/ui/issues/issue-50618.stderr
new file mode 100644
index 000000000..1ac5dde66
--- /dev/null
+++ b/tests/ui/issues/issue-50618.stderr
@@ -0,0 +1,11 @@
+error[E0560]: struct `Point` has no field named `nonexistent`
+ --> $DIR/issue-50618.rs:14:13
+ |
+LL | nonexistent: 0,
+ | ^^^^^^^^^^^ `Point` does not have this field
+ |
+ = note: available fields are: `x`, `y`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0560`.
diff --git a/tests/ui/issues/issue-5062.rs b/tests/ui/issues/issue-5062.rs
new file mode 100644
index 000000000..2db0a8e25
--- /dev/null
+++ b/tests/ui/issues/issue-5062.rs
@@ -0,0 +1,2 @@
+fn main() { format!("{:?}", None); }
+ //~^ ERROR type annotations needed [E0282]
diff --git a/tests/ui/issues/issue-5062.stderr b/tests/ui/issues/issue-5062.stderr
new file mode 100644
index 000000000..3191bd3de
--- /dev/null
+++ b/tests/ui/issues/issue-5062.stderr
@@ -0,0 +1,14 @@
+error[E0282]: type annotations needed
+ --> $DIR/issue-5062.rs:1:29
+ |
+LL | fn main() { format!("{:?}", None); }
+ | ^^^^ cannot infer type of the type parameter `T` declared on the enum `Option`
+ |
+help: consider specifying the generic argument
+ |
+LL | fn main() { format!("{:?}", None::<T>); }
+ | +++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-5067.rs b/tests/ui/issues/issue-5067.rs
new file mode 100644
index 000000000..5857a0815
--- /dev/null
+++ b/tests/ui/issues/issue-5067.rs
@@ -0,0 +1,75 @@
+#![allow(unused_macros)]
+
+// Tests that repetition matchers cannot match the empty token tree (since that would be
+// ambiguous).
+
+// edition:2018
+
+macro_rules! foo {
+ ( $()* ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( $()+ ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( $()? ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( $(),* ) => {}; // PASS
+ ( $(),+ ) => {}; // PASS
+ // `?` cannot have a separator...
+ ( [$()*] ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( [$()+] ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( [$()?] ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( [$(),*] ) => {}; // PASS
+ ( [$(),+] ) => {}; // PASS
+ // `?` cannot have a separator...
+ ( $($()* $(),* $(a)* $(a),* )* ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( $($()* $(),* $(a)* $(a),* )+ ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( $($()* $(),* $(a)* $(a),* )? ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( $($()? $(),* $(a)? $(a),* )* ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( $($()? $(),* $(a)? $(a),* )+ ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( $($()? $(),* $(a)? $(a),* )? ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( $(a $(),* $(a)* $(a),* )* ) => {}; // PASS
+ ( $($(a)+ $(),* $(a)* $(a),* )+ ) => {}; // PASS
+ ( $($(a)+ $(),* $(a)* $(a),* )? ) => {}; // PASS
+
+ ( $(a $(),* $(a)? $(a),* )* ) => {}; // PASS
+ ( $($(a)+ $(),* $(a)? $(a),* )+ ) => {}; // PASS
+ ( $($(a)+ $(),* $(a)? $(a),* )? ) => {}; // PASS
+
+ ( $(a $()+)* ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( $(a $()*)+ ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( $(a $()+)? ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( $(a $()?)+ ) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+// Original Issue
+
+macro_rules! make_vec {
+ (a $e1:expr $($(, a $e2:expr)*)*) => ([$e1 $($(, $e2)*)*]);
+ //~^ ERROR repetition matches empty token tree
+}
+
+fn main() {
+ let _ = make_vec![a 1, a 2, a 3];
+}
+
+// Minified Issue
+
+macro_rules! m {
+ ( $()* ) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+m!();
diff --git a/tests/ui/issues/issue-5067.stderr b/tests/ui/issues/issue-5067.stderr
new file mode 100644
index 000000000..7ffc60714
--- /dev/null
+++ b/tests/ui/issues/issue-5067.stderr
@@ -0,0 +1,110 @@
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:9:8
+ |
+LL | ( $()* ) => {};
+ | ^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:11:8
+ |
+LL | ( $()+ ) => {};
+ | ^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:13:8
+ |
+LL | ( $()? ) => {};
+ | ^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:18:9
+ |
+LL | ( [$()*] ) => {};
+ | ^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:20:9
+ |
+LL | ( [$()+] ) => {};
+ | ^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:22:9
+ |
+LL | ( [$()?] ) => {};
+ | ^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:27:8
+ |
+LL | ( $($()* $(),* $(a)* $(a),* )* ) => {};
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:29:8
+ |
+LL | ( $($()* $(),* $(a)* $(a),* )+ ) => {};
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:31:8
+ |
+LL | ( $($()* $(),* $(a)* $(a),* )? ) => {};
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:33:8
+ |
+LL | ( $($()? $(),* $(a)? $(a),* )* ) => {};
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:35:8
+ |
+LL | ( $($()? $(),* $(a)? $(a),* )+ ) => {};
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:37:8
+ |
+LL | ( $($()? $(),* $(a)? $(a),* )? ) => {};
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:47:12
+ |
+LL | ( $(a $()+)* ) => {};
+ | ^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:49:12
+ |
+LL | ( $(a $()*)+ ) => {};
+ | ^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:51:12
+ |
+LL | ( $(a $()+)? ) => {};
+ | ^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:53:12
+ |
+LL | ( $(a $()?)+ ) => {};
+ | ^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:60:18
+ |
+LL | (a $e1:expr $($(, a $e2:expr)*)*) => ([$e1 $($(, $e2)*)*]);
+ | ^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:71:8
+ |
+LL | ( $()* ) => {};
+ | ^^
+
+error: aborting due to 18 previous errors
+
diff --git a/tests/ui/issues/issue-50688.rs b/tests/ui/issues/issue-50688.rs
new file mode 100644
index 000000000..88f898b86
--- /dev/null
+++ b/tests/ui/issues/issue-50688.rs
@@ -0,0 +1,3 @@
+fn main() {
+ [1; || {}]; //~ ERROR mismatched types
+}
diff --git a/tests/ui/issues/issue-50688.stderr b/tests/ui/issues/issue-50688.stderr
new file mode 100644
index 000000000..6973ad271
--- /dev/null
+++ b/tests/ui/issues/issue-50688.stderr
@@ -0,0 +1,12 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-50688.rs:2:9
+ |
+LL | [1; || {}];
+ | ^^^^^ expected `usize`, found closure
+ |
+ = note: expected type `usize`
+ found closure `[closure@$DIR/issue-50688.rs:2:9: 2:11]`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-50689.rs b/tests/ui/issues/issue-50689.rs
new file mode 100644
index 000000000..b49f29500
--- /dev/null
+++ b/tests/ui/issues/issue-50689.rs
@@ -0,0 +1,9 @@
+// run-pass
+#![allow(unused_variables)]
+enum Foo {
+ Bar = (|x: i32| { }, 42).1,
+}
+
+fn main() {
+ assert_eq!(Foo::Bar as usize, 42);
+}
diff --git a/tests/ui/issues/issue-50714-1.rs b/tests/ui/issues/issue-50714-1.rs
new file mode 100644
index 000000000..a25940ce1
--- /dev/null
+++ b/tests/ui/issues/issue-50714-1.rs
@@ -0,0 +1,11 @@
+// Regression test for issue 50714, make sure that this isn't a linker error.
+
+#![no_std]
+#![feature(start)]
+
+extern crate std;
+
+#[start]
+fn start(_: isize, _: *const *const u8) -> isize where fn(&()): Eq { //~ ERROR [E0647]
+ 0
+}
diff --git a/tests/ui/issues/issue-50714-1.stderr b/tests/ui/issues/issue-50714-1.stderr
new file mode 100644
index 000000000..28469bee0
--- /dev/null
+++ b/tests/ui/issues/issue-50714-1.stderr
@@ -0,0 +1,9 @@
+error[E0647]: start function is not allowed to have a `where` clause
+ --> $DIR/issue-50714-1.rs:9:50
+ |
+LL | fn start(_: isize, _: *const *const u8) -> isize where fn(&()): Eq {
+ | ^^^^^^^^^^^^^^^^^ start function cannot have a `where` clause
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0647`.
diff --git a/tests/ui/issues/issue-50714.rs b/tests/ui/issues/issue-50714.rs
new file mode 100644
index 000000000..c571a470c
--- /dev/null
+++ b/tests/ui/issues/issue-50714.rs
@@ -0,0 +1,3 @@
+// Regression test for issue 50714, make sure that this isn't a linker error.
+
+fn main() where fn(&()): Eq {} //~ ERROR [E0646]
diff --git a/tests/ui/issues/issue-50714.stderr b/tests/ui/issues/issue-50714.stderr
new file mode 100644
index 000000000..a11aceb62
--- /dev/null
+++ b/tests/ui/issues/issue-50714.stderr
@@ -0,0 +1,9 @@
+error[E0646]: `main` function is not allowed to have a `where` clause
+ --> $DIR/issue-50714.rs:3:11
+ |
+LL | fn main() where fn(&()): Eq {}
+ | ^^^^^^^^^^^^^^^^^ `main` cannot have a `where` clause
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0646`.
diff --git a/tests/ui/issues/issue-50761.rs b/tests/ui/issues/issue-50761.rs
new file mode 100644
index 000000000..1bf494ba8
--- /dev/null
+++ b/tests/ui/issues/issue-50761.rs
@@ -0,0 +1,23 @@
+// Confirm that we don't accidentally divide or mod by zero in llvm_type
+
+// build-pass
+
+mod a {
+ pub trait A {}
+}
+
+mod b {
+ pub struct Builder {}
+
+ pub fn new() -> Builder {
+ Builder {}
+ }
+
+ impl Builder {
+ pub fn with_a(&mut self, _a: fn() -> dyn (::a::A)) {}
+ }
+}
+
+pub use self::b::new;
+
+fn main() {}
diff --git a/tests/ui/issues/issue-50781.rs b/tests/ui/issues/issue-50781.rs
new file mode 100644
index 000000000..3c5e5a9f6
--- /dev/null
+++ b/tests/ui/issues/issue-50781.rs
@@ -0,0 +1,19 @@
+#![deny(where_clauses_object_safety)]
+
+trait Trait {}
+
+trait X {
+ fn foo(&self) where Self: Trait; //~ ERROR the trait `X` cannot be made into an object
+ //~^ WARN this was previously accepted by the compiler but is being phased out
+}
+
+impl X for () {
+ fn foo(&self) {}
+}
+
+impl Trait for dyn X {}
+
+pub fn main() {
+ // Check that this does not segfault.
+ <dyn X as X>::foo(&());
+}
diff --git a/tests/ui/issues/issue-50781.stderr b/tests/ui/issues/issue-50781.stderr
new file mode 100644
index 000000000..e185ecdda
--- /dev/null
+++ b/tests/ui/issues/issue-50781.stderr
@@ -0,0 +1,24 @@
+error: the trait `X` cannot be made into an object
+ --> $DIR/issue-50781.rs:6:8
+ |
+LL | fn foo(&self) where Self: Trait;
+ | ^^^
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #51443 <https://github.com/rust-lang/rust/issues/51443>
+note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
+ --> $DIR/issue-50781.rs:6:8
+ |
+LL | trait X {
+ | - this trait cannot be made into an object...
+LL | fn foo(&self) where Self: Trait;
+ | ^^^ ...because method `foo` references the `Self` type in its `where` clause
+ = help: consider moving `foo` to another trait
+note: the lint level is defined here
+ --> $DIR/issue-50781.rs:1:9
+ |
+LL | #![deny(where_clauses_object_safety)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-50802.rs b/tests/ui/issues/issue-50802.rs
new file mode 100644
index 000000000..dece55968
--- /dev/null
+++ b/tests/ui/issues/issue-50802.rs
@@ -0,0 +1,8 @@
+#[allow(unreachable_code)]
+
+fn main() {
+ loop {
+ break while continue { //~ ERROR E0590
+ }
+ }
+}
diff --git a/tests/ui/issues/issue-50802.stderr b/tests/ui/issues/issue-50802.stderr
new file mode 100644
index 000000000..e064fabcc
--- /dev/null
+++ b/tests/ui/issues/issue-50802.stderr
@@ -0,0 +1,9 @@
+error[E0590]: `break` or `continue` with no label in the condition of a `while` loop
+ --> $DIR/issue-50802.rs:5:21
+ |
+LL | break while continue {
+ | ^^^^^^^^ unlabeled `continue` in the condition of a `while` loop
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0590`.
diff --git a/tests/ui/issues/issue-50811.rs b/tests/ui/issues/issue-50811.rs
new file mode 100644
index 000000000..683c85604
--- /dev/null
+++ b/tests/ui/issues/issue-50811.rs
@@ -0,0 +1,55 @@
+// run-pass
+#![feature(test)]
+
+extern crate test;
+
+use std::mem::size_of;
+use test::black_box;
+
+// Ensure the const-eval result and runtime result of float comparison are equivalent.
+
+macro_rules! compare {
+ ($op:tt) => {
+ compare!(
+ [f64::NEG_INFINITY, -f64::MAX, -1.0, -0.0, 0.0, 1.0, f64::MAX, f64::INFINITY, f64::NAN],
+ $op
+ );
+ };
+ ([$($lhs:expr),+], $op:tt) => {
+ $(compare!(
+ $lhs,
+ $op,
+ [f64::NEG_INFINITY, -f64::MAX, -1.0, -0.0, 0.0, 1.0, f64::MAX, f64::INFINITY, f64::NAN]
+ );)+
+ };
+ ($lhs:expr, $op:tt, [$($rhs:expr),+]) => {
+ $({
+ // Wrap the check in its own function to reduce time needed to borrowck.
+ fn check() {
+ static CONST_EVAL: bool = $lhs $op $rhs;
+ let runtime_eval = black_box($lhs) $op black_box($rhs);
+ assert_eq!(CONST_EVAL, runtime_eval, stringify!($lhs $op $rhs));
+ assert_eq!(
+ size_of::<[u8; ($lhs $op $rhs) as usize]>(),
+ runtime_eval as usize,
+ stringify!($lhs $op $rhs (forced const eval))
+ );
+ }
+ check();
+ })+
+ };
+}
+
+fn main() {
+ assert_eq!(0.0/0.0 < 0.0/0.0, false);
+ assert_eq!(0.0/0.0 > 0.0/0.0, false);
+ assert_eq!(f64::NAN < f64::NAN, false);
+ assert_eq!(f64::NAN > f64::NAN, false);
+
+ compare!(==);
+ compare!(!=);
+ compare!(<);
+ compare!(<=);
+ compare!(>);
+ compare!(>=);
+}
diff --git a/tests/ui/issues/issue-50825-1.rs b/tests/ui/issues/issue-50825-1.rs
new file mode 100644
index 000000000..ee4316029
--- /dev/null
+++ b/tests/ui/issues/issue-50825-1.rs
@@ -0,0 +1,22 @@
+// run-pass
+// regression test for issue #50825
+// Make sure that the `impl` bound (): X<T = ()> is preferred over
+// the (): X bound in the where clause.
+
+trait X {
+ type T;
+}
+
+trait Y<U>: X {
+ fn foo(x: &Self::T);
+}
+
+impl X for () {
+ type T = ();
+}
+
+impl<T> Y<Vec<T>> for () where (): Y<T> {
+ fn foo(_x: &()) {}
+}
+
+fn main () {}
diff --git a/tests/ui/issues/issue-50825.rs b/tests/ui/issues/issue-50825.rs
new file mode 100644
index 000000000..1ece2e9fc
--- /dev/null
+++ b/tests/ui/issues/issue-50825.rs
@@ -0,0 +1,15 @@
+// run-pass
+// regression test for issue #50825
+// Make sure that the built-in bound {integer}: Sized is preferred over
+// the u64: Sized bound in the where clause.
+
+fn foo(y: &[()])
+where
+ u64: Sized,
+{
+ y[0]
+}
+
+fn main () {
+ foo(&[()]);
+}
diff --git a/tests/ui/issues/issue-50865-private-impl-trait/auxiliary/lib.rs b/tests/ui/issues/issue-50865-private-impl-trait/auxiliary/lib.rs
new file mode 100644
index 000000000..1e20a5460
--- /dev/null
+++ b/tests/ui/issues/issue-50865-private-impl-trait/auxiliary/lib.rs
@@ -0,0 +1,18 @@
+// revisions: default miropt
+//[miropt]compile-flags: -Z mir-opt-level=3
+// ~^ This flag is for #77668, it used to be ICE.
+
+#![crate_type = "lib"]
+
+pub fn bar<P>( // Error won't happen if "bar" is not generic
+ _baz: P,
+) {
+ hide_foo()();
+}
+
+fn hide_foo() -> impl Fn() { // Error won't happen if "iterate" hasn't impl Trait or has generics
+ foo
+}
+
+fn foo() { // Error won't happen if "foo" isn't used in "iterate" or has generics
+}
diff --git a/tests/ui/issues/issue-50865-private-impl-trait/main.rs b/tests/ui/issues/issue-50865-private-impl-trait/main.rs
new file mode 100644
index 000000000..16dfac53a
--- /dev/null
+++ b/tests/ui/issues/issue-50865-private-impl-trait/main.rs
@@ -0,0 +1,16 @@
+// run-pass
+// aux-build:lib.rs
+
+// Regression test for #50865.
+// When using generics or specifying the type directly, this example
+// codegens `foo` internally. However, when using a private `impl Trait`
+// function which references another private item, `foo` (in this case)
+// wouldn't be codegenned until main.rs used `bar`, as with impl Trait
+// it is not cast to `fn()` automatically to satisfy e.g.
+// `fn foo() -> fn() { ... }`.
+
+extern crate lib;
+
+fn main() {
+ lib::bar(()); // Error won't happen if bar is called from same crate
+}
diff --git a/tests/ui/issues/issue-5100.rs b/tests/ui/issues/issue-5100.rs
new file mode 100644
index 000000000..69ed4b0e4
--- /dev/null
+++ b/tests/ui/issues/issue-5100.rs
@@ -0,0 +1,57 @@
+#![feature(box_patterns)]
+
+
+enum A { B, C }
+
+fn main() {
+ match (true, false) {
+ A::B => (),
+//~^ ERROR mismatched types
+//~| expected tuple, found enum `A`
+//~| expected tuple `(bool, bool)`
+//~| found enum `A`
+ _ => ()
+ }
+
+ match (true, false) {
+ (true, false, false) => ()
+//~^ ERROR mismatched types
+//~| expected a tuple with 2 elements, found one with 3 elements
+//~| expected tuple `(bool, bool)`
+//~| found tuple `(_, _, _)`
+ }
+
+ match (true, false) {
+ (true, false, false) => ()
+//~^ ERROR mismatched types
+//~| expected a tuple with 2 elements, found one with 3 elements
+//~| expected tuple `(bool, bool)`
+//~| found tuple `(_, _, _)`
+ }
+
+ match (true, false) {
+ box (true, false) => ()
+//~^ ERROR mismatched types
+//~| expected tuple `(bool, bool)`
+//~| found struct `Box<_>`
+ }
+
+ match (true, false) {
+ &(true, false) => ()
+//~^ ERROR mismatched types
+//~| expected tuple, found reference
+//~| expected tuple `(bool, bool)`
+//~| found reference `&_`
+ }
+
+
+ let v = [('a', 'b') //~ ERROR expected function, found `(char, char)`
+ ('c', 'd'),
+ ('e', 'f')];
+
+ for &(x,y) in &v {} // should be OK
+
+ // Make sure none of the errors above were fatal
+ let x: char = true; //~ ERROR mismatched types
+ //~| expected `char`, found `bool`
+}
diff --git a/tests/ui/issues/issue-5100.stderr b/tests/ui/issues/issue-5100.stderr
new file mode 100644
index 000000000..c87a3e348
--- /dev/null
+++ b/tests/ui/issues/issue-5100.stderr
@@ -0,0 +1,76 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-5100.rs:8:9
+ |
+LL | enum A { B, C }
+ | - unit variant defined here
+...
+LL | match (true, false) {
+ | ------------- this expression has type `(bool, bool)`
+LL | A::B => (),
+ | ^^^^ expected tuple, found enum `A`
+ |
+ = note: expected tuple `(bool, bool)`
+ found enum `A`
+
+error[E0308]: mismatched types
+ --> $DIR/issue-5100.rs:17:9
+ |
+LL | match (true, false) {
+ | ------------- this expression has type `(bool, bool)`
+LL | (true, false, false) => ()
+ | ^^^^^^^^^^^^^^^^^^^^ expected a tuple with 2 elements, found one with 3 elements
+ |
+ = note: expected tuple `(bool, bool)`
+ found tuple `(_, _, _)`
+
+error[E0308]: mismatched types
+ --> $DIR/issue-5100.rs:25:9
+ |
+LL | match (true, false) {
+ | ------------- this expression has type `(bool, bool)`
+LL | (true, false, false) => ()
+ | ^^^^^^^^^^^^^^^^^^^^ expected a tuple with 2 elements, found one with 3 elements
+ |
+ = note: expected tuple `(bool, bool)`
+ found tuple `(_, _, _)`
+
+error[E0308]: mismatched types
+ --> $DIR/issue-5100.rs:33:9
+ |
+LL | match (true, false) {
+ | ------------- this expression has type `(bool, bool)`
+LL | box (true, false) => ()
+ | ^^^^^^^^^^^^^^^^^ expected tuple, found struct `Box`
+ |
+ = note: expected tuple `(bool, bool)`
+ found struct `Box<_>`
+
+error[E0308]: mismatched types
+ --> $DIR/issue-5100.rs:40:9
+ |
+LL | match (true, false) {
+ | ------------- this expression has type `(bool, bool)`
+LL | &(true, false) => ()
+ | ^^^^^^^^^^^^^^ expected tuple, found reference
+ |
+ = note: expected tuple `(bool, bool)`
+ found reference `&_`
+
+error[E0618]: expected function, found `(char, char)`
+ --> $DIR/issue-5100.rs:48:14
+ |
+LL | let v = [('a', 'b')
+ | ^^^^^^^^^^- help: consider separating array elements with a comma: `,`
+
+error[E0308]: mismatched types
+ --> $DIR/issue-5100.rs:55:19
+ |
+LL | let x: char = true;
+ | ---- ^^^^ expected `char`, found `bool`
+ | |
+ | expected due to this
+
+error: aborting due to 7 previous errors
+
+Some errors have detailed explanations: E0308, E0618.
+For more information about an error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-51022.rs b/tests/ui/issues/issue-51022.rs
new file mode 100644
index 000000000..cebdfe00c
--- /dev/null
+++ b/tests/ui/issues/issue-51022.rs
@@ -0,0 +1,2 @@
+fn main<'a>() { }
+ //~^ ERROR `main` function is not allowed to have generic parameters [E0131]
diff --git a/tests/ui/issues/issue-51022.stderr b/tests/ui/issues/issue-51022.stderr
new file mode 100644
index 000000000..5e196bd4e
--- /dev/null
+++ b/tests/ui/issues/issue-51022.stderr
@@ -0,0 +1,9 @@
+error[E0131]: `main` function is not allowed to have generic parameters
+ --> $DIR/issue-51022.rs:1:8
+ |
+LL | fn main<'a>() { }
+ | ^^^^ `main` cannot have generic parameters
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0131`.
diff --git a/tests/ui/issues/issue-51044.rs b/tests/ui/issues/issue-51044.rs
new file mode 100644
index 000000000..628d78769
--- /dev/null
+++ b/tests/ui/issues/issue-51044.rs
@@ -0,0 +1,30 @@
+// run-pass
+// regression test for issue #50825
+// Check that the feature gate normalizes associated types.
+
+#![allow(dead_code)]
+struct Foo<T>(T);
+struct Duck;
+struct Quack;
+
+trait Hello<A> where A: Animal {
+}
+
+trait Animal {
+ type Noise;
+}
+
+trait Loud<R> {
+}
+
+impl Loud<Quack> for f32 {
+}
+
+impl Animal for Duck {
+ type Noise = Quack;
+}
+
+impl Hello<Duck> for Foo<f32> where f32: Loud<<Duck as Animal>::Noise> {
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-51102.rs b/tests/ui/issues/issue-51102.rs
new file mode 100644
index 000000000..41446cd29
--- /dev/null
+++ b/tests/ui/issues/issue-51102.rs
@@ -0,0 +1,38 @@
+enum SimpleEnum {
+ NoState,
+}
+
+struct SimpleStruct {
+ no_state_here: u64,
+}
+
+fn main() {
+ let _ = |simple| {
+ match simple {
+ SimpleStruct {
+ state: 0,
+ //~^ struct `SimpleStruct` does not have a field named `state` [E0026]
+ ..
+ } => (),
+ }
+ };
+
+ let _ = |simple| {
+ match simple {
+ SimpleStruct {
+ no_state_here: 0,
+ no_state_here: 1
+ //~^ ERROR field `no_state_here` bound multiple times in the pattern [E0025]
+ } => (),
+ }
+ };
+
+ let _ = |simple| {
+ match simple {
+ SimpleEnum::NoState {
+ state: 0
+ //~^ ERROR variant `SimpleEnum::NoState` does not have a field named `state` [E0026]
+ } => (),
+ }
+ };
+}
diff --git a/tests/ui/issues/issue-51102.stderr b/tests/ui/issues/issue-51102.stderr
new file mode 100644
index 000000000..09c52292d
--- /dev/null
+++ b/tests/ui/issues/issue-51102.stderr
@@ -0,0 +1,27 @@
+error[E0026]: struct `SimpleStruct` does not have a field named `state`
+ --> $DIR/issue-51102.rs:13:17
+ |
+LL | state: 0,
+ | ^^^^^
+ | |
+ | struct `SimpleStruct` does not have this field
+ | help: `SimpleStruct` has a field named `no_state_here`
+
+error[E0025]: field `no_state_here` bound multiple times in the pattern
+ --> $DIR/issue-51102.rs:24:17
+ |
+LL | no_state_here: 0,
+ | ---------------- first use of `no_state_here`
+LL | no_state_here: 1
+ | ^^^^^^^^^^^^^^^^ multiple uses of `no_state_here` in pattern
+
+error[E0026]: variant `SimpleEnum::NoState` does not have a field named `state`
+ --> $DIR/issue-51102.rs:33:17
+ |
+LL | state: 0
+ | ^^^^^ variant `SimpleEnum::NoState` does not have this field
+
+error: aborting due to 3 previous errors
+
+Some errors have detailed explanations: E0025, E0026.
+For more information about an error, try `rustc --explain E0025`.
diff --git a/tests/ui/issues/issue-51116.rs b/tests/ui/issues/issue-51116.rs
new file mode 100644
index 000000000..4c21cbfc6
--- /dev/null
+++ b/tests/ui/issues/issue-51116.rs
@@ -0,0 +1,12 @@
+fn main() {
+ let tiles = Default::default();
+ for row in &mut tiles {
+ for tile in row {
+ *tile = 0;
+ //~^ ERROR type annotations needed
+ //~| NOTE cannot infer type
+ }
+ }
+
+ let tiles: [[usize; 3]; 3] = tiles;
+}
diff --git a/tests/ui/issues/issue-51116.stderr b/tests/ui/issues/issue-51116.stderr
new file mode 100644
index 000000000..c07f8735e
--- /dev/null
+++ b/tests/ui/issues/issue-51116.stderr
@@ -0,0 +1,9 @@
+error[E0282]: type annotations needed
+ --> $DIR/issue-51116.rs:5:13
+ |
+LL | *tile = 0;
+ | ^^^^^ cannot infer type
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-51154.rs b/tests/ui/issues/issue-51154.rs
new file mode 100644
index 000000000..12903f790
--- /dev/null
+++ b/tests/ui/issues/issue-51154.rs
@@ -0,0 +1,6 @@
+fn foo<F: FnMut()>() {
+ let _: Box<F> = Box::new(|| ());
+ //~^ ERROR mismatched types
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-51154.stderr b/tests/ui/issues/issue-51154.stderr
new file mode 100644
index 000000000..d8a833a86
--- /dev/null
+++ b/tests/ui/issues/issue-51154.stderr
@@ -0,0 +1,19 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-51154.rs:2:30
+ |
+LL | fn foo<F: FnMut()>() {
+ | - this type parameter
+LL | let _: Box<F> = Box::new(|| ());
+ | -------- ^^^^^ expected type parameter `F`, found closure
+ | |
+ | arguments to this function are incorrect
+ |
+ = note: expected type parameter `F`
+ found closure `[closure@$DIR/issue-51154.rs:2:30: 2:32]`
+ = help: every closure has a distinct type and so could not always match the caller-chosen type of parameter `F`
+note: associated function defined here
+ --> $SRC_DIR/alloc/src/boxed.rs:LL:COL
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-51515.rs b/tests/ui/issues/issue-51515.rs
new file mode 100644
index 000000000..797c1085d
--- /dev/null
+++ b/tests/ui/issues/issue-51515.rs
@@ -0,0 +1,10 @@
+fn main() {
+ let foo = &16;
+ //~^ HELP consider changing this to be a mutable reference
+ //~| SUGGESTION &mut 16
+ *foo = 32;
+ //~^ ERROR cannot assign to `*foo`, which is behind a `&` reference
+ let bar = foo;
+ *bar = 64;
+ //~^ ERROR cannot assign to `*bar`, which is behind a `&` reference
+}
diff --git a/tests/ui/issues/issue-51515.stderr b/tests/ui/issues/issue-51515.stderr
new file mode 100644
index 000000000..c4e61e719
--- /dev/null
+++ b/tests/ui/issues/issue-51515.stderr
@@ -0,0 +1,22 @@
+error[E0594]: cannot assign to `*foo`, which is behind a `&` reference
+ --> $DIR/issue-51515.rs:5:5
+ |
+LL | *foo = 32;
+ | ^^^^^^^^^ `foo` is a `&` reference, so the data it refers to cannot be written
+ |
+help: consider changing this to be a mutable reference
+ |
+LL | let foo = &mut 16;
+ | ~~~~~~~
+
+error[E0594]: cannot assign to `*bar`, which is behind a `&` reference
+ --> $DIR/issue-51515.rs:8:5
+ |
+LL | let bar = foo;
+ | --- consider changing this binding's type to be: `&mut i32`
+LL | *bar = 64;
+ | ^^^^^^^^^ `bar` is a `&` reference, so the data it refers to cannot be written
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0594`.
diff --git a/tests/ui/issues/issue-5153.rs b/tests/ui/issues/issue-5153.rs
new file mode 100644
index 000000000..5bf057903
--- /dev/null
+++ b/tests/ui/issues/issue-5153.rs
@@ -0,0 +1,12 @@
+trait Foo {
+ fn foo(self: Box<Self>);
+}
+
+impl Foo for isize {
+ fn foo(self: Box<isize>) { }
+}
+
+fn main() {
+ (&5isize as &dyn Foo).foo();
+ //~^ ERROR: no method named `foo` found for reference `&dyn Foo` in the current scope
+}
diff --git a/tests/ui/issues/issue-5153.stderr b/tests/ui/issues/issue-5153.stderr
new file mode 100644
index 000000000..93aaf4b9d
--- /dev/null
+++ b/tests/ui/issues/issue-5153.stderr
@@ -0,0 +1,12 @@
+error[E0599]: no method named `foo` found for reference `&dyn Foo` in the current scope
+ --> $DIR/issue-5153.rs:10:27
+ |
+LL | fn foo(self: Box<Self>);
+ | --------- the method might not be found because of this arbitrary self type
+...
+LL | (&5isize as &dyn Foo).foo();
+ | ^^^ method not found in `&dyn Foo`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-51632-try-desugar-incompatible-types.rs b/tests/ui/issues/issue-51632-try-desugar-incompatible-types.rs
new file mode 100644
index 000000000..35402dff6
--- /dev/null
+++ b/tests/ui/issues/issue-51632-try-desugar-incompatible-types.rs
@@ -0,0 +1,12 @@
+#![allow(dead_code)]
+
+fn missing_discourses() -> Result<isize, ()> {
+ Ok(1)
+}
+
+fn forbidden_narratives() -> Result<isize, ()> {
+ missing_discourses()?
+ //~^ ERROR: `?` operator has incompatible types
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-51632-try-desugar-incompatible-types.stderr b/tests/ui/issues/issue-51632-try-desugar-incompatible-types.stderr
new file mode 100644
index 000000000..cc0726bca
--- /dev/null
+++ b/tests/ui/issues/issue-51632-try-desugar-incompatible-types.stderr
@@ -0,0 +1,22 @@
+error[E0308]: `?` operator has incompatible types
+ --> $DIR/issue-51632-try-desugar-incompatible-types.rs:8:5
+ |
+LL | missing_discourses()?
+ | ^^^^^^^^^^^^^^^^^^^^^ expected enum `Result`, found `isize`
+ |
+ = note: `?` operator cannot convert from `isize` to `Result<isize, ()>`
+ = note: expected enum `Result<isize, ()>`
+ found type `isize`
+help: try removing this `?`
+ |
+LL - missing_discourses()?
+LL + missing_discourses()
+ |
+help: try wrapping the expression in `Ok`
+ |
+LL | Ok(missing_discourses()?)
+ | +++ +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-51655.rs b/tests/ui/issues/issue-51655.rs
new file mode 100644
index 000000000..36fd90dab
--- /dev/null
+++ b/tests/ui/issues/issue-51655.rs
@@ -0,0 +1,14 @@
+// check-pass
+#![allow(dead_code)]
+
+const PATH_DOT: &[u8] = &[b'.'];
+
+fn match_slice(element: &[u8]) {
+ match element {
+ &[] => {}
+ PATH_DOT => {}
+ _ => {}
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-51714.rs b/tests/ui/issues/issue-51714.rs
new file mode 100644
index 000000000..8716524d6
--- /dev/null
+++ b/tests/ui/issues/issue-51714.rs
@@ -0,0 +1,21 @@
+fn main() {
+//~^ NOTE: not the enclosing function body
+//~| NOTE: not the enclosing function body
+//~| NOTE: not the enclosing function body
+//~| NOTE: not the enclosing function body
+ |_: [_; return || {}] | {};
+ //~^ ERROR: return statement outside of function body [E0572]
+ //~| NOTE: the return is part of this body...
+
+ [(); return || {}];
+ //~^ ERROR: return statement outside of function body [E0572]
+ //~| NOTE: the return is part of this body...
+
+ [(); return |ice| {}];
+ //~^ ERROR: return statement outside of function body [E0572]
+ //~| NOTE: the return is part of this body...
+
+ [(); return while let Some(n) = Some(0) {}];
+ //~^ ERROR: return statement outside of function body [E0572]
+ //~| NOTE: the return is part of this body...
+}
diff --git a/tests/ui/issues/issue-51714.stderr b/tests/ui/issues/issue-51714.stderr
new file mode 100644
index 000000000..514d69c1c
--- /dev/null
+++ b/tests/ui/issues/issue-51714.stderr
@@ -0,0 +1,63 @@
+error[E0572]: return statement outside of function body
+ --> $DIR/issue-51714.rs:6:14
+ |
+LL | / fn main() {
+LL | |
+LL | |
+LL | |
+LL | |
+LL | | |_: [_; return || {}] | {};
+ | | ^^^^^^^^^^^^ the return is part of this body...
+... |
+LL | |
+LL | | }
+ | |_- ...not the enclosing function body
+
+error[E0572]: return statement outside of function body
+ --> $DIR/issue-51714.rs:10:10
+ |
+LL | / fn main() {
+LL | |
+LL | |
+LL | |
+... |
+LL | | [(); return || {}];
+ | | ^^^^^^^^^^^^ the return is part of this body...
+... |
+LL | |
+LL | | }
+ | |_- ...not the enclosing function body
+
+error[E0572]: return statement outside of function body
+ --> $DIR/issue-51714.rs:14:10
+ |
+LL | / fn main() {
+LL | |
+LL | |
+LL | |
+... |
+LL | | [(); return |ice| {}];
+ | | ^^^^^^^^^^^^^^^ the return is part of this body...
+... |
+LL | |
+LL | | }
+ | |_- ...not the enclosing function body
+
+error[E0572]: return statement outside of function body
+ --> $DIR/issue-51714.rs:18:10
+ |
+LL | / fn main() {
+LL | |
+LL | |
+LL | |
+... |
+LL | | [(); return while let Some(n) = Some(0) {}];
+ | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the return is part of this body...
+LL | |
+LL | |
+LL | | }
+ | |_- ...not the enclosing function body
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0572`.
diff --git a/tests/ui/issues/issue-51798.rs b/tests/ui/issues/issue-51798.rs
new file mode 100644
index 000000000..b075809e9
--- /dev/null
+++ b/tests/ui/issues/issue-51798.rs
@@ -0,0 +1,14 @@
+// edition:2018
+// aux-build:issue-51798.rs
+// check-pass
+
+extern crate issue_51798;
+
+mod server {
+ fn f() {
+ let mut v = issue_51798::vec();
+ v.clear();
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-51874.rs b/tests/ui/issues/issue-51874.rs
new file mode 100644
index 000000000..d9d7e36b5
--- /dev/null
+++ b/tests/ui/issues/issue-51874.rs
@@ -0,0 +1,3 @@
+fn main() {
+ let a = (1.0).pow(1.0); //~ ERROR can't call method `pow` on ambiguous numeric type
+}
diff --git a/tests/ui/issues/issue-51874.stderr b/tests/ui/issues/issue-51874.stderr
new file mode 100644
index 000000000..b39159a65
--- /dev/null
+++ b/tests/ui/issues/issue-51874.stderr
@@ -0,0 +1,14 @@
+error[E0689]: can't call method `pow` on ambiguous numeric type `{float}`
+ --> $DIR/issue-51874.rs:2:19
+ |
+LL | let a = (1.0).pow(1.0);
+ | ^^^
+ |
+help: you must specify a concrete type for this numeric value, like `f32`
+ |
+LL | let a = (1.0_f32).pow(1.0);
+ | ~~~~~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0689`.
diff --git a/tests/ui/issues/issue-51907.rs b/tests/ui/issues/issue-51907.rs
new file mode 100644
index 000000000..9378f4357
--- /dev/null
+++ b/tests/ui/issues/issue-51907.rs
@@ -0,0 +1,19 @@
+// run-pass
+trait Foo {
+ extern "C" fn borrow(&self);
+ extern "C" fn take(self: Box<Self>);
+}
+
+struct Bar;
+impl Foo for Bar {
+ #[allow(improper_ctypes_definitions)]
+ extern "C" fn borrow(&self) {}
+ #[allow(improper_ctypes_definitions)]
+ extern "C" fn take(self: Box<Self>) {}
+}
+
+fn main() {
+ let foo: Box<dyn Foo> = Box::new(Bar);
+ foo.borrow();
+ foo.take()
+}
diff --git a/tests/ui/issues/issue-5192.rs b/tests/ui/issues/issue-5192.rs
new file mode 100644
index 000000000..e2f835c19
--- /dev/null
+++ b/tests/ui/issues/issue-5192.rs
@@ -0,0 +1,39 @@
+// run-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+pub trait EventLoop {
+ fn dummy(&self) { }
+}
+
+pub struct UvEventLoop {
+ uvio: isize
+}
+
+impl UvEventLoop {
+ pub fn new() -> UvEventLoop {
+ UvEventLoop {
+ uvio: 0
+ }
+ }
+}
+
+impl EventLoop for UvEventLoop {
+}
+
+pub struct Scheduler {
+ event_loop: Box<dyn EventLoop+'static>,
+}
+
+impl Scheduler {
+
+ pub fn new(event_loop: Box<dyn EventLoop+'static>) -> Scheduler {
+ Scheduler {
+ event_loop: event_loop,
+ }
+ }
+}
+
+pub fn main() {
+ let _sched = Scheduler::new(Box::new(UvEventLoop::new()) as Box<dyn EventLoop>);
+}
diff --git a/tests/ui/issues/issue-51947.rs b/tests/ui/issues/issue-51947.rs
new file mode 100644
index 000000000..c877fb8ae
--- /dev/null
+++ b/tests/ui/issues/issue-51947.rs
@@ -0,0 +1,17 @@
+// build-pass
+
+#![crate_type = "lib"]
+#![feature(linkage)]
+
+// MergeFunctions will merge these via an anonymous internal
+// backing function, which must be named if ThinLTO buffers are used
+
+#[linkage = "weak"]
+pub fn fn1(a: u32, b: u32, c: u32) -> u32 {
+ a + b + c
+}
+
+#[linkage = "weak"]
+pub fn fn2(a: u32, b: u32, c: u32) -> u32 {
+ a + b + c
+}
diff --git a/tests/ui/issues/issue-52049.rs b/tests/ui/issues/issue-52049.rs
new file mode 100644
index 000000000..efdcc4493
--- /dev/null
+++ b/tests/ui/issues/issue-52049.rs
@@ -0,0 +1,8 @@
+fn foo(_: &'static u32) {}
+
+fn unpromotable<T>(t: T) -> T { t }
+
+fn main() {
+ foo(&unpromotable(5u32));
+}
+//~^^ ERROR temporary value dropped while borrowed
diff --git a/tests/ui/issues/issue-52049.stderr b/tests/ui/issues/issue-52049.stderr
new file mode 100644
index 000000000..b25dbd1cb
--- /dev/null
+++ b/tests/ui/issues/issue-52049.stderr
@@ -0,0 +1,14 @@
+error[E0716]: temporary value dropped while borrowed
+ --> $DIR/issue-52049.rs:6:10
+ |
+LL | foo(&unpromotable(5u32));
+ | -----^^^^^^^^^^^^^^^^^^-
+ | | |
+ | | creates a temporary value which is freed while still in use
+ | argument requires that borrow lasts for `'static`
+LL | }
+ | - temporary value is freed at the end of this statement
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0716`.
diff --git a/tests/ui/issues/issue-52126-assign-op-invariance.rs b/tests/ui/issues/issue-52126-assign-op-invariance.rs
new file mode 100644
index 000000000..c96cfdf3c
--- /dev/null
+++ b/tests/ui/issues/issue-52126-assign-op-invariance.rs
@@ -0,0 +1,49 @@
+// Issue 52126: With respect to variance, the assign-op's like += were
+// accidentally lumped together with other binary op's. In both cases
+// we were coercing the LHS of the op to the expected supertype.
+//
+// The problem is that since the LHS of += is modified, we need the
+// parameter to be invariant with respect to the overall type, not
+// covariant.
+
+use std::collections::HashMap;
+use std::ops::AddAssign;
+
+pub fn main() {
+ panics();
+}
+
+pub struct Counter<'l> {
+ map: HashMap<&'l str, usize>,
+}
+
+impl<'l> AddAssign for Counter<'l>
+{
+ fn add_assign(&mut self, rhs: Counter<'l>) {
+ rhs.map.into_iter().for_each(|(key, val)| {
+ let count = self.map.entry(key).or_insert(0);
+ *count += val;
+ });
+ }
+}
+
+/// Often crashes, if not prints invalid strings.
+pub fn panics() {
+ let mut acc = Counter{map: HashMap::new()};
+ for line in vec!["123456789".to_string(), "12345678".to_string()] {
+ let v: Vec<&str> = line.split_whitespace().collect();
+ //~^ ERROR `line` does not live long enough
+ // println!("accumulator before add_assign {:?}", acc.map);
+ let mut map = HashMap::new();
+ for str_ref in v {
+ let e = map.entry(str_ref);
+ println!("entry: {:?}", e);
+ let count = e.or_insert(0);
+ *count += 1;
+ }
+ let cnt2 = Counter{map};
+ acc += cnt2;
+ // println!("accumulator after add_assign {:?}", acc.map);
+ // line gets dropped here but references are kept in acc.map
+ }
+}
diff --git a/tests/ui/issues/issue-52126-assign-op-invariance.stderr b/tests/ui/issues/issue-52126-assign-op-invariance.stderr
new file mode 100644
index 000000000..d45067577
--- /dev/null
+++ b/tests/ui/issues/issue-52126-assign-op-invariance.stderr
@@ -0,0 +1,15 @@
+error[E0597]: `line` does not live long enough
+ --> $DIR/issue-52126-assign-op-invariance.rs:34:28
+ |
+LL | let v: Vec<&str> = line.split_whitespace().collect();
+ | ^^^^^^^^^^^^^^^^^^^^^^^ borrowed value does not live long enough
+...
+LL | acc += cnt2;
+ | --- borrow later used here
+...
+LL | }
+ | - `line` dropped here while still borrowed
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0597`.
diff --git a/tests/ui/issues/issue-52140/auxiliary/some_crate.rs b/tests/ui/issues/issue-52140/auxiliary/some_crate.rs
new file mode 100644
index 000000000..087005849
--- /dev/null
+++ b/tests/ui/issues/issue-52140/auxiliary/some_crate.rs
@@ -0,0 +1,5 @@
+#![crate_type = "lib"]
+
+pub fn hello() {
+ println!("Hello, world!");
+}
diff --git a/tests/ui/issues/issue-52140/main.rs b/tests/ui/issues/issue-52140/main.rs
new file mode 100644
index 000000000..aeac43404
--- /dev/null
+++ b/tests/ui/issues/issue-52140/main.rs
@@ -0,0 +1,13 @@
+// run-pass
+// aux-build:some_crate.rs
+// compile-flags:--extern some_crate
+// edition:2018
+
+mod foo {
+ pub use some_crate;
+}
+
+fn main() {
+ ::some_crate::hello();
+ foo::some_crate::hello();
+}
diff --git a/tests/ui/issues/issue-52141/auxiliary/some_crate.rs b/tests/ui/issues/issue-52141/auxiliary/some_crate.rs
new file mode 100644
index 000000000..087005849
--- /dev/null
+++ b/tests/ui/issues/issue-52141/auxiliary/some_crate.rs
@@ -0,0 +1,5 @@
+#![crate_type = "lib"]
+
+pub fn hello() {
+ println!("Hello, world!");
+}
diff --git a/tests/ui/issues/issue-52141/main.rs b/tests/ui/issues/issue-52141/main.rs
new file mode 100644
index 000000000..7eea1726c
--- /dev/null
+++ b/tests/ui/issues/issue-52141/main.rs
@@ -0,0 +1,16 @@
+// run-pass
+// aux-build:some_crate.rs
+// compile-flags:--extern some_crate
+// edition:2018
+
+use some_crate as some_name;
+
+mod foo {
+ pub use crate::some_name::*;
+}
+
+fn main() {
+ ::some_crate::hello();
+ some_name::hello();
+ foo::hello();
+}
diff --git a/tests/ui/issues/issue-52262.rs b/tests/ui/issues/issue-52262.rs
new file mode 100644
index 000000000..547643f0d
--- /dev/null
+++ b/tests/ui/issues/issue-52262.rs
@@ -0,0 +1,24 @@
+#[derive(Debug)]
+enum MyError {
+ NotFound { key: Vec<u8> },
+ Err41,
+}
+
+impl std::error::Error for MyError {}
+
+impl std::fmt::Display for MyError {
+ fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
+ match self {
+ MyError::NotFound { key } => write!(
+ f,
+ "unknown error with code {}.",
+ String::from_utf8(*key).unwrap()
+ //~^ ERROR cannot move out of `*key` which is behind a shared reference
+ ),
+ MyError::Err41 => write!(f, "Sit by a lake"),
+ }
+ }
+}
+fn main() {
+ println!("Hello, world!");
+}
diff --git a/tests/ui/issues/issue-52262.stderr b/tests/ui/issues/issue-52262.stderr
new file mode 100644
index 000000000..ef41f078b
--- /dev/null
+++ b/tests/ui/issues/issue-52262.stderr
@@ -0,0 +1,9 @@
+error[E0507]: cannot move out of `*key` which is behind a shared reference
+ --> $DIR/issue-52262.rs:15:35
+ |
+LL | String::from_utf8(*key).unwrap()
+ | ^^^^ move occurs because `*key` has type `Vec<u8>`, which does not implement the `Copy` trait
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0507`.
diff --git a/tests/ui/issues/issue-5239-1.rs b/tests/ui/issues/issue-5239-1.rs
new file mode 100644
index 000000000..708ae34c6
--- /dev/null
+++ b/tests/ui/issues/issue-5239-1.rs
@@ -0,0 +1,6 @@
+// Regression test for issue #5239
+
+fn main() {
+ let x = |ref x: isize| { x += 1; };
+ //~^ ERROR E0368
+}
diff --git a/tests/ui/issues/issue-5239-1.stderr b/tests/ui/issues/issue-5239-1.stderr
new file mode 100644
index 000000000..f53ddb954
--- /dev/null
+++ b/tests/ui/issues/issue-5239-1.stderr
@@ -0,0 +1,11 @@
+error[E0368]: binary assignment operation `+=` cannot be applied to type `&isize`
+ --> $DIR/issue-5239-1.rs:4:30
+ |
+LL | let x = |ref x: isize| { x += 1; };
+ | -^^^^^
+ | |
+ | cannot use `+=` on type `&isize`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0368`.
diff --git a/tests/ui/issues/issue-5239-2.rs b/tests/ui/issues/issue-5239-2.rs
new file mode 100644
index 000000000..b501c6e18
--- /dev/null
+++ b/tests/ui/issues/issue-5239-2.rs
@@ -0,0 +1,9 @@
+// run-pass
+// Regression test for issue #5239
+
+
+pub fn main() {
+ let _f = |ref x: isize| { *x };
+ let foo = 10;
+ assert_eq!(_f(foo), 10);
+}
diff --git a/tests/ui/issues/issue-52489.rs b/tests/ui/issues/issue-52489.rs
new file mode 100644
index 000000000..8efe21698
--- /dev/null
+++ b/tests/ui/issues/issue-52489.rs
@@ -0,0 +1,8 @@
+// edition:2018
+// aux-build:issue-52489.rs
+// compile-flags:--extern issue_52489
+
+use issue_52489;
+//~^ ERROR use of unstable library feature 'issue_52489_unstable'
+
+fn main() {}
diff --git a/tests/ui/issues/issue-52489.stderr b/tests/ui/issues/issue-52489.stderr
new file mode 100644
index 000000000..842ebd196
--- /dev/null
+++ b/tests/ui/issues/issue-52489.stderr
@@ -0,0 +1,11 @@
+error[E0658]: use of unstable library feature 'issue_52489_unstable'
+ --> $DIR/issue-52489.rs:5:5
+ |
+LL | use issue_52489;
+ | ^^^^^^^^^^^
+ |
+ = help: add `#![feature(issue_52489_unstable)]` to the crate attributes to enable
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0658`.
diff --git a/tests/ui/issues/issue-52533.rs b/tests/ui/issues/issue-52533.rs
new file mode 100644
index 000000000..bb9a1911f
--- /dev/null
+++ b/tests/ui/issues/issue-52533.rs
@@ -0,0 +1,7 @@
+fn foo(_: impl for<'a> FnOnce(&'a u32, &u32) -> &'a u32) {
+}
+
+fn main() {
+ foo(|a, b| b)
+ //~^ ERROR lifetime may not live long enough
+}
diff --git a/tests/ui/issues/issue-52533.stderr b/tests/ui/issues/issue-52533.stderr
new file mode 100644
index 000000000..c764736d7
--- /dev/null
+++ b/tests/ui/issues/issue-52533.stderr
@@ -0,0 +1,11 @@
+error: lifetime may not live long enough
+ --> $DIR/issue-52533.rs:5:16
+ |
+LL | foo(|a, b| b)
+ | - - ^ closure was supposed to return data with lifetime `'2` but it is returning data with lifetime `'1`
+ | | |
+ | | has type `&'1 u32`
+ | has type `&'2 u32`
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-52705/auxiliary/png2.rs b/tests/ui/issues/issue-52705/auxiliary/png2.rs
new file mode 100644
index 000000000..fa9956e44
--- /dev/null
+++ b/tests/ui/issues/issue-52705/auxiliary/png2.rs
@@ -0,0 +1,3 @@
+#![crate_type = "lib"]
+
+pub struct DecodingError;
diff --git a/tests/ui/issues/issue-52705/main.rs b/tests/ui/issues/issue-52705/main.rs
new file mode 100644
index 000000000..90bb8ca75
--- /dev/null
+++ b/tests/ui/issues/issue-52705/main.rs
@@ -0,0 +1,15 @@
+// run-pass
+#![allow(dead_code)]
+// aux-build:png2.rs
+// compile-flags:--extern png2
+// edition:2018
+
+mod png {
+ use png2 as png_ext;
+
+ fn foo() -> png_ext::DecodingError { unimplemented!() }
+}
+
+fn main() {
+ println!("Hello, world!");
+}
diff --git a/tests/ui/issues/issue-52717.rs b/tests/ui/issues/issue-52717.rs
new file mode 100644
index 000000000..f83232a4a
--- /dev/null
+++ b/tests/ui/issues/issue-52717.rs
@@ -0,0 +1,13 @@
+enum A {
+ A {
+ foo: usize,
+ }
+}
+
+fn main() {
+ let x = A::A { foo: 3 };
+ match x {
+ A::A { fob } => { println!("{}", fob); }
+//~^ ERROR does not have a field named `fob`
+ }
+}
diff --git a/tests/ui/issues/issue-52717.stderr b/tests/ui/issues/issue-52717.stderr
new file mode 100644
index 000000000..468cdf2dc
--- /dev/null
+++ b/tests/ui/issues/issue-52717.stderr
@@ -0,0 +1,12 @@
+error[E0026]: variant `A::A` does not have a field named `fob`
+ --> $DIR/issue-52717.rs:10:12
+ |
+LL | A::A { fob } => { println!("{}", fob); }
+ | ^^^
+ | |
+ | variant `A::A` does not have this field
+ | help: a field with a similar name exists: `foo`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0026`.
diff --git a/tests/ui/issues/issue-5280.rs b/tests/ui/issues/issue-5280.rs
new file mode 100644
index 000000000..5c5ce6c98
--- /dev/null
+++ b/tests/ui/issues/issue-5280.rs
@@ -0,0 +1,18 @@
+// run-pass
+#![allow(dead_code)]
+
+type FontTableTag = u32;
+
+trait FontTableTagConversions {
+ fn tag_to_string(self);
+}
+
+impl FontTableTagConversions for FontTableTag {
+ fn tag_to_string(self) {
+ let _ = &self;
+ }
+}
+
+pub fn main() {
+ 5.tag_to_string();
+}
diff --git a/tests/ui/issues/issue-5315.rs b/tests/ui/issues/issue-5315.rs
new file mode 100644
index 000000000..0c121a5ee
--- /dev/null
+++ b/tests/ui/issues/issue-5315.rs
@@ -0,0 +1,9 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+struct A(#[allow(unused_tuple_struct_fields)] bool);
+
+pub fn main() {
+ let f = A;
+ f(true);
+}
diff --git a/tests/ui/issues/issue-5321-immediates-with-bare-self.rs b/tests/ui/issues/issue-5321-immediates-with-bare-self.rs
new file mode 100644
index 000000000..64aa2836a
--- /dev/null
+++ b/tests/ui/issues/issue-5321-immediates-with-bare-self.rs
@@ -0,0 +1,15 @@
+// run-pass
+
+trait Fooable {
+ fn yes(self);
+}
+
+impl Fooable for usize {
+ fn yes(self) {
+ for _ in 0..self { println!("yes"); }
+ }
+}
+
+pub fn main() {
+ 2.yes();
+}
diff --git a/tests/ui/issues/issue-53251.rs b/tests/ui/issues/issue-53251.rs
new file mode 100644
index 000000000..240826a16
--- /dev/null
+++ b/tests/ui/issues/issue-53251.rs
@@ -0,0 +1,21 @@
+struct S;
+
+impl S {
+ fn f() {}
+}
+
+macro_rules! impl_add {
+ ($($n:ident)*) => {
+ $(
+ fn $n() {
+ S::f::<i64>();
+ //~^ ERROR this associated function takes 0 generic
+ //~| ERROR this associated function takes 0 generic
+ }
+ )*
+ }
+}
+
+impl_add!(a b);
+
+fn main() { }
diff --git a/tests/ui/issues/issue-53251.stderr b/tests/ui/issues/issue-53251.stderr
new file mode 100644
index 000000000..cee9a5deb
--- /dev/null
+++ b/tests/ui/issues/issue-53251.stderr
@@ -0,0 +1,39 @@
+error[E0107]: this associated function takes 0 generic arguments but 1 generic argument was supplied
+ --> $DIR/issue-53251.rs:11:20
+ |
+LL | S::f::<i64>();
+ | ^------- help: remove these generics
+ | |
+ | expected 0 generic arguments
+...
+LL | impl_add!(a b);
+ | -------------- in this macro invocation
+ |
+note: associated function defined here, with 0 generic parameters
+ --> $DIR/issue-53251.rs:4:8
+ |
+LL | fn f() {}
+ | ^
+ = note: this error originates in the macro `impl_add` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0107]: this associated function takes 0 generic arguments but 1 generic argument was supplied
+ --> $DIR/issue-53251.rs:11:20
+ |
+LL | S::f::<i64>();
+ | ^------- help: remove these generics
+ | |
+ | expected 0 generic arguments
+...
+LL | impl_add!(a b);
+ | -------------- in this macro invocation
+ |
+note: associated function defined here, with 0 generic parameters
+ --> $DIR/issue-53251.rs:4:8
+ |
+LL | fn f() {}
+ | ^
+ = note: this error originates in the macro `impl_add` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0107`.
diff --git a/tests/ui/issues/issue-53275.rs b/tests/ui/issues/issue-53275.rs
new file mode 100644
index 000000000..5ae6fb2d4
--- /dev/null
+++ b/tests/ui/issues/issue-53275.rs
@@ -0,0 +1,9 @@
+// build-pass
+
+#![crate_type = "lib"]
+#![allow(unconditional_panic)]
+struct S(u8);
+
+pub fn ice() {
+ S([][0]);
+}
diff --git a/tests/ui/issues/issue-53300.rs b/tests/ui/issues/issue-53300.rs
new file mode 100644
index 000000000..09f0fe9d9
--- /dev/null
+++ b/tests/ui/issues/issue-53300.rs
@@ -0,0 +1,12 @@
+// issue 53300
+
+pub trait A {
+ fn add(&self, b: i32) -> i32;
+}
+
+fn addition() -> Wrapper<impl A> {}
+//~^ ERROR cannot find type `Wrapper` in this scope [E0412]
+
+fn main() {
+ let res = addition();
+}
diff --git a/tests/ui/issues/issue-53300.stderr b/tests/ui/issues/issue-53300.stderr
new file mode 100644
index 000000000..2fedef7d2
--- /dev/null
+++ b/tests/ui/issues/issue-53300.stderr
@@ -0,0 +1,9 @@
+error[E0412]: cannot find type `Wrapper` in this scope
+ --> $DIR/issue-53300.rs:7:18
+ |
+LL | fn addition() -> Wrapper<impl A> {}
+ | ^^^^^^^ not found in this scope
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0412`.
diff --git a/tests/ui/issues/issue-53333.rs b/tests/ui/issues/issue-53333.rs
new file mode 100644
index 000000000..ccc9971f9
--- /dev/null
+++ b/tests/ui/issues/issue-53333.rs
@@ -0,0 +1,9 @@
+// run-pass
+#![allow(unused_imports)]
+// edition:2018
+
+fn main() {
+ use std;
+ let std = "std";
+ println!("{}", std);
+}
diff --git a/tests/ui/issues/issue-53348.rs b/tests/ui/issues/issue-53348.rs
new file mode 100644
index 000000000..d2f8c77c0
--- /dev/null
+++ b/tests/ui/issues/issue-53348.rs
@@ -0,0 +1,15 @@
+fn main() {
+ let mut v = vec!["hello", "this", "is", "a", "test"];
+
+ let v2 = Vec::new();
+
+ v.into_iter().map(|s|s.to_owned()).collect::<Vec<_>>();
+
+ let mut a = String::new(); //~ NOTE expected due to this value
+ for i in v {
+ a = *i.to_string();
+ //~^ ERROR mismatched types
+ //~| NOTE expected struct `String`, found `str`
+ v2.push(a);
+ }
+}
diff --git a/tests/ui/issues/issue-53348.stderr b/tests/ui/issues/issue-53348.stderr
new file mode 100644
index 000000000..71d9f5b3d
--- /dev/null
+++ b/tests/ui/issues/issue-53348.stderr
@@ -0,0 +1,12 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-53348.rs:10:13
+ |
+LL | let mut a = String::new();
+ | ------------- expected due to this value
+LL | for i in v {
+LL | a = *i.to_string();
+ | ^^^^^^^^^^^^^^ expected struct `String`, found `str`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-53419.rs b/tests/ui/issues/issue-53419.rs
new file mode 100644
index 000000000..892ec66af
--- /dev/null
+++ b/tests/ui/issues/issue-53419.rs
@@ -0,0 +1,8 @@
+// check-pass
+
+struct Foo {
+ bar: dyn for<'r> Fn(usize, &'r dyn FnMut())
+}
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-53498.rs b/tests/ui/issues/issue-53498.rs
new file mode 100644
index 000000000..9e0437c46
--- /dev/null
+++ b/tests/ui/issues/issue-53498.rs
@@ -0,0 +1,17 @@
+pub mod test {
+ pub struct A;
+ pub struct B;
+ pub struct Foo<T>(T);
+
+ impl Foo<A> {
+ fn foo() {}
+ }
+
+ impl Foo<B> {
+ fn foo() {}
+ }
+}
+
+fn main() {
+ test::Foo::<test::B>::foo(); //~ ERROR associated function `foo` is private
+}
diff --git a/tests/ui/issues/issue-53498.stderr b/tests/ui/issues/issue-53498.stderr
new file mode 100644
index 000000000..b28fbff62
--- /dev/null
+++ b/tests/ui/issues/issue-53498.stderr
@@ -0,0 +1,12 @@
+error[E0624]: associated function `foo` is private
+ --> $DIR/issue-53498.rs:16:27
+ |
+LL | fn foo() {}
+ | -------- private associated function defined here
+...
+LL | test::Foo::<test::B>::foo();
+ | ^^^ private associated function
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0624`.
diff --git a/tests/ui/issues/issue-53568.rs b/tests/ui/issues/issue-53568.rs
new file mode 100644
index 000000000..49ae444f9
--- /dev/null
+++ b/tests/ui/issues/issue-53568.rs
@@ -0,0 +1,47 @@
+// Regression test for an NLL-related ICE (#53568) -- we failed to
+// resolve inference variables in "custom type-ops".
+//
+// check-pass
+
+trait Future {
+ type Item;
+}
+
+impl<F, T> Future for F
+where F: Fn() -> T
+{
+ type Item = T;
+}
+
+trait Connect {}
+
+struct Connector<H> {
+ handler: H,
+}
+
+impl<H, T> Connect for Connector<H>
+where
+ T: 'static,
+ H: Future<Item = T>
+{
+}
+
+struct Client<C> {
+ connector: C,
+}
+
+fn build<C>(_connector: C) -> Client<C> {
+ unimplemented!()
+}
+
+fn client<H>(handler: H) -> Client<impl Connect>
+where H: Fn() + Copy
+{
+ let connector = Connector {
+ handler,
+ };
+ let client = build(connector);
+ client
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-5358-1.rs b/tests/ui/issues/issue-5358-1.rs
new file mode 100644
index 000000000..f5e32e78d
--- /dev/null
+++ b/tests/ui/issues/issue-5358-1.rs
@@ -0,0 +1,13 @@
+enum Either<T, U> { Left(T), Right(U) }
+struct S(Either<usize, usize>);
+
+fn main() {
+ match S(Either::Left(5)) {
+ Either::Right(_) => {}
+ //~^ ERROR mismatched types
+ //~| expected struct `S`, found enum `Either`
+ //~| expected struct `S`
+ //~| found enum `Either<_, _>`
+ _ => {}
+ }
+}
diff --git a/tests/ui/issues/issue-5358-1.stderr b/tests/ui/issues/issue-5358-1.stderr
new file mode 100644
index 000000000..9d5b8d9d3
--- /dev/null
+++ b/tests/ui/issues/issue-5358-1.stderr
@@ -0,0 +1,22 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-5358-1.rs:6:9
+ |
+LL | match S(Either::Left(5)) {
+ | ------------------ this expression has type `S`
+LL | Either::Right(_) => {}
+ | ^^^^^^^^^^^^^^^^ expected struct `S`, found enum `Either`
+ |
+ = note: expected struct `S`
+ found enum `Either<_, _>`
+help: try wrapping the pattern in `S`
+ |
+LL | S(Either::Right(_)) => {}
+ | ++ +
+help: you might have meant to use field `0` whose type is `Either<usize, usize>`
+ |
+LL | match S(Either::Left(5)).0 {
+ | ~~~~~~~~~~~~~~~~~~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-53712.rs b/tests/ui/issues/issue-53712.rs
new file mode 100644
index 000000000..2353904d7
--- /dev/null
+++ b/tests/ui/issues/issue-53712.rs
@@ -0,0 +1,9 @@
+// issue #53712: make the error generated by using tuple indexing on an array more specific
+
+fn main() {
+ let arr = [10, 20, 30, 40, 50];
+ arr.0;
+ //~^ ERROR no field `0` on type `[{integer}; 5]` [E0609]
+ //~| HELP instead of using tuple indexing, use array indexing
+ //~| SUGGESTION arr[0]
+}
diff --git a/tests/ui/issues/issue-53712.stderr b/tests/ui/issues/issue-53712.stderr
new file mode 100644
index 000000000..db85919af
--- /dev/null
+++ b/tests/ui/issues/issue-53712.stderr
@@ -0,0 +1,11 @@
+error[E0609]: no field `0` on type `[{integer}; 5]`
+ --> $DIR/issue-53712.rs:5:9
+ |
+LL | arr.0;
+ | ----^
+ | |
+ | help: instead of using tuple indexing, use array indexing: `arr[0]`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0609`.
diff --git a/tests/ui/issues/issue-53728.rs b/tests/ui/issues/issue-53728.rs
new file mode 100644
index 000000000..77b5010f7
--- /dev/null
+++ b/tests/ui/issues/issue-53728.rs
@@ -0,0 +1,19 @@
+// run-pass
+
+#![allow(dead_code)]
+#[repr(u16)]
+enum DeviceKind {
+ Nil = 0,
+}
+
+#[repr(packed)]
+struct DeviceInfo {
+ endianness: u8,
+ device_kind: DeviceKind,
+}
+
+fn main() {
+ let _x = None::<(DeviceInfo, u8)>;
+ let _y = None::<(DeviceInfo, u16)>;
+ let _z = None::<(DeviceInfo, u64)>;
+}
diff --git a/tests/ui/issues/issue-53843.rs b/tests/ui/issues/issue-53843.rs
new file mode 100644
index 000000000..f305b370c
--- /dev/null
+++ b/tests/ui/issues/issue-53843.rs
@@ -0,0 +1,26 @@
+// run-pass
+
+use std::ops::Deref;
+
+pub struct Pin<P>(P);
+
+impl<P, T> Deref for Pin<P>
+where
+ P: Deref<Target=T>,
+{
+ type Target = T;
+
+ fn deref(&self) -> &T {
+ &*self.0
+ }
+}
+
+impl<P> Pin<P> {
+ fn poll(self) {}
+}
+
+fn main() {
+ let mut unit = ();
+ let pin = Pin(&mut unit);
+ pin.poll();
+}
diff --git a/tests/ui/issues/issue-54044.rs b/tests/ui/issues/issue-54044.rs
new file mode 100644
index 000000000..809ea7a87
--- /dev/null
+++ b/tests/ui/issues/issue-54044.rs
@@ -0,0 +1,13 @@
+#![deny(unused_attributes)] //~ NOTE lint level is defined here
+
+#[cold]
+//~^ ERROR attribute should be applied to a function
+//~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+struct Foo; //~ NOTE not a function
+
+fn main() {
+ #[cold]
+ //~^ ERROR attribute should be applied to a function
+ //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ 5; //~ NOTE not a function
+}
diff --git a/tests/ui/issues/issue-54044.stderr b/tests/ui/issues/issue-54044.stderr
new file mode 100644
index 000000000..8bd94a041
--- /dev/null
+++ b/tests/ui/issues/issue-54044.stderr
@@ -0,0 +1,29 @@
+error: attribute should be applied to a function definition
+ --> $DIR/issue-54044.rs:3:1
+ |
+LL | #[cold]
+ | ^^^^^^^
+...
+LL | struct Foo;
+ | ----------- not a function definition
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+note: the lint level is defined here
+ --> $DIR/issue-54044.rs:1:9
+ |
+LL | #![deny(unused_attributes)]
+ | ^^^^^^^^^^^^^^^^^
+
+error: attribute should be applied to a function definition
+ --> $DIR/issue-54044.rs:9:5
+ |
+LL | #[cold]
+ | ^^^^^^^
+...
+LL | 5;
+ | - not a function definition
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/issues/issue-54062.rs b/tests/ui/issues/issue-54062.rs
new file mode 100644
index 000000000..093d6601d
--- /dev/null
+++ b/tests/ui/issues/issue-54062.rs
@@ -0,0 +1,12 @@
+use std::sync::Mutex;
+
+struct Test {
+ comps: Mutex<String>,
+}
+
+fn main() {}
+
+fn testing(test: Test) {
+ let _ = test.comps.inner.try_lock();
+ //~^ ERROR: field `inner` of struct `Mutex` is private
+}
diff --git a/tests/ui/issues/issue-54062.stderr b/tests/ui/issues/issue-54062.stderr
new file mode 100644
index 000000000..5361ee1d3
--- /dev/null
+++ b/tests/ui/issues/issue-54062.stderr
@@ -0,0 +1,9 @@
+error[E0616]: field `inner` of struct `Mutex` is private
+ --> $DIR/issue-54062.rs:10:24
+ |
+LL | let _ = test.comps.inner.try_lock();
+ | ^^^^^ private field
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0616`.
diff --git a/tests/ui/issues/issue-54094.rs b/tests/ui/issues/issue-54094.rs
new file mode 100644
index 000000000..ec38dc40e
--- /dev/null
+++ b/tests/ui/issues/issue-54094.rs
@@ -0,0 +1,14 @@
+// check-pass
+trait Zoo {
+ type X;
+}
+
+impl Zoo for u16 {
+ type X = usize;
+}
+
+fn foo(abc: <u16 as Zoo>::X) {}
+
+fn main() {
+ let x: *const u8 = foo as _;
+}
diff --git a/tests/ui/issues/issue-54302-cases.rs b/tests/ui/issues/issue-54302-cases.rs
new file mode 100644
index 000000000..faa116269
--- /dev/null
+++ b/tests/ui/issues/issue-54302-cases.rs
@@ -0,0 +1,85 @@
+trait Mirror {
+ type Image;
+ fn coerce(self) -> Self::Image;
+}
+
+impl<T> Mirror for T {
+ type Image = T;
+ fn coerce(self) -> Self { self }
+}
+
+trait Foo<'x, T> {
+ fn foo(self) -> &'x T;
+}
+
+impl<'s, 'x, T: 'x> Foo<'x, T> for &'s T where &'s T: Foo2<'x, T> {
+ fn foo(self) -> &'x T { self.foo2() }
+}
+
+trait Foo2<'x, T> {
+ fn foo2(self) -> &'x T;
+}
+
+// example 1 - fails leak check
+impl<'x> Foo2<'x, u32> for &'x u32
+{
+ fn foo2(self) -> &'x u32 { self }
+}
+
+// example 2 - OK with this issue
+impl<'x, 'a: 'x> Foo2<'x, i32> for &'a i32
+{
+ fn foo2(self) -> &'x i32 { self }
+}
+
+// example 3 - fails due to issue #XYZ + Leak-check
+impl<'x, T> Foo2<'x, u64> for T
+ where T: Mirror<Image=&'x u64>
+{
+ fn foo2(self) -> &'x u64 { self.coerce() }
+}
+
+// example 4 - fails due to issue #XYZ
+impl<'x, 'a: 'x, T> Foo2<'x, i64> for T
+ where T: Mirror<Image=&'a i64>
+{
+ fn foo2(self) -> &'x i64 { self.coerce() }
+}
+
+
+trait RefFoo<T> {
+ fn ref_foo(&self) -> &'static T;
+}
+
+impl<T> RefFoo<T> for T where for<'a> &'a T: Foo<'static, T> {
+ fn ref_foo(&self) -> &'static T {
+ self.foo()
+ }
+}
+
+
+fn coerce_lifetime1(a: &u32) -> &'static u32
+{
+ <u32 as RefFoo<u32>>::ref_foo(a)
+ //~^ ERROR not general enough
+}
+
+fn coerce_lifetime2(a: &i32) -> &'static i32
+{
+ <i32 as RefFoo<i32>>::ref_foo(a)
+ //~^ ERROR not general enough
+}
+
+fn coerce_lifetime3(a: &u64) -> &'static u64
+{
+ <u64 as RefFoo<u64>>::ref_foo(a)
+ //~^ ERROR not general enough
+}
+
+fn coerce_lifetime4(a: &i64) -> &'static i64
+{
+ <i64 as RefFoo<i64>>::ref_foo(a)
+ //~^ ERROR not general enough
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-54302-cases.stderr b/tests/ui/issues/issue-54302-cases.stderr
new file mode 100644
index 000000000..6e8b69c4b
--- /dev/null
+++ b/tests/ui/issues/issue-54302-cases.stderr
@@ -0,0 +1,38 @@
+error: implementation of `Foo` is not general enough
+ --> $DIR/issue-54302-cases.rs:63:5
+ |
+LL | <u32 as RefFoo<u32>>::ref_foo(a)
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ implementation of `Foo` is not general enough
+ |
+ = note: `Foo<'static, u32>` would have to be implemented for the type `&'0 u32`, for any lifetime `'0`...
+ = note: ...but `Foo<'_, u32>` is actually implemented for the type `&'1 u32`, for some specific lifetime `'1`
+
+error: implementation of `Foo` is not general enough
+ --> $DIR/issue-54302-cases.rs:69:5
+ |
+LL | <i32 as RefFoo<i32>>::ref_foo(a)
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ implementation of `Foo` is not general enough
+ |
+ = note: `Foo<'static, i32>` would have to be implemented for the type `&'0 i32`, for any lifetime `'0`...
+ = note: ...but `Foo<'_, i32>` is actually implemented for the type `&'1 i32`, for some specific lifetime `'1`
+
+error: implementation of `Foo` is not general enough
+ --> $DIR/issue-54302-cases.rs:75:5
+ |
+LL | <u64 as RefFoo<u64>>::ref_foo(a)
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ implementation of `Foo` is not general enough
+ |
+ = note: `Foo<'static, u64>` would have to be implemented for the type `&'0 u64`, for any lifetime `'0`...
+ = note: ...but `Foo<'_, u64>` is actually implemented for the type `&'1 u64`, for some specific lifetime `'1`
+
+error: implementation of `Foo` is not general enough
+ --> $DIR/issue-54302-cases.rs:81:5
+ |
+LL | <i64 as RefFoo<i64>>::ref_foo(a)
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ implementation of `Foo` is not general enough
+ |
+ = note: `Foo<'static, i64>` would have to be implemented for the type `&'0 i64`, for any lifetime `'0`...
+ = note: ...but `Foo<'_, i64>` is actually implemented for the type `&'1 i64`, for some specific lifetime `'1`
+
+error: aborting due to 4 previous errors
+
diff --git a/tests/ui/issues/issue-54302.rs b/tests/ui/issues/issue-54302.rs
new file mode 100644
index 000000000..1bfaebc38
--- /dev/null
+++ b/tests/ui/issues/issue-54302.rs
@@ -0,0 +1,19 @@
+trait Deserialize<'de> {}
+
+trait DeserializeOwned: for<'de> Deserialize<'de> {}
+impl<T> DeserializeOwned for T where T: for<'de> Deserialize<'de> {}
+
+// Based on this impl, `&'static str` only implements Deserialize<'static>.
+// It does not implement for<'de> Deserialize<'de>.
+impl<'de: 'a, 'a> Deserialize<'de> for &'a str {}
+
+fn main() {
+ // Then why does it implement DeserializeOwned? This compiles.
+ fn assert_deserialize_owned<T: DeserializeOwned>() {}
+ assert_deserialize_owned::<&'static str>();
+ //~^ ERROR not general enough
+
+ // It correctly does not implement for<'de> Deserialize<'de>.
+ //fn assert_hrtb<T: for<'de> Deserialize<'de>>() {}
+ //assert_hrtb::<&'static str>();
+}
diff --git a/tests/ui/issues/issue-54302.stderr b/tests/ui/issues/issue-54302.stderr
new file mode 100644
index 000000000..26c46571f
--- /dev/null
+++ b/tests/ui/issues/issue-54302.stderr
@@ -0,0 +1,11 @@
+error: implementation of `Deserialize` is not general enough
+ --> $DIR/issue-54302.rs:13:5
+ |
+LL | assert_deserialize_owned::<&'static str>();
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ implementation of `Deserialize` is not general enough
+ |
+ = note: `&'static str` must implement `Deserialize<'0>`, for any lifetime `'0`...
+ = note: ...but `&str` actually implements `Deserialize<'1>`, for some specific lifetime `'1`
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-5439.rs b/tests/ui/issues/issue-5439.rs
new file mode 100644
index 000000000..852b264dc
--- /dev/null
+++ b/tests/ui/issues/issue-5439.rs
@@ -0,0 +1,19 @@
+struct Foo {
+ foo: isize,
+}
+
+struct Bar {
+ bar: isize,
+}
+
+impl Bar {
+ fn make_foo (&self, i: isize) -> Box<Foo> {
+ return Box::new(Foo { nonexistent: self, foo: i }); //~ ERROR: no field named
+ }
+}
+
+fn main () {
+ let bar = Bar { bar: 1 };
+ let foo = bar.make_foo(2);
+ println!("{}", foo.foo);
+}
diff --git a/tests/ui/issues/issue-5439.stderr b/tests/ui/issues/issue-5439.stderr
new file mode 100644
index 000000000..dc8f8b878
--- /dev/null
+++ b/tests/ui/issues/issue-5439.stderr
@@ -0,0 +1,11 @@
+error[E0560]: struct `Foo` has no field named `nonexistent`
+ --> $DIR/issue-5439.rs:11:31
+ |
+LL | return Box::new(Foo { nonexistent: self, foo: i });
+ | ^^^^^^^^^^^ `Foo` does not have this field
+ |
+ = note: available fields are: `foo`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0560`.
diff --git a/tests/ui/issues/issue-54410.rs b/tests/ui/issues/issue-54410.rs
new file mode 100644
index 000000000..e3e8ca985
--- /dev/null
+++ b/tests/ui/issues/issue-54410.rs
@@ -0,0 +1,8 @@
+extern "C" {
+ pub static mut symbol: [i8];
+ //~^ ERROR the size for values of type `[i8]` cannot be known at compilation time
+}
+
+fn main() {
+ println!("{:p}", unsafe { &symbol });
+}
diff --git a/tests/ui/issues/issue-54410.stderr b/tests/ui/issues/issue-54410.stderr
new file mode 100644
index 000000000..516c59afb
--- /dev/null
+++ b/tests/ui/issues/issue-54410.stderr
@@ -0,0 +1,11 @@
+error[E0277]: the size for values of type `[i8]` cannot be known at compilation time
+ --> $DIR/issue-54410.rs:2:28
+ |
+LL | pub static mut symbol: [i8];
+ | ^^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `[i8]`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-54462-mutable-noalias-correctness.rs b/tests/ui/issues/issue-54462-mutable-noalias-correctness.rs
new file mode 100644
index 000000000..412028bdc
--- /dev/null
+++ b/tests/ui/issues/issue-54462-mutable-noalias-correctness.rs
@@ -0,0 +1,25 @@
+// run-pass
+//
+// compile-flags: -Ccodegen-units=1 -O
+
+fn linidx(row: usize, col: usize) -> usize {
+ row * 1 + col * 3
+}
+
+fn main() {
+ let mut mat = [1.0f32, 5.0, 9.0, 2.0, 6.0, 10.0, 3.0, 7.0, 11.0, 4.0, 8.0, 12.0];
+
+ for i in 0..2 {
+ for j in i+1..3 {
+ if mat[linidx(j, 3)] > mat[linidx(i, 3)] {
+ for k in 0..4 {
+ let (x, rest) = mat.split_at_mut(linidx(i, k) + 1);
+ let a = x.last_mut().unwrap();
+ let b = rest.get_mut(linidx(j, k) - linidx(i, k) - 1).unwrap();
+ ::std::mem::swap(a, b);
+ }
+ }
+ }
+ }
+ assert_eq!([9.0, 5.0, 1.0, 10.0, 6.0, 2.0, 11.0, 7.0, 3.0, 12.0, 8.0, 4.0], mat);
+}
diff --git a/tests/ui/issues/issue-54477-reduced-2.rs b/tests/ui/issues/issue-54477-reduced-2.rs
new file mode 100644
index 000000000..199d69b45
--- /dev/null
+++ b/tests/ui/issues/issue-54477-reduced-2.rs
@@ -0,0 +1,26 @@
+// run-pass
+// rust-lang/rust#54477: runtime bug in the VecDeque library that was
+// exposed by this test case, derived from test suite of crates.io
+// `collection` crate.
+
+use std::collections::VecDeque;
+
+fn main() {
+ let mut vecdeque_13 = VecDeque::from(vec![ ]);
+ let mut vecdeque_29 = VecDeque::from(vec![ 0 ]);
+ vecdeque_29.insert(0, 30 );
+ vecdeque_29.insert(1, 31 );
+ vecdeque_29.insert(2, 32 );
+ vecdeque_29.insert(3, 33 );
+ vecdeque_29.insert(4, 34 );
+ vecdeque_29.insert(5, 35 );
+ // println!("vecdeque_13: {:?}", vecdeque_13);
+ // println!("vecdeque_29: {:?}", vecdeque_29);
+
+ // println!("Invoking: `vecdeque_13.append(&mut vecdeque_29)`");
+ vecdeque_13.append(&mut vecdeque_29);
+
+ // println!("vecdeque_13: {:?}", vecdeque_13);
+
+ assert_eq!(vecdeque_13, VecDeque::from(vec![30, 31, 32, 33, 34, 35, 0]));
+}
diff --git a/tests/ui/issues/issue-54582.rs b/tests/ui/issues/issue-54582.rs
new file mode 100644
index 000000000..8c50cac67
--- /dev/null
+++ b/tests/ui/issues/issue-54582.rs
@@ -0,0 +1,16 @@
+// run-pass
+
+pub trait Stage: Sync {}
+
+pub enum Enum {
+ A,
+ B,
+}
+
+impl Stage for Enum {}
+
+pub static ARRAY: [(&dyn Stage, &str); 1] = [
+ (&Enum::A, ""),
+];
+
+fn main() {}
diff --git a/tests/ui/issues/issue-54696.rs b/tests/ui/issues/issue-54696.rs
new file mode 100644
index 000000000..15355d30d
--- /dev/null
+++ b/tests/ui/issues/issue-54696.rs
@@ -0,0 +1,8 @@
+// run-pass
+
+fn main() {
+ // We shouldn't promote this
+ let _ = &(main as fn() == main as fn());
+ // Also check nested case
+ let _ = &(&(main as fn()) == &(main as fn()));
+}
diff --git a/tests/ui/issues/issue-5518.rs b/tests/ui/issues/issue-5518.rs
new file mode 100644
index 000000000..97ed9ef30
--- /dev/null
+++ b/tests/ui/issues/issue-5518.rs
@@ -0,0 +1,8 @@
+// run-pass
+// aux-build:issue-5518.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_5518 as other;
+
+fn main() {}
diff --git a/tests/ui/issues/issue-5521.rs b/tests/ui/issues/issue-5521.rs
new file mode 100644
index 000000000..cafdbc399
--- /dev/null
+++ b/tests/ui/issues/issue-5521.rs
@@ -0,0 +1,17 @@
+// run-pass
+#![allow(dead_code)]
+// aux-build:issue-5521.rs
+
+
+
+extern crate issue_5521 as foo;
+
+fn bar(a: foo::map) {
+ if false {
+ panic!();
+ } else {
+ let _b = &(*a)[&2];
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-55376.rs b/tests/ui/issues/issue-55376.rs
new file mode 100644
index 000000000..4adff2b45
--- /dev/null
+++ b/tests/ui/issues/issue-55376.rs
@@ -0,0 +1,16 @@
+// run-pass
+// Tests that paths in `pub(...)` don't fail HIR verification.
+
+#![allow(unused_imports)]
+#![allow(dead_code)]
+
+pub(self) use self::my_mod::Foo;
+
+mod my_mod {
+ pub(super) use self::Foo as Bar;
+ pub(in super::my_mod) use self::Foo as Baz;
+
+ pub struct Foo;
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-55380.rs b/tests/ui/issues/issue-55380.rs
new file mode 100644
index 000000000..f7cb296d3
--- /dev/null
+++ b/tests/ui/issues/issue-55380.rs
@@ -0,0 +1,28 @@
+// run-pass
+#![feature(specialization)]
+//~^ WARN the feature `specialization` is incomplete
+
+pub trait Foo {
+ fn abc() -> u32;
+ fn def() -> u32;
+}
+
+pub trait Marker {}
+
+impl Marker for () {}
+
+impl<T> Foo for T {
+ default fn abc() -> u32 { 16 }
+ default fn def() -> u32 { 42 }
+}
+
+impl<T: Marker> Foo for T {
+ fn def() -> u32 {
+ Self::abc()
+ }
+}
+
+fn main() {
+ assert_eq!(<()>::def(), 16);
+ assert_eq!(<i32>::def(), 42);
+}
diff --git a/tests/ui/issues/issue-55380.stderr b/tests/ui/issues/issue-55380.stderr
new file mode 100644
index 000000000..403844c72
--- /dev/null
+++ b/tests/ui/issues/issue-55380.stderr
@@ -0,0 +1,12 @@
+warning: the feature `specialization` is incomplete and may not be safe to use and/or cause compiler crashes
+ --> $DIR/issue-55380.rs:2:12
+ |
+LL | #![feature(specialization)]
+ | ^^^^^^^^^^^^^^
+ |
+ = note: see issue #31844 <https://github.com/rust-lang/rust/issues/31844> for more information
+ = help: consider using `min_specialization` instead, which is more stable and complete
+ = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/issues/issue-5550.rs b/tests/ui/issues/issue-5550.rs
new file mode 100644
index 000000000..6ea24747b
--- /dev/null
+++ b/tests/ui/issues/issue-5550.rs
@@ -0,0 +1,9 @@
+// run-pass
+#![allow(unused_assignments)]
+// pretty-expanded FIXME #23616
+
+pub fn main() {
+ let s: String = "foobar".to_string();
+ let mut t: &str = &s;
+ t = &t[0..3]; // for master: str::view(t, 0, 3) maybe
+}
diff --git a/tests/ui/issues/issue-5554.rs b/tests/ui/issues/issue-5554.rs
new file mode 100644
index 000000000..7737536f4
--- /dev/null
+++ b/tests/ui/issues/issue-5554.rs
@@ -0,0 +1,29 @@
+// run-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+use std::default::Default;
+
+pub struct X<T> {
+ a: T,
+}
+
+// reordering these bounds stops the ICE
+//
+// nmatsakis: This test used to have the bounds Default + PartialEq +
+// Default, but having duplicate bounds became illegal.
+impl<T: Default + PartialEq> Default for X<T> {
+ fn default() -> X<T> {
+ X { a: Default::default() }
+ }
+}
+
+macro_rules! constants {
+ () => {
+ let _ : X<isize> = Default::default();
+ }
+}
+
+pub fn main() {
+ constants!();
+}
diff --git a/tests/ui/issues/issue-55587.rs b/tests/ui/issues/issue-55587.rs
new file mode 100644
index 000000000..d9100cf55
--- /dev/null
+++ b/tests/ui/issues/issue-55587.rs
@@ -0,0 +1,5 @@
+use std::path::Path;
+
+fn main() {
+ let Path::new(); //~ ERROR expected tuple struct or tuple variant
+}
diff --git a/tests/ui/issues/issue-55587.stderr b/tests/ui/issues/issue-55587.stderr
new file mode 100644
index 000000000..faf78cfe8
--- /dev/null
+++ b/tests/ui/issues/issue-55587.stderr
@@ -0,0 +1,11 @@
+error[E0164]: expected tuple struct or tuple variant, found associated function `Path::new`
+ --> $DIR/issue-55587.rs:4:9
+ |
+LL | let Path::new();
+ | ^^^^^^^^^^^ `fn` calls are not allowed in patterns
+ |
+ = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0164`.
diff --git a/tests/ui/issues/issue-5572.rs b/tests/ui/issues/issue-5572.rs
new file mode 100644
index 000000000..175dc879d
--- /dev/null
+++ b/tests/ui/issues/issue-5572.rs
@@ -0,0 +1,7 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+fn foo<T: ::std::cmp::PartialEq>(_t: T) { }
+
+pub fn main() { }
diff --git a/tests/ui/issues/issue-55731.rs b/tests/ui/issues/issue-55731.rs
new file mode 100644
index 000000000..7b4f4e2cd
--- /dev/null
+++ b/tests/ui/issues/issue-55731.rs
@@ -0,0 +1,52 @@
+use std::marker::PhantomData;
+
+trait DistributedIterator {
+ fn reduce(self)
+ where
+ Self: Sized,
+ {
+ unreachable!()
+ }
+}
+
+trait DistributedIteratorMulti<Source> {
+ type Item;
+}
+
+struct Connect<I>(PhantomData<fn(I)>);
+impl<I: for<'a> DistributedIteratorMulti<&'a ()>> DistributedIterator for Connect<I> where {}
+
+struct Cloned<Source>(PhantomData<fn(Source)>);
+impl<'a, Source> DistributedIteratorMulti<&'a Source> for Cloned<&'a Source> {
+ type Item = ();
+}
+
+struct Map<I, F> {
+ i: I,
+ f: F,
+}
+impl<I: DistributedIteratorMulti<Source>, F, Source> DistributedIteratorMulti<Source> for Map<I, F>
+where
+ F: A<<I as DistributedIteratorMulti<Source>>::Item>,
+{
+ type Item = ();
+}
+
+trait A<B> {}
+
+struct X;
+impl A<()> for X {}
+
+fn multi<I>(_reducer: I)
+where
+ I: for<'a> DistributedIteratorMulti<&'a ()>,
+{
+ DistributedIterator::reduce(Connect::<I>(PhantomData))
+}
+
+fn main() {
+ multi(Map { //~ ERROR implementation of `DistributedIteratorMulti` is not general enough
+ i: Cloned(PhantomData),
+ f: X,
+ });
+}
diff --git a/tests/ui/issues/issue-55731.stderr b/tests/ui/issues/issue-55731.stderr
new file mode 100644
index 000000000..97fd6678c
--- /dev/null
+++ b/tests/ui/issues/issue-55731.stderr
@@ -0,0 +1,14 @@
+error: implementation of `DistributedIteratorMulti` is not general enough
+ --> $DIR/issue-55731.rs:48:5
+ |
+LL | / multi(Map {
+LL | | i: Cloned(PhantomData),
+LL | | f: X,
+LL | | });
+ | |______^ implementation of `DistributedIteratorMulti` is not general enough
+ |
+ = note: `DistributedIteratorMulti<&'0 ()>` would have to be implemented for the type `Cloned<&()>`, for any lifetime `'0`...
+ = note: ...but `DistributedIteratorMulti<&'1 ()>` is actually implemented for the type `Cloned<&'1 ()>`, for some specific lifetime `'1`
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-56128.rs b/tests/ui/issues/issue-56128.rs
new file mode 100644
index 000000000..10b50943c
--- /dev/null
+++ b/tests/ui/issues/issue-56128.rs
@@ -0,0 +1,15 @@
+// Regression test for #56128. When this `pub(super) use...` gets
+// exploded in the HIR, we were not handling ids correctly.
+//
+// check-pass
+
+mod bar {
+ pub(super) use self::baz::{x, y};
+
+ mod baz {
+ pub fn x() { }
+ pub fn y() { }
+ }
+}
+
+fn main() { }
diff --git a/tests/ui/issues/issue-56175.rs b/tests/ui/issues/issue-56175.rs
new file mode 100644
index 000000000..ca1d0d431
--- /dev/null
+++ b/tests/ui/issues/issue-56175.rs
@@ -0,0 +1,9 @@
+// edition:2018
+// aux-crate:reexported_trait=reexported-trait.rs
+
+fn main() {
+ reexported_trait::FooStruct.trait_method();
+ //~^ ERROR
+ reexported_trait::FooStruct.trait_method_b();
+ //~^ ERROR
+}
diff --git a/tests/ui/issues/issue-56175.stderr b/tests/ui/issues/issue-56175.stderr
new file mode 100644
index 000000000..013a440ed
--- /dev/null
+++ b/tests/ui/issues/issue-56175.stderr
@@ -0,0 +1,37 @@
+error[E0599]: no method named `trait_method` found for struct `FooStruct` in the current scope
+ --> $DIR/issue-56175.rs:5:33
+ |
+LL | reexported_trait::FooStruct.trait_method();
+ | ^^^^^^^^^^^^ method not found in `FooStruct`
+ |
+ ::: $DIR/auxiliary/reexported-trait.rs:3:12
+ |
+LL | fn trait_method(&self) {
+ | ------------ the method is available for `FooStruct` here
+ |
+ = help: items from traits can only be used if the trait is in scope
+help: the following trait is implemented but not in scope; perhaps add a `use` for it:
+ |
+LL | use reexported_trait::Trait;
+ |
+
+error[E0599]: no method named `trait_method_b` found for struct `FooStruct` in the current scope
+ --> $DIR/issue-56175.rs:7:33
+ |
+LL | reexported_trait::FooStruct.trait_method_b();
+ | ^^^^^^^^^^^^^^ method not found in `FooStruct`
+ |
+ ::: $DIR/auxiliary/reexported-trait.rs:7:12
+ |
+LL | fn trait_method_b(&self) {
+ | -------------- the method is available for `FooStruct` here
+ |
+ = help: items from traits can only be used if the trait is in scope
+help: the following trait is implemented but not in scope; perhaps add a `use` for it:
+ |
+LL | use reexported_trait::TraitBRename;
+ |
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-56199.rs b/tests/ui/issues/issue-56199.rs
new file mode 100644
index 000000000..ba11582a9
--- /dev/null
+++ b/tests/ui/issues/issue-56199.rs
@@ -0,0 +1,22 @@
+enum Foo {}
+struct Bar {}
+
+impl Foo {
+ fn foo() {
+ let _ = Self;
+ //~^ ERROR the `Self` constructor can only be used with tuple or unit structs
+ let _ = Self();
+ //~^ ERROR the `Self` constructor can only be used with tuple or unit structs
+ }
+}
+
+impl Bar {
+ fn bar() {
+ let _ = Self;
+ //~^ ERROR the `Self` constructor can only be used with tuple or unit structs
+ let _ = Self();
+ //~^ ERROR the `Self` constructor can only be used with tuple or unit structs
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-56199.stderr b/tests/ui/issues/issue-56199.stderr
new file mode 100644
index 000000000..7aaf8e4ac
--- /dev/null
+++ b/tests/ui/issues/issue-56199.stderr
@@ -0,0 +1,30 @@
+error: the `Self` constructor can only be used with tuple or unit structs
+ --> $DIR/issue-56199.rs:6:17
+ |
+LL | let _ = Self;
+ | ^^^^
+ |
+ = help: did you mean to use one of the enum's variants?
+
+error: the `Self` constructor can only be used with tuple or unit structs
+ --> $DIR/issue-56199.rs:8:17
+ |
+LL | let _ = Self();
+ | ^^^^
+ |
+ = help: did you mean to use one of the enum's variants?
+
+error: the `Self` constructor can only be used with tuple or unit structs
+ --> $DIR/issue-56199.rs:15:17
+ |
+LL | let _ = Self;
+ | ^^^^ help: use curly brackets: `Self { /* fields */ }`
+
+error: the `Self` constructor can only be used with tuple or unit structs
+ --> $DIR/issue-56199.rs:17:17
+ |
+LL | let _ = Self();
+ | ^^^^ help: use curly brackets: `Self { /* fields */ }`
+
+error: aborting due to 4 previous errors
+
diff --git a/tests/ui/issues/issue-56229.rs b/tests/ui/issues/issue-56229.rs
new file mode 100644
index 000000000..9e5897b98
--- /dev/null
+++ b/tests/ui/issues/issue-56229.rs
@@ -0,0 +1,35 @@
+// check-pass
+
+trait Mirror {
+ type Other;
+}
+
+#[derive(Debug)]
+struct Even(usize);
+struct Odd;
+
+impl Mirror for Even {
+ type Other = Odd;
+}
+
+impl Mirror for Odd {
+ type Other = Even;
+}
+
+trait Dyn<T: Mirror>: AsRef<<T as Mirror>::Other> {}
+
+impl Dyn<Odd> for Even {}
+
+impl AsRef<Even> for Even {
+ fn as_ref(&self) -> &Even {
+ self
+ }
+}
+
+fn code<T: Mirror>(d: &dyn Dyn<T>) -> &T::Other {
+ d.as_ref()
+}
+
+fn main() {
+ println!("{:?}", code(&Even(22)));
+}
diff --git a/tests/ui/issues/issue-56237.rs b/tests/ui/issues/issue-56237.rs
new file mode 100644
index 000000000..534b85ace
--- /dev/null
+++ b/tests/ui/issues/issue-56237.rs
@@ -0,0 +1,13 @@
+// run-pass
+
+use std::ops::Deref;
+
+fn foo<P>(_value: <P as Deref>::Target)
+where
+ P: Deref,
+ <P as Deref>::Target: Sized,
+{}
+
+fn main() {
+ foo::<Box<u32>>(2);
+}
diff --git a/tests/ui/issues/issue-5666.rs b/tests/ui/issues/issue-5666.rs
new file mode 100644
index 000000000..810895b1b
--- /dev/null
+++ b/tests/ui/issues/issue-5666.rs
@@ -0,0 +1,26 @@
+// run-pass
+
+struct Dog {
+ name : String
+}
+
+trait Barks {
+ fn bark(&self) -> String;
+}
+
+impl Barks for Dog {
+ fn bark(&self) -> String {
+ return format!("woof! (I'm {})", self.name);
+ }
+}
+
+
+pub fn main() {
+ let snoopy = Box::new(Dog{name: "snoopy".to_string()});
+ let bubbles = Box::new(Dog{name: "bubbles".to_string()});
+ let barker = [snoopy as Box<dyn Barks>, bubbles as Box<dyn Barks>];
+
+ for pup in &barker {
+ println!("{}", pup.bark());
+ }
+}
diff --git a/tests/ui/issues/issue-56806.rs b/tests/ui/issues/issue-56806.rs
new file mode 100644
index 000000000..b1dac26d6
--- /dev/null
+++ b/tests/ui/issues/issue-56806.rs
@@ -0,0 +1,6 @@
+pub trait Trait {
+ fn dyn_instead_of_self(self: Box<dyn Trait>);
+ //~^ ERROR invalid `self` parameter type
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-56806.stderr b/tests/ui/issues/issue-56806.stderr
new file mode 100644
index 000000000..f164fd0c5
--- /dev/null
+++ b/tests/ui/issues/issue-56806.stderr
@@ -0,0 +1,12 @@
+error[E0307]: invalid `self` parameter type: Box<(dyn Trait + 'static)>
+ --> $DIR/issue-56806.rs:2:34
+ |
+LL | fn dyn_instead_of_self(self: Box<dyn Trait>);
+ | ^^^^^^^^^^^^^^
+ |
+ = note: type of `self` must be `Self` or a type that dereferences to it
+ = help: consider changing to `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`)
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0307`.
diff --git a/tests/ui/issues/issue-56835.rs b/tests/ui/issues/issue-56835.rs
new file mode 100644
index 000000000..7132d15ee
--- /dev/null
+++ b/tests/ui/issues/issue-56835.rs
@@ -0,0 +1,9 @@
+pub struct Foo {}
+
+impl Foo {
+ fn bar(Self(foo): Self) {}
+ //~^ ERROR the `Self` constructor can only be used with tuple or unit structs
+ //~^^ ERROR expected tuple struct or tuple variant, found self constructor `Self` [E0164]
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-56835.stderr b/tests/ui/issues/issue-56835.stderr
new file mode 100644
index 000000000..e949ae7b3
--- /dev/null
+++ b/tests/ui/issues/issue-56835.stderr
@@ -0,0 +1,15 @@
+error: the `Self` constructor can only be used with tuple or unit structs
+ --> $DIR/issue-56835.rs:4:12
+ |
+LL | fn bar(Self(foo): Self) {}
+ | ^^^^^^^^^ help: use curly brackets: `Self { /* fields */ }`
+
+error[E0164]: expected tuple struct or tuple variant, found self constructor `Self`
+ --> $DIR/issue-56835.rs:4:12
+ |
+LL | fn bar(Self(foo): Self) {}
+ | ^^^^^^^^^ not a tuple struct or tuple variant
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0164`.
diff --git a/tests/ui/issues/issue-56870.rs b/tests/ui/issues/issue-56870.rs
new file mode 100644
index 000000000..137a0ede0
--- /dev/null
+++ b/tests/ui/issues/issue-56870.rs
@@ -0,0 +1,38 @@
+// build-pass
+// Regression test for #56870: Internal compiler error (traits & associated consts)
+
+use std::fmt::Debug;
+
+pub trait Foo<T> {
+ const FOO: *const u8;
+}
+
+impl <T: Debug> Foo<T> for dyn Debug {
+ const FOO: *const u8 = <T as Debug>::fmt as *const u8;
+}
+
+pub trait Bar {
+ const BAR: *const u8;
+}
+
+pub trait Baz {
+ type Data: Debug;
+}
+
+pub struct BarStruct<S: Baz>(S);
+
+impl<S: Baz> Bar for BarStruct<S> {
+ const BAR: *const u8 = <dyn Debug as Foo<<S as Baz>::Data>>::FOO;
+}
+
+struct AnotherStruct;
+#[derive(Debug)]
+struct SomeStruct;
+
+impl Baz for AnotherStruct {
+ type Data = SomeStruct;
+}
+
+fn main() {
+ let _x = <BarStruct<AnotherStruct> as Bar>::BAR;
+}
diff --git a/tests/ui/issues/issue-5688.rs b/tests/ui/issues/issue-5688.rs
new file mode 100644
index 000000000..b6e364c2f
--- /dev/null
+++ b/tests/ui/issues/issue-5688.rs
@@ -0,0 +1,20 @@
+// run-pass
+/*
+# Corrupted initialization in the static struct
+
+...should print &[1, 2, 3] but instead prints something like
+&[4492532864, 24]. It is pretty evident that the compiler messed up
+with the representation of [isize; n] and [isize] somehow, or at least
+failed to typecheck correctly.
+*/
+
+#[derive(Copy, Clone)]
+struct X { vec: &'static [isize] }
+
+static V: &'static [X] = &[X { vec: &[1, 2, 3] }];
+
+pub fn main() {
+ for &v in V {
+ println!("{:?}", v.vec);
+ }
+}
diff --git a/tests/ui/issues/issue-56943.rs b/tests/ui/issues/issue-56943.rs
new file mode 100644
index 000000000..8fc77abdb
--- /dev/null
+++ b/tests/ui/issues/issue-56943.rs
@@ -0,0 +1,8 @@
+// aux-build:issue-56943.rs
+
+extern crate issue_56943;
+
+fn main() {
+ let _: issue_56943::S = issue_56943::S2;
+ //~^ ERROR mismatched types [E0308]
+}
diff --git a/tests/ui/issues/issue-56943.stderr b/tests/ui/issues/issue-56943.stderr
new file mode 100644
index 000000000..74ed5ec0f
--- /dev/null
+++ b/tests/ui/issues/issue-56943.stderr
@@ -0,0 +1,11 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-56943.rs:6:29
+ |
+LL | let _: issue_56943::S = issue_56943::S2;
+ | -------------- ^^^^^^^^^^^^^^^ expected struct `S`, found struct `S2`
+ | |
+ | expected due to this
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-5708.rs b/tests/ui/issues/issue-5708.rs
new file mode 100644
index 000000000..6fe9943d3
--- /dev/null
+++ b/tests/ui/issues/issue-5708.rs
@@ -0,0 +1,55 @@
+// run-pass
+#![allow(unused_variables)]
+/*
+# ICE when returning struct with reference to trait
+
+A function which takes a reference to a trait and returns a
+struct with that reference results in an ICE.
+
+This does not occur with concrete types, only with references
+to traits.
+*/
+
+
+// original
+trait Inner {
+ fn print(&self);
+}
+
+impl Inner for isize {
+ fn print(&self) { print!("Inner: {}\n", *self); }
+}
+
+struct Outer<'a> {
+ inner: &'a (dyn Inner+'a)
+}
+
+impl<'a> Outer<'a> {
+ fn new(inner: &dyn Inner) -> Outer {
+ Outer {
+ inner: inner
+ }
+ }
+}
+
+pub fn main() {
+ let inner: isize = 5;
+ let outer = Outer::new(&inner as &dyn Inner);
+ outer.inner.print();
+}
+
+
+// minimal
+pub trait MyTrait<T> {
+ fn dummy(&self, t: T) -> T { panic!() }
+}
+
+pub struct MyContainer<'a, T:'a> {
+ foos: Vec<&'a (dyn MyTrait<T>+'a)> ,
+}
+
+impl<'a, T> MyContainer<'a, T> {
+ pub fn add (&mut self, foo: &'a dyn MyTrait<T>) {
+ self.foos.push(foo);
+ }
+}
diff --git a/tests/ui/issues/issue-57156.rs b/tests/ui/issues/issue-57156.rs
new file mode 100644
index 000000000..9f5ec9f27
--- /dev/null
+++ b/tests/ui/issues/issue-57156.rs
@@ -0,0 +1,23 @@
+// check-pass
+
+trait Foo<Args> {
+ type Output;
+}
+
+trait Bar<'a, T>: for<'s> Foo<&'s T, Output=bool> {
+ fn cb(&self) -> Box<dyn Bar<'a, T, Output=bool>>;
+}
+
+impl<'s> Foo<&'s ()> for () {
+ type Output = bool;
+}
+
+impl<'a> Bar<'a, ()> for () {
+ fn cb(&self) -> Box<dyn Bar<'a, (), Output=bool>> {
+ Box::new(*self)
+ }
+}
+
+fn main() {
+ let _t = ().cb();
+}
diff --git a/tests/ui/issues/issue-57162.rs b/tests/ui/issues/issue-57162.rs
new file mode 100644
index 000000000..650700602
--- /dev/null
+++ b/tests/ui/issues/issue-57162.rs
@@ -0,0 +1,7 @@
+// check-pass
+
+trait Foo {}
+impl Foo for dyn Send {}
+
+impl<T: Sync + Sync> Foo for T {}
+fn main() {}
diff --git a/tests/ui/issues/issue-5718.rs b/tests/ui/issues/issue-5718.rs
new file mode 100644
index 000000000..f29a1e2a0
--- /dev/null
+++ b/tests/ui/issues/issue-5718.rs
@@ -0,0 +1,24 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+struct Element;
+
+macro_rules! foo {
+ ($tag: expr, $string: expr) => {
+ if $tag == $string {
+ let element: Box<_> = Box::new(Element);
+ unsafe {
+ return std::mem::transmute::<_, usize>(element);
+ }
+ }
+ }
+}
+
+fn bar() -> usize {
+ foo!("a", "b");
+ 0
+}
+
+fn main() {
+ bar();
+}
diff --git a/tests/ui/issues/issue-57198-pass.rs b/tests/ui/issues/issue-57198-pass.rs
new file mode 100644
index 000000000..3857def98
--- /dev/null
+++ b/tests/ui/issues/issue-57198-pass.rs
@@ -0,0 +1,9 @@
+// run-pass
+
+mod m {
+ pub fn r#for() {}
+}
+
+fn main() {
+ m::r#for();
+}
diff --git a/tests/ui/issues/issue-57271.rs b/tests/ui/issues/issue-57271.rs
new file mode 100644
index 000000000..f74222e3e
--- /dev/null
+++ b/tests/ui/issues/issue-57271.rs
@@ -0,0 +1,24 @@
+// aux-build:issue-57271-lib.rs
+
+extern crate issue_57271_lib;
+
+use issue_57271_lib::BaseType;
+
+pub enum ObjectType { //~ ERROR recursive types `ObjectType` and `TypeSignature` have infinite size
+ Class(ClassTypeSignature),
+ Array(TypeSignature),
+ TypeVariable(()),
+}
+
+pub struct ClassTypeSignature {
+ pub package: (),
+ pub class: (),
+ pub inner: (),
+}
+
+pub enum TypeSignature {
+ Base(BaseType),
+ Object(ObjectType),
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-57271.stderr b/tests/ui/issues/issue-57271.stderr
new file mode 100644
index 000000000..391e69c91
--- /dev/null
+++ b/tests/ui/issues/issue-57271.stderr
@@ -0,0 +1,27 @@
+error[E0072]: recursive types `ObjectType` and `TypeSignature` have infinite size
+ --> $DIR/issue-57271.rs:7:1
+ |
+LL | pub enum ObjectType {
+ | ^^^^^^^^^^^^^^^^^^^
+LL | Class(ClassTypeSignature),
+LL | Array(TypeSignature),
+ | ------------- recursive without indirection
+...
+LL | pub enum TypeSignature {
+ | ^^^^^^^^^^^^^^^^^^^^^^
+LL | Base(BaseType),
+LL | Object(ObjectType),
+ | ---------- recursive without indirection
+ |
+help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle
+ |
+LL ~ Array(Box<TypeSignature>),
+LL | TypeVariable(()),
+ ...
+LL | Base(BaseType),
+LL ~ Object(Box<ObjectType>),
+ |
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0072`.
diff --git a/tests/ui/issues/issue-57362-1.rs b/tests/ui/issues/issue-57362-1.rs
new file mode 100644
index 000000000..1fa417fe9
--- /dev/null
+++ b/tests/ui/issues/issue-57362-1.rs
@@ -0,0 +1,23 @@
+// Test for issue #57362, ensuring that the self ty is shown in cases of higher-ranked lifetimes
+// conflicts: the `expected` and `found` trait refs would otherwise be printed the same, leading
+// to confusing notes such as:
+// = note: expected type `Trait`
+// found type `Trait`
+
+// from issue #57362
+trait Trait {
+ fn f(self);
+}
+
+impl<T> Trait for fn(&T) {
+ fn f(self) {
+ println!("f");
+ }
+}
+
+fn f() {
+ let a: fn(_) = |_: &u8| {};
+ a.f(); //~ ERROR no method named `f`
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-57362-1.stderr b/tests/ui/issues/issue-57362-1.stderr
new file mode 100644
index 000000000..b10273f14
--- /dev/null
+++ b/tests/ui/issues/issue-57362-1.stderr
@@ -0,0 +1,16 @@
+error[E0599]: no method named `f` found for fn pointer `fn(&u8)` in the current scope
+ --> $DIR/issue-57362-1.rs:20:7
+ |
+LL | a.f();
+ | ^ method not found in `fn(&u8)`
+ |
+ = help: items from traits can only be used if the trait is implemented and in scope
+note: `Trait` defines an item `f`, perhaps you need to implement it
+ --> $DIR/issue-57362-1.rs:8:1
+ |
+LL | trait Trait {
+ | ^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-57362-2.rs b/tests/ui/issues/issue-57362-2.rs
new file mode 100644
index 000000000..a0b0ea1d0
--- /dev/null
+++ b/tests/ui/issues/issue-57362-2.rs
@@ -0,0 +1,25 @@
+// Test for issue #57362, ensuring that the self ty is shown in cases of higher-ranked lifetimes
+// conflicts: the `expected` and `found` trait refs would otherwise be printed the same, leading
+// to confusing notes such as:
+// = note: expected type `Trait`
+// found type `Trait`
+
+// extracted from a similar issue: #57642
+trait X {
+ type G;
+ fn make_g() -> Self::G;
+}
+
+impl<'a> X for fn(&'a ()) {
+ type G = &'a ();
+
+ fn make_g() -> Self::G {
+ &()
+ }
+}
+
+fn g() {
+ let x = <fn (&())>::make_g(); //~ ERROR the function
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-57362-2.stderr b/tests/ui/issues/issue-57362-2.stderr
new file mode 100644
index 000000000..7d08c4643
--- /dev/null
+++ b/tests/ui/issues/issue-57362-2.stderr
@@ -0,0 +1,18 @@
+error[E0599]: the function or associated item `make_g` exists for fn pointer `for<'a> fn(&'a ())`, but its trait bounds were not satisfied
+ --> $DIR/issue-57362-2.rs:22:25
+ |
+LL | let x = <fn (&())>::make_g();
+ | ^^^^^^ function or associated item cannot be called on `for<'a> fn(&'a ())` due to unsatisfied trait bounds
+ |
+ = note: the following trait bounds were not satisfied:
+ `for<'a> fn(&'a ()): X`
+ = help: items from traits can only be used if the trait is implemented and in scope
+note: `X` defines an item `make_g`, perhaps you need to implement it
+ --> $DIR/issue-57362-2.rs:8:1
+ |
+LL | trait X {
+ | ^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-57399-self-return-impl-trait.rs b/tests/ui/issues/issue-57399-self-return-impl-trait.rs
new file mode 100644
index 000000000..c7fe40e7b
--- /dev/null
+++ b/tests/ui/issues/issue-57399-self-return-impl-trait.rs
@@ -0,0 +1,22 @@
+// check-pass
+
+trait T {
+ type T;
+}
+
+impl T for i32 {
+ type T = u32;
+}
+
+struct S<A> {
+ a: A,
+}
+
+
+impl From<u32> for S<<i32 as T>::T> {
+ fn from(a: u32) -> Self {
+ Self { a }
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-5741.rs b/tests/ui/issues/issue-5741.rs
new file mode 100644
index 000000000..b9eaf0be7
--- /dev/null
+++ b/tests/ui/issues/issue-5741.rs
@@ -0,0 +1,9 @@
+// run-pass
+// pretty-expanded FIXME #23616
+#![allow(while_true)]
+#![allow(unreachable_code)]
+
+pub fn main() {
+ return;
+ while true {};
+}
diff --git a/tests/ui/issues/issue-5754.rs b/tests/ui/issues/issue-5754.rs
new file mode 100644
index 000000000..d90816635
--- /dev/null
+++ b/tests/ui/issues/issue-5754.rs
@@ -0,0 +1,16 @@
+// build-pass
+#![allow(dead_code)]
+#![allow(improper_ctypes)]
+
+// pretty-expanded FIXME #23616
+
+struct TwoDoubles {
+ r: f64,
+ i: f64
+}
+
+extern "C" {
+ fn rust_dbg_extern_identity_TwoDoubles(arg1: TwoDoubles) -> TwoDoubles;
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-57741-1.rs b/tests/ui/issues/issue-57741-1.rs
new file mode 100644
index 000000000..d0aae23b2
--- /dev/null
+++ b/tests/ui/issues/issue-57741-1.rs
@@ -0,0 +1,18 @@
+#![allow(warnings)]
+
+// This tests that the `help: consider dereferencing the boxed value` suggestion isn't made
+// because the box doesn't deref to the type of the arm.
+
+enum S {
+ A { a: usize },
+ B { b: usize },
+}
+
+fn main() {
+ let x = Box::new(3u32);
+ let y = match x {
+ S::A { a } | S::B { b: a } => a,
+ //~^ ERROR mismatched types [E0308]
+ //~^^ ERROR mismatched types [E0308]
+ };
+}
diff --git a/tests/ui/issues/issue-57741-1.stderr b/tests/ui/issues/issue-57741-1.stderr
new file mode 100644
index 000000000..789a1f44d
--- /dev/null
+++ b/tests/ui/issues/issue-57741-1.stderr
@@ -0,0 +1,25 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-57741-1.rs:14:9
+ |
+LL | let y = match x {
+ | - this expression has type `Box<u32>`
+LL | S::A { a } | S::B { b: a } => a,
+ | ^^^^^^^^^^ expected struct `Box`, found enum `S`
+ |
+ = note: expected struct `Box<u32>`
+ found enum `S`
+
+error[E0308]: mismatched types
+ --> $DIR/issue-57741-1.rs:14:22
+ |
+LL | let y = match x {
+ | - this expression has type `Box<u32>`
+LL | S::A { a } | S::B { b: a } => a,
+ | ^^^^^^^^^^^^^ expected struct `Box`, found enum `S`
+ |
+ = note: expected struct `Box<u32>`
+ found enum `S`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-57741.fixed b/tests/ui/issues/issue-57741.fixed
new file mode 100644
index 000000000..4cae08003
--- /dev/null
+++ b/tests/ui/issues/issue-57741.fixed
@@ -0,0 +1,31 @@
+// run-rustfix
+
+#![allow(warnings)]
+
+// This tests that the `help: consider dereferencing the boxed value` suggestion is made and works.
+
+enum S {
+ A { a: usize },
+ B { b: usize },
+}
+
+enum T {
+ A(usize),
+ B(usize),
+}
+
+fn main() {
+ let x = Box::new(T::A(3));
+ let y = match *x {
+ T::A(a) | T::B(a) => a,
+ //~^ ERROR mismatched types [E0308]
+ //~^^ ERROR mismatched types [E0308]
+ };
+
+ let x = Box::new(S::A { a: 3 });
+ let y = match *x {
+ S::A { a } | S::B { b: a } => a,
+ //~^ ERROR mismatched types [E0308]
+ //~^^ ERROR mismatched types [E0308]
+ };
+}
diff --git a/tests/ui/issues/issue-57741.rs b/tests/ui/issues/issue-57741.rs
new file mode 100644
index 000000000..e2658295a
--- /dev/null
+++ b/tests/ui/issues/issue-57741.rs
@@ -0,0 +1,31 @@
+// run-rustfix
+
+#![allow(warnings)]
+
+// This tests that the `help: consider dereferencing the boxed value` suggestion is made and works.
+
+enum S {
+ A { a: usize },
+ B { b: usize },
+}
+
+enum T {
+ A(usize),
+ B(usize),
+}
+
+fn main() {
+ let x = Box::new(T::A(3));
+ let y = match x {
+ T::A(a) | T::B(a) => a,
+ //~^ ERROR mismatched types [E0308]
+ //~^^ ERROR mismatched types [E0308]
+ };
+
+ let x = Box::new(S::A { a: 3 });
+ let y = match x {
+ S::A { a } | S::B { b: a } => a,
+ //~^ ERROR mismatched types [E0308]
+ //~^^ ERROR mismatched types [E0308]
+ };
+}
diff --git a/tests/ui/issues/issue-57741.stderr b/tests/ui/issues/issue-57741.stderr
new file mode 100644
index 000000000..cd277f20e
--- /dev/null
+++ b/tests/ui/issues/issue-57741.stderr
@@ -0,0 +1,59 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-57741.rs:20:9
+ |
+LL | let y = match x {
+ | -
+ | |
+ | this expression has type `Box<T>`
+ | help: consider dereferencing the boxed value: `*x`
+LL | T::A(a) | T::B(a) => a,
+ | ^^^^^^^ expected struct `Box`, found enum `T`
+ |
+ = note: expected struct `Box<T>`
+ found enum `T`
+
+error[E0308]: mismatched types
+ --> $DIR/issue-57741.rs:20:19
+ |
+LL | let y = match x {
+ | -
+ | |
+ | this expression has type `Box<T>`
+ | help: consider dereferencing the boxed value: `*x`
+LL | T::A(a) | T::B(a) => a,
+ | ^^^^^^^ expected struct `Box`, found enum `T`
+ |
+ = note: expected struct `Box<T>`
+ found enum `T`
+
+error[E0308]: mismatched types
+ --> $DIR/issue-57741.rs:27:9
+ |
+LL | let y = match x {
+ | -
+ | |
+ | this expression has type `Box<S>`
+ | help: consider dereferencing the boxed value: `*x`
+LL | S::A { a } | S::B { b: a } => a,
+ | ^^^^^^^^^^ expected struct `Box`, found enum `S`
+ |
+ = note: expected struct `Box<S>`
+ found enum `S`
+
+error[E0308]: mismatched types
+ --> $DIR/issue-57741.rs:27:22
+ |
+LL | let y = match x {
+ | -
+ | |
+ | this expression has type `Box<S>`
+ | help: consider dereferencing the boxed value: `*x`
+LL | S::A { a } | S::B { b: a } => a,
+ | ^^^^^^^^^^^^^ expected struct `Box`, found enum `S`
+ |
+ = note: expected struct `Box<S>`
+ found enum `S`
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-57781.rs b/tests/ui/issues/issue-57781.rs
new file mode 100644
index 000000000..f5015aaf5
--- /dev/null
+++ b/tests/ui/issues/issue-57781.rs
@@ -0,0 +1,20 @@
+// run-pass
+
+use std::cell::UnsafeCell;
+use std::collections::HashMap;
+
+struct OnceCell<T> {
+ _value: UnsafeCell<Option<T>>,
+}
+
+impl<T> OnceCell<T> {
+ const INIT: OnceCell<T> = OnceCell {
+ _value: UnsafeCell::new(None),
+ };
+}
+
+pub fn crash<K, T>() {
+ let _ = OnceCell::<HashMap<K, T>>::INIT;
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-57924.rs b/tests/ui/issues/issue-57924.rs
new file mode 100644
index 000000000..8846912a8
--- /dev/null
+++ b/tests/ui/issues/issue-57924.rs
@@ -0,0 +1,10 @@
+pub struct Gcm<E>(E);
+
+impl<E> Gcm<E> {
+ pub fn crash(e: E) -> Self {
+ Self::<E>(e)
+ //~^ ERROR type arguments are not allowed on self constructor
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-57924.stderr b/tests/ui/issues/issue-57924.stderr
new file mode 100644
index 000000000..0323a4dfb
--- /dev/null
+++ b/tests/ui/issues/issue-57924.stderr
@@ -0,0 +1,11 @@
+error[E0109]: type arguments are not allowed on self constructor
+ --> $DIR/issue-57924.rs:5:16
+ |
+LL | Self::<E>(e)
+ | ---- ^ type argument not allowed
+ | |
+ | not allowed on self constructor
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0109`.
diff --git a/tests/ui/issues/issue-58212.rs b/tests/ui/issues/issue-58212.rs
new file mode 100644
index 000000000..4695497c3
--- /dev/null
+++ b/tests/ui/issues/issue-58212.rs
@@ -0,0 +1,15 @@
+// check-pass
+
+trait FromUnchecked {
+ fn from_unchecked();
+}
+
+impl FromUnchecked for [u8; 1] {
+ fn from_unchecked() {
+ let mut array: Self = [0; 1];
+ let _ptr = &mut array as *mut [u8] as *mut u8;
+ }
+}
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-58344.rs b/tests/ui/issues/issue-58344.rs
new file mode 100644
index 000000000..0cb04dcb2
--- /dev/null
+++ b/tests/ui/issues/issue-58344.rs
@@ -0,0 +1,50 @@
+// check-pass
+
+use std::ops::Add;
+
+trait Trait<T> {
+ fn get(self) -> T;
+}
+
+struct Holder<T>(T);
+
+impl<T> Trait<T> for Holder<T> {
+ fn get(self) -> T {
+ self.0
+ }
+}
+
+enum Either<L, R> {
+ Left(L),
+ Right(R),
+}
+
+impl<L, R> Either<L, R> {
+ fn converge<T>(self) -> T
+ where
+ L: Trait<T>,
+ R: Trait<T>,
+ {
+ match self {
+ Either::Left(val) => val.get(),
+ Either::Right(val) => val.get(),
+ }
+ }
+}
+
+fn add_generic<A: Add<B>, B>(
+ lhs: A,
+ rhs: B,
+) -> Either<impl Trait<<A as Add<B>>::Output>, impl Trait<<A as Add<B>>::Output>> {
+ if true { Either::Left(Holder(lhs + rhs)) } else { Either::Right(Holder(lhs + rhs)) }
+}
+
+fn add_one(
+ value: u32,
+) -> Either<impl Trait<<u32 as Add<u32>>::Output>, impl Trait<<u32 as Add<u32>>::Output>> {
+ add_generic(value, 1u32)
+}
+
+pub fn main() {
+ add_one(3).converge();
+}
diff --git a/tests/ui/issues/issue-58375-monomorphize-default-impls.rs b/tests/ui/issues/issue-58375-monomorphize-default-impls.rs
new file mode 100644
index 000000000..6da6f398d
--- /dev/null
+++ b/tests/ui/issues/issue-58375-monomorphize-default-impls.rs
@@ -0,0 +1,24 @@
+// Make sure that the mono-item collector does not crash when trying to
+// instantiate a default impl for DecodeUtf16<<u8 as A>::Item>
+// See https://github.com/rust-lang/rust/issues/58375
+
+// build-pass
+// compile-flags:-C link-dead-code
+
+#![crate_type = "rlib"]
+
+pub struct DecodeUtf16<I>(I);
+
+pub trait Arbitrary {
+ fn arbitrary() {}
+}
+
+pub trait A {
+ type Item;
+}
+
+impl A for u8 {
+ type Item = char;
+}
+
+impl Arbitrary for DecodeUtf16<<u8 as A>::Item> {}
diff --git a/tests/ui/issues/issue-5844.mir.stderr b/tests/ui/issues/issue-5844.mir.stderr
new file mode 100644
index 000000000..6134d6889
--- /dev/null
+++ b/tests/ui/issues/issue-5844.mir.stderr
@@ -0,0 +1,11 @@
+error[E0133]: call to unsafe function is unsafe and requires unsafe function or block
+ --> $DIR/issue-5844.rs:8:5
+ |
+LL | issue_5844_aux::rand();
+ | ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
+ |
+ = note: consult the function's documentation for information on how to avoid undefined behavior
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0133`.
diff --git a/tests/ui/issues/issue-5844.rs b/tests/ui/issues/issue-5844.rs
new file mode 100644
index 000000000..4f90a9c66
--- /dev/null
+++ b/tests/ui/issues/issue-5844.rs
@@ -0,0 +1,9 @@
+//aux-build:issue-5844-aux.rs
+// revisions: mir thir
+// [thir]compile-flags: -Z thir-unsafeck
+
+extern crate issue_5844_aux;
+
+fn main () {
+ issue_5844_aux::rand(); //~ ERROR: requires unsafe
+}
diff --git a/tests/ui/issues/issue-5844.thir.stderr b/tests/ui/issues/issue-5844.thir.stderr
new file mode 100644
index 000000000..310a2b593
--- /dev/null
+++ b/tests/ui/issues/issue-5844.thir.stderr
@@ -0,0 +1,11 @@
+error[E0133]: call to unsafe function `rand` is unsafe and requires unsafe function or block
+ --> $DIR/issue-5844.rs:8:5
+ |
+LL | issue_5844_aux::rand();
+ | ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
+ |
+ = note: consult the function's documentation for information on how to avoid undefined behavior
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0133`.
diff --git a/tests/ui/issues/issue-58463.rs b/tests/ui/issues/issue-58463.rs
new file mode 100644
index 000000000..af93f7622
--- /dev/null
+++ b/tests/ui/issues/issue-58463.rs
@@ -0,0 +1,10 @@
+// run-pass
+// compile-flags:-C debuginfo=2
+// ignore-asmjs wasm2js does not support source maps yet
+
+fn foo() -> impl Copy {
+ foo
+}
+fn main() {
+ foo();
+}
diff --git a/tests/ui/issues/issue-58712.rs b/tests/ui/issues/issue-58712.rs
new file mode 100644
index 000000000..930bec688
--- /dev/null
+++ b/tests/ui/issues/issue-58712.rs
@@ -0,0 +1,14 @@
+struct AddrVec<H, A> {
+ h: H,
+ a: A,
+}
+
+impl<H> AddrVec<H, DeviceId> {
+ //~^ ERROR cannot find type `DeviceId` in this scope
+ pub fn device(&self) -> DeviceId {
+ //~^ ERROR cannot find type `DeviceId` in this scope
+ self.tail()
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-58712.stderr b/tests/ui/issues/issue-58712.stderr
new file mode 100644
index 000000000..f4bd4d1e8
--- /dev/null
+++ b/tests/ui/issues/issue-58712.stderr
@@ -0,0 +1,20 @@
+error[E0412]: cannot find type `DeviceId` in this scope
+ --> $DIR/issue-58712.rs:6:20
+ |
+LL | impl<H> AddrVec<H, DeviceId> {
+ | ^^^^^^^^ not found in this scope
+ |
+help: you might be missing a type parameter
+ |
+LL | impl<H, DeviceId> AddrVec<H, DeviceId> {
+ | ++++++++++
+
+error[E0412]: cannot find type `DeviceId` in this scope
+ --> $DIR/issue-58712.rs:8:29
+ |
+LL | pub fn device(&self) -> DeviceId {
+ | ^^^^^^^^ not found in this scope
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0412`.
diff --git a/tests/ui/issues/issue-58734.rs b/tests/ui/issues/issue-58734.rs
new file mode 100644
index 000000000..c838fde5d
--- /dev/null
+++ b/tests/ui/issues/issue-58734.rs
@@ -0,0 +1,24 @@
+trait Trait {
+ fn exists(self) -> ();
+
+ fn not_object_safe() -> Self;
+}
+
+impl Trait for () {
+ fn exists(self) -> () {
+ }
+
+ fn not_object_safe() -> Self {
+ ()
+ }
+}
+
+fn main() {
+ // object-safe or not, this call is OK
+ Trait::exists(());
+ // no object safety error
+ Trait::nonexistent(());
+ //~^ ERROR no function or associated item named `nonexistent` found
+ //~| WARN trait objects without an explicit `dyn` are deprecated
+ //~| WARN this is accepted in the current edition
+}
diff --git a/tests/ui/issues/issue-58734.stderr b/tests/ui/issues/issue-58734.stderr
new file mode 100644
index 000000000..d2314626d
--- /dev/null
+++ b/tests/ui/issues/issue-58734.stderr
@@ -0,0 +1,23 @@
+warning: trait objects without an explicit `dyn` are deprecated
+ --> $DIR/issue-58734.rs:20:5
+ |
+LL | Trait::nonexistent(());
+ | ^^^^^
+ |
+ = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
+ = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
+ = note: `#[warn(bare_trait_objects)]` on by default
+help: use `dyn`
+ |
+LL | <dyn Trait>::nonexistent(());
+ | ++++ +
+
+error[E0599]: no function or associated item named `nonexistent` found for trait object `dyn Trait` in the current scope
+ --> $DIR/issue-58734.rs:20:12
+ |
+LL | Trait::nonexistent(());
+ | ^^^^^^^^^^^ function or associated item not found in `dyn Trait`
+
+error: aborting due to previous error; 1 warning emitted
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-5883.rs b/tests/ui/issues/issue-5883.rs
new file mode 100644
index 000000000..82866b355
--- /dev/null
+++ b/tests/ui/issues/issue-5883.rs
@@ -0,0 +1,13 @@
+trait A {}
+
+struct Struct {
+ r: dyn A + 'static
+}
+
+fn new_struct(
+ r: dyn A + 'static //~ ERROR the size for values of type
+) -> Struct { //~ ERROR the size for values of type
+ Struct { r: r }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-5883.stderr b/tests/ui/issues/issue-5883.stderr
new file mode 100644
index 000000000..ffff403e0
--- /dev/null
+++ b/tests/ui/issues/issue-5883.stderr
@@ -0,0 +1,36 @@
+error[E0277]: the size for values of type `(dyn A + 'static)` cannot be known at compilation time
+ --> $DIR/issue-5883.rs:8:5
+ |
+LL | r: dyn A + 'static
+ | ^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `(dyn A + 'static)`
+ = help: unsized fn params are gated as an unstable feature
+help: you can use `impl Trait` as the argument type
+ |
+LL | r: impl A + 'static
+ | ~~~~
+help: function arguments must have a statically known size, borrowed types always have a known size
+ |
+LL | r: &dyn A + 'static
+ | +
+
+error[E0277]: the size for values of type `(dyn A + 'static)` cannot be known at compilation time
+ --> $DIR/issue-5883.rs:9:6
+ |
+LL | ) -> Struct {
+ | ^^^^^^ doesn't have a size known at compile-time
+LL | Struct { r: r }
+ | --------------- this returned value is of type `Struct`
+ |
+ = help: within `Struct`, the trait `Sized` is not implemented for `(dyn A + 'static)`
+note: required because it appears within the type `Struct`
+ --> $DIR/issue-5883.rs:3:8
+ |
+LL | struct Struct {
+ | ^^^^^^
+ = note: the return type of a function must have a statically known size
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-5884.rs b/tests/ui/issues/issue-5884.rs
new file mode 100644
index 000000000..991c52321
--- /dev/null
+++ b/tests/ui/issues/issue-5884.rs
@@ -0,0 +1,18 @@
+// build-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+pub struct Foo {
+ a: isize,
+}
+
+struct Bar<'a> {
+ a: Box<Option<isize>>,
+ b: &'a Foo,
+}
+
+fn check(a: Box<Foo>) {
+ let _ic = Bar{ b: &*a, a: Box::new(None) };
+}
+
+pub fn main(){}
diff --git a/tests/ui/issues/issue-58857.rs b/tests/ui/issues/issue-58857.rs
new file mode 100644
index 000000000..4350d7e5b
--- /dev/null
+++ b/tests/ui/issues/issue-58857.rs
@@ -0,0 +1,7 @@
+struct Conj<A> {a : A}
+trait Valid {}
+
+impl<A: !Valid> Conj<A>{}
+//~^ ERROR negative bounds are not supported
+
+fn main() {}
diff --git a/tests/ui/issues/issue-58857.stderr b/tests/ui/issues/issue-58857.stderr
new file mode 100644
index 000000000..e2acec47e
--- /dev/null
+++ b/tests/ui/issues/issue-58857.stderr
@@ -0,0 +1,8 @@
+error: negative bounds are not supported
+ --> $DIR/issue-58857.rs:4:7
+ |
+LL | impl<A: !Valid> Conj<A>{}
+ | ^^^^^^^^ negative bounds are not supported
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-5900.rs b/tests/ui/issues/issue-5900.rs
new file mode 100644
index 000000000..a7dc0eff4
--- /dev/null
+++ b/tests/ui/issues/issue-5900.rs
@@ -0,0 +1,15 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+pub mod foo {
+ use super::Bar;
+
+ pub struct FooStruct { bar : Bar }
+}
+
+pub enum Bar {
+ Bar0 = 0 as isize
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-59020.rs b/tests/ui/issues/issue-59020.rs
new file mode 100644
index 000000000..a2b11764a
--- /dev/null
+++ b/tests/ui/issues/issue-59020.rs
@@ -0,0 +1,27 @@
+// edition:2018
+// run-pass
+// ignore-emscripten no threads support
+
+use std::thread;
+use std::time::Duration;
+
+fn main() {
+ let t1 = thread::spawn(|| {
+ let sleep = Duration::new(0,100_000);
+ for _ in 0..100 {
+ println!("Parking1");
+ thread::park_timeout(sleep);
+ }
+ });
+
+ let t2 = thread::spawn(|| {
+ let sleep = Duration::new(0,100_000);
+ for _ in 0..100 {
+ println!("Parking2");
+ thread::park_timeout(sleep);
+ }
+ });
+
+ t1.join().expect("Couldn't join thread 1");
+ t2.join().expect("Couldn't join thread 2");
+}
diff --git a/tests/ui/issues/issue-5917.rs b/tests/ui/issues/issue-5917.rs
new file mode 100644
index 000000000..6ab7081cf
--- /dev/null
+++ b/tests/ui/issues/issue-5917.rs
@@ -0,0 +1,9 @@
+// run-pass
+#![allow(non_upper_case_globals)]
+
+struct T (&'static [isize]);
+static t : T = T (&[5, 4, 3]);
+pub fn main () {
+ let T(ref v) = t;
+ assert_eq!(v[0], 5);
+}
diff --git a/tests/ui/issues/issue-59326.rs b/tests/ui/issues/issue-59326.rs
new file mode 100644
index 000000000..c0e883774
--- /dev/null
+++ b/tests/ui/issues/issue-59326.rs
@@ -0,0 +1,26 @@
+// check-pass
+trait Service {
+ type S;
+}
+
+trait Framing {
+ type F;
+}
+
+impl Framing for () {
+ type F = ();
+}
+
+trait HttpService<F: Framing>: Service<S = F::F> {}
+
+type BoxService = Box<dyn HttpService<(), S = ()>>;
+
+fn build_server<F: FnOnce() -> BoxService>(_: F) {}
+
+fn make_server<F: Framing>() -> Box<dyn HttpService<F, S = F::F>> {
+ unimplemented!()
+}
+
+fn main() {
+ build_server(|| make_server())
+}
diff --git a/tests/ui/issues/issue-59488.rs b/tests/ui/issues/issue-59488.rs
new file mode 100644
index 000000000..384501e3e
--- /dev/null
+++ b/tests/ui/issues/issue-59488.rs
@@ -0,0 +1,34 @@
+fn foo() -> i32 {
+ 42
+}
+
+fn bar(a: i64) -> i64 {
+ 43
+}
+
+enum Foo {
+ Bar(usize),
+}
+
+fn main() {
+ foo > 12;
+ //~^ ERROR binary operation `>` cannot be applied to type `fn() -> i32 {foo}` [E0369]
+ //~| ERROR mismatched types [E0308]
+
+ bar > 13;
+ //~^ ERROR binary operation `>` cannot be applied to type `fn(i64) -> i64 {bar}` [E0369]
+ //~| ERROR mismatched types [E0308]
+
+ foo > foo;
+ //~^ ERROR binary operation `>` cannot be applied to type `fn() -> i32 {foo}` [E0369]
+
+ foo > bar;
+ //~^ ERROR binary operation `>` cannot be applied to type `fn() -> i32 {foo}` [E0369]
+ //~| ERROR mismatched types [E0308]
+
+ let i = Foo::Bar;
+ assert_eq!(Foo::Bar, i);
+ //~^ ERROR binary operation `==` cannot be applied to type `fn(usize) -> Foo {Foo::Bar}` [E0369]
+ //~| ERROR `fn(usize) -> Foo {Foo::Bar}` doesn't implement `Debug` [E0277]
+ //~| ERROR `fn(usize) -> Foo {Foo::Bar}` doesn't implement `Debug` [E0277]
+}
diff --git a/tests/ui/issues/issue-59488.stderr b/tests/ui/issues/issue-59488.stderr
new file mode 100644
index 000000000..f9846b62a
--- /dev/null
+++ b/tests/ui/issues/issue-59488.stderr
@@ -0,0 +1,127 @@
+error[E0369]: binary operation `>` cannot be applied to type `fn() -> i32 {foo}`
+ --> $DIR/issue-59488.rs:14:9
+ |
+LL | foo > 12;
+ | --- ^ -- {integer}
+ | |
+ | fn() -> i32 {foo}
+ |
+help: use parentheses to call this function
+ |
+LL | foo() > 12;
+ | ++
+
+error[E0308]: mismatched types
+ --> $DIR/issue-59488.rs:14:11
+ |
+LL | foo > 12;
+ | ^^ expected fn item, found integer
+ |
+ = note: expected fn item `fn() -> i32 {foo}`
+ found type `i32`
+
+error[E0369]: binary operation `>` cannot be applied to type `fn(i64) -> i64 {bar}`
+ --> $DIR/issue-59488.rs:18:9
+ |
+LL | bar > 13;
+ | --- ^ -- {integer}
+ | |
+ | fn(i64) -> i64 {bar}
+ |
+help: use parentheses to call this function
+ |
+LL | bar(/* i64 */) > 13;
+ | +++++++++++
+
+error[E0308]: mismatched types
+ --> $DIR/issue-59488.rs:18:11
+ |
+LL | bar > 13;
+ | ^^ expected fn item, found integer
+ |
+ = note: expected fn item `fn(i64) -> i64 {bar}`
+ found type `i64`
+
+error[E0369]: binary operation `>` cannot be applied to type `fn() -> i32 {foo}`
+ --> $DIR/issue-59488.rs:22:9
+ |
+LL | foo > foo;
+ | --- ^ --- fn() -> i32 {foo}
+ | |
+ | fn() -> i32 {foo}
+ |
+help: use parentheses to call these
+ |
+LL | foo() > foo();
+ | ++ ++
+
+error[E0369]: binary operation `>` cannot be applied to type `fn() -> i32 {foo}`
+ --> $DIR/issue-59488.rs:25:9
+ |
+LL | foo > bar;
+ | --- ^ --- fn(i64) -> i64 {bar}
+ | |
+ | fn() -> i32 {foo}
+
+error[E0308]: mismatched types
+ --> $DIR/issue-59488.rs:25:11
+ |
+LL | foo > bar;
+ | ^^^ expected fn item, found a different fn item
+ |
+ = note: expected fn item `fn() -> i32 {foo}`
+ found fn item `fn(i64) -> i64 {bar}`
+
+error[E0369]: binary operation `==` cannot be applied to type `fn(usize) -> Foo {Foo::Bar}`
+ --> $DIR/issue-59488.rs:30:5
+ |
+LL | assert_eq!(Foo::Bar, i);
+ | ^^^^^^^^^^^^^^^^^^^^^^^
+ | |
+ | fn(usize) -> Foo {Foo::Bar}
+ | fn(usize) -> Foo {Foo::Bar}
+ |
+ = note: this error originates in the macro `assert_eq` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0277]: `fn(usize) -> Foo {Foo::Bar}` doesn't implement `Debug`
+ --> $DIR/issue-59488.rs:30:5
+ |
+LL | assert_eq!(Foo::Bar, i);
+ | ^^^^^^^^^^^^^^^^^^^^^^^ `fn(usize) -> Foo {Foo::Bar}` cannot be formatted using `{:?}` because it doesn't implement `Debug`
+ |
+ = help: the trait `Debug` is not implemented for fn item `fn(usize) -> Foo {Foo::Bar}`
+ = help: the following other types implement trait `Debug`:
+ extern "C" fn() -> Ret
+ extern "C" fn(A, B) -> Ret
+ extern "C" fn(A, B, ...) -> Ret
+ extern "C" fn(A, B, C) -> Ret
+ extern "C" fn(A, B, C, ...) -> Ret
+ extern "C" fn(A, B, C, D) -> Ret
+ extern "C" fn(A, B, C, D, ...) -> Ret
+ extern "C" fn(A, B, C, D, E) -> Ret
+ and 118 others
+ = note: this error originates in the macro `assert_eq` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0277]: `fn(usize) -> Foo {Foo::Bar}` doesn't implement `Debug`
+ --> $DIR/issue-59488.rs:30:5
+ |
+LL | assert_eq!(Foo::Bar, i);
+ | ^^^^^^^^^^^^^^^^^^^^^^^ `fn(usize) -> Foo {Foo::Bar}` cannot be formatted using `{:?}` because it doesn't implement `Debug`
+ |
+ = help: the trait `Debug` is not implemented for fn item `fn(usize) -> Foo {Foo::Bar}`
+ = help: the following other types implement trait `Debug`:
+ extern "C" fn() -> Ret
+ extern "C" fn(A, B) -> Ret
+ extern "C" fn(A, B, ...) -> Ret
+ extern "C" fn(A, B, C) -> Ret
+ extern "C" fn(A, B, C, ...) -> Ret
+ extern "C" fn(A, B, C, D) -> Ret
+ extern "C" fn(A, B, C, D, ...) -> Ret
+ extern "C" fn(A, B, C, D, E) -> Ret
+ and 118 others
+ = note: this error originates in the macro `assert_eq` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to 10 previous errors
+
+Some errors have detailed explanations: E0277, E0308, E0369.
+For more information about an error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-59494.rs b/tests/ui/issues/issue-59494.rs
new file mode 100644
index 000000000..a53e28f72
--- /dev/null
+++ b/tests/ui/issues/issue-59494.rs
@@ -0,0 +1,23 @@
+fn t7p<A, B, C>(f: impl Fn(B) -> C, g: impl Fn(A) -> B) -> impl Fn(A) -> C {
+ move |a: A| -> C { f(g(a)) }
+}
+
+fn t8n<A, B, C>(f: impl Fn(A) -> B, g: impl Fn(A) -> C) -> impl Fn(A) -> (B, C)
+where
+ A: Copy,
+{
+ move |a: A| -> (B, C) {
+ let b = a;
+ let fa = f(a);
+ let ga = g(b);
+ (fa, ga)
+ }
+}
+
+fn main() {
+ let f = |(_, _)| {};
+ let g = |(a, _)| a;
+ let t7 = |env| |a| |b| t7p(f, g)(((env, a), b));
+ let t8 = t8n(t7, t7p(f, g));
+ //~^ ERROR: expected a `Fn<(_,)>` closure, found `impl Fn(((_, _), _))` [E0277]
+}
diff --git a/tests/ui/issues/issue-59494.stderr b/tests/ui/issues/issue-59494.stderr
new file mode 100644
index 000000000..a9284535e
--- /dev/null
+++ b/tests/ui/issues/issue-59494.stderr
@@ -0,0 +1,18 @@
+error[E0277]: expected a `Fn<(_,)>` closure, found `impl Fn(((_, _), _))`
+ --> $DIR/issue-59494.rs:21:22
+ |
+LL | let t8 = t8n(t7, t7p(f, g));
+ | --- ^^^^^^^^^ expected an `Fn<(_,)>` closure, found `impl Fn(((_, _), _))`
+ | |
+ | required by a bound introduced by this call
+ |
+ = help: the trait `Fn<(_,)>` is not implemented for `impl Fn(((_, _), _))`
+note: required by a bound in `t8n`
+ --> $DIR/issue-59494.rs:5:45
+ |
+LL | fn t8n<A, B, C>(f: impl Fn(A) -> B, g: impl Fn(A) -> C) -> impl Fn(A) -> (B, C)
+ | ^^^^^^^^^^ required by this bound in `t8n`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-5950.rs b/tests/ui/issues/issue-5950.rs
new file mode 100644
index 000000000..492a9d572
--- /dev/null
+++ b/tests/ui/issues/issue-5950.rs
@@ -0,0 +1,9 @@
+// check-pass
+
+// pretty-expanded FIXME #23616
+
+pub use local as local_alias;
+
+pub mod local { }
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-59756.fixed b/tests/ui/issues/issue-59756.fixed
new file mode 100644
index 000000000..7b55d0f17
--- /dev/null
+++ b/tests/ui/issues/issue-59756.fixed
@@ -0,0 +1,17 @@
+// run-rustfix
+
+#![allow(warnings)]
+
+struct A;
+struct B;
+
+fn foo() -> Result<A, B> {
+ Ok(A)
+}
+
+fn bar() -> Result<A, B> {
+ foo()
+ //~^ ERROR try expression alternatives have incompatible types [E0308]
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-59756.rs b/tests/ui/issues/issue-59756.rs
new file mode 100644
index 000000000..d6df0592b
--- /dev/null
+++ b/tests/ui/issues/issue-59756.rs
@@ -0,0 +1,21 @@
+// run-rustfix
+// ignore-test
+//
+// FIXME: Re-enable this test once we support choosing
+// between multiple mutually exclusive suggestions for the same span
+
+#![allow(warnings)]
+
+struct A;
+struct B;
+
+fn foo() -> Result<A, B> {
+ Ok(A)
+}
+
+fn bar() -> Result<A, B> {
+ foo()?
+ //~^ ERROR try expression alternatives have incompatible types [E0308]
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-59756.stderr b/tests/ui/issues/issue-59756.stderr
new file mode 100644
index 000000000..9066e57aa
--- /dev/null
+++ b/tests/ui/issues/issue-59756.stderr
@@ -0,0 +1,20 @@
+error[E0308]: try expression alternatives have incompatible types
+ --> $DIR/issue-59756.rs:13:5
+ |
+LL | foo()?
+ | ^^^^^^ expected enum `std::result::Result`, found struct `A`
+ |
+ = note: expected enum `std::result::Result<A, B>`
+ found struct `A`
+help: try removing this `?`
+ |
+LL | foo()
+ | --
+help: try using a variant of the expected enum
+ |
+LL | Ok(foo()?)
+ |
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-5988.rs b/tests/ui/issues/issue-5988.rs
new file mode 100644
index 000000000..303fb4fbc
--- /dev/null
+++ b/tests/ui/issues/issue-5988.rs
@@ -0,0 +1,24 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+trait B {
+ fn f(&self);
+}
+
+trait T : B {
+}
+
+struct A;
+
+impl<U: T> B for U {
+ fn f(&self) { }
+}
+
+impl T for A {
+}
+
+fn main() {
+ let a = A;
+ let br = &a as &dyn B;
+ br.f();
+}
diff --git a/tests/ui/issues/issue-5997-enum.rs b/tests/ui/issues/issue-5997-enum.rs
new file mode 100644
index 000000000..3ff4e036c
--- /dev/null
+++ b/tests/ui/issues/issue-5997-enum.rs
@@ -0,0 +1,10 @@
+fn f<Z>() -> bool {
+ enum E { V(Z) }
+ //~^ ERROR can't use generic parameters from outer function
+ true
+}
+
+fn main() {
+ let b = f::<isize>();
+ assert!(b);
+}
diff --git a/tests/ui/issues/issue-5997-enum.stderr b/tests/ui/issues/issue-5997-enum.stderr
new file mode 100644
index 000000000..3a79215d3
--- /dev/null
+++ b/tests/ui/issues/issue-5997-enum.stderr
@@ -0,0 +1,13 @@
+error[E0401]: can't use generic parameters from outer function
+ --> $DIR/issue-5997-enum.rs:2:16
+ |
+LL | fn f<Z>() -> bool {
+ | - type parameter from outer function
+LL | enum E { V(Z) }
+ | - ^ use of generic parameter from outer function
+ | |
+ | help: try using a local generic parameter instead: `<Z>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0401`.
diff --git a/tests/ui/issues/issue-5997-struct.rs b/tests/ui/issues/issue-5997-struct.rs
new file mode 100644
index 000000000..6cf510b0a
--- /dev/null
+++ b/tests/ui/issues/issue-5997-struct.rs
@@ -0,0 +1,10 @@
+fn f<T>() -> bool {
+ struct S(T); //~ ERROR can't use generic parameters from outer function
+
+ true
+}
+
+fn main() {
+ let b = f::<isize>();
+ assert!(b);
+}
diff --git a/tests/ui/issues/issue-5997-struct.stderr b/tests/ui/issues/issue-5997-struct.stderr
new file mode 100644
index 000000000..d2e97f767
--- /dev/null
+++ b/tests/ui/issues/issue-5997-struct.stderr
@@ -0,0 +1,13 @@
+error[E0401]: can't use generic parameters from outer function
+ --> $DIR/issue-5997-struct.rs:2:14
+ |
+LL | fn f<T>() -> bool {
+ | - type parameter from outer function
+LL | struct S(T);
+ | -^ use of generic parameter from outer function
+ | |
+ | help: try using a local generic parameter instead: `<T>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0401`.
diff --git a/tests/ui/issues/issue-5997.rs b/tests/ui/issues/issue-5997.rs
new file mode 100644
index 000000000..145e3a792
--- /dev/null
+++ b/tests/ui/issues/issue-5997.rs
@@ -0,0 +1,15 @@
+// run-pass
+#![allow(dead_code)]
+
+fn f<T>() -> bool {
+ enum E<T> { V(T) }
+
+ struct S<T>(T);
+
+ true
+}
+
+fn main() {
+ let b = f::<isize>();
+ assert!(b);
+}
diff --git a/tests/ui/issues/issue-60218.rs b/tests/ui/issues/issue-60218.rs
new file mode 100644
index 000000000..4926691f3
--- /dev/null
+++ b/tests/ui/issues/issue-60218.rs
@@ -0,0 +1,19 @@
+// Regression test for #60218
+//
+// This was reported to cause ICEs.
+
+use std::iter::Map;
+
+pub trait Foo {}
+
+pub fn trigger_error<I, F>(iterable: I, functor: F)
+where
+ for<'t> &'t I: IntoIterator,
+for<'t> Map<<&'t I as IntoIterator>::IntoIter, F>: Iterator,
+for<'t> <Map<<&'t I as IntoIterator>::IntoIter, F> as Iterator>::Item: Foo,
+{
+}
+
+fn main() {
+ trigger_error(vec![], |x: &u32| x) //~ ERROR E0277
+}
diff --git a/tests/ui/issues/issue-60218.stderr b/tests/ui/issues/issue-60218.stderr
new file mode 100644
index 000000000..dd72b6515
--- /dev/null
+++ b/tests/ui/issues/issue-60218.stderr
@@ -0,0 +1,20 @@
+error[E0277]: the trait bound `&u32: Foo` is not satisfied
+ --> $DIR/issue-60218.rs:18:19
+ |
+LL | trigger_error(vec![], |x: &u32| x)
+ | ------------- ^^^^^^ the trait `Foo` is not implemented for `&u32`
+ | |
+ | required by a bound introduced by this call
+ |
+note: required by a bound in `trigger_error`
+ --> $DIR/issue-60218.rs:13:72
+ |
+LL | pub fn trigger_error<I, F>(iterable: I, functor: F)
+ | ------------- required by a bound in this
+...
+LL | for<'t> <Map<<&'t I as IntoIterator>::IntoIter, F> as Iterator>::Item: Foo,
+ | ^^^ required by this bound in `trigger_error`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-60622.rs b/tests/ui/issues/issue-60622.rs
new file mode 100644
index 000000000..8e230c615
--- /dev/null
+++ b/tests/ui/issues/issue-60622.rs
@@ -0,0 +1,16 @@
+#![deny(warnings)]
+
+struct Borked {}
+
+impl Borked {
+ fn a(&self) {}
+}
+
+fn run_wild<T>(b: &Borked) {
+ b.a::<'_, T>();
+ //~^ ERROR cannot specify lifetime arguments explicitly if late bound lifetime parameters are present
+ //~| ERROR this associated function takes 0 generic arguments but 1 generic argument
+ //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-60622.stderr b/tests/ui/issues/issue-60622.stderr
new file mode 100644
index 000000000..ecf1ae758
--- /dev/null
+++ b/tests/ui/issues/issue-60622.stderr
@@ -0,0 +1,35 @@
+error: cannot specify lifetime arguments explicitly if late bound lifetime parameters are present
+ --> $DIR/issue-60622.rs:10:11
+ |
+LL | fn a(&self) {}
+ | - the late bound lifetime parameter is introduced here
+...
+LL | b.a::<'_, T>();
+ | ^^
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #42868 <https://github.com/rust-lang/rust/issues/42868>
+note: the lint level is defined here
+ --> $DIR/issue-60622.rs:1:9
+ |
+LL | #![deny(warnings)]
+ | ^^^^^^^^
+ = note: `#[deny(late_bound_lifetime_arguments)]` implied by `#[deny(warnings)]`
+
+error[E0107]: this associated function takes 0 generic arguments but 1 generic argument was supplied
+ --> $DIR/issue-60622.rs:10:7
+ |
+LL | b.a::<'_, T>();
+ | ^ - help: remove this generic argument
+ | |
+ | expected 0 generic arguments
+ |
+note: associated function defined here, with 0 generic parameters
+ --> $DIR/issue-60622.rs:6:8
+ |
+LL | fn a(&self) {}
+ | ^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0107`.
diff --git a/tests/ui/issues/issue-60989.rs b/tests/ui/issues/issue-60989.rs
new file mode 100644
index 000000000..29db3fdb4
--- /dev/null
+++ b/tests/ui/issues/issue-60989.rs
@@ -0,0 +1,18 @@
+struct A {}
+struct B {}
+
+impl From<A> for B {
+ fn from(a: A) -> B {
+ B{}
+ }
+}
+
+fn main() {
+ let c1 = ();
+ c1::<()>;
+ //~^ ERROR type arguments are not allowed on local variable
+
+ let c1 = A {};
+ c1::<dyn Into<B>>;
+ //~^ ERROR type arguments are not allowed on local variable
+}
diff --git a/tests/ui/issues/issue-60989.stderr b/tests/ui/issues/issue-60989.stderr
new file mode 100644
index 000000000..e0236567b
--- /dev/null
+++ b/tests/ui/issues/issue-60989.stderr
@@ -0,0 +1,19 @@
+error[E0109]: type arguments are not allowed on local variable
+ --> $DIR/issue-60989.rs:12:10
+ |
+LL | c1::<()>;
+ | -- ^^ type argument not allowed
+ | |
+ | not allowed on local variable
+
+error[E0109]: type arguments are not allowed on local variable
+ --> $DIR/issue-60989.rs:16:10
+ |
+LL | c1::<dyn Into<B>>;
+ | -- ^^^^^^^^^^^ type argument not allowed
+ | |
+ | not allowed on local variable
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0109`.
diff --git a/tests/ui/issues/issue-61106.rs b/tests/ui/issues/issue-61106.rs
new file mode 100644
index 000000000..308ef1de3
--- /dev/null
+++ b/tests/ui/issues/issue-61106.rs
@@ -0,0 +1,6 @@
+fn main() {
+ let x = String::new();
+ foo(x.clone()); //~ ERROR mismatched types
+}
+
+fn foo(_: &str) {}
diff --git a/tests/ui/issues/issue-61106.stderr b/tests/ui/issues/issue-61106.stderr
new file mode 100644
index 000000000..2bc092341
--- /dev/null
+++ b/tests/ui/issues/issue-61106.stderr
@@ -0,0 +1,19 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-61106.rs:3:9
+ |
+LL | foo(x.clone());
+ | --- ^^^^^^^^^
+ | | |
+ | | expected `&str`, found struct `String`
+ | | help: consider borrowing here: `&x`
+ | arguments to this function are incorrect
+ |
+note: function defined here
+ --> $DIR/issue-61106.rs:6:4
+ |
+LL | fn foo(_: &str) {}
+ | ^^^ -------
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-61108.rs b/tests/ui/issues/issue-61108.rs
new file mode 100644
index 000000000..0a883b958
--- /dev/null
+++ b/tests/ui/issues/issue-61108.rs
@@ -0,0 +1,7 @@
+fn main() {
+ let mut bad_letters = vec!['e', 't', 'o', 'i'];
+ for l in bad_letters {
+ // something here
+ }
+ bad_letters.push('s'); //~ ERROR borrow of moved value: `bad_letters`
+}
diff --git a/tests/ui/issues/issue-61108.stderr b/tests/ui/issues/issue-61108.stderr
new file mode 100644
index 000000000..3aaf5fb3f
--- /dev/null
+++ b/tests/ui/issues/issue-61108.stderr
@@ -0,0 +1,21 @@
+error[E0382]: borrow of moved value: `bad_letters`
+ --> $DIR/issue-61108.rs:6:5
+ |
+LL | let mut bad_letters = vec!['e', 't', 'o', 'i'];
+ | --------------- move occurs because `bad_letters` has type `Vec<char>`, which does not implement the `Copy` trait
+LL | for l in bad_letters {
+ | ----------- `bad_letters` moved due to this implicit call to `.into_iter()`
+...
+LL | bad_letters.push('s');
+ | ^^^^^^^^^^^^^^^^^^^^^ value borrowed here after move
+ |
+note: `into_iter` takes ownership of the receiver `self`, which moves `bad_letters`
+ --> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
+help: consider iterating over a slice of the `Vec<char>`'s content to avoid moving into the `for` loop
+ |
+LL | for l in &bad_letters {
+ | +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0382`.
diff --git a/tests/ui/issues/issue-6117.rs b/tests/ui/issues/issue-6117.rs
new file mode 100644
index 000000000..5235d53d8
--- /dev/null
+++ b/tests/ui/issues/issue-6117.rs
@@ -0,0 +1,12 @@
+// run-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+enum Either<T, U> { Left(T), Right(U) }
+
+pub fn main() {
+ match Either::Left(Box::new(17)) {
+ Either::Right(()) => {}
+ _ => {}
+ }
+}
diff --git a/tests/ui/issues/issue-6130.rs b/tests/ui/issues/issue-6130.rs
new file mode 100644
index 000000000..a33ea6869
--- /dev/null
+++ b/tests/ui/issues/issue-6130.rs
@@ -0,0 +1,10 @@
+// run-pass
+
+pub fn main() {
+ let i: usize = 0;
+ assert!(i <= 0xFFFF_FFFF);
+
+ let i: isize = 0;
+ assert!(i >= -0x8000_0000);
+ assert!(i <= 0x7FFF_FFFF);
+}
diff --git a/tests/ui/issues/issue-61475.rs b/tests/ui/issues/issue-61475.rs
new file mode 100644
index 000000000..680449c9e
--- /dev/null
+++ b/tests/ui/issues/issue-61475.rs
@@ -0,0 +1,15 @@
+// run-pass
+#![allow(dead_code)]
+
+enum E {
+ A, B
+}
+
+fn main() {
+ match &&E::A {
+ &&E::A => {
+ }
+ &&E::B => {
+ }
+ };
+}
diff --git a/tests/ui/issues/issue-6153.rs b/tests/ui/issues/issue-6153.rs
new file mode 100644
index 000000000..25f026f21
--- /dev/null
+++ b/tests/ui/issues/issue-6153.rs
@@ -0,0 +1,13 @@
+// run-pass
+
+
+fn swap<F>(f: F) -> Vec<isize> where F: FnOnce(Vec<isize>) -> Vec<isize> {
+ let x = vec![1, 2, 3];
+ f(x)
+}
+
+pub fn main() {
+ let v = swap(|mut x| { x.push(4); x });
+ let w = swap(|mut x| { x.push(4); x });
+ assert_eq!(v, w);
+}
diff --git a/tests/ui/issues/issue-61623.rs b/tests/ui/issues/issue-61623.rs
new file mode 100644
index 000000000..82df50d9d
--- /dev/null
+++ b/tests/ui/issues/issue-61623.rs
@@ -0,0 +1,10 @@
+fn f1<'a>(_: &'a mut ()) {}
+
+fn f2<P>(_: P, _: ()) {}
+
+fn f3<'a>(x: &'a ((), &'a mut ())) {
+ f2(|| x.0, f1(x.1))
+//~^ ERROR cannot borrow `*x.1` as mutable, as it is behind a `&` reference
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-61623.stderr b/tests/ui/issues/issue-61623.stderr
new file mode 100644
index 000000000..5fcc33855
--- /dev/null
+++ b/tests/ui/issues/issue-61623.stderr
@@ -0,0 +1,14 @@
+error[E0596]: cannot borrow `*x.1` as mutable, as it is behind a `&` reference
+ --> $DIR/issue-61623.rs:6:19
+ |
+LL | f2(|| x.0, f1(x.1))
+ | ^^^ `x` is a `&` reference, so the data it refers to cannot be borrowed as mutable
+ |
+help: consider changing this to be a mutable reference
+ |
+LL | fn f3<'a>(x: &'a mut ((), &'a mut ())) {
+ | ~~~~~~~~~~~~~~~~~~~~~~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0596`.
diff --git a/tests/ui/issues/issue-61696.rs b/tests/ui/issues/issue-61696.rs
new file mode 100644
index 000000000..dca52927f
--- /dev/null
+++ b/tests/ui/issues/issue-61696.rs
@@ -0,0 +1,66 @@
+// run-pass
+
+pub enum Infallible {}
+
+// The check that the `bool` field of `V1` is encoding a "niche variant"
+// (i.e. not `V1`, so `V3` or `V4`) used to be mathematically incorrect,
+// causing valid `V1` values to be interpreted as other variants.
+pub enum E1 {
+ V1 { f: bool },
+ V2 { f: Infallible },
+ V3,
+ V4,
+}
+
+// Computing the discriminant used to be done using the niche type (here `u8`,
+// from the `bool` field of `V1`), overflowing for variants with large enough
+// indices (`V3` and `V4`), causing them to be interpreted as other variants.
+pub enum E2<X> {
+ V1 { f: bool },
+
+ /*_00*/ _01(X), _02(X), _03(X), _04(X), _05(X), _06(X), _07(X),
+ _08(X), _09(X), _0A(X), _0B(X), _0C(X), _0D(X), _0E(X), _0F(X),
+ _10(X), _11(X), _12(X), _13(X), _14(X), _15(X), _16(X), _17(X),
+ _18(X), _19(X), _1A(X), _1B(X), _1C(X), _1D(X), _1E(X), _1F(X),
+ _20(X), _21(X), _22(X), _23(X), _24(X), _25(X), _26(X), _27(X),
+ _28(X), _29(X), _2A(X), _2B(X), _2C(X), _2D(X), _2E(X), _2F(X),
+ _30(X), _31(X), _32(X), _33(X), _34(X), _35(X), _36(X), _37(X),
+ _38(X), _39(X), _3A(X), _3B(X), _3C(X), _3D(X), _3E(X), _3F(X),
+ _40(X), _41(X), _42(X), _43(X), _44(X), _45(X), _46(X), _47(X),
+ _48(X), _49(X), _4A(X), _4B(X), _4C(X), _4D(X), _4E(X), _4F(X),
+ _50(X), _51(X), _52(X), _53(X), _54(X), _55(X), _56(X), _57(X),
+ _58(X), _59(X), _5A(X), _5B(X), _5C(X), _5D(X), _5E(X), _5F(X),
+ _60(X), _61(X), _62(X), _63(X), _64(X), _65(X), _66(X), _67(X),
+ _68(X), _69(X), _6A(X), _6B(X), _6C(X), _6D(X), _6E(X), _6F(X),
+ _70(X), _71(X), _72(X), _73(X), _74(X), _75(X), _76(X), _77(X),
+ _78(X), _79(X), _7A(X), _7B(X), _7C(X), _7D(X), _7E(X), _7F(X),
+ _80(X), _81(X), _82(X), _83(X), _84(X), _85(X), _86(X), _87(X),
+ _88(X), _89(X), _8A(X), _8B(X), _8C(X), _8D(X), _8E(X), _8F(X),
+ _90(X), _91(X), _92(X), _93(X), _94(X), _95(X), _96(X), _97(X),
+ _98(X), _99(X), _9A(X), _9B(X), _9C(X), _9D(X), _9E(X), _9F(X),
+ _A0(X), _A1(X), _A2(X), _A3(X), _A4(X), _A5(X), _A6(X), _A7(X),
+ _A8(X), _A9(X), _AA(X), _AB(X), _AC(X), _AD(X), _AE(X), _AF(X),
+ _B0(X), _B1(X), _B2(X), _B3(X), _B4(X), _B5(X), _B6(X), _B7(X),
+ _B8(X), _B9(X), _BA(X), _BB(X), _BC(X), _BD(X), _BE(X), _BF(X),
+ _C0(X), _C1(X), _C2(X), _C3(X), _C4(X), _C5(X), _C6(X), _C7(X),
+ _C8(X), _C9(X), _CA(X), _CB(X), _CC(X), _CD(X), _CE(X), _CF(X),
+ _D0(X), _D1(X), _D2(X), _D3(X), _D4(X), _D5(X), _D6(X), _D7(X),
+ _D8(X), _D9(X), _DA(X), _DB(X), _DC(X), _DD(X), _DE(X), _DF(X),
+ _E0(X), _E1(X), _E2(X), _E3(X), _E4(X), _E5(X), _E6(X), _E7(X),
+ _E8(X), _E9(X), _EA(X), _EB(X), _EC(X), _ED(X), _EE(X), _EF(X),
+ _F0(X), _F1(X), _F2(X), _F3(X), _F4(X), _F5(X), _F6(X), _F7(X),
+ _F8(X), _F9(X), _FA(X), _FB(X), _FC(X), _FD(X), _FE(X), _FF(X),
+
+ V3,
+ V4,
+}
+
+fn main() {
+ if let E1::V2 { .. } = (E1::V1 { f: true }) {
+ unreachable!()
+ }
+
+ if let E2::V1 { .. } = E2::V3::<Infallible> {
+ unreachable!()
+ }
+}
diff --git a/tests/ui/issues/issue-61894.rs b/tests/ui/issues/issue-61894.rs
new file mode 100644
index 000000000..776fdbb74
--- /dev/null
+++ b/tests/ui/issues/issue-61894.rs
@@ -0,0 +1,21 @@
+// run-pass
+
+#![feature(core_intrinsics)]
+
+use std::any::type_name;
+
+struct Bar<M>(#[allow(unused_tuple_struct_fields)] M);
+
+impl<M> Bar<M> {
+ fn foo(&self) -> &'static str {
+ fn f() {}
+ fn type_name_of<T>(_: T) -> &'static str {
+ type_name::<T>()
+ }
+ type_name_of(f)
+ }
+}
+
+fn main() {
+ assert_eq!(Bar(()).foo(), "issue_61894::Bar<_>::foo::f");
+}
diff --git a/tests/ui/issues/issue-62375.rs b/tests/ui/issues/issue-62375.rs
new file mode 100644
index 000000000..a2c8fe551
--- /dev/null
+++ b/tests/ui/issues/issue-62375.rs
@@ -0,0 +1,9 @@
+enum A {
+ Value(())
+}
+
+fn main() {
+ let a = A::Value(());
+ a == A::Value;
+ //~^ ERROR binary operation `==` cannot be applied to type `A`
+}
diff --git a/tests/ui/issues/issue-62375.stderr b/tests/ui/issues/issue-62375.stderr
new file mode 100644
index 000000000..478e025be
--- /dev/null
+++ b/tests/ui/issues/issue-62375.stderr
@@ -0,0 +1,21 @@
+error[E0369]: binary operation `==` cannot be applied to type `A`
+ --> $DIR/issue-62375.rs:7:7
+ |
+LL | a == A::Value;
+ | - ^^ -------- fn(()) -> A {A::Value}
+ | |
+ | A
+ |
+note: an implementation of `PartialEq<_>` might be missing for `A`
+ --> $DIR/issue-62375.rs:1:1
+ |
+LL | enum A {
+ | ^^^^^^ must implement `PartialEq<_>`
+help: consider annotating `A` with `#[derive(PartialEq)]`
+ |
+LL | #[derive(PartialEq)]
+ |
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0369`.
diff --git a/tests/ui/issues/issue-62480.rs b/tests/ui/issues/issue-62480.rs
new file mode 100644
index 000000000..94a9c2ab8
--- /dev/null
+++ b/tests/ui/issues/issue-62480.rs
@@ -0,0 +1,10 @@
+fn main() {
+ // This used to ICE during liveness check because `target_id` passed to
+ // `propagate_through_expr` would be the closure and not the `loop`, which wouldn't be found in
+ // `self.break_ln`. (#62480)
+ 'a: {
+ || break 'a
+ //~^ ERROR use of unreachable label `'a`
+ //~| ERROR `break` inside of a closure
+ }
+}
diff --git a/tests/ui/issues/issue-62480.stderr b/tests/ui/issues/issue-62480.stderr
new file mode 100644
index 000000000..db2305370
--- /dev/null
+++ b/tests/ui/issues/issue-62480.stderr
@@ -0,0 +1,22 @@
+error[E0767]: use of unreachable label `'a`
+ --> $DIR/issue-62480.rs:6:18
+ |
+LL | 'a: {
+ | -- unreachable label defined here
+LL | || break 'a
+ | ^^ unreachable label `'a`
+ |
+ = note: labels are unreachable through functions, closures, async blocks and modules
+
+error[E0267]: `break` inside of a closure
+ --> $DIR/issue-62480.rs:6:12
+ |
+LL | || break 'a
+ | -- ^^^^^^^^ cannot `break` inside of a closure
+ | |
+ | enclosing closure
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0267, E0767.
+For more information about an error, try `rustc --explain E0267`.
diff --git a/tests/ui/issues/issue-6318.rs b/tests/ui/issues/issue-6318.rs
new file mode 100644
index 000000000..e5f245f6f
--- /dev/null
+++ b/tests/ui/issues/issue-6318.rs
@@ -0,0 +1,20 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+pub enum Thing {
+ A(Box<dyn Foo+'static>)
+}
+
+pub trait Foo {
+ fn dummy(&self) { }
+}
+
+pub struct Struct;
+
+impl Foo for Struct {}
+
+pub fn main() {
+ match Thing::A(Box::new(Struct) as Box<dyn Foo + 'static>) {
+ Thing::A(_a) => 0,
+ };
+}
diff --git a/tests/ui/issues/issue-6344-let.rs b/tests/ui/issues/issue-6344-let.rs
new file mode 100644
index 000000000..a7b6a2e2d
--- /dev/null
+++ b/tests/ui/issues/issue-6344-let.rs
@@ -0,0 +1,15 @@
+// run-pass
+#![allow(non_shorthand_field_patterns)]
+
+struct A { x: usize }
+
+impl Drop for A {
+ fn drop(&mut self) {}
+}
+
+pub fn main() {
+ let a = A { x: 0 };
+
+ let A { x: ref x } = a;
+ println!("{}", x)
+}
diff --git a/tests/ui/issues/issue-6344-match.rs b/tests/ui/issues/issue-6344-match.rs
new file mode 100644
index 000000000..4505a34c7
--- /dev/null
+++ b/tests/ui/issues/issue-6344-match.rs
@@ -0,0 +1,18 @@
+// run-pass
+#![allow(non_shorthand_field_patterns)]
+
+struct A { x: usize }
+
+impl Drop for A {
+ fn drop(&mut self) {}
+}
+
+pub fn main() {
+ let a = A { x: 0 };
+
+ match a {
+ A { x : ref x } => {
+ println!("{}", x)
+ }
+ }
+}
diff --git a/tests/ui/issues/issue-63983.rs b/tests/ui/issues/issue-63983.rs
new file mode 100644
index 000000000..ab952666f
--- /dev/null
+++ b/tests/ui/issues/issue-63983.rs
@@ -0,0 +1,15 @@
+enum MyEnum {
+ Tuple(i32),
+ Struct{ s: i32 },
+}
+
+fn foo(en: MyEnum) {
+ match en {
+ MyEnum::Tuple => "",
+//~^ ERROR expected unit struct, unit variant or constant, found tuple variant `MyEnum::Tuple`
+ MyEnum::Struct => "",
+//~^ ERROR expected unit struct, unit variant or constant, found struct variant `MyEnum::Struct`
+ };
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-63983.stderr b/tests/ui/issues/issue-63983.stderr
new file mode 100644
index 000000000..f90c81116
--- /dev/null
+++ b/tests/ui/issues/issue-63983.stderr
@@ -0,0 +1,19 @@
+error[E0532]: expected unit struct, unit variant or constant, found tuple variant `MyEnum::Tuple`
+ --> $DIR/issue-63983.rs:8:9
+ |
+LL | Tuple(i32),
+ | ---------- `MyEnum::Tuple` defined here
+...
+LL | MyEnum::Tuple => "",
+ | ^^^^^^^^^^^^^ help: use the tuple variant pattern syntax instead: `MyEnum::Tuple(_)`
+
+error[E0533]: expected unit struct, unit variant or constant, found struct variant `MyEnum::Struct`
+ --> $DIR/issue-63983.rs:10:9
+ |
+LL | MyEnum::Struct => "",
+ | ^^^^^^^^^^^^^^ not a unit struct, unit variant or constant
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0532, E0533.
+For more information about an error, try `rustc --explain E0532`.
diff --git a/tests/ui/issues/issue-64430.rs b/tests/ui/issues/issue-64430.rs
new file mode 100644
index 000000000..0bc66e06e
--- /dev/null
+++ b/tests/ui/issues/issue-64430.rs
@@ -0,0 +1,14 @@
+// compile-flags:-C panic=abort
+
+#![no_std]
+pub struct Foo;
+
+fn main() {
+ Foo.bar()
+ //~^ ERROR E0599
+}
+
+#[panic_handler]
+fn panic(_info: &core::panic::PanicInfo) -> ! {
+ loop{}
+}
diff --git a/tests/ui/issues/issue-64430.stderr b/tests/ui/issues/issue-64430.stderr
new file mode 100644
index 000000000..b6b1f3a66
--- /dev/null
+++ b/tests/ui/issues/issue-64430.stderr
@@ -0,0 +1,12 @@
+error[E0599]: no method named `bar` found for struct `Foo` in the current scope
+ --> $DIR/issue-64430.rs:7:9
+ |
+LL | pub struct Foo;
+ | -------------- method `bar` not found for this struct
+...
+LL | Foo.bar()
+ | ^^^ method not found in `Foo`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-64559.rs b/tests/ui/issues/issue-64559.rs
new file mode 100644
index 000000000..71e054b5d
--- /dev/null
+++ b/tests/ui/issues/issue-64559.rs
@@ -0,0 +1,6 @@
+fn main() {
+ let orig = vec![true];
+ for _val in orig {}
+ let _closure = || orig;
+ //~^ ERROR use of moved value: `orig`
+}
diff --git a/tests/ui/issues/issue-64559.stderr b/tests/ui/issues/issue-64559.stderr
new file mode 100644
index 000000000..386ac794d
--- /dev/null
+++ b/tests/ui/issues/issue-64559.stderr
@@ -0,0 +1,22 @@
+error[E0382]: use of moved value: `orig`
+ --> $DIR/issue-64559.rs:4:20
+ |
+LL | let orig = vec![true];
+ | ---- move occurs because `orig` has type `Vec<bool>`, which does not implement the `Copy` trait
+LL | for _val in orig {}
+ | ---- `orig` moved due to this implicit call to `.into_iter()`
+LL | let _closure = || orig;
+ | ^^ ---- use occurs due to use in closure
+ | |
+ | value used here after move
+ |
+note: `into_iter` takes ownership of the receiver `self`, which moves `orig`
+ --> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
+help: consider iterating over a slice of the `Vec<bool>`'s content to avoid moving into the `for` loop
+ |
+LL | for _val in &orig {}
+ | +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0382`.
diff --git a/tests/ui/issues/issue-6458-1.rs b/tests/ui/issues/issue-6458-1.rs
new file mode 100644
index 000000000..184e4832b
--- /dev/null
+++ b/tests/ui/issues/issue-6458-1.rs
@@ -0,0 +1,8 @@
+// run-fail
+// error-pattern:explicit panic
+// ignore-emscripten no processes
+
+fn foo<T>(t: T) {}
+fn main() {
+ foo(panic!())
+}
diff --git a/tests/ui/issues/issue-6458-2.rs b/tests/ui/issues/issue-6458-2.rs
new file mode 100644
index 000000000..b18cae3ed
--- /dev/null
+++ b/tests/ui/issues/issue-6458-2.rs
@@ -0,0 +1,5 @@
+fn main() {
+ // Unconstrained type:
+ format!("{:?}", None);
+ //~^ ERROR type annotations needed [E0282]
+}
diff --git a/tests/ui/issues/issue-6458-2.stderr b/tests/ui/issues/issue-6458-2.stderr
new file mode 100644
index 000000000..8dbdd9a27
--- /dev/null
+++ b/tests/ui/issues/issue-6458-2.stderr
@@ -0,0 +1,14 @@
+error[E0282]: type annotations needed
+ --> $DIR/issue-6458-2.rs:3:21
+ |
+LL | format!("{:?}", None);
+ | ^^^^ cannot infer type of the type parameter `T` declared on the enum `Option`
+ |
+help: consider specifying the generic argument
+ |
+LL | format!("{:?}", None::<T>);
+ | +++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-6458-3.rs b/tests/ui/issues/issue-6458-3.rs
new file mode 100644
index 000000000..d4f8886e9
--- /dev/null
+++ b/tests/ui/issues/issue-6458-3.rs
@@ -0,0 +1,6 @@
+use std::mem;
+
+fn main() {
+ mem::transmute(0);
+ //~^ ERROR type annotations needed [E0282]
+}
diff --git a/tests/ui/issues/issue-6458-3.stderr b/tests/ui/issues/issue-6458-3.stderr
new file mode 100644
index 000000000..520efccae
--- /dev/null
+++ b/tests/ui/issues/issue-6458-3.stderr
@@ -0,0 +1,14 @@
+error[E0282]: type annotations needed
+ --> $DIR/issue-6458-3.rs:4:5
+ |
+LL | mem::transmute(0);
+ | ^^^^^^^^^^^^^^ cannot infer type of the type parameter `Dst` declared on the function `transmute`
+ |
+help: consider specifying the generic arguments
+ |
+LL | mem::transmute::<i32, Dst>(0);
+ | ++++++++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-6458-4.rs b/tests/ui/issues/issue-6458-4.rs
new file mode 100644
index 000000000..054a5c15c
--- /dev/null
+++ b/tests/ui/issues/issue-6458-4.rs
@@ -0,0 +1,7 @@
+fn foo(b: bool) -> Result<bool,String> { //~ ERROR mismatched types
+ Err("bar".to_string());
+}
+
+fn main() {
+ foo(false);
+}
diff --git a/tests/ui/issues/issue-6458-4.stderr b/tests/ui/issues/issue-6458-4.stderr
new file mode 100644
index 000000000..168ececac
--- /dev/null
+++ b/tests/ui/issues/issue-6458-4.stderr
@@ -0,0 +1,16 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-6458-4.rs:1:20
+ |
+LL | fn foo(b: bool) -> Result<bool,String> {
+ | --- ^^^^^^^^^^^^^^^^^^^ expected enum `Result`, found `()`
+ | |
+ | implicitly returns `()` as its body has no tail or `return` expression
+LL | Err("bar".to_string());
+ | - help: remove this semicolon to return this value
+ |
+ = note: expected enum `Result<bool, String>`
+ found unit type `()`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-6458.rs b/tests/ui/issues/issue-6458.rs
new file mode 100644
index 000000000..16718e90d
--- /dev/null
+++ b/tests/ui/issues/issue-6458.rs
@@ -0,0 +1,14 @@
+use std::marker;
+
+pub struct TypeWithState<State>(marker::PhantomData<State>);
+pub struct MyState;
+
+pub fn foo<State>(_: TypeWithState<State>) {}
+
+pub fn bar() {
+ foo(TypeWithState(marker::PhantomData));
+ //~^ ERROR type annotations needed [E0282]
+}
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-6458.stderr b/tests/ui/issues/issue-6458.stderr
new file mode 100644
index 000000000..2e93c1385
--- /dev/null
+++ b/tests/ui/issues/issue-6458.stderr
@@ -0,0 +1,14 @@
+error[E0282]: type annotations needed
+ --> $DIR/issue-6458.rs:9:22
+ |
+LL | foo(TypeWithState(marker::PhantomData));
+ | ^^^^^^^^^^^^^^^^^^^ cannot infer type of the type parameter `T` declared on the struct `PhantomData`
+ |
+help: consider specifying the generic argument
+ |
+LL | foo(TypeWithState(marker::PhantomData::<T>));
+ | +++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-64593.rs b/tests/ui/issues/issue-64593.rs
new file mode 100644
index 000000000..9e787f638
--- /dev/null
+++ b/tests/ui/issues/issue-64593.rs
@@ -0,0 +1,12 @@
+// check-pass
+#![deny(improper_ctypes)]
+
+pub struct Error(std::num::NonZeroU32);
+
+extern "Rust" {
+ fn foo(dest: &mut [u8]) -> Result<(), Error>;
+}
+
+fn main() {
+ let _ = unsafe { foo(&mut []) };
+}
diff --git a/tests/ui/issues/issue-64792-bad-unicode-ctor.rs b/tests/ui/issues/issue-64792-bad-unicode-ctor.rs
new file mode 100644
index 000000000..f1427ef46
--- /dev/null
+++ b/tests/ui/issues/issue-64792-bad-unicode-ctor.rs
@@ -0,0 +1,5 @@
+struct X {}
+
+const Y: X = X("ö"); //~ ERROR expected function, tuple struct or tuple variant, found struct `X`
+
+fn main() {}
diff --git a/tests/ui/issues/issue-64792-bad-unicode-ctor.stderr b/tests/ui/issues/issue-64792-bad-unicode-ctor.stderr
new file mode 100644
index 000000000..2ec151d24
--- /dev/null
+++ b/tests/ui/issues/issue-64792-bad-unicode-ctor.stderr
@@ -0,0 +1,12 @@
+error[E0423]: expected function, tuple struct or tuple variant, found struct `X`
+ --> $DIR/issue-64792-bad-unicode-ctor.rs:3:14
+ |
+LL | struct X {}
+ | ----------- `X` defined here
+LL |
+LL | const Y: X = X("ö");
+ | ^^^^^^ help: use struct literal syntax instead: `X {}`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0423`.
diff --git a/tests/ui/issues/issue-65131.rs b/tests/ui/issues/issue-65131.rs
new file mode 100644
index 000000000..8b5345da9
--- /dev/null
+++ b/tests/ui/issues/issue-65131.rs
@@ -0,0 +1,18 @@
+fn get_pair(_a: &mut u32, _b: &mut u32) {}
+
+macro_rules! x10 {
+ ($($t:tt)*) => {
+ $($t)* $($t)* $($t)* $($t)* $($t)*
+ $($t)* $($t)* $($t)* $($t)* $($t)*
+ }
+}
+
+#[allow(unused_assignments)]
+fn main() {
+ let mut x = 1;
+
+ get_pair(&mut x, &mut x);
+ //~^ ERROR: cannot borrow `x` as mutable more than once at a time
+
+ x10! { x10!{ x10!{ if x > 0 { x += 2 } else { x += 1 } } } }
+}
diff --git a/tests/ui/issues/issue-65131.stderr b/tests/ui/issues/issue-65131.stderr
new file mode 100644
index 000000000..e234e6da5
--- /dev/null
+++ b/tests/ui/issues/issue-65131.stderr
@@ -0,0 +1,12 @@
+error[E0499]: cannot borrow `x` as mutable more than once at a time
+ --> $DIR/issue-65131.rs:14:22
+ |
+LL | get_pair(&mut x, &mut x);
+ | -------- ------ ^^^^^^ second mutable borrow occurs here
+ | | |
+ | | first mutable borrow occurs here
+ | first borrow later used by call
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0499`.
diff --git a/tests/ui/issues/issue-65230.rs b/tests/ui/issues/issue-65230.rs
new file mode 100644
index 000000000..54141d221
--- /dev/null
+++ b/tests/ui/issues/issue-65230.rs
@@ -0,0 +1,11 @@
+trait T0 {}
+trait T1: T0 {}
+
+trait T2 {}
+
+impl<'a> T0 for &'a (dyn T2 + 'static) {}
+
+impl T1 for &dyn T2 {}
+//~^ ERROR mismatched types
+
+fn main() {}
diff --git a/tests/ui/issues/issue-65230.stderr b/tests/ui/issues/issue-65230.stderr
new file mode 100644
index 000000000..7ccab8894
--- /dev/null
+++ b/tests/ui/issues/issue-65230.stderr
@@ -0,0 +1,18 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-65230.rs:8:13
+ |
+LL | impl T1 for &dyn T2 {}
+ | ^^^^^^^ lifetime mismatch
+ |
+ = note: expected trait `<&dyn T2 as T0>`
+ found trait `<&(dyn T2 + 'static) as T0>`
+note: the anonymous lifetime as defined here...
+ --> $DIR/issue-65230.rs:8:13
+ |
+LL | impl T1 for &dyn T2 {}
+ | ^
+ = note: ...does not necessarily outlive the static lifetime
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-65462.rs b/tests/ui/issues/issue-65462.rs
new file mode 100644
index 000000000..8c39ea531
--- /dev/null
+++ b/tests/ui/issues/issue-65462.rs
@@ -0,0 +1,15 @@
+// build-pass
+
+enum Empty {}
+enum Enum {
+ Empty( Empty )
+}
+
+fn foobar() -> Option< Enum > {
+ let value: Option< Empty > = None;
+ Some( Enum::Empty( value? ) )
+}
+
+fn main() {
+ foobar();
+}
diff --git a/tests/ui/issues/issue-6557.rs b/tests/ui/issues/issue-6557.rs
new file mode 100644
index 000000000..757e9608f
--- /dev/null
+++ b/tests/ui/issues/issue-6557.rs
@@ -0,0 +1,9 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+#![feature(box_patterns)]
+
+fn foo(box (_x, _y): Box<(isize, isize)>) {}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-65634-raw-ident-suggestion.edition2015.stderr b/tests/ui/issues/issue-65634-raw-ident-suggestion.edition2015.stderr
new file mode 100644
index 000000000..d0cb16995
--- /dev/null
+++ b/tests/ui/issues/issue-65634-raw-ident-suggestion.edition2015.stderr
@@ -0,0 +1,28 @@
+error[E0034]: multiple applicable items in scope
+ --> $DIR/issue-65634-raw-ident-suggestion.rs:24:13
+ |
+LL | r#fn {}.r#struct();
+ | ^^^^^^^^ multiple `r#struct` found
+ |
+note: candidate #1 is defined in an impl of the trait `async` for the type `r#fn`
+ --> $DIR/issue-65634-raw-ident-suggestion.rs:7:5
+ |
+LL | fn r#struct(&self) {
+ | ^^^^^^^^^^^^^^^^^^
+note: candidate #2 is defined in an impl of the trait `await` for the type `r#fn`
+ --> $DIR/issue-65634-raw-ident-suggestion.rs:13:5
+ |
+LL | fn r#struct(&self) {
+ | ^^^^^^^^^^^^^^^^^^
+help: disambiguate the associated function for candidate #1
+ |
+LL | async::r#struct(&r#fn {});
+ | ~~~~~~~~~~~~~~~~~~~~~~~~~
+help: disambiguate the associated function for candidate #2
+ |
+LL | await::r#struct(&r#fn {});
+ | ~~~~~~~~~~~~~~~~~~~~~~~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0034`.
diff --git a/tests/ui/issues/issue-65634-raw-ident-suggestion.edition2018.stderr b/tests/ui/issues/issue-65634-raw-ident-suggestion.edition2018.stderr
new file mode 100644
index 000000000..a75c1c413
--- /dev/null
+++ b/tests/ui/issues/issue-65634-raw-ident-suggestion.edition2018.stderr
@@ -0,0 +1,28 @@
+error[E0034]: multiple applicable items in scope
+ --> $DIR/issue-65634-raw-ident-suggestion.rs:24:13
+ |
+LL | r#fn {}.r#struct();
+ | ^^^^^^^^ multiple `r#struct` found
+ |
+note: candidate #1 is defined in an impl of the trait `r#async` for the type `r#fn`
+ --> $DIR/issue-65634-raw-ident-suggestion.rs:7:5
+ |
+LL | fn r#struct(&self) {
+ | ^^^^^^^^^^^^^^^^^^
+note: candidate #2 is defined in an impl of the trait `r#await` for the type `r#fn`
+ --> $DIR/issue-65634-raw-ident-suggestion.rs:13:5
+ |
+LL | fn r#struct(&self) {
+ | ^^^^^^^^^^^^^^^^^^
+help: disambiguate the associated function for candidate #1
+ |
+LL | r#async::r#struct(&r#fn {});
+ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+help: disambiguate the associated function for candidate #2
+ |
+LL | r#await::r#struct(&r#fn {});
+ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0034`.
diff --git a/tests/ui/issues/issue-65634-raw-ident-suggestion.rs b/tests/ui/issues/issue-65634-raw-ident-suggestion.rs
new file mode 100644
index 000000000..03dd0340c
--- /dev/null
+++ b/tests/ui/issues/issue-65634-raw-ident-suggestion.rs
@@ -0,0 +1,25 @@
+// revisions: edition2015 edition2018
+//[edition2018]edition:2018
+
+#![allow(non_camel_case_types)]
+
+trait r#async {
+ fn r#struct(&self) {
+ println!("async");
+ }
+}
+
+trait r#await {
+ fn r#struct(&self) {
+ println!("await");
+ }
+}
+
+struct r#fn {}
+
+impl r#async for r#fn {}
+impl r#await for r#fn {}
+
+fn main() {
+ r#fn {}.r#struct(); //~ ERROR multiple applicable items in scope
+}
diff --git a/tests/ui/issues/issue-6596-2.rs b/tests/ui/issues/issue-6596-2.rs
new file mode 100644
index 000000000..8401c4a9d
--- /dev/null
+++ b/tests/ui/issues/issue-6596-2.rs
@@ -0,0 +1,11 @@
+macro_rules! g {
+ ($inp:ident) => (
+ { $inp $nonexistent }
+ //~^ ERROR expected one of `!`, `.`, `::`, `;`, `?`, `{`, `}`, or an operator, found `$`
+ );
+}
+
+fn main() {
+ let foo = 0;
+ g!(foo);
+}
diff --git a/tests/ui/issues/issue-6596-2.stderr b/tests/ui/issues/issue-6596-2.stderr
new file mode 100644
index 000000000..4fa73a464
--- /dev/null
+++ b/tests/ui/issues/issue-6596-2.stderr
@@ -0,0 +1,13 @@
+error: expected one of `!`, `.`, `::`, `;`, `?`, `{`, `}`, or an operator, found `$`
+ --> $DIR/issue-6596-2.rs:3:16
+ |
+LL | { $inp $nonexistent }
+ | ^^^^^^^^^^^^ expected one of 8 possible tokens
+...
+LL | g!(foo);
+ | ------- in this macro invocation
+ |
+ = note: this error originates in the macro `g` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-66308.rs b/tests/ui/issues/issue-66308.rs
new file mode 100644
index 000000000..8460b359a
--- /dev/null
+++ b/tests/ui/issues/issue-66308.rs
@@ -0,0 +1,8 @@
+// build-pass
+// compile-flags: --crate-type lib -C opt-level=0
+
+// Regression test for LLVM crash affecting Emscripten targets
+
+pub fn foo() {
+ (0..0).rev().next();
+}
diff --git a/tests/ui/issues/issue-66353.rs b/tests/ui/issues/issue-66353.rs
new file mode 100644
index 000000000..d8abdd520
--- /dev/null
+++ b/tests/ui/issues/issue-66353.rs
@@ -0,0 +1,15 @@
+// #66353: ICE when trying to recover from incorrect associated type
+
+trait _Func<T> {
+ fn func(_: Self);
+}
+
+trait _A {
+ type AssocT;
+}
+
+fn main() {
+ _Func::< <() as _A>::AssocT >::func(());
+ //~^ ERROR the trait bound `(): _A` is not satisfied
+ //~| ERROR the trait bound `(): _Func<_>` is not satisfied
+}
diff --git a/tests/ui/issues/issue-66353.stderr b/tests/ui/issues/issue-66353.stderr
new file mode 100644
index 000000000..335618097
--- /dev/null
+++ b/tests/ui/issues/issue-66353.stderr
@@ -0,0 +1,17 @@
+error[E0277]: the trait bound `(): _A` is not satisfied
+ --> $DIR/issue-66353.rs:12:14
+ |
+LL | _Func::< <() as _A>::AssocT >::func(());
+ | ^^^^^^^^^^^^^^^^^^ the trait `_A` is not implemented for `()`
+
+error[E0277]: the trait bound `(): _Func<_>` is not satisfied
+ --> $DIR/issue-66353.rs:12:41
+ |
+LL | _Func::< <() as _A>::AssocT >::func(());
+ | ----------------------------------- ^^ the trait `_Func<_>` is not implemented for `()`
+ | |
+ | required by a bound introduced by this call
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-6642.rs b/tests/ui/issues/issue-6642.rs
new file mode 100644
index 000000000..f80f6fffe
--- /dev/null
+++ b/tests/ui/issues/issue-6642.rs
@@ -0,0 +1,9 @@
+struct A;
+impl A {
+ fn m(&self) {
+ fn x() {
+ self.m() //~ ERROR can't capture dynamic environment in a fn item
+ }
+ }
+}
+fn main() {}
diff --git a/tests/ui/issues/issue-6642.stderr b/tests/ui/issues/issue-6642.stderr
new file mode 100644
index 000000000..6668108d0
--- /dev/null
+++ b/tests/ui/issues/issue-6642.stderr
@@ -0,0 +1,11 @@
+error[E0434]: can't capture dynamic environment in a fn item
+ --> $DIR/issue-6642.rs:5:13
+ |
+LL | self.m()
+ | ^^^^
+ |
+ = help: use the `|| { ... }` closure form instead
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0434`.
diff --git a/tests/ui/issues/issue-66667-function-cmp-cycle.rs b/tests/ui/issues/issue-66667-function-cmp-cycle.rs
new file mode 100644
index 000000000..7b025be11
--- /dev/null
+++ b/tests/ui/issues/issue-66667-function-cmp-cycle.rs
@@ -0,0 +1,16 @@
+fn first() {
+ second == 1 //~ ERROR binary operation
+ //~^ ERROR mismatched types
+}
+
+fn second() {
+ first == 1 //~ ERROR binary operation
+ //~^ ERROR mismatched types
+}
+
+fn bar() {
+ bar == 1 //~ ERROR binary operation
+ //~^ ERROR mismatched types
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-66667-function-cmp-cycle.stderr b/tests/ui/issues/issue-66667-function-cmp-cycle.stderr
new file mode 100644
index 000000000..887699ef5
--- /dev/null
+++ b/tests/ui/issues/issue-66667-function-cmp-cycle.stderr
@@ -0,0 +1,55 @@
+error[E0369]: binary operation `==` cannot be applied to type `fn() {second}`
+ --> $DIR/issue-66667-function-cmp-cycle.rs:2:12
+ |
+LL | second == 1
+ | ------ ^^ - {integer}
+ | |
+ | fn() {second}
+
+error[E0308]: mismatched types
+ --> $DIR/issue-66667-function-cmp-cycle.rs:2:15
+ |
+LL | second == 1
+ | ^ expected fn item, found integer
+ |
+ = note: expected fn item `fn() {second}`
+ found type `{integer}`
+
+error[E0369]: binary operation `==` cannot be applied to type `fn() {first}`
+ --> $DIR/issue-66667-function-cmp-cycle.rs:7:11
+ |
+LL | first == 1
+ | ----- ^^ - {integer}
+ | |
+ | fn() {first}
+
+error[E0308]: mismatched types
+ --> $DIR/issue-66667-function-cmp-cycle.rs:7:14
+ |
+LL | first == 1
+ | ^ expected fn item, found integer
+ |
+ = note: expected fn item `fn() {first}`
+ found type `{integer}`
+
+error[E0369]: binary operation `==` cannot be applied to type `fn() {bar}`
+ --> $DIR/issue-66667-function-cmp-cycle.rs:12:9
+ |
+LL | bar == 1
+ | --- ^^ - {integer}
+ | |
+ | fn() {bar}
+
+error[E0308]: mismatched types
+ --> $DIR/issue-66667-function-cmp-cycle.rs:12:12
+ |
+LL | bar == 1
+ | ^ expected fn item, found integer
+ |
+ = note: expected fn item `fn() {bar}`
+ found type `{integer}`
+
+error: aborting due to 6 previous errors
+
+Some errors have detailed explanations: E0308, E0369.
+For more information about an error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-66702-break-outside-loop-val.rs b/tests/ui/issues/issue-66702-break-outside-loop-val.rs
new file mode 100644
index 000000000..05b86cbbf
--- /dev/null
+++ b/tests/ui/issues/issue-66702-break-outside-loop-val.rs
@@ -0,0 +1,9 @@
+// Breaks with values inside closures used to ICE (#66863)
+
+fn main() {
+ 'some_label: loop {
+ || break 'some_label ();
+ //~^ ERROR: use of unreachable label `'some_label`
+ //~| ERROR: `break` inside of a closure
+ }
+}
diff --git a/tests/ui/issues/issue-66702-break-outside-loop-val.stderr b/tests/ui/issues/issue-66702-break-outside-loop-val.stderr
new file mode 100644
index 000000000..f92ede311
--- /dev/null
+++ b/tests/ui/issues/issue-66702-break-outside-loop-val.stderr
@@ -0,0 +1,22 @@
+error[E0767]: use of unreachable label `'some_label`
+ --> $DIR/issue-66702-break-outside-loop-val.rs:5:18
+ |
+LL | 'some_label: loop {
+ | ----------- unreachable label defined here
+LL | || break 'some_label ();
+ | ^^^^^^^^^^^ unreachable label `'some_label`
+ |
+ = note: labels are unreachable through functions, closures, async blocks and modules
+
+error[E0267]: `break` inside of a closure
+ --> $DIR/issue-66702-break-outside-loop-val.rs:5:12
+ |
+LL | || break 'some_label ();
+ | -- ^^^^^^^^^^^^^^^^^^^^ cannot `break` inside of a closure
+ | |
+ | enclosing closure
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0267, E0767.
+For more information about an error, try `rustc --explain E0267`.
diff --git a/tests/ui/issues/issue-66706.rs b/tests/ui/issues/issue-66706.rs
new file mode 100644
index 000000000..835fdfae8
--- /dev/null
+++ b/tests/ui/issues/issue-66706.rs
@@ -0,0 +1,22 @@
+fn a() {
+ [0; [|_: _ &_| ()].len()]
+ //~^ ERROR expected `,`, found `&`
+ //~| ERROR type annotations needed
+}
+
+fn b() {
+ [0; [|f @ &ref _| {} ; 0 ].len() ];
+ //~^ ERROR expected identifier, found reserved identifier `_`
+}
+
+fn c() {
+ [0; [|&_: _ &_| {}; 0 ].len()]
+ //~^ ERROR expected `,`, found `&`
+}
+
+fn d() {
+ [0; match [|f @ &ref _| () ] {} ]
+ //~^ ERROR expected identifier, found reserved identifier `_`
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-66706.stderr b/tests/ui/issues/issue-66706.stderr
new file mode 100644
index 000000000..8a30c0cad
--- /dev/null
+++ b/tests/ui/issues/issue-66706.stderr
@@ -0,0 +1,37 @@
+error: expected `,`, found `&`
+ --> $DIR/issue-66706.rs:2:16
+ |
+LL | [0; [|_: _ &_| ()].len()]
+ | -^ expected `,`
+ | |
+ | help: missing `,`
+
+error: expected identifier, found reserved identifier `_`
+ --> $DIR/issue-66706.rs:8:20
+ |
+LL | [0; [|f @ &ref _| {} ; 0 ].len() ];
+ | ^ expected identifier, found reserved identifier
+
+error: expected `,`, found `&`
+ --> $DIR/issue-66706.rs:13:17
+ |
+LL | [0; [|&_: _ &_| {}; 0 ].len()]
+ | -^ expected `,`
+ | |
+ | help: missing `,`
+
+error: expected identifier, found reserved identifier `_`
+ --> $DIR/issue-66706.rs:18:26
+ |
+LL | [0; match [|f @ &ref _| () ] {} ]
+ | ^ expected identifier, found reserved identifier
+
+error[E0282]: type annotations needed
+ --> $DIR/issue-66706.rs:2:11
+ |
+LL | [0; [|_: _ &_| ()].len()]
+ | ^ cannot infer type
+
+error: aborting due to 5 previous errors
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-66768.rs b/tests/ui/issues/issue-66768.rs
new file mode 100644
index 000000000..ce42c8b01
--- /dev/null
+++ b/tests/ui/issues/issue-66768.rs
@@ -0,0 +1,205 @@
+// Regression test for #66768.
+// check-pass
+#![allow(dead_code)]
+//-^ "dead code" is needed to reproduce the issue.
+
+use std::marker::PhantomData;
+use std::ops::{Add, Mul};
+
+fn problematic_function<Space>(material_surface_element: Edge2dElement)
+where
+ DefaultAllocator: FiniteElementAllocator<DimU1, Space>,
+{
+ let _: Point2<f64> = material_surface_element.map_reference_coords().into();
+}
+
+impl<T> ArrayLength<T> for UTerm {
+ type ArrayType = ();
+}
+impl<T, N: ArrayLength<T>> ArrayLength<T> for UInt<N, B0> {
+ type ArrayType = GenericArrayImplEven<T, N>;
+}
+impl<T, N: ArrayLength<T>> ArrayLength<T> for UInt<N, B1> {
+ type ArrayType = GenericArrayImplOdd<T, N>;
+}
+impl<U> Add<U> for UTerm {
+ type Output = U;
+ fn add(self, _: U) -> Self::Output {
+ unimplemented!()
+ }
+}
+impl<Ul, Ur> Add<UInt<Ur, B1>> for UInt<Ul, B0>
+where
+ Ul: Add<Ur>,
+{
+ type Output = UInt<Sum<Ul, Ur>, B1>;
+ fn add(self, _: UInt<Ur, B1>) -> Self::Output {
+ unimplemented!()
+ }
+}
+impl<U> Mul<U> for UTerm {
+ type Output = UTerm;
+ fn mul(self, _: U) -> Self {
+ unimplemented!()
+ }
+}
+impl<Ul, B, Ur> Mul<UInt<Ur, B>> for UInt<Ul, B0>
+where
+ Ul: Mul<UInt<Ur, B>>,
+{
+ type Output = UInt<Prod<Ul, UInt<Ur, B>>, B0>;
+ fn mul(self, _: UInt<Ur, B>) -> Self::Output {
+ unimplemented!()
+ }
+}
+impl<Ul, B, Ur> Mul<UInt<Ur, B>> for UInt<Ul, B1>
+where
+ Ul: Mul<UInt<Ur, B>>,
+ UInt<Prod<Ul, UInt<Ur, B>>, B0>: Add<UInt<Ur, B>>,
+{
+ type Output = Sum<UInt<Prod<Ul, UInt<Ur, B>>, B0>, UInt<Ur, B>>;
+ fn mul(self, _: UInt<Ur, B>) -> Self::Output {
+ unimplemented!()
+ }
+}
+impl<N, R, C> Allocator<N, R, C> for DefaultAllocator
+where
+ R: DimName,
+ C: DimName,
+ R::Value: Mul<C::Value>,
+ Prod<R::Value, C::Value>: ArrayLength<N>,
+{
+ type Buffer = ArrayStorage<N, R, C>;
+ fn allocate_uninitialized(_: R, _: C) -> Self::Buffer {
+ unimplemented!()
+ }
+ fn allocate_from_iterator<I>(_: R, _: C, _: I) -> Self::Buffer {
+ unimplemented!()
+ }
+}
+impl<N, C> Allocator<N, Dynamic, C> for DefaultAllocator {
+ type Buffer = VecStorage<N, Dynamic, C>;
+ fn allocate_uninitialized(_: Dynamic, _: C) -> Self::Buffer {
+ unimplemented!()
+ }
+ fn allocate_from_iterator<I>(_: Dynamic, _: C, _: I) -> Self::Buffer {
+ unimplemented!()
+ }
+}
+impl DimName for DimU1 {
+ type Value = U1;
+ fn name() -> Self {
+ unimplemented!()
+ }
+}
+impl DimName for DimU2 {
+ type Value = U2;
+ fn name() -> Self {
+ unimplemented!()
+ }
+}
+impl<N, D> From<VectorN<N, D>> for Point<N, D>
+where
+ DefaultAllocator: Allocator<N, D>,
+{
+ fn from(_: VectorN<N, D>) -> Self {
+ unimplemented!()
+ }
+}
+impl<GeometryDim, NodalDim> FiniteElementAllocator<GeometryDim, NodalDim> for DefaultAllocator where
+ DefaultAllocator: Allocator<f64, GeometryDim> + Allocator<f64, NodalDim>
+{
+}
+impl ReferenceFiniteElement for Edge2dElement {
+ type NodalDim = DimU1;
+}
+impl FiniteElement<DimU2> for Edge2dElement {
+ fn map_reference_coords(&self) -> Vector2<f64> {
+ unimplemented!()
+ }
+}
+
+type Owned<N, R, C> = <DefaultAllocator as Allocator<N, R, C>>::Buffer;
+type MatrixMN<N, R, C> = Matrix<N, R, C, Owned<N, R, C>>;
+type VectorN<N, D> = MatrixMN<N, D, DimU1>;
+type Vector2<N> = VectorN<N, DimU2>;
+type Point2<N> = Point<N, DimU2>;
+type U1 = UInt<UTerm, B1>;
+type U2 = UInt<UInt<UTerm, B1>, B0>;
+type Sum<A, B> = <A as Add<B>>::Output;
+type Prod<A, B> = <A as Mul<B>>::Output;
+
+struct GenericArray<T, U: ArrayLength<T>> {
+ _data: U::ArrayType,
+}
+struct GenericArrayImplEven<T, U> {
+ _parent2: U,
+ _marker: T,
+}
+struct GenericArrayImplOdd<T, U> {
+ _parent2: U,
+ _data: T,
+}
+struct B0;
+struct B1;
+struct UTerm;
+struct UInt<U, B> {
+ _marker: PhantomData<(U, B)>,
+}
+struct DefaultAllocator;
+struct Dynamic;
+struct DimU1;
+struct DimU2;
+struct Matrix<N, R, C, S> {
+ _data: S,
+ _phantoms: PhantomData<(N, R, C)>,
+}
+struct ArrayStorage<N, R, C>
+where
+ R: DimName,
+ C: DimName,
+ R::Value: Mul<C::Value>,
+ Prod<R::Value, C::Value>: ArrayLength<N>,
+{
+ _data: GenericArray<N, Prod<R::Value, C::Value>>,
+}
+struct VecStorage<N, R, C> {
+ _data: N,
+ _nrows: R,
+ _ncols: C,
+}
+struct Point<N, D>
+where
+ DefaultAllocator: Allocator<N, D>,
+{
+ _coords: VectorN<N, D>,
+}
+struct Edge2dElement;
+
+trait ArrayLength<T> {
+ type ArrayType;
+}
+trait Allocator<Scalar, R, C = DimU1> {
+ type Buffer;
+ fn allocate_uninitialized(nrows: R, ncols: C) -> Self::Buffer;
+ fn allocate_from_iterator<I>(nrows: R, ncols: C, iter: I) -> Self::Buffer;
+}
+trait DimName {
+ type Value;
+ fn name() -> Self;
+}
+trait FiniteElementAllocator<GeometryDim, NodalDim>:
+ Allocator<f64, GeometryDim> + Allocator<f64, NodalDim>
+{
+}
+trait ReferenceFiniteElement {
+ type NodalDim;
+}
+trait FiniteElement<GeometryDim>: ReferenceFiniteElement
+where
+ DefaultAllocator: FiniteElementAllocator<GeometryDim, Self::NodalDim>,
+{
+ fn map_reference_coords(&self) -> VectorN<f64, GeometryDim>;
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-66923-show-error-for-correct-call.rs b/tests/ui/issues/issue-66923-show-error-for-correct-call.rs
new file mode 100644
index 000000000..833280739
--- /dev/null
+++ b/tests/ui/issues/issue-66923-show-error-for-correct-call.rs
@@ -0,0 +1,15 @@
+// This test checks that errors are showed for lines with `collect` rather than `push` method.
+
+fn main() {
+ let v = vec![1_f64, 2.2_f64];
+ let mut fft: Vec<Vec<f64>> = vec![];
+
+ let x1: &[f64] = &v;
+ let x2: Vec<f64> = x1.into_iter().collect();
+ //~^ ERROR a value of type
+ fft.push(x2);
+
+ let x3 = x1.into_iter().collect::<Vec<f64>>();
+ //~^ ERROR a value of type
+ fft.push(x3);
+}
diff --git a/tests/ui/issues/issue-66923-show-error-for-correct-call.stderr b/tests/ui/issues/issue-66923-show-error-for-correct-call.stderr
new file mode 100644
index 000000000..cec482a53
--- /dev/null
+++ b/tests/ui/issues/issue-66923-show-error-for-correct-call.stderr
@@ -0,0 +1,40 @@
+error[E0277]: a value of type `Vec<f64>` cannot be built from an iterator over elements of type `&f64`
+ --> $DIR/issue-66923-show-error-for-correct-call.rs:8:39
+ |
+LL | let x2: Vec<f64> = x1.into_iter().collect();
+ | ^^^^^^^ value of type `Vec<f64>` cannot be built from `std::iter::Iterator<Item=&f64>`
+ |
+ = help: the trait `FromIterator<&f64>` is not implemented for `Vec<f64>`
+ = help: the trait `FromIterator<T>` is implemented for `Vec<T>`
+note: the method call chain might not have had the expected associated types
+ --> $DIR/issue-66923-show-error-for-correct-call.rs:8:27
+ |
+LL | let x1: &[f64] = &v;
+ | -- this expression has type `&Vec<f64>`
+LL | let x2: Vec<f64> = x1.into_iter().collect();
+ | ^^^^^^^^^^^ `Iterator::Item` is `&f64` here
+note: required by a bound in `collect`
+ --> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
+
+error[E0277]: a value of type `Vec<f64>` cannot be built from an iterator over elements of type `&f64`
+ --> $DIR/issue-66923-show-error-for-correct-call.rs:12:29
+ |
+LL | let x3 = x1.into_iter().collect::<Vec<f64>>();
+ | ^^^^^^^ value of type `Vec<f64>` cannot be built from `std::iter::Iterator<Item=&f64>`
+ |
+ = help: the trait `FromIterator<&f64>` is not implemented for `Vec<f64>`
+ = help: the trait `FromIterator<T>` is implemented for `Vec<T>`
+note: the method call chain might not have had the expected associated types
+ --> $DIR/issue-66923-show-error-for-correct-call.rs:12:17
+ |
+LL | let x1: &[f64] = &v;
+ | -- this expression has type `&Vec<f64>`
+...
+LL | let x3 = x1.into_iter().collect::<Vec<f64>>();
+ | ^^^^^^^^^^^ `Iterator::Item` is `&f64` here
+note: required by a bound in `collect`
+ --> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-67039-unsound-pin-partialeq.rs b/tests/ui/issues/issue-67039-unsound-pin-partialeq.rs
new file mode 100644
index 000000000..a496e58a7
--- /dev/null
+++ b/tests/ui/issues/issue-67039-unsound-pin-partialeq.rs
@@ -0,0 +1,27 @@
+// Pin's PartialEq implementation allowed to access the pointer allowing for
+// unsoundness by using Rc::get_mut to move value within Rc.
+// See https://internals.rust-lang.org/t/unsoundness-in-pin/11311/73 for more details.
+
+use std::ops::Deref;
+use std::pin::Pin;
+use std::rc::Rc;
+
+struct Apple;
+
+impl Deref for Apple {
+ type Target = Apple;
+ fn deref(&self) -> &Apple {
+ &Apple
+ }
+}
+
+impl PartialEq<Rc<Apple>> for Apple {
+ fn eq(&self, _rc: &Rc<Apple>) -> bool {
+ unreachable!()
+ }
+}
+
+fn main() {
+ let _ = Pin::new(Apple) == Rc::pin(Apple);
+ //~^ ERROR type mismatch resolving
+}
diff --git a/tests/ui/issues/issue-67039-unsound-pin-partialeq.stderr b/tests/ui/issues/issue-67039-unsound-pin-partialeq.stderr
new file mode 100644
index 000000000..37e2c3bdd
--- /dev/null
+++ b/tests/ui/issues/issue-67039-unsound-pin-partialeq.stderr
@@ -0,0 +1,13 @@
+error[E0271]: type mismatch resolving `<Rc<Apple> as Deref>::Target == Rc<Apple>`
+ --> $DIR/issue-67039-unsound-pin-partialeq.rs:25:29
+ |
+LL | let _ = Pin::new(Apple) == Rc::pin(Apple);
+ | ^^ expected struct `Apple`, found struct `Rc`
+ |
+ = note: expected struct `Apple`
+ found struct `Rc<Apple>`
+ = note: required for `Pin<Apple>` to implement `PartialEq<Pin<Rc<Apple>>>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0271`.
diff --git a/tests/ui/issues/issue-6738.rs b/tests/ui/issues/issue-6738.rs
new file mode 100644
index 000000000..a2f8dfe9c
--- /dev/null
+++ b/tests/ui/issues/issue-6738.rs
@@ -0,0 +1,10 @@
+struct Foo<T> {
+ x: T,
+}
+impl<T> Foo<T> {
+ fn add(&mut self, v: Foo<T>){
+ self.x += v.x;
+ //~^ ERROR: binary assignment operation `+=` cannot be applied
+ }
+}
+fn main() {}
diff --git a/tests/ui/issues/issue-6738.stderr b/tests/ui/issues/issue-6738.stderr
new file mode 100644
index 000000000..f97d899c2
--- /dev/null
+++ b/tests/ui/issues/issue-6738.stderr
@@ -0,0 +1,16 @@
+error[E0368]: binary assignment operation `+=` cannot be applied to type `T`
+ --> $DIR/issue-6738.rs:6:9
+ |
+LL | self.x += v.x;
+ | ------^^^^^^^
+ | |
+ | cannot use `+=` on type `T`
+ |
+help: consider restricting type parameter `T`
+ |
+LL | impl<T: std::ops::AddAssign> Foo<T> {
+ | +++++++++++++++++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0368`.
diff --git a/tests/ui/issues/issue-67535.rs b/tests/ui/issues/issue-67535.rs
new file mode 100644
index 000000000..24f506213
--- /dev/null
+++ b/tests/ui/issues/issue-67535.rs
@@ -0,0 +1,22 @@
+fn main() {}
+
+impl std::ops::AddAssign for () {
+ //~^ ERROR only traits defined in the current crate can be implemented for arbitrary types
+ fn add_assign(&self, other: ()) -> () {
+ ()
+ }
+}
+
+impl std::ops::AddAssign for [(); 1] {
+ //~^ ERROR only traits defined in the current crate can be implemented for arbitrary types
+ fn add_assign(&self, other: [(); 1]) -> [(); 1] {
+ [()]
+ }
+}
+
+impl std::ops::AddAssign for &[u8] {
+ //~^ ERROR only traits defined in the current crate can be implemented for arbitrary types
+ fn add_assign(&self, other: &[u8]) -> &[u8] {
+ self
+ }
+}
diff --git a/tests/ui/issues/issue-67535.stderr b/tests/ui/issues/issue-67535.stderr
new file mode 100644
index 000000000..4d7a02a50
--- /dev/null
+++ b/tests/ui/issues/issue-67535.stderr
@@ -0,0 +1,39 @@
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+ --> $DIR/issue-67535.rs:3:1
+ |
+LL | impl std::ops::AddAssign for () {
+ | ^^^^^-------------------^^^^^--
+ | | | |
+ | | | this is not defined in the current crate because tuples are always foreign
+ | | this is not defined in the current crate because this is a foreign trait
+ | impl doesn't use only types from inside the current crate
+ |
+ = note: define and implement a trait or new type instead
+
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+ --> $DIR/issue-67535.rs:10:1
+ |
+LL | impl std::ops::AddAssign for [(); 1] {
+ | ^^^^^-------------------^^^^^-------
+ | | | |
+ | | | this is not defined in the current crate because arrays are always foreign
+ | | this is not defined in the current crate because this is a foreign trait
+ | impl doesn't use only types from inside the current crate
+ |
+ = note: define and implement a trait or new type instead
+
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+ --> $DIR/issue-67535.rs:17:1
+ |
+LL | impl std::ops::AddAssign for &[u8] {
+ | ^^^^^-------------------^^^^^-----
+ | | | |
+ | | | this is not defined in the current crate because slices are always foreign
+ | | this is not defined in the current crate because this is a foreign trait
+ | impl doesn't use only types from inside the current crate
+ |
+ = note: define and implement a trait or new type instead
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0117`.
diff --git a/tests/ui/issues/issue-67552.polonius.stderr b/tests/ui/issues/issue-67552.polonius.stderr
new file mode 100644
index 000000000..9ab77d344
--- /dev/null
+++ b/tests/ui/issues/issue-67552.polonius.stderr
@@ -0,0 +1,17 @@
+error: reached the recursion limit while instantiating `rec::<&mut &mut &mut &mut &mut &... &mut &mut &mut &mut &mut Empty>`
+ --> $DIR/issue-67552.rs:28:9
+ |
+LL | rec(identity(&mut it))
+ | ^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: `rec` defined here
+ --> $DIR/issue-67552.rs:21:1
+ |
+LL | / fn rec<T>(mut it: T)
+LL | | where
+LL | | T: Iterator,
+ | |________________^
+ = note: the full type name has been written to '$TEST_BUILD_DIR/issues/issue-67552.polonius/issue-67552.long-type.txt'
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-67552.rs b/tests/ui/issues/issue-67552.rs
new file mode 100644
index 000000000..ec1997ccd
--- /dev/null
+++ b/tests/ui/issues/issue-67552.rs
@@ -0,0 +1,32 @@
+// build-fail
+// compile-flags: -Copt-level=0
+// normalize-stderr-test: ".nll/" -> "/"
+
+fn main() {
+ rec(Empty);
+}
+
+struct Empty;
+
+impl Iterator for Empty {
+ type Item = ();
+ fn next<'a>(&'a mut self) -> core::option::Option<()> {
+ None
+ }
+}
+
+fn identity<T>(x: T) -> T {
+ x
+}
+
+fn rec<T>(mut it: T)
+where
+ T: Iterator,
+{
+ if () == () {
+ T::count(it);
+ } else {
+ rec(identity(&mut it))
+ //~^ ERROR reached the recursion limit while instantiating
+ }
+}
diff --git a/tests/ui/issues/issue-67552.stderr b/tests/ui/issues/issue-67552.stderr
new file mode 100644
index 000000000..4746f918b
--- /dev/null
+++ b/tests/ui/issues/issue-67552.stderr
@@ -0,0 +1,17 @@
+error: reached the recursion limit while instantiating `rec::<&mut &mut &mut &mut &mut ...>`
+ --> $DIR/issue-67552.rs:29:9
+ |
+LL | rec(identity(&mut it))
+ | ^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: `rec` defined here
+ --> $DIR/issue-67552.rs:22:1
+ |
+LL | / fn rec<T>(mut it: T)
+LL | | where
+LL | | T: Iterator,
+ | |________________^
+ = note: the full type name has been written to '$TEST_BUILD_DIR/issues/issue-67552/issue-67552.long-type.txt'
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-68010-large-zst-consts.rs b/tests/ui/issues/issue-68010-large-zst-consts.rs
new file mode 100644
index 000000000..3277df69c
--- /dev/null
+++ b/tests/ui/issues/issue-68010-large-zst-consts.rs
@@ -0,0 +1,5 @@
+// build-pass
+
+fn main() {
+ println!("{}", [(); usize::MAX].len());
+}
diff --git a/tests/ui/issues/issue-68696-catch-during-unwind.rs b/tests/ui/issues/issue-68696-catch-during-unwind.rs
new file mode 100644
index 000000000..2b12a62d0
--- /dev/null
+++ b/tests/ui/issues/issue-68696-catch-during-unwind.rs
@@ -0,0 +1,25 @@
+// Checks that catch_unwind can be used if unwinding is already in progress.
+// Used to fail when standard library had been compiled with debug assertions,
+// due to incorrect assumption that a current thread is not panicking when
+// entering the catch_unwind.
+//
+// run-pass
+
+use std::panic::catch_unwind;
+
+#[derive(Default)]
+struct Guard;
+
+impl Drop for Guard {
+ fn drop(&mut self) {
+ let _ = catch_unwind(|| {});
+ }
+}
+
+fn main() {
+ #[cfg(panic = "unwind")]
+ let _ = catch_unwind(|| {
+ let _guard = Guard::default();
+ panic!();
+ });
+}
diff --git a/tests/ui/issues/issue-6892.rs b/tests/ui/issues/issue-6892.rs
new file mode 100644
index 000000000..a361461a4
--- /dev/null
+++ b/tests/ui/issues/issue-6892.rs
@@ -0,0 +1,58 @@
+// run-pass
+#![allow(dead_code)]
+// Ensures that destructors are run for expressions of the form "let _ = e;"
+// where `e` is a type which requires a destructor.
+
+
+struct Foo;
+struct Bar { x: isize }
+struct Baz(isize);
+enum FooBar { _Foo(Foo), _Bar(usize) }
+
+static mut NUM_DROPS: usize = 0;
+
+impl Drop for Foo {
+ fn drop(&mut self) {
+ unsafe { NUM_DROPS += 1; }
+ }
+}
+impl Drop for Bar {
+ fn drop(&mut self) {
+ unsafe { NUM_DROPS += 1; }
+ }
+}
+impl Drop for Baz {
+ fn drop(&mut self) {
+ unsafe { NUM_DROPS += 1; }
+ }
+}
+impl Drop for FooBar {
+ fn drop(&mut self) {
+ unsafe { NUM_DROPS += 1; }
+ }
+}
+
+fn main() {
+ assert_eq!(unsafe { NUM_DROPS }, 0);
+ { let _x = Foo; }
+ assert_eq!(unsafe { NUM_DROPS }, 1);
+ { let _x = Bar { x: 21 }; }
+ assert_eq!(unsafe { NUM_DROPS }, 2);
+ { let _x = Baz(21); }
+ assert_eq!(unsafe { NUM_DROPS }, 3);
+ { let _x = FooBar::_Foo(Foo); }
+ assert_eq!(unsafe { NUM_DROPS }, 5);
+ { let _x = FooBar::_Bar(42); }
+ assert_eq!(unsafe { NUM_DROPS }, 6);
+
+ { let _ = Foo; }
+ assert_eq!(unsafe { NUM_DROPS }, 7);
+ { let _ = Bar { x: 21 }; }
+ assert_eq!(unsafe { NUM_DROPS }, 8);
+ { let _ = Baz(21); }
+ assert_eq!(unsafe { NUM_DROPS }, 9);
+ { let _ = FooBar::_Foo(Foo); }
+ assert_eq!(unsafe { NUM_DROPS }, 11);
+ { let _ = FooBar::_Bar(42); }
+ assert_eq!(unsafe { NUM_DROPS }, 12);
+}
diff --git a/tests/ui/issues/issue-68951.rs b/tests/ui/issues/issue-68951.rs
new file mode 100644
index 000000000..1c1e92c5b
--- /dev/null
+++ b/tests/ui/issues/issue-68951.rs
@@ -0,0 +1,9 @@
+// check-pass
+
+fn main() {
+ let array = [0x42u8; 10];
+ for b in &array {
+ let lo = b & 0xf;
+ let hi = (b >> 4) & 0xf;
+ }
+}
diff --git a/tests/ui/issues/issue-6898.rs b/tests/ui/issues/issue-6898.rs
new file mode 100644
index 000000000..44fd4bd07
--- /dev/null
+++ b/tests/ui/issues/issue-6898.rs
@@ -0,0 +1,33 @@
+// check-pass
+// pretty-expanded FIXME #23616
+
+use std::mem;
+
+/// Returns the size of a type
+pub fn size_of<T>() -> usize {
+ TypeInfo::size_of(None::<T>)
+}
+
+/// Returns the size of the type that `val` points to
+pub fn size_of_val<T>(val: &T) -> usize {
+ val.size_of_val()
+}
+
+pub trait TypeInfo: Sized {
+ fn size_of(_lame_type_hint: Option<Self>) -> usize;
+ fn size_of_val(&self) -> usize;
+}
+
+impl<T> TypeInfo for T {
+ /// The size of the type in bytes.
+ fn size_of(_lame_type_hint: Option<T>) -> usize {
+ mem::size_of::<T>()
+ }
+
+ /// Returns the size of the type of `self` in bytes.
+ fn size_of_val(&self) -> usize {
+ TypeInfo::size_of(None::<T>)
+ }
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-69130.rs b/tests/ui/issues/issue-69130.rs
new file mode 100644
index 000000000..9552e8ec2
--- /dev/null
+++ b/tests/ui/issues/issue-69130.rs
@@ -0,0 +1,7 @@
+// Issue 69130: character indexing bug in rustc_errors::CodeSuggestion::splice_lines().
+
+enum F {
+M (§& u8)}
+//~^ ERROR unknown start of token
+//~| missing lifetime specifier
+fn main() {}
diff --git a/tests/ui/issues/issue-69130.stderr b/tests/ui/issues/issue-69130.stderr
new file mode 100644
index 000000000..e67cc295d
--- /dev/null
+++ b/tests/ui/issues/issue-69130.stderr
@@ -0,0 +1,21 @@
+error: unknown start of token: \u{a7}
+ --> $DIR/issue-69130.rs:4:4
+ |
+LL | M (§& u8)}
+ | ^
+
+error[E0106]: missing lifetime specifier
+ --> $DIR/issue-69130.rs:4:5
+ |
+LL | M (§& u8)}
+ | ^ expected named lifetime parameter
+ |
+help: consider introducing a named lifetime parameter
+ |
+LL ~ enum F<'a> {
+LL ~ M (§&'a u8)}
+ |
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0106`.
diff --git a/tests/ui/issues/issue-6919.rs b/tests/ui/issues/issue-6919.rs
new file mode 100644
index 000000000..6f1e1f977
--- /dev/null
+++ b/tests/ui/issues/issue-6919.rs
@@ -0,0 +1,11 @@
+// run-pass
+#![allow(unused_attributes)]
+// aux-build:iss.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue6919_3;
+
+pub fn main() {
+ let _ = issue6919_3::D.k;
+}
diff --git a/tests/ui/issues/issue-69225-SCEVAddExpr-wrap-flag.rs b/tests/ui/issues/issue-69225-SCEVAddExpr-wrap-flag.rs
new file mode 100644
index 000000000..6e030f1cc
--- /dev/null
+++ b/tests/ui/issues/issue-69225-SCEVAddExpr-wrap-flag.rs
@@ -0,0 +1,33 @@
+// run-fail
+// compile-flags: -C opt-level=3
+// error-pattern: index out of bounds: the len is 0 but the index is 16777216
+// ignore-wasm no panic or subprocess support
+// ignore-emscripten no panic or subprocess support
+
+fn do_test(x: usize) {
+ let mut arr = vec![vec![0u8; 3]];
+
+ let mut z = vec![0];
+ for arr_ref in arr.iter_mut() {
+ for y in 0..x {
+ for _ in 0..1 {
+ z.reserve_exact(x);
+ let iterator = std::iter::repeat(0).take(x);
+ let mut cnt = 0;
+ iterator.for_each(|_| {
+ z[0] = 0;
+ cnt += 1;
+ });
+ let a = y * x;
+ let b = (y + 1) * x - 1;
+ let slice = &mut arr_ref[a..b];
+ slice[1 << 24] += 1;
+ }
+ }
+ }
+}
+
+fn main() {
+ do_test(1);
+ do_test(2);
+}
diff --git a/tests/ui/issues/issue-69225-layout-repeated-checked-add.rs b/tests/ui/issues/issue-69225-layout-repeated-checked-add.rs
new file mode 100644
index 000000000..7f43e4d1a
--- /dev/null
+++ b/tests/ui/issues/issue-69225-layout-repeated-checked-add.rs
@@ -0,0 +1,31 @@
+// Ensure we appropriately error instead of overflowing a calculation when creating a new Alloc
+// Layout
+
+// run-fail
+// compile-flags: -C opt-level=3
+// error-pattern: index out of bounds: the len is 0 but the index is 16777216
+// ignore-wasm no panic or subprocess support
+// ignore-emscripten no panic or subprocess support
+
+fn do_test(x: usize) {
+ let arr = vec![vec![0u8; 3]];
+
+ let mut z = Vec::new();
+ for arr_ref in arr {
+ for y in 0..x {
+ for _ in 0..1 {
+ z.extend(std::iter::repeat(0).take(x));
+ let a = y * x;
+ let b = (y + 1) * x - 1;
+ let slice = &arr_ref[a..b];
+ eprintln!("{} {} {} {}", a, b, arr_ref.len(), slice.len());
+ eprintln!("{:?}", slice[1 << 24]);
+ }
+ }
+ }
+}
+
+fn main() {
+ do_test(1);
+ do_test(2);
+}
diff --git a/tests/ui/issues/issue-69306.rs b/tests/ui/issues/issue-69306.rs
new file mode 100644
index 000000000..85d60952a
--- /dev/null
+++ b/tests/ui/issues/issue-69306.rs
@@ -0,0 +1,45 @@
+fn main() {}
+
+struct S0<T>(T);
+impl<T> S0<T> {
+ const C: S0<u8> = Self(0);
+ //~^ ERROR mismatched types
+ //~| ERROR mismatched types
+
+ fn foo() {
+ Self(0);
+ //~^ ERROR mismatched types
+ }
+}
+
+// Testing normalization.
+trait Fun {
+ type Out;
+}
+impl<T> Fun for S0<T> {
+ type Out = Self;
+}
+trait Foo<T> {
+ fn foo();
+}
+impl<T> Foo<T> for <S0<T> as Fun>::Out {
+ fn foo() {
+ Self(0); //~ ERROR mismatched types
+ }
+}
+
+struct S1<T, U>(T, U);
+impl<T> S1<T, u8> {
+ const C: S1<u8, u8> = Self(0, 1);
+ //~^ ERROR mismatched types
+ //~| ERROR mismatched types
+}
+
+struct S2<T>(T);
+impl<T> S2<T> {
+ fn map<U>(x: U) -> S2<U> {
+ Self(x)
+ //~^ ERROR mismatched types
+ //~| ERROR mismatched types
+ }
+}
diff --git a/tests/ui/issues/issue-69306.stderr b/tests/ui/issues/issue-69306.stderr
new file mode 100644
index 000000000..61ec5d318
--- /dev/null
+++ b/tests/ui/issues/issue-69306.stderr
@@ -0,0 +1,138 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-69306.rs:5:28
+ |
+LL | impl<T> S0<T> {
+ | - this type parameter
+LL | const C: S0<u8> = Self(0);
+ | ---- ^ expected type parameter `T`, found integer
+ | |
+ | arguments to this function are incorrect
+ |
+ = note: expected type parameter `T`
+ found type `{integer}`
+note: tuple struct defined here
+ --> $DIR/issue-69306.rs:3:8
+ |
+LL | struct S0<T>(T);
+ | ^^
+
+error[E0308]: mismatched types
+ --> $DIR/issue-69306.rs:5:23
+ |
+LL | impl<T> S0<T> {
+ | - this type parameter
+LL | const C: S0<u8> = Self(0);
+ | ^^^^^^^ expected `u8`, found type parameter `T`
+ |
+ = note: expected struct `S0<u8>`
+ found struct `S0<T>`
+
+error[E0308]: mismatched types
+ --> $DIR/issue-69306.rs:10:14
+ |
+LL | impl<T> S0<T> {
+ | - this type parameter
+...
+LL | Self(0);
+ | ---- ^ expected type parameter `T`, found integer
+ | |
+ | arguments to this function are incorrect
+ |
+ = note: expected type parameter `T`
+ found type `{integer}`
+note: tuple struct defined here
+ --> $DIR/issue-69306.rs:3:8
+ |
+LL | struct S0<T>(T);
+ | ^^
+
+error[E0308]: mismatched types
+ --> $DIR/issue-69306.rs:27:14
+ |
+LL | impl<T> Foo<T> for <S0<T> as Fun>::Out {
+ | - this type parameter
+LL | fn foo() {
+LL | Self(0);
+ | ---- ^ expected type parameter `T`, found integer
+ | |
+ | arguments to this function are incorrect
+ |
+ = note: expected type parameter `T`
+ found type `{integer}`
+note: tuple struct defined here
+ --> $DIR/issue-69306.rs:3:8
+ |
+LL | struct S0<T>(T);
+ | ^^
+
+error[E0308]: mismatched types
+ --> $DIR/issue-69306.rs:33:32
+ |
+LL | impl<T> S1<T, u8> {
+ | - this type parameter
+LL | const C: S1<u8, u8> = Self(0, 1);
+ | ---- ^ expected type parameter `T`, found integer
+ | |
+ | arguments to this function are incorrect
+ |
+ = note: expected type parameter `T`
+ found type `{integer}`
+note: tuple struct defined here
+ --> $DIR/issue-69306.rs:31:8
+ |
+LL | struct S1<T, U>(T, U);
+ | ^^
+
+error[E0308]: mismatched types
+ --> $DIR/issue-69306.rs:33:27
+ |
+LL | impl<T> S1<T, u8> {
+ | - this type parameter
+LL | const C: S1<u8, u8> = Self(0, 1);
+ | ^^^^^^^^^^ expected `u8`, found type parameter `T`
+ |
+ = note: expected struct `S1<u8, _>`
+ found struct `S1<T, _>`
+
+error[E0308]: mismatched types
+ --> $DIR/issue-69306.rs:41:14
+ |
+LL | impl<T> S2<T> {
+ | - expected type parameter
+LL | fn map<U>(x: U) -> S2<U> {
+ | - found type parameter
+LL | Self(x)
+ | ---- ^ expected type parameter `T`, found type parameter `U`
+ | |
+ | arguments to this function are incorrect
+ |
+ = note: expected type parameter `T`
+ found type parameter `U`
+ = note: a type parameter was expected, but a different one was found; you might be missing a type parameter or trait bound
+ = note: for more information, visit https://doc.rust-lang.org/book/ch10-02-traits.html#traits-as-parameters
+note: tuple struct defined here
+ --> $DIR/issue-69306.rs:38:8
+ |
+LL | struct S2<T>(T);
+ | ^^
+
+error[E0308]: mismatched types
+ --> $DIR/issue-69306.rs:41:9
+ |
+LL | impl<T> S2<T> {
+ | - found type parameter
+LL | fn map<U>(x: U) -> S2<U> {
+ | - ----- expected `S2<U>` because of return type
+ | |
+ | expected type parameter
+LL | Self(x)
+ | ^^^^^^^ expected type parameter `U`, found type parameter `T`
+ |
+ = note: expected struct `S2<U>`
+ found struct `S2<T>`
+ = note: a type parameter was expected, but a different one was found; you might be missing a type parameter or trait bound
+ = note: for more information, visit https://doc.rust-lang.org/book/ch10-02-traits.html#traits-as-parameters
+
+error: aborting due to 8 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-6936.rs b/tests/ui/issues/issue-6936.rs
new file mode 100644
index 000000000..26531bba9
--- /dev/null
+++ b/tests/ui/issues/issue-6936.rs
@@ -0,0 +1,34 @@
+struct T;
+
+mod t1 {
+ type Foo = ::T;
+ mod Foo {} //~ ERROR the name `Foo` is defined multiple times
+}
+
+mod t2 {
+ type Foo = ::T;
+ struct Foo; //~ ERROR the name `Foo` is defined multiple times
+}
+
+mod t3 {
+ type Foo = ::T;
+ enum Foo {} //~ ERROR the name `Foo` is defined multiple times
+}
+
+mod t4 {
+ type Foo = ::T;
+ fn Foo() {} // ok
+}
+
+mod t5 {
+ type Bar<T> = T;
+ mod Bar {} //~ ERROR the name `Bar` is defined multiple times
+}
+
+mod t6 {
+ type Foo = ::T;
+ impl Foo {} // ok
+}
+
+
+fn main() {}
diff --git a/tests/ui/issues/issue-6936.stderr b/tests/ui/issues/issue-6936.stderr
new file mode 100644
index 000000000..9292d60ca
--- /dev/null
+++ b/tests/ui/issues/issue-6936.stderr
@@ -0,0 +1,43 @@
+error[E0428]: the name `Foo` is defined multiple times
+ --> $DIR/issue-6936.rs:5:5
+ |
+LL | type Foo = ::T;
+ | --------------- previous definition of the type `Foo` here
+LL | mod Foo {}
+ | ^^^^^^^ `Foo` redefined here
+ |
+ = note: `Foo` must be defined only once in the type namespace of this module
+
+error[E0428]: the name `Foo` is defined multiple times
+ --> $DIR/issue-6936.rs:10:5
+ |
+LL | type Foo = ::T;
+ | --------------- previous definition of the type `Foo` here
+LL | struct Foo;
+ | ^^^^^^^^^^^ `Foo` redefined here
+ |
+ = note: `Foo` must be defined only once in the type namespace of this module
+
+error[E0428]: the name `Foo` is defined multiple times
+ --> $DIR/issue-6936.rs:15:5
+ |
+LL | type Foo = ::T;
+ | --------------- previous definition of the type `Foo` here
+LL | enum Foo {}
+ | ^^^^^^^^ `Foo` redefined here
+ |
+ = note: `Foo` must be defined only once in the type namespace of this module
+
+error[E0428]: the name `Bar` is defined multiple times
+ --> $DIR/issue-6936.rs:25:5
+ |
+LL | type Bar<T> = T;
+ | ---------------- previous definition of the type `Bar` here
+LL | mod Bar {}
+ | ^^^^^^^ `Bar` redefined here
+ |
+ = note: `Bar` must be defined only once in the type namespace of this module
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0428`.
diff --git a/tests/ui/issues/issue-69396-const-no-type-in-macro.rs b/tests/ui/issues/issue-69396-const-no-type-in-macro.rs
new file mode 100644
index 000000000..45a308574
--- /dev/null
+++ b/tests/ui/issues/issue-69396-const-no-type-in-macro.rs
@@ -0,0 +1,17 @@
+macro_rules! suite {
+ ( $( $fn:ident; )* ) => {
+ $(
+ const A = "A".$fn();
+ //~^ ERROR the name `A` is defined multiple times
+ //~| ERROR missing type for `const` item
+ //~| ERROR the placeholder `_` is not allowed within types on item signatures for constants
+ )*
+ }
+}
+
+suite! {
+ len;
+ is_empty;
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-69396-const-no-type-in-macro.stderr b/tests/ui/issues/issue-69396-const-no-type-in-macro.stderr
new file mode 100644
index 000000000..89aeafeba
--- /dev/null
+++ b/tests/ui/issues/issue-69396-const-no-type-in-macro.stderr
@@ -0,0 +1,50 @@
+error[E0428]: the name `A` is defined multiple times
+ --> $DIR/issue-69396-const-no-type-in-macro.rs:4:13
+ |
+LL | const A = "A".$fn();
+ | ^^^^^^^^^^^^^^^^^^^^ `A` redefined here
+...
+LL | / suite! {
+LL | | len;
+LL | | is_empty;
+LL | | }
+ | |_- in this macro invocation
+ |
+ = note: `A` must be defined only once in the value namespace of this module
+ = note: this error originates in the macro `suite` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: missing type for `const` item
+ --> $DIR/issue-69396-const-no-type-in-macro.rs:4:20
+ |
+LL | const A = "A".$fn();
+ | ^ help: provide a type for the constant: `: usize`
+...
+LL | / suite! {
+LL | | len;
+LL | | is_empty;
+LL | | }
+ | |_- in this macro invocation
+ |
+ = note: this error originates in the macro `suite` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0121]: the placeholder `_` is not allowed within types on item signatures for constants
+ --> $DIR/issue-69396-const-no-type-in-macro.rs:4:20
+ |
+LL | const A = "A".$fn();
+ | ^
+ | |
+ | not allowed in type signatures
+ | help: replace with the correct type: `bool`
+...
+LL | / suite! {
+LL | | len;
+LL | | is_empty;
+LL | | }
+ | |_- in this macro invocation
+ |
+ = note: this error originates in the macro `suite` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to 3 previous errors
+
+Some errors have detailed explanations: E0121, E0428.
+For more information about an error, try `rustc --explain E0121`.
diff --git a/tests/ui/issues/issue-69455.rs b/tests/ui/issues/issue-69455.rs
new file mode 100644
index 000000000..a53aadcfa
--- /dev/null
+++ b/tests/ui/issues/issue-69455.rs
@@ -0,0 +1,31 @@
+// Regression test for #69455: projection predicate was not satisfied.
+// Compiler should indicate the correct location of the
+// unsatisfied projection predicate
+
+pub trait Test<Rhs = Self> {
+ type Output;
+
+ fn test(self, rhs: Rhs) -> Self::Output;
+}
+
+impl Test<u32> for u64 {
+ type Output = u64;
+
+ fn test(self, other: u32) -> u64 {
+ self + (other as u64)
+ }
+}
+
+impl Test<u64> for u64 {
+ type Output = u64;
+
+ fn test(self, other: u64) -> u64 {
+ (self + other) as u64
+ }
+}
+
+fn main() {
+ let xs: Vec<u64> = vec![1, 2, 3];
+ println!("{}", 23u64.test(xs.iter().sum())); //~ ERROR: type annotations needed
+ //~^ ERROR type annotations needed
+}
diff --git a/tests/ui/issues/issue-69455.stderr b/tests/ui/issues/issue-69455.stderr
new file mode 100644
index 000000000..fc343bb54
--- /dev/null
+++ b/tests/ui/issues/issue-69455.stderr
@@ -0,0 +1,39 @@
+error[E0284]: type annotations needed
+ --> $DIR/issue-69455.rs:29:41
+ |
+LL | println!("{}", 23u64.test(xs.iter().sum()));
+ | ---- ^^^ cannot infer type of the type parameter `S` declared on the associated function `sum`
+ | |
+ | type must be known at this point
+ |
+ = note: cannot satisfy `<u64 as Test<_>>::Output == _`
+help: consider specifying the generic argument
+ |
+LL | println!("{}", 23u64.test(xs.iter().sum::<S>()));
+ | +++++
+
+error[E0283]: type annotations needed
+ --> $DIR/issue-69455.rs:29:41
+ |
+LL | println!("{}", 23u64.test(xs.iter().sum()));
+ | ---- ^^^ cannot infer type of the type parameter `S` declared on the associated function `sum`
+ | |
+ | required by a bound introduced by this call
+ |
+note: multiple `impl`s satisfying `u64: Test<_>` found
+ --> $DIR/issue-69455.rs:11:1
+ |
+LL | impl Test<u32> for u64 {
+ | ^^^^^^^^^^^^^^^^^^^^^^
+...
+LL | impl Test<u64> for u64 {
+ | ^^^^^^^^^^^^^^^^^^^^^^
+help: consider specifying the generic argument
+ |
+LL | println!("{}", 23u64.test(xs.iter().sum::<S>()));
+ | +++++
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0283, E0284.
+For more information about an error, try `rustc --explain E0283`.
diff --git a/tests/ui/issues/issue-69602-type-err-during-codegen-ice.rs b/tests/ui/issues/issue-69602-type-err-during-codegen-ice.rs
new file mode 100644
index 000000000..e98affc5c
--- /dev/null
+++ b/tests/ui/issues/issue-69602-type-err-during-codegen-ice.rs
@@ -0,0 +1,23 @@
+trait TraitA {
+ const VALUE: usize;
+}
+
+struct A;
+impl TraitA for A {
+ const VALUE: usize = 0;
+}
+
+trait TraitB {
+ type MyA: TraitA;
+ const VALUE: usize = Self::MyA::VALUE;
+}
+
+struct B;
+impl TraitB for B { //~ ERROR not all trait items implemented, missing: `MyA`
+ type M = A; //~ ERROR type `M` is not a member of trait `TraitB`
+}
+
+fn main() {
+ let _ = [0; B::VALUE];
+ //~^ constant
+}
diff --git a/tests/ui/issues/issue-69602-type-err-during-codegen-ice.stderr b/tests/ui/issues/issue-69602-type-err-during-codegen-ice.stderr
new file mode 100644
index 000000000..ba385d887
--- /dev/null
+++ b/tests/ui/issues/issue-69602-type-err-during-codegen-ice.stderr
@@ -0,0 +1,25 @@
+error[E0437]: type `M` is not a member of trait `TraitB`
+ --> $DIR/issue-69602-type-err-during-codegen-ice.rs:17:5
+ |
+LL | type M = A;
+ | ^^^^^^^^^^^^^ not a member of trait `TraitB`
+
+error[E0046]: not all trait items implemented, missing: `MyA`
+ --> $DIR/issue-69602-type-err-during-codegen-ice.rs:16:1
+ |
+LL | type MyA: TraitA;
+ | ---------------- `MyA` from trait
+...
+LL | impl TraitB for B {
+ | ^^^^^^^^^^^^^^^^^ missing `MyA` in implementation
+
+note: erroneous constant used
+ --> $DIR/issue-69602-type-err-during-codegen-ice.rs:21:17
+ |
+LL | let _ = [0; B::VALUE];
+ | ^^^^^^^^
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0046, E0437.
+For more information about an error, try `rustc --explain E0046`.
diff --git a/tests/ui/issues/issue-69683.rs b/tests/ui/issues/issue-69683.rs
new file mode 100644
index 000000000..7a76e9ef2
--- /dev/null
+++ b/tests/ui/issues/issue-69683.rs
@@ -0,0 +1,33 @@
+pub trait Element<S> {
+ type Array;
+}
+
+impl<T> Element<()> for T {
+ type Array = T;
+}
+
+impl<T: Element<S>, S> Element<[S; 3]> for T {
+ type Array = [T::Array; 3];
+}
+
+trait Foo<I>
+where
+ u8: Element<I>,
+{
+ fn foo(self, x: <u8 as Element<I>>::Array);
+}
+
+impl<I> Foo<I> for u16
+where
+ u8: Element<I>,
+{
+ fn foo(self, _: <u8 as Element<I>>::Array) {}
+}
+
+fn main() {
+ let b: [u8; 3] = [0u8; 3];
+
+ 0u16.foo(b); //~ ERROR type annotations needed
+ //~^ ERROR type annotations needed
+ //<u16 as Foo<[(); 3]>>::foo(0u16, b);
+}
diff --git a/tests/ui/issues/issue-69683.stderr b/tests/ui/issues/issue-69683.stderr
new file mode 100644
index 000000000..193de1a35
--- /dev/null
+++ b/tests/ui/issues/issue-69683.stderr
@@ -0,0 +1,43 @@
+error[E0284]: type annotations needed
+ --> $DIR/issue-69683.rs:30:10
+ |
+LL | 0u16.foo(b);
+ | ^^^
+ |
+ = note: cannot satisfy `<u8 as Element<_>>::Array == [u8; 3]`
+help: try using a fully qualified path to specify the expected types
+ |
+LL | <u16 as Foo<I>>::foo(0u16, b);
+ | +++++++++++++++++++++ ~
+
+error[E0283]: type annotations needed
+ --> $DIR/issue-69683.rs:30:10
+ |
+LL | 0u16.foo(b);
+ | ^^^
+ |
+note: multiple `impl`s satisfying `u8: Element<_>` found
+ --> $DIR/issue-69683.rs:5:1
+ |
+LL | impl<T> Element<()> for T {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^
+...
+LL | impl<T: Element<S>, S> Element<[S; 3]> for T {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+note: required by a bound in `Foo::foo`
+ --> $DIR/issue-69683.rs:15:9
+ |
+LL | u8: Element<I>,
+ | ^^^^^^^^^^ required by this bound in `Foo::foo`
+LL | {
+LL | fn foo(self, x: <u8 as Element<I>>::Array);
+ | --- required by a bound in this
+help: try using a fully qualified path to specify the expected types
+ |
+LL | <u16 as Foo<I>>::foo(0u16, b);
+ | +++++++++++++++++++++ ~
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0283, E0284.
+For more information about an error, try `rustc --explain E0283`.
diff --git a/tests/ui/issues/issue-70093.rs b/tests/ui/issues/issue-70093.rs
new file mode 100644
index 000000000..86459dc90
--- /dev/null
+++ b/tests/ui/issues/issue-70093.rs
@@ -0,0 +1,10 @@
+// run-pass
+// compile-flags: -Zlink-native-libraries=no -Cdefault-linker-libraries=yes
+// ignore-windows - this will probably only work on unixish systems
+// ignore-fuchsia - missing __libc_start_main for some reason (#84733)
+// ignore-cross-compile - default-linker-libraries=yes doesn't play well with cross compiling
+
+#[link(name = "some-random-non-existent-library", kind = "static")]
+extern "C" {}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-7012.rs b/tests/ui/issues/issue-7012.rs
new file mode 100644
index 000000000..90eba1706
--- /dev/null
+++ b/tests/ui/issues/issue-7012.rs
@@ -0,0 +1,22 @@
+// run-pass
+#![allow(non_camel_case_types)]
+#![allow(non_upper_case_globals)]
+
+/*
+# Comparison of static arrays
+
+The expected behaviour would be that `test == test1`, therefore 'true'
+would be printed, however the below prints false.
+*/
+
+struct signature<'a> { pattern : &'a [u32] }
+
+static test1: signature<'static> = signature {
+ pattern: &[0x243f6a88,0x85a308d3,0x13198a2e,0x03707344,0xa4093822,0x299f31d0]
+};
+
+pub fn main() {
+ let test: &[u32] = &[0x243f6a88,0x85a308d3,0x13198a2e,
+ 0x03707344,0xa4093822,0x299f31d0];
+ println!("{}",test==test1.pattern);
+}
diff --git a/tests/ui/issues/issue-70381.rs b/tests/ui/issues/issue-70381.rs
new file mode 100644
index 000000000..3df8277b8
--- /dev/null
+++ b/tests/ui/issues/issue-70381.rs
@@ -0,0 +1,6 @@
+// Test that multi-byte unicode characters with missing parameters do not ICE.
+
+fn main() {
+ println!("\r¡{}")
+ //~^ ERROR 1 positional argument in format string
+}
diff --git a/tests/ui/issues/issue-70381.stderr b/tests/ui/issues/issue-70381.stderr
new file mode 100644
index 000000000..96b8e6569
--- /dev/null
+++ b/tests/ui/issues/issue-70381.stderr
@@ -0,0 +1,8 @@
+error: 1 positional argument in format string, but no arguments were given
+ --> $DIR/issue-70381.rs:4:16
+ |
+LL | println!("\r¡{}")
+ | ^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-7044.rs b/tests/ui/issues/issue-7044.rs
new file mode 100644
index 000000000..a6e22bc52
--- /dev/null
+++ b/tests/ui/issues/issue-7044.rs
@@ -0,0 +1,4 @@
+static X: isize = 0;
+struct X; //~ ERROR the name `X` is defined multiple times
+
+fn main() {}
diff --git a/tests/ui/issues/issue-7044.stderr b/tests/ui/issues/issue-7044.stderr
new file mode 100644
index 000000000..2ad67ec23
--- /dev/null
+++ b/tests/ui/issues/issue-7044.stderr
@@ -0,0 +1,13 @@
+error[E0428]: the name `X` is defined multiple times
+ --> $DIR/issue-7044.rs:2:1
+ |
+LL | static X: isize = 0;
+ | -------------------- previous definition of the value `X` here
+LL | struct X;
+ | ^^^^^^^^^ `X` redefined here
+ |
+ = note: `X` must be defined only once in the value namespace of this module
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0428`.
diff --git a/tests/ui/issues/issue-7061.rs b/tests/ui/issues/issue-7061.rs
new file mode 100644
index 000000000..8a6ee920a
--- /dev/null
+++ b/tests/ui/issues/issue-7061.rs
@@ -0,0 +1,10 @@
+struct BarStruct;
+
+impl<'a> BarStruct {
+ fn foo(&'a mut self) -> Box<BarStruct> { self }
+ //~^ ERROR mismatched types
+ //~| expected struct `Box<BarStruct>`
+ //~| found mutable reference `&'a mut BarStruct`
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-7061.stderr b/tests/ui/issues/issue-7061.stderr
new file mode 100644
index 000000000..27034378d
--- /dev/null
+++ b/tests/ui/issues/issue-7061.stderr
@@ -0,0 +1,14 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-7061.rs:4:46
+ |
+LL | fn foo(&'a mut self) -> Box<BarStruct> { self }
+ | -------------- ^^^^ expected struct `Box`, found `&mut BarStruct`
+ | |
+ | expected `Box<BarStruct>` because of return type
+ |
+ = note: expected struct `Box<BarStruct>`
+ found mutable reference `&'a mut BarStruct`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-70673.rs b/tests/ui/issues/issue-70673.rs
new file mode 100644
index 000000000..3561f4012
--- /dev/null
+++ b/tests/ui/issues/issue-70673.rs
@@ -0,0 +1,12 @@
+// Regression test for https://github.com/rust-lang/rust/issues/70673.
+
+// run-pass
+
+#![feature(thread_local)]
+
+#[thread_local]
+static A: &u8 = &42;
+
+fn main() {
+ dbg!(*A);
+}
diff --git a/tests/ui/issues/issue-70724-add_type_neq_err_label-unwrap.rs b/tests/ui/issues/issue-70724-add_type_neq_err_label-unwrap.rs
new file mode 100644
index 000000000..c2683157f
--- /dev/null
+++ b/tests/ui/issues/issue-70724-add_type_neq_err_label-unwrap.rs
@@ -0,0 +1,10 @@
+fn a() -> i32 {
+ 3
+}
+
+pub fn main() {
+ assert_eq!(a, 0);
+ //~^ ERROR binary operation `==` cannot
+ //~| ERROR mismatched types
+ //~| ERROR doesn't implement
+}
diff --git a/tests/ui/issues/issue-70724-add_type_neq_err_label-unwrap.stderr b/tests/ui/issues/issue-70724-add_type_neq_err_label-unwrap.stderr
new file mode 100644
index 000000000..b30bcfb77
--- /dev/null
+++ b/tests/ui/issues/issue-70724-add_type_neq_err_label-unwrap.stderr
@@ -0,0 +1,38 @@
+error[E0369]: binary operation `==` cannot be applied to type `fn() -> i32 {a}`
+ --> $DIR/issue-70724-add_type_neq_err_label-unwrap.rs:6:5
+ |
+LL | assert_eq!(a, 0);
+ | ^^^^^^^^^^^^^^^^
+ | |
+ | fn() -> i32 {a}
+ | {integer}
+ |
+ = note: this error originates in the macro `assert_eq` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0308]: mismatched types
+ --> $DIR/issue-70724-add_type_neq_err_label-unwrap.rs:6:5
+ |
+LL | assert_eq!(a, 0);
+ | ^^^^^^^^^^^^^^^^ expected fn item, found integer
+ |
+ = note: expected fn item `fn() -> i32 {a}`
+ found type `{integer}`
+ = note: this error originates in the macro `assert_eq` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0277]: `fn() -> i32 {a}` doesn't implement `Debug`
+ --> $DIR/issue-70724-add_type_neq_err_label-unwrap.rs:6:5
+ |
+LL | fn a() -> i32 {
+ | - consider calling this function
+...
+LL | assert_eq!(a, 0);
+ | ^^^^^^^^^^^^^^^^ `fn() -> i32 {a}` cannot be formatted using `{:?}` because it doesn't implement `Debug`
+ |
+ = help: the trait `Debug` is not implemented for fn item `fn() -> i32 {a}`
+ = help: use parentheses to call this function: `a()`
+ = note: this error originates in the macro `assert_eq` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to 3 previous errors
+
+Some errors have detailed explanations: E0277, E0308, E0369.
+For more information about an error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-70746.rs b/tests/ui/issues/issue-70746.rs
new file mode 100644
index 000000000..8930c15f5
--- /dev/null
+++ b/tests/ui/issues/issue-70746.rs
@@ -0,0 +1,29 @@
+// check-pass
+
+pub trait Trait1 {
+ type C;
+}
+
+struct T1;
+impl Trait1 for T1 {
+ type C = usize;
+}
+pub trait Callback<T: Trait1>: FnMut(<T as Trait1>::C) {}
+impl<T: Trait1, F: FnMut(<T as Trait1>::C)> Callback<T> for F {}
+
+pub struct State<T: Trait1> {
+ callback: Option<Box<dyn Callback<T>>>,
+}
+impl<T: Trait1> State<T> {
+ fn new() -> Self {
+ Self { callback: None }
+ }
+ fn test_cb(&mut self, d: <T as Trait1>::C) {
+ (self.callback.as_mut().unwrap())(d)
+ }
+}
+
+fn main() {
+ let mut s = State::<T1>::new();
+ s.test_cb(1);
+}
diff --git a/tests/ui/issues/issue-7092.rs b/tests/ui/issues/issue-7092.rs
new file mode 100644
index 000000000..85bfbf90d
--- /dev/null
+++ b/tests/ui/issues/issue-7092.rs
@@ -0,0 +1,15 @@
+enum Whatever {
+}
+
+fn foo(x: Whatever) {
+ match x {
+ Some(field) =>
+//~^ ERROR mismatched types
+//~| expected enum `Whatever`, found enum `Option`
+//~| expected enum `Whatever`
+//~| found enum `Option<_>`
+ field.access(),
+ }
+}
+
+fn main(){}
diff --git a/tests/ui/issues/issue-7092.stderr b/tests/ui/issues/issue-7092.stderr
new file mode 100644
index 000000000..59e8d75e2
--- /dev/null
+++ b/tests/ui/issues/issue-7092.stderr
@@ -0,0 +1,14 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-7092.rs:6:9
+ |
+LL | match x {
+ | - this expression has type `Whatever`
+LL | Some(field) =>
+ | ^^^^^^^^^^^ expected enum `Whatever`, found enum `Option`
+ |
+ = note: expected enum `Whatever`
+ found enum `Option<_>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-71406.rs b/tests/ui/issues/issue-71406.rs
new file mode 100644
index 000000000..6266112c3
--- /dev/null
+++ b/tests/ui/issues/issue-71406.rs
@@ -0,0 +1,6 @@
+use std::sync::mpsc;
+
+fn main() {
+ let (tx, rx) = mpsc::channel::new(1);
+ //~^ ERROR expected type, found function `channel` in `mpsc`
+}
diff --git a/tests/ui/issues/issue-71406.stderr b/tests/ui/issues/issue-71406.stderr
new file mode 100644
index 000000000..918163b60
--- /dev/null
+++ b/tests/ui/issues/issue-71406.stderr
@@ -0,0 +1,9 @@
+error[E0433]: failed to resolve: expected type, found function `channel` in `mpsc`
+ --> $DIR/issue-71406.rs:4:26
+ |
+LL | let (tx, rx) = mpsc::channel::new(1);
+ | ^^^^^^^ expected type, found function `channel` in `mpsc`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0433`.
diff --git a/tests/ui/issues/issue-71584.rs b/tests/ui/issues/issue-71584.rs
new file mode 100644
index 000000000..7bf3ed60e
--- /dev/null
+++ b/tests/ui/issues/issue-71584.rs
@@ -0,0 +1,6 @@
+fn main() {
+ let n: u32 = 1;
+ let mut d: u64 = 2;
+ d = d % n.into();
+ //~^ ERROR type annotations needed
+}
diff --git a/tests/ui/issues/issue-71584.stderr b/tests/ui/issues/issue-71584.stderr
new file mode 100644
index 000000000..6ddb76573
--- /dev/null
+++ b/tests/ui/issues/issue-71584.stderr
@@ -0,0 +1,17 @@
+error[E0284]: type annotations needed
+ --> $DIR/issue-71584.rs:4:15
+ |
+LL | d = d % n.into();
+ | - ^^^^
+ | |
+ | type must be known at this point
+ |
+ = note: cannot satisfy `<u64 as Rem<_>>::Output == u64`
+help: try using a fully qualified path to specify the expected types
+ |
+LL | d = d % <u32 as Into<T>>::into(n);
+ | +++++++++++++++++++++++ ~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0284`.
diff --git a/tests/ui/issues/issue-71676-1.fixed b/tests/ui/issues/issue-71676-1.fixed
new file mode 100644
index 000000000..cbc0e8c06
--- /dev/null
+++ b/tests/ui/issues/issue-71676-1.fixed
@@ -0,0 +1,53 @@
+// run-rustfix
+use std::ops::Deref;
+use std::ops::DerefMut;
+struct Bar(u8);
+struct Foo(Bar);
+struct Emm(Foo);
+impl Deref for Bar{
+ type Target = u8;
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+impl Deref for Foo {
+ type Target = Bar;
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+impl Deref for Emm {
+ type Target = Foo;
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+impl DerefMut for Bar{
+ fn deref_mut(&mut self) -> &mut Self::Target {
+ &mut self.0
+ }
+}
+impl DerefMut for Foo {
+ fn deref_mut(&mut self) -> &mut Self::Target {
+ &mut self.0
+ }
+}
+impl DerefMut for Emm {
+ fn deref_mut(&mut self) -> &mut Self::Target {
+ &mut self.0
+ }
+}
+fn main() {
+ // Suggest dereference with arbitrary mutability
+ let a = Emm(Foo(Bar(0)));
+ let _: *const u8 = &***a; //~ ERROR mismatched types
+
+ let mut a = Emm(Foo(Bar(0)));
+ let _: *mut u8 = &mut ***a; //~ ERROR mismatched types
+
+ let a = Emm(Foo(Bar(0)));
+ let _: *const u8 = &***a; //~ ERROR mismatched types
+
+ let mut a = Emm(Foo(Bar(0)));
+ let _: *mut u8 = &mut ***a; //~ ERROR mismatched types
+}
diff --git a/tests/ui/issues/issue-71676-1.rs b/tests/ui/issues/issue-71676-1.rs
new file mode 100644
index 000000000..6e87c7174
--- /dev/null
+++ b/tests/ui/issues/issue-71676-1.rs
@@ -0,0 +1,53 @@
+// run-rustfix
+use std::ops::Deref;
+use std::ops::DerefMut;
+struct Bar(u8);
+struct Foo(Bar);
+struct Emm(Foo);
+impl Deref for Bar{
+ type Target = u8;
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+impl Deref for Foo {
+ type Target = Bar;
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+impl Deref for Emm {
+ type Target = Foo;
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+impl DerefMut for Bar{
+ fn deref_mut(&mut self) -> &mut Self::Target {
+ &mut self.0
+ }
+}
+impl DerefMut for Foo {
+ fn deref_mut(&mut self) -> &mut Self::Target {
+ &mut self.0
+ }
+}
+impl DerefMut for Emm {
+ fn deref_mut(&mut self) -> &mut Self::Target {
+ &mut self.0
+ }
+}
+fn main() {
+ // Suggest dereference with arbitrary mutability
+ let a = Emm(Foo(Bar(0)));
+ let _: *const u8 = &a; //~ ERROR mismatched types
+
+ let mut a = Emm(Foo(Bar(0)));
+ let _: *mut u8 = &a; //~ ERROR mismatched types
+
+ let a = Emm(Foo(Bar(0)));
+ let _: *const u8 = &mut a; //~ ERROR mismatched types
+
+ let mut a = Emm(Foo(Bar(0)));
+ let _: *mut u8 = &mut a; //~ ERROR mismatched types
+}
diff --git a/tests/ui/issues/issue-71676-1.stderr b/tests/ui/issues/issue-71676-1.stderr
new file mode 100644
index 000000000..2104634eb
--- /dev/null
+++ b/tests/ui/issues/issue-71676-1.stderr
@@ -0,0 +1,63 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-71676-1.rs:43:24
+ |
+LL | let _: *const u8 = &a;
+ | --------- ^^ expected `u8`, found struct `Emm`
+ | |
+ | expected due to this
+ |
+ = note: expected raw pointer `*const u8`
+ found reference `&Emm`
+help: consider dereferencing
+ |
+LL | let _: *const u8 = &***a;
+ | +++
+
+error[E0308]: mismatched types
+ --> $DIR/issue-71676-1.rs:46:22
+ |
+LL | let _: *mut u8 = &a;
+ | ------- ^^ types differ in mutability
+ | |
+ | expected due to this
+ |
+ = note: expected raw pointer `*mut u8`
+ found reference `&Emm`
+help: consider dereferencing
+ |
+LL | let _: *mut u8 = &mut ***a;
+ | +++++++
+
+error[E0308]: mismatched types
+ --> $DIR/issue-71676-1.rs:49:24
+ |
+LL | let _: *const u8 = &mut a;
+ | --------- ^^^^^^ expected `u8`, found struct `Emm`
+ | |
+ | expected due to this
+ |
+ = note: expected raw pointer `*const u8`
+ found mutable reference `&mut Emm`
+help: consider dereferencing
+ |
+LL | let _: *const u8 = &***a;
+ | ~~~
+
+error[E0308]: mismatched types
+ --> $DIR/issue-71676-1.rs:52:22
+ |
+LL | let _: *mut u8 = &mut a;
+ | ------- ^^^^^^ expected `u8`, found struct `Emm`
+ | |
+ | expected due to this
+ |
+ = note: expected raw pointer `*mut u8`
+ found mutable reference `&mut Emm`
+help: consider dereferencing
+ |
+LL | let _: *mut u8 = &mut ***a;
+ | +++
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-71676-2.rs b/tests/ui/issues/issue-71676-2.rs
new file mode 100644
index 000000000..f3183899d
--- /dev/null
+++ b/tests/ui/issues/issue-71676-2.rs
@@ -0,0 +1,42 @@
+use std::ops::Deref;
+use std::ops::DerefMut;
+struct Bar(u8);
+struct Foo(Bar);
+struct Emm(Foo);
+impl Deref for Bar{
+ type Target = u8;
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+impl Deref for Foo {
+ type Target = Bar;
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+impl Deref for Emm {
+ type Target = Foo;
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+impl DerefMut for Bar{
+ fn deref_mut(&mut self) -> &mut Self::Target {
+ &mut self.0
+ }
+}
+impl DerefMut for Foo {
+ fn deref_mut(&mut self) -> &mut Self::Target {
+ &mut self.0
+ }
+}
+impl DerefMut for Emm {
+ fn deref_mut(&mut self) -> &mut Self::Target {
+ &mut self.0
+ }
+}
+fn main() {
+ let a = Emm(Foo(Bar(0)));
+ let _: *mut u8 = &a; //~ ERROR mismatched types
+}
diff --git a/tests/ui/issues/issue-71676-2.stderr b/tests/ui/issues/issue-71676-2.stderr
new file mode 100644
index 000000000..80fb4aed1
--- /dev/null
+++ b/tests/ui/issues/issue-71676-2.stderr
@@ -0,0 +1,18 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-71676-2.rs:41:22
+ |
+LL | let _: *mut u8 = &a;
+ | ------- ^^ types differ in mutability
+ | |
+ | expected due to this
+ |
+ = note: expected raw pointer `*mut u8`
+ found reference `&Emm`
+help: consider dereferencing
+ |
+LL | let _: *mut u8 = &mut ***a;
+ | +++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-7178.rs b/tests/ui/issues/issue-7178.rs
new file mode 100644
index 000000000..30aa736cd
--- /dev/null
+++ b/tests/ui/issues/issue-7178.rs
@@ -0,0 +1,10 @@
+// run-pass
+// aux-build:issue-7178.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_7178 as cross_crate_self;
+
+pub fn main() {
+ let _ = cross_crate_self::Foo::new(&1);
+}
diff --git a/tests/ui/issues/issue-72002.rs b/tests/ui/issues/issue-72002.rs
new file mode 100644
index 000000000..54ff89355
--- /dev/null
+++ b/tests/ui/issues/issue-72002.rs
@@ -0,0 +1,29 @@
+// check-pass
+struct Indexable;
+
+impl Indexable {
+ fn boo(&mut self) {}
+}
+
+impl std::ops::Index<&str> for Indexable {
+ type Output = Indexable;
+
+ fn index(&self, field: &str) -> &Indexable {
+ self
+ }
+}
+
+impl std::ops::IndexMut<&str> for Indexable {
+ fn index_mut(&mut self, field: &str) -> &mut Indexable {
+ self
+ }
+}
+
+fn main() {
+ let mut v = Indexable;
+ let field = "hello".to_string();
+
+ v[field.as_str()].boo();
+
+ v[&field].boo(); // < This should work
+}
diff --git a/tests/ui/issues/issue-72076.rs b/tests/ui/issues/issue-72076.rs
new file mode 100644
index 000000000..1659044a6
--- /dev/null
+++ b/tests/ui/issues/issue-72076.rs
@@ -0,0 +1,6 @@
+trait X {
+ type S;
+ fn f() -> Self::S {} //~ ERROR mismatched types
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-72076.stderr b/tests/ui/issues/issue-72076.stderr
new file mode 100644
index 000000000..b942cf75b
--- /dev/null
+++ b/tests/ui/issues/issue-72076.stderr
@@ -0,0 +1,14 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-72076.rs:3:23
+ |
+LL | fn f() -> Self::S {}
+ | ^^ expected associated type, found `()`
+ |
+ = note: expected associated type `<Self as X>::S`
+ found unit type `()`
+ = help: consider constraining the associated type `<Self as X>::S` to `()` or calling a method that returns `<Self as X>::S`
+ = note: for more information, visit https://doc.rust-lang.org/book/ch19-03-advanced-traits.html
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-72278.rs b/tests/ui/issues/issue-72278.rs
new file mode 100644
index 000000000..92fd1f73a
--- /dev/null
+++ b/tests/ui/issues/issue-72278.rs
@@ -0,0 +1,19 @@
+// run-pass
+
+#![allow(unused)]
+
+struct S;
+
+impl S {
+ fn func<'a, U>(&'a self) -> U {
+ todo!()
+ }
+}
+
+fn dont_crash<'a, U>() -> U {
+ S.func::<'a, U>()
+ //~^ WARN cannot specify lifetime arguments explicitly
+ //~| WARN this was previously accepted
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-72278.stderr b/tests/ui/issues/issue-72278.stderr
new file mode 100644
index 000000000..5468837a3
--- /dev/null
+++ b/tests/ui/issues/issue-72278.stderr
@@ -0,0 +1,15 @@
+warning: cannot specify lifetime arguments explicitly if late bound lifetime parameters are present
+ --> $DIR/issue-72278.rs:14:14
+ |
+LL | fn func<'a, U>(&'a self) -> U {
+ | -- the late bound lifetime parameter is introduced here
+...
+LL | S.func::<'a, U>()
+ | ^^
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #42868 <https://github.com/rust-lang/rust/issues/42868>
+ = note: `#[warn(late_bound_lifetime_arguments)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/issues/issue-7246.rs b/tests/ui/issues/issue-7246.rs
new file mode 100644
index 000000000..7b16fa024
--- /dev/null
+++ b/tests/ui/issues/issue-7246.rs
@@ -0,0 +1,11 @@
+#![deny(unreachable_code)]
+#![allow(dead_code)]
+
+use std::ptr;
+pub unsafe fn g() {
+ return;
+ if *ptr::null() {}; //~ ERROR unreachable
+ //~| WARNING dereferencing a null pointer
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-7246.stderr b/tests/ui/issues/issue-7246.stderr
new file mode 100644
index 000000000..a9bf2bf76
--- /dev/null
+++ b/tests/ui/issues/issue-7246.stderr
@@ -0,0 +1,24 @@
+error: unreachable statement
+ --> $DIR/issue-7246.rs:7:5
+ |
+LL | return;
+ | ------ any code following this expression is unreachable
+LL | if *ptr::null() {};
+ | ^^^^^^^^^^^^^^^^^^^ unreachable statement
+ |
+note: the lint level is defined here
+ --> $DIR/issue-7246.rs:1:9
+ |
+LL | #![deny(unreachable_code)]
+ | ^^^^^^^^^^^^^^^^
+
+warning: dereferencing a null pointer
+ --> $DIR/issue-7246.rs:7:8
+ |
+LL | if *ptr::null() {};
+ | ^^^^^^^^^^^^ this code causes undefined behavior when executed
+ |
+ = note: `#[warn(deref_nullptr)]` on by default
+
+error: aborting due to previous error; 1 warning emitted
+
diff --git a/tests/ui/issues/issue-7268.rs b/tests/ui/issues/issue-7268.rs
new file mode 100644
index 000000000..309176fb0
--- /dev/null
+++ b/tests/ui/issues/issue-7268.rs
@@ -0,0 +1,10 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+fn foo<T: 'static>(_: T) {}
+
+fn bar<T>(x: &'static T) {
+ foo(x);
+}
+fn main() {}
diff --git a/tests/ui/issues/issue-72839-error-overflow.rs b/tests/ui/issues/issue-72839-error-overflow.rs
new file mode 100644
index 000000000..6562d2284
--- /dev/null
+++ b/tests/ui/issues/issue-72839-error-overflow.rs
@@ -0,0 +1,19 @@
+// Regression test for issue #72839
+// Tests that we do not overflow during trait selection after
+// a type error occurs
+use std::ops::Rem;
+trait Foo {}
+struct MyStruct<T>(T);
+
+impl<T, U> Rem<MyStruct<T>> for MyStruct<U> where MyStruct<U>: Rem<MyStruct<T>> {
+ type Output = u8;
+ fn rem(self, _: MyStruct<T>) -> Self::Output {
+ panic!()
+ }
+}
+
+fn main() {}
+
+fn foo() {
+ if missing_var % 8 == 0 {} //~ ERROR cannot find
+}
diff --git a/tests/ui/issues/issue-72839-error-overflow.stderr b/tests/ui/issues/issue-72839-error-overflow.stderr
new file mode 100644
index 000000000..c4b6f90ca
--- /dev/null
+++ b/tests/ui/issues/issue-72839-error-overflow.stderr
@@ -0,0 +1,9 @@
+error[E0425]: cannot find value `missing_var` in this scope
+ --> $DIR/issue-72839-error-overflow.rs:18:8
+ |
+LL | if missing_var % 8 == 0 {}
+ | ^^^^^^^^^^^ not found in this scope
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0425`.
diff --git a/tests/ui/issues/issue-72933-match-stack-overflow.rs b/tests/ui/issues/issue-72933-match-stack-overflow.rs
new file mode 100644
index 000000000..aa796bcf5
--- /dev/null
+++ b/tests/ui/issues/issue-72933-match-stack-overflow.rs
@@ -0,0 +1,5208 @@
+// build-pass
+// ignore-tidy-filelength
+#![crate_type="rlib"]
+
+fn banana(v: &str) -> u32 {
+ match v {
+ "0" => 0,
+ "1" => 1,
+ "2" => 2,
+ "3" => 3,
+ "4" => 4,
+ "5" => 5,
+ "6" => 6,
+ "7" => 7,
+ "8" => 8,
+ "9" => 9,
+ "10" => 10,
+ "11" => 11,
+ "12" => 12,
+ "13" => 13,
+ "14" => 14,
+ "15" => 15,
+ "16" => 16,
+ "17" => 17,
+ "18" => 18,
+ "19" => 19,
+ "20" => 20,
+ "21" => 21,
+ "22" => 22,
+ "23" => 23,
+ "24" => 24,
+ "25" => 25,
+ "26" => 26,
+ "27" => 27,
+ "28" => 28,
+ "29" => 29,
+ "30" => 30,
+ "31" => 31,
+ "32" => 32,
+ "33" => 33,
+ "34" => 34,
+ "35" => 35,
+ "36" => 36,
+ "37" => 37,
+ "38" => 38,
+ "39" => 39,
+ "40" => 40,
+ "41" => 41,
+ "42" => 42,
+ "43" => 43,
+ "44" => 44,
+ "45" => 45,
+ "46" => 46,
+ "47" => 47,
+ "48" => 48,
+ "49" => 49,
+ "50" => 50,
+ "51" => 51,
+ "52" => 52,
+ "53" => 53,
+ "54" => 54,
+ "55" => 55,
+ "56" => 56,
+ "57" => 57,
+ "58" => 58,
+ "59" => 59,
+ "60" => 60,
+ "61" => 61,
+ "62" => 62,
+ "63" => 63,
+ "64" => 64,
+ "65" => 65,
+ "66" => 66,
+ "67" => 67,
+ "68" => 68,
+ "69" => 69,
+ "70" => 70,
+ "71" => 71,
+ "72" => 72,
+ "73" => 73,
+ "74" => 74,
+ "75" => 75,
+ "76" => 76,
+ "77" => 77,
+ "78" => 78,
+ "79" => 79,
+ "80" => 80,
+ "81" => 81,
+ "82" => 82,
+ "83" => 83,
+ "84" => 84,
+ "85" => 85,
+ "86" => 86,
+ "87" => 87,
+ "88" => 88,
+ "89" => 89,
+ "90" => 90,
+ "91" => 91,
+ "92" => 92,
+ "93" => 93,
+ "94" => 94,
+ "95" => 95,
+ "96" => 96,
+ "97" => 97,
+ "98" => 98,
+ "99" => 99,
+ "100" => 100,
+ "101" => 101,
+ "102" => 102,
+ "103" => 103,
+ "104" => 104,
+ "105" => 105,
+ "106" => 106,
+ "107" => 107,
+ "108" => 108,
+ "109" => 109,
+ "110" => 110,
+ "111" => 111,
+ "112" => 112,
+ "113" => 113,
+ "114" => 114,
+ "115" => 115,
+ "116" => 116,
+ "117" => 117,
+ "118" => 118,
+ "119" => 119,
+ "120" => 120,
+ "121" => 121,
+ "122" => 122,
+ "123" => 123,
+ "124" => 124,
+ "125" => 125,
+ "126" => 126,
+ "127" => 127,
+ "128" => 128,
+ "129" => 129,
+ "130" => 130,
+ "131" => 131,
+ "132" => 132,
+ "133" => 133,
+ "134" => 134,
+ "135" => 135,
+ "136" => 136,
+ "137" => 137,
+ "138" => 138,
+ "139" => 139,
+ "140" => 140,
+ "141" => 141,
+ "142" => 142,
+ "143" => 143,
+ "144" => 144,
+ "145" => 145,
+ "146" => 146,
+ "147" => 147,
+ "148" => 148,
+ "149" => 149,
+ "150" => 150,
+ "151" => 151,
+ "152" => 152,
+ "153" => 153,
+ "154" => 154,
+ "155" => 155,
+ "156" => 156,
+ "157" => 157,
+ "158" => 158,
+ "159" => 159,
+ "160" => 160,
+ "161" => 161,
+ "162" => 162,
+ "163" => 163,
+ "164" => 164,
+ "165" => 165,
+ "166" => 166,
+ "167" => 167,
+ "168" => 168,
+ "169" => 169,
+ "170" => 170,
+ "171" => 171,
+ "172" => 172,
+ "173" => 173,
+ "174" => 174,
+ "175" => 175,
+ "176" => 176,
+ "177" => 177,
+ "178" => 178,
+ "179" => 179,
+ "180" => 180,
+ "181" => 181,
+ "182" => 182,
+ "183" => 183,
+ "184" => 184,
+ "185" => 185,
+ "186" => 186,
+ "187" => 187,
+ "188" => 188,
+ "189" => 189,
+ "190" => 190,
+ "191" => 191,
+ "192" => 192,
+ "193" => 193,
+ "194" => 194,
+ "195" => 195,
+ "196" => 196,
+ "197" => 197,
+ "198" => 198,
+ "199" => 199,
+ "200" => 200,
+ "201" => 201,
+ "202" => 202,
+ "203" => 203,
+ "204" => 204,
+ "205" => 205,
+ "206" => 206,
+ "207" => 207,
+ "208" => 208,
+ "209" => 209,
+ "210" => 210,
+ "211" => 211,
+ "212" => 212,
+ "213" => 213,
+ "214" => 214,
+ "215" => 215,
+ "216" => 216,
+ "217" => 217,
+ "218" => 218,
+ "219" => 219,
+ "220" => 220,
+ "221" => 221,
+ "222" => 222,
+ "223" => 223,
+ "224" => 224,
+ "225" => 225,
+ "226" => 226,
+ "227" => 227,
+ "228" => 228,
+ "229" => 229,
+ "230" => 230,
+ "231" => 231,
+ "232" => 232,
+ "233" => 233,
+ "234" => 234,
+ "235" => 235,
+ "236" => 236,
+ "237" => 237,
+ "238" => 238,
+ "239" => 239,
+ "240" => 240,
+ "241" => 241,
+ "242" => 242,
+ "243" => 243,
+ "244" => 244,
+ "245" => 245,
+ "246" => 246,
+ "247" => 247,
+ "248" => 248,
+ "249" => 249,
+ "250" => 250,
+ "251" => 251,
+ "252" => 252,
+ "253" => 253,
+ "254" => 254,
+ "255" => 255,
+ "256" => 256,
+ "257" => 257,
+ "258" => 258,
+ "259" => 259,
+ "260" => 260,
+ "261" => 261,
+ "262" => 262,
+ "263" => 263,
+ "264" => 264,
+ "265" => 265,
+ "266" => 266,
+ "267" => 267,
+ "268" => 268,
+ "269" => 269,
+ "270" => 270,
+ "271" => 271,
+ "272" => 272,
+ "273" => 273,
+ "274" => 274,
+ "275" => 275,
+ "276" => 276,
+ "277" => 277,
+ "278" => 278,
+ "279" => 279,
+ "280" => 280,
+ "281" => 281,
+ "282" => 282,
+ "283" => 283,
+ "284" => 284,
+ "285" => 285,
+ "286" => 286,
+ "287" => 287,
+ "288" => 288,
+ "289" => 289,
+ "290" => 290,
+ "291" => 291,
+ "292" => 292,
+ "293" => 293,
+ "294" => 294,
+ "295" => 295,
+ "296" => 296,
+ "297" => 297,
+ "298" => 298,
+ "299" => 299,
+ "300" => 300,
+ "301" => 301,
+ "302" => 302,
+ "303" => 303,
+ "304" => 304,
+ "305" => 305,
+ "306" => 306,
+ "307" => 307,
+ "308" => 308,
+ "309" => 309,
+ "310" => 310,
+ "311" => 311,
+ "312" => 312,
+ "313" => 313,
+ "314" => 314,
+ "315" => 315,
+ "316" => 316,
+ "317" => 317,
+ "318" => 318,
+ "319" => 319,
+ "320" => 320,
+ "321" => 321,
+ "322" => 322,
+ "323" => 323,
+ "324" => 324,
+ "325" => 325,
+ "326" => 326,
+ "327" => 327,
+ "328" => 328,
+ "329" => 329,
+ "330" => 330,
+ "331" => 331,
+ "332" => 332,
+ "333" => 333,
+ "334" => 334,
+ "335" => 335,
+ "336" => 336,
+ "337" => 337,
+ "338" => 338,
+ "339" => 339,
+ "340" => 340,
+ "341" => 341,
+ "342" => 342,
+ "343" => 343,
+ "344" => 344,
+ "345" => 345,
+ "346" => 346,
+ "347" => 347,
+ "348" => 348,
+ "349" => 349,
+ "350" => 350,
+ "351" => 351,
+ "352" => 352,
+ "353" => 353,
+ "354" => 354,
+ "355" => 355,
+ "356" => 356,
+ "357" => 357,
+ "358" => 358,
+ "359" => 359,
+ "360" => 360,
+ "361" => 361,
+ "362" => 362,
+ "363" => 363,
+ "364" => 364,
+ "365" => 365,
+ "366" => 366,
+ "367" => 367,
+ "368" => 368,
+ "369" => 369,
+ "370" => 370,
+ "371" => 371,
+ "372" => 372,
+ "373" => 373,
+ "374" => 374,
+ "375" => 375,
+ "376" => 376,
+ "377" => 377,
+ "378" => 378,
+ "379" => 379,
+ "380" => 380,
+ "381" => 381,
+ "382" => 382,
+ "383" => 383,
+ "384" => 384,
+ "385" => 385,
+ "386" => 386,
+ "387" => 387,
+ "388" => 388,
+ "389" => 389,
+ "390" => 390,
+ "391" => 391,
+ "392" => 392,
+ "393" => 393,
+ "394" => 394,
+ "395" => 395,
+ "396" => 396,
+ "397" => 397,
+ "398" => 398,
+ "399" => 399,
+ "400" => 400,
+ "401" => 401,
+ "402" => 402,
+ "403" => 403,
+ "404" => 404,
+ "405" => 405,
+ "406" => 406,
+ "407" => 407,
+ "408" => 408,
+ "409" => 409,
+ "410" => 410,
+ "411" => 411,
+ "412" => 412,
+ "413" => 413,
+ "414" => 414,
+ "415" => 415,
+ "416" => 416,
+ "417" => 417,
+ "418" => 418,
+ "419" => 419,
+ "420" => 420,
+ "421" => 421,
+ "422" => 422,
+ "423" => 423,
+ "424" => 424,
+ "425" => 425,
+ "426" => 426,
+ "427" => 427,
+ "428" => 428,
+ "429" => 429,
+ "430" => 430,
+ "431" => 431,
+ "432" => 432,
+ "433" => 433,
+ "434" => 434,
+ "435" => 435,
+ "436" => 436,
+ "437" => 437,
+ "438" => 438,
+ "439" => 439,
+ "440" => 440,
+ "441" => 441,
+ "442" => 442,
+ "443" => 443,
+ "444" => 444,
+ "445" => 445,
+ "446" => 446,
+ "447" => 447,
+ "448" => 448,
+ "449" => 449,
+ "450" => 450,
+ "451" => 451,
+ "452" => 452,
+ "453" => 453,
+ "454" => 454,
+ "455" => 455,
+ "456" => 456,
+ "457" => 457,
+ "458" => 458,
+ "459" => 459,
+ "460" => 460,
+ "461" => 461,
+ "462" => 462,
+ "463" => 463,
+ "464" => 464,
+ "465" => 465,
+ "466" => 466,
+ "467" => 467,
+ "468" => 468,
+ "469" => 469,
+ "470" => 470,
+ "471" => 471,
+ "472" => 472,
+ "473" => 473,
+ "474" => 474,
+ "475" => 475,
+ "476" => 476,
+ "477" => 477,
+ "478" => 478,
+ "479" => 479,
+ "480" => 480,
+ "481" => 481,
+ "482" => 482,
+ "483" => 483,
+ "484" => 484,
+ "485" => 485,
+ "486" => 486,
+ "487" => 487,
+ "488" => 488,
+ "489" => 489,
+ "490" => 490,
+ "491" => 491,
+ "492" => 492,
+ "493" => 493,
+ "494" => 494,
+ "495" => 495,
+ "496" => 496,
+ "497" => 497,
+ "498" => 498,
+ "499" => 499,
+ "500" => 500,
+ "501" => 501,
+ "502" => 502,
+ "503" => 503,
+ "504" => 504,
+ "505" => 505,
+ "506" => 506,
+ "507" => 507,
+ "508" => 508,
+ "509" => 509,
+ "510" => 510,
+ "511" => 511,
+ "512" => 512,
+ "513" => 513,
+ "514" => 514,
+ "515" => 515,
+ "516" => 516,
+ "517" => 517,
+ "518" => 518,
+ "519" => 519,
+ "520" => 520,
+ "521" => 521,
+ "522" => 522,
+ "523" => 523,
+ "524" => 524,
+ "525" => 525,
+ "526" => 526,
+ "527" => 527,
+ "528" => 528,
+ "529" => 529,
+ "530" => 530,
+ "531" => 531,
+ "532" => 532,
+ "533" => 533,
+ "534" => 534,
+ "535" => 535,
+ "536" => 536,
+ "537" => 537,
+ "538" => 538,
+ "539" => 539,
+ "540" => 540,
+ "541" => 541,
+ "542" => 542,
+ "543" => 543,
+ "544" => 544,
+ "545" => 545,
+ "546" => 546,
+ "547" => 547,
+ "548" => 548,
+ "549" => 549,
+ "550" => 550,
+ "551" => 551,
+ "552" => 552,
+ "553" => 553,
+ "554" => 554,
+ "555" => 555,
+ "556" => 556,
+ "557" => 557,
+ "558" => 558,
+ "559" => 559,
+ "560" => 560,
+ "561" => 561,
+ "562" => 562,
+ "563" => 563,
+ "564" => 564,
+ "565" => 565,
+ "566" => 566,
+ "567" => 567,
+ "568" => 568,
+ "569" => 569,
+ "570" => 570,
+ "571" => 571,
+ "572" => 572,
+ "573" => 573,
+ "574" => 574,
+ "575" => 575,
+ "576" => 576,
+ "577" => 577,
+ "578" => 578,
+ "579" => 579,
+ "580" => 580,
+ "581" => 581,
+ "582" => 582,
+ "583" => 583,
+ "584" => 584,
+ "585" => 585,
+ "586" => 586,
+ "587" => 587,
+ "588" => 588,
+ "589" => 589,
+ "590" => 590,
+ "591" => 591,
+ "592" => 592,
+ "593" => 593,
+ "594" => 594,
+ "595" => 595,
+ "596" => 596,
+ "597" => 597,
+ "598" => 598,
+ "599" => 599,
+ "600" => 600,
+ "601" => 601,
+ "602" => 602,
+ "603" => 603,
+ "604" => 604,
+ "605" => 605,
+ "606" => 606,
+ "607" => 607,
+ "608" => 608,
+ "609" => 609,
+ "610" => 610,
+ "611" => 611,
+ "612" => 612,
+ "613" => 613,
+ "614" => 614,
+ "615" => 615,
+ "616" => 616,
+ "617" => 617,
+ "618" => 618,
+ "619" => 619,
+ "620" => 620,
+ "621" => 621,
+ "622" => 622,
+ "623" => 623,
+ "624" => 624,
+ "625" => 625,
+ "626" => 626,
+ "627" => 627,
+ "628" => 628,
+ "629" => 629,
+ "630" => 630,
+ "631" => 631,
+ "632" => 632,
+ "633" => 633,
+ "634" => 634,
+ "635" => 635,
+ "636" => 636,
+ "637" => 637,
+ "638" => 638,
+ "639" => 639,
+ "640" => 640,
+ "641" => 641,
+ "642" => 642,
+ "643" => 643,
+ "644" => 644,
+ "645" => 645,
+ "646" => 646,
+ "647" => 647,
+ "648" => 648,
+ "649" => 649,
+ "650" => 650,
+ "651" => 651,
+ "652" => 652,
+ "653" => 653,
+ "654" => 654,
+ "655" => 655,
+ "656" => 656,
+ "657" => 657,
+ "658" => 658,
+ "659" => 659,
+ "660" => 660,
+ "661" => 661,
+ "662" => 662,
+ "663" => 663,
+ "664" => 664,
+ "665" => 665,
+ "666" => 666,
+ "667" => 667,
+ "668" => 668,
+ "669" => 669,
+ "670" => 670,
+ "671" => 671,
+ "672" => 672,
+ "673" => 673,
+ "674" => 674,
+ "675" => 675,
+ "676" => 676,
+ "677" => 677,
+ "678" => 678,
+ "679" => 679,
+ "680" => 680,
+ "681" => 681,
+ "682" => 682,
+ "683" => 683,
+ "684" => 684,
+ "685" => 685,
+ "686" => 686,
+ "687" => 687,
+ "688" => 688,
+ "689" => 689,
+ "690" => 690,
+ "691" => 691,
+ "692" => 692,
+ "693" => 693,
+ "694" => 694,
+ "695" => 695,
+ "696" => 696,
+ "697" => 697,
+ "698" => 698,
+ "699" => 699,
+ "700" => 700,
+ "701" => 701,
+ "702" => 702,
+ "703" => 703,
+ "704" => 704,
+ "705" => 705,
+ "706" => 706,
+ "707" => 707,
+ "708" => 708,
+ "709" => 709,
+ "710" => 710,
+ "711" => 711,
+ "712" => 712,
+ "713" => 713,
+ "714" => 714,
+ "715" => 715,
+ "716" => 716,
+ "717" => 717,
+ "718" => 718,
+ "719" => 719,
+ "720" => 720,
+ "721" => 721,
+ "722" => 722,
+ "723" => 723,
+ "724" => 724,
+ "725" => 725,
+ "726" => 726,
+ "727" => 727,
+ "728" => 728,
+ "729" => 729,
+ "730" => 730,
+ "731" => 731,
+ "732" => 732,
+ "733" => 733,
+ "734" => 734,
+ "735" => 735,
+ "736" => 736,
+ "737" => 737,
+ "738" => 738,
+ "739" => 739,
+ "740" => 740,
+ "741" => 741,
+ "742" => 742,
+ "743" => 743,
+ "744" => 744,
+ "745" => 745,
+ "746" => 746,
+ "747" => 747,
+ "748" => 748,
+ "749" => 749,
+ "750" => 750,
+ "751" => 751,
+ "752" => 752,
+ "753" => 753,
+ "754" => 754,
+ "755" => 755,
+ "756" => 756,
+ "757" => 757,
+ "758" => 758,
+ "759" => 759,
+ "760" => 760,
+ "761" => 761,
+ "762" => 762,
+ "763" => 763,
+ "764" => 764,
+ "765" => 765,
+ "766" => 766,
+ "767" => 767,
+ "768" => 768,
+ "769" => 769,
+ "770" => 770,
+ "771" => 771,
+ "772" => 772,
+ "773" => 773,
+ "774" => 774,
+ "775" => 775,
+ "776" => 776,
+ "777" => 777,
+ "778" => 778,
+ "779" => 779,
+ "780" => 780,
+ "781" => 781,
+ "782" => 782,
+ "783" => 783,
+ "784" => 784,
+ "785" => 785,
+ "786" => 786,
+ "787" => 787,
+ "788" => 788,
+ "789" => 789,
+ "790" => 790,
+ "791" => 791,
+ "792" => 792,
+ "793" => 793,
+ "794" => 794,
+ "795" => 795,
+ "796" => 796,
+ "797" => 797,
+ "798" => 798,
+ "799" => 799,
+ "800" => 800,
+ "801" => 801,
+ "802" => 802,
+ "803" => 803,
+ "804" => 804,
+ "805" => 805,
+ "806" => 806,
+ "807" => 807,
+ "808" => 808,
+ "809" => 809,
+ "810" => 810,
+ "811" => 811,
+ "812" => 812,
+ "813" => 813,
+ "814" => 814,
+ "815" => 815,
+ "816" => 816,
+ "817" => 817,
+ "818" => 818,
+ "819" => 819,
+ "820" => 820,
+ "821" => 821,
+ "822" => 822,
+ "823" => 823,
+ "824" => 824,
+ "825" => 825,
+ "826" => 826,
+ "827" => 827,
+ "828" => 828,
+ "829" => 829,
+ "830" => 830,
+ "831" => 831,
+ "832" => 832,
+ "833" => 833,
+ "834" => 834,
+ "835" => 835,
+ "836" => 836,
+ "837" => 837,
+ "838" => 838,
+ "839" => 839,
+ "840" => 840,
+ "841" => 841,
+ "842" => 842,
+ "843" => 843,
+ "844" => 844,
+ "845" => 845,
+ "846" => 846,
+ "847" => 847,
+ "848" => 848,
+ "849" => 849,
+ "850" => 850,
+ "851" => 851,
+ "852" => 852,
+ "853" => 853,
+ "854" => 854,
+ "855" => 855,
+ "856" => 856,
+ "857" => 857,
+ "858" => 858,
+ "859" => 859,
+ "860" => 860,
+ "861" => 861,
+ "862" => 862,
+ "863" => 863,
+ "864" => 864,
+ "865" => 865,
+ "866" => 866,
+ "867" => 867,
+ "868" => 868,
+ "869" => 869,
+ "870" => 870,
+ "871" => 871,
+ "872" => 872,
+ "873" => 873,
+ "874" => 874,
+ "875" => 875,
+ "876" => 876,
+ "877" => 877,
+ "878" => 878,
+ "879" => 879,
+ "880" => 880,
+ "881" => 881,
+ "882" => 882,
+ "883" => 883,
+ "884" => 884,
+ "885" => 885,
+ "886" => 886,
+ "887" => 887,
+ "888" => 888,
+ "889" => 889,
+ "890" => 890,
+ "891" => 891,
+ "892" => 892,
+ "893" => 893,
+ "894" => 894,
+ "895" => 895,
+ "896" => 896,
+ "897" => 897,
+ "898" => 898,
+ "899" => 899,
+ "900" => 900,
+ "901" => 901,
+ "902" => 902,
+ "903" => 903,
+ "904" => 904,
+ "905" => 905,
+ "906" => 906,
+ "907" => 907,
+ "908" => 908,
+ "909" => 909,
+ "910" => 910,
+ "911" => 911,
+ "912" => 912,
+ "913" => 913,
+ "914" => 914,
+ "915" => 915,
+ "916" => 916,
+ "917" => 917,
+ "918" => 918,
+ "919" => 919,
+ "920" => 920,
+ "921" => 921,
+ "922" => 922,
+ "923" => 923,
+ "924" => 924,
+ "925" => 925,
+ "926" => 926,
+ "927" => 927,
+ "928" => 928,
+ "929" => 929,
+ "930" => 930,
+ "931" => 931,
+ "932" => 932,
+ "933" => 933,
+ "934" => 934,
+ "935" => 935,
+ "936" => 936,
+ "937" => 937,
+ "938" => 938,
+ "939" => 939,
+ "940" => 940,
+ "941" => 941,
+ "942" => 942,
+ "943" => 943,
+ "944" => 944,
+ "945" => 945,
+ "946" => 946,
+ "947" => 947,
+ "948" => 948,
+ "949" => 949,
+ "950" => 950,
+ "951" => 951,
+ "952" => 952,
+ "953" => 953,
+ "954" => 954,
+ "955" => 955,
+ "956" => 956,
+ "957" => 957,
+ "958" => 958,
+ "959" => 959,
+ "960" => 960,
+ "961" => 961,
+ "962" => 962,
+ "963" => 963,
+ "964" => 964,
+ "965" => 965,
+ "966" => 966,
+ "967" => 967,
+ "968" => 968,
+ "969" => 969,
+ "970" => 970,
+ "971" => 971,
+ "972" => 972,
+ "973" => 973,
+ "974" => 974,
+ "975" => 975,
+ "976" => 976,
+ "977" => 977,
+ "978" => 978,
+ "979" => 979,
+ "980" => 980,
+ "981" => 981,
+ "982" => 982,
+ "983" => 983,
+ "984" => 984,
+ "985" => 985,
+ "986" => 986,
+ "987" => 987,
+ "988" => 988,
+ "989" => 989,
+ "990" => 990,
+ "991" => 991,
+ "992" => 992,
+ "993" => 993,
+ "994" => 994,
+ "995" => 995,
+ "996" => 996,
+ "997" => 997,
+ "998" => 998,
+ "999" => 999,
+ "1000" => 1000,
+ "1001" => 1001,
+ "1002" => 1002,
+ "1003" => 1003,
+ "1004" => 1004,
+ "1005" => 1005,
+ "1006" => 1006,
+ "1007" => 1007,
+ "1008" => 1008,
+ "1009" => 1009,
+ "1010" => 1010,
+ "1011" => 1011,
+ "1012" => 1012,
+ "1013" => 1013,
+ "1014" => 1014,
+ "1015" => 1015,
+ "1016" => 1016,
+ "1017" => 1017,
+ "1018" => 1018,
+ "1019" => 1019,
+ "1020" => 1020,
+ "1021" => 1021,
+ "1022" => 1022,
+ "1023" => 1023,
+ "1024" => 1024,
+ "1025" => 1025,
+ "1026" => 1026,
+ "1027" => 1027,
+ "1028" => 1028,
+ "1029" => 1029,
+ "1030" => 1030,
+ "1031" => 1031,
+ "1032" => 1032,
+ "1033" => 1033,
+ "1034" => 1034,
+ "1035" => 1035,
+ "1036" => 1036,
+ "1037" => 1037,
+ "1038" => 1038,
+ "1039" => 1039,
+ "1040" => 1040,
+ "1041" => 1041,
+ "1042" => 1042,
+ "1043" => 1043,
+ "1044" => 1044,
+ "1045" => 1045,
+ "1046" => 1046,
+ "1047" => 1047,
+ "1048" => 1048,
+ "1049" => 1049,
+ "1050" => 1050,
+ "1051" => 1051,
+ "1052" => 1052,
+ "1053" => 1053,
+ "1054" => 1054,
+ "1055" => 1055,
+ "1056" => 1056,
+ "1057" => 1057,
+ "1058" => 1058,
+ "1059" => 1059,
+ "1060" => 1060,
+ "1061" => 1061,
+ "1062" => 1062,
+ "1063" => 1063,
+ "1064" => 1064,
+ "1065" => 1065,
+ "1066" => 1066,
+ "1067" => 1067,
+ "1068" => 1068,
+ "1069" => 1069,
+ "1070" => 1070,
+ "1071" => 1071,
+ "1072" => 1072,
+ "1073" => 1073,
+ "1074" => 1074,
+ "1075" => 1075,
+ "1076" => 1076,
+ "1077" => 1077,
+ "1078" => 1078,
+ "1079" => 1079,
+ "1080" => 1080,
+ "1081" => 1081,
+ "1082" => 1082,
+ "1083" => 1083,
+ "1084" => 1084,
+ "1085" => 1085,
+ "1086" => 1086,
+ "1087" => 1087,
+ "1088" => 1088,
+ "1089" => 1089,
+ "1090" => 1090,
+ "1091" => 1091,
+ "1092" => 1092,
+ "1093" => 1093,
+ "1094" => 1094,
+ "1095" => 1095,
+ "1096" => 1096,
+ "1097" => 1097,
+ "1098" => 1098,
+ "1099" => 1099,
+ "1100" => 1100,
+ "1101" => 1101,
+ "1102" => 1102,
+ "1103" => 1103,
+ "1104" => 1104,
+ "1105" => 1105,
+ "1106" => 1106,
+ "1107" => 1107,
+ "1108" => 1108,
+ "1109" => 1109,
+ "1110" => 1110,
+ "1111" => 1111,
+ "1112" => 1112,
+ "1113" => 1113,
+ "1114" => 1114,
+ "1115" => 1115,
+ "1116" => 1116,
+ "1117" => 1117,
+ "1118" => 1118,
+ "1119" => 1119,
+ "1120" => 1120,
+ "1121" => 1121,
+ "1122" => 1122,
+ "1123" => 1123,
+ "1124" => 1124,
+ "1125" => 1125,
+ "1126" => 1126,
+ "1127" => 1127,
+ "1128" => 1128,
+ "1129" => 1129,
+ "1130" => 1130,
+ "1131" => 1131,
+ "1132" => 1132,
+ "1133" => 1133,
+ "1134" => 1134,
+ "1135" => 1135,
+ "1136" => 1136,
+ "1137" => 1137,
+ "1138" => 1138,
+ "1139" => 1139,
+ "1140" => 1140,
+ "1141" => 1141,
+ "1142" => 1142,
+ "1143" => 1143,
+ "1144" => 1144,
+ "1145" => 1145,
+ "1146" => 1146,
+ "1147" => 1147,
+ "1148" => 1148,
+ "1149" => 1149,
+ "1150" => 1150,
+ "1151" => 1151,
+ "1152" => 1152,
+ "1153" => 1153,
+ "1154" => 1154,
+ "1155" => 1155,
+ "1156" => 1156,
+ "1157" => 1157,
+ "1158" => 1158,
+ "1159" => 1159,
+ "1160" => 1160,
+ "1161" => 1161,
+ "1162" => 1162,
+ "1163" => 1163,
+ "1164" => 1164,
+ "1165" => 1165,
+ "1166" => 1166,
+ "1167" => 1167,
+ "1168" => 1168,
+ "1169" => 1169,
+ "1170" => 1170,
+ "1171" => 1171,
+ "1172" => 1172,
+ "1173" => 1173,
+ "1174" => 1174,
+ "1175" => 1175,
+ "1176" => 1176,
+ "1177" => 1177,
+ "1178" => 1178,
+ "1179" => 1179,
+ "1180" => 1180,
+ "1181" => 1181,
+ "1182" => 1182,
+ "1183" => 1183,
+ "1184" => 1184,
+ "1185" => 1185,
+ "1186" => 1186,
+ "1187" => 1187,
+ "1188" => 1188,
+ "1189" => 1189,
+ "1190" => 1190,
+ "1191" => 1191,
+ "1192" => 1192,
+ "1193" => 1193,
+ "1194" => 1194,
+ "1195" => 1195,
+ "1196" => 1196,
+ "1197" => 1197,
+ "1198" => 1198,
+ "1199" => 1199,
+ "1200" => 1200,
+ "1201" => 1201,
+ "1202" => 1202,
+ "1203" => 1203,
+ "1204" => 1204,
+ "1205" => 1205,
+ "1206" => 1206,
+ "1207" => 1207,
+ "1208" => 1208,
+ "1209" => 1209,
+ "1210" => 1210,
+ "1211" => 1211,
+ "1212" => 1212,
+ "1213" => 1213,
+ "1214" => 1214,
+ "1215" => 1215,
+ "1216" => 1216,
+ "1217" => 1217,
+ "1218" => 1218,
+ "1219" => 1219,
+ "1220" => 1220,
+ "1221" => 1221,
+ "1222" => 1222,
+ "1223" => 1223,
+ "1224" => 1224,
+ "1225" => 1225,
+ "1226" => 1226,
+ "1227" => 1227,
+ "1228" => 1228,
+ "1229" => 1229,
+ "1230" => 1230,
+ "1231" => 1231,
+ "1232" => 1232,
+ "1233" => 1233,
+ "1234" => 1234,
+ "1235" => 1235,
+ "1236" => 1236,
+ "1237" => 1237,
+ "1238" => 1238,
+ "1239" => 1239,
+ "1240" => 1240,
+ "1241" => 1241,
+ "1242" => 1242,
+ "1243" => 1243,
+ "1244" => 1244,
+ "1245" => 1245,
+ "1246" => 1246,
+ "1247" => 1247,
+ "1248" => 1248,
+ "1249" => 1249,
+ "1250" => 1250,
+ "1251" => 1251,
+ "1252" => 1252,
+ "1253" => 1253,
+ "1254" => 1254,
+ "1255" => 1255,
+ "1256" => 1256,
+ "1257" => 1257,
+ "1258" => 1258,
+ "1259" => 1259,
+ "1260" => 1260,
+ "1261" => 1261,
+ "1262" => 1262,
+ "1263" => 1263,
+ "1264" => 1264,
+ "1265" => 1265,
+ "1266" => 1266,
+ "1267" => 1267,
+ "1268" => 1268,
+ "1269" => 1269,
+ "1270" => 1270,
+ "1271" => 1271,
+ "1272" => 1272,
+ "1273" => 1273,
+ "1274" => 1274,
+ "1275" => 1275,
+ "1276" => 1276,
+ "1277" => 1277,
+ "1278" => 1278,
+ "1279" => 1279,
+ "1280" => 1280,
+ "1281" => 1281,
+ "1282" => 1282,
+ "1283" => 1283,
+ "1284" => 1284,
+ "1285" => 1285,
+ "1286" => 1286,
+ "1287" => 1287,
+ "1288" => 1288,
+ "1289" => 1289,
+ "1290" => 1290,
+ "1291" => 1291,
+ "1292" => 1292,
+ "1293" => 1293,
+ "1294" => 1294,
+ "1295" => 1295,
+ "1296" => 1296,
+ "1297" => 1297,
+ "1298" => 1298,
+ "1299" => 1299,
+ "1300" => 1300,
+ "1301" => 1301,
+ "1302" => 1302,
+ "1303" => 1303,
+ "1304" => 1304,
+ "1305" => 1305,
+ "1306" => 1306,
+ "1307" => 1307,
+ "1308" => 1308,
+ "1309" => 1309,
+ "1310" => 1310,
+ "1311" => 1311,
+ "1312" => 1312,
+ "1313" => 1313,
+ "1314" => 1314,
+ "1315" => 1315,
+ "1316" => 1316,
+ "1317" => 1317,
+ "1318" => 1318,
+ "1319" => 1319,
+ "1320" => 1320,
+ "1321" => 1321,
+ "1322" => 1322,
+ "1323" => 1323,
+ "1324" => 1324,
+ "1325" => 1325,
+ "1326" => 1326,
+ "1327" => 1327,
+ "1328" => 1328,
+ "1329" => 1329,
+ "1330" => 1330,
+ "1331" => 1331,
+ "1332" => 1332,
+ "1333" => 1333,
+ "1334" => 1334,
+ "1335" => 1335,
+ "1336" => 1336,
+ "1337" => 1337,
+ "1338" => 1338,
+ "1339" => 1339,
+ "1340" => 1340,
+ "1341" => 1341,
+ "1342" => 1342,
+ "1343" => 1343,
+ "1344" => 1344,
+ "1345" => 1345,
+ "1346" => 1346,
+ "1347" => 1347,
+ "1348" => 1348,
+ "1349" => 1349,
+ "1350" => 1350,
+ "1351" => 1351,
+ "1352" => 1352,
+ "1353" => 1353,
+ "1354" => 1354,
+ "1355" => 1355,
+ "1356" => 1356,
+ "1357" => 1357,
+ "1358" => 1358,
+ "1359" => 1359,
+ "1360" => 1360,
+ "1361" => 1361,
+ "1362" => 1362,
+ "1363" => 1363,
+ "1364" => 1364,
+ "1365" => 1365,
+ "1366" => 1366,
+ "1367" => 1367,
+ "1368" => 1368,
+ "1369" => 1369,
+ "1370" => 1370,
+ "1371" => 1371,
+ "1372" => 1372,
+ "1373" => 1373,
+ "1374" => 1374,
+ "1375" => 1375,
+ "1376" => 1376,
+ "1377" => 1377,
+ "1378" => 1378,
+ "1379" => 1379,
+ "1380" => 1380,
+ "1381" => 1381,
+ "1382" => 1382,
+ "1383" => 1383,
+ "1384" => 1384,
+ "1385" => 1385,
+ "1386" => 1386,
+ "1387" => 1387,
+ "1388" => 1388,
+ "1389" => 1389,
+ "1390" => 1390,
+ "1391" => 1391,
+ "1392" => 1392,
+ "1393" => 1393,
+ "1394" => 1394,
+ "1395" => 1395,
+ "1396" => 1396,
+ "1397" => 1397,
+ "1398" => 1398,
+ "1399" => 1399,
+ "1400" => 1400,
+ "1401" => 1401,
+ "1402" => 1402,
+ "1403" => 1403,
+ "1404" => 1404,
+ "1405" => 1405,
+ "1406" => 1406,
+ "1407" => 1407,
+ "1408" => 1408,
+ "1409" => 1409,
+ "1410" => 1410,
+ "1411" => 1411,
+ "1412" => 1412,
+ "1413" => 1413,
+ "1414" => 1414,
+ "1415" => 1415,
+ "1416" => 1416,
+ "1417" => 1417,
+ "1418" => 1418,
+ "1419" => 1419,
+ "1420" => 1420,
+ "1421" => 1421,
+ "1422" => 1422,
+ "1423" => 1423,
+ "1424" => 1424,
+ "1425" => 1425,
+ "1426" => 1426,
+ "1427" => 1427,
+ "1428" => 1428,
+ "1429" => 1429,
+ "1430" => 1430,
+ "1431" => 1431,
+ "1432" => 1432,
+ "1433" => 1433,
+ "1434" => 1434,
+ "1435" => 1435,
+ "1436" => 1436,
+ "1437" => 1437,
+ "1438" => 1438,
+ "1439" => 1439,
+ "1440" => 1440,
+ "1441" => 1441,
+ "1442" => 1442,
+ "1443" => 1443,
+ "1444" => 1444,
+ "1445" => 1445,
+ "1446" => 1446,
+ "1447" => 1447,
+ "1448" => 1448,
+ "1449" => 1449,
+ "1450" => 1450,
+ "1451" => 1451,
+ "1452" => 1452,
+ "1453" => 1453,
+ "1454" => 1454,
+ "1455" => 1455,
+ "1456" => 1456,
+ "1457" => 1457,
+ "1458" => 1458,
+ "1459" => 1459,
+ "1460" => 1460,
+ "1461" => 1461,
+ "1462" => 1462,
+ "1463" => 1463,
+ "1464" => 1464,
+ "1465" => 1465,
+ "1466" => 1466,
+ "1467" => 1467,
+ "1468" => 1468,
+ "1469" => 1469,
+ "1470" => 1470,
+ "1471" => 1471,
+ "1472" => 1472,
+ "1473" => 1473,
+ "1474" => 1474,
+ "1475" => 1475,
+ "1476" => 1476,
+ "1477" => 1477,
+ "1478" => 1478,
+ "1479" => 1479,
+ "1480" => 1480,
+ "1481" => 1481,
+ "1482" => 1482,
+ "1483" => 1483,
+ "1484" => 1484,
+ "1485" => 1485,
+ "1486" => 1486,
+ "1487" => 1487,
+ "1488" => 1488,
+ "1489" => 1489,
+ "1490" => 1490,
+ "1491" => 1491,
+ "1492" => 1492,
+ "1493" => 1493,
+ "1494" => 1494,
+ "1495" => 1495,
+ "1496" => 1496,
+ "1497" => 1497,
+ "1498" => 1498,
+ "1499" => 1499,
+ "1500" => 1500,
+ "1501" => 1501,
+ "1502" => 1502,
+ "1503" => 1503,
+ "1504" => 1504,
+ "1505" => 1505,
+ "1506" => 1506,
+ "1507" => 1507,
+ "1508" => 1508,
+ "1509" => 1509,
+ "1510" => 1510,
+ "1511" => 1511,
+ "1512" => 1512,
+ "1513" => 1513,
+ "1514" => 1514,
+ "1515" => 1515,
+ "1516" => 1516,
+ "1517" => 1517,
+ "1518" => 1518,
+ "1519" => 1519,
+ "1520" => 1520,
+ "1521" => 1521,
+ "1522" => 1522,
+ "1523" => 1523,
+ "1524" => 1524,
+ "1525" => 1525,
+ "1526" => 1526,
+ "1527" => 1527,
+ "1528" => 1528,
+ "1529" => 1529,
+ "1530" => 1530,
+ "1531" => 1531,
+ "1532" => 1532,
+ "1533" => 1533,
+ "1534" => 1534,
+ "1535" => 1535,
+ "1536" => 1536,
+ "1537" => 1537,
+ "1538" => 1538,
+ "1539" => 1539,
+ "1540" => 1540,
+ "1541" => 1541,
+ "1542" => 1542,
+ "1543" => 1543,
+ "1544" => 1544,
+ "1545" => 1545,
+ "1546" => 1546,
+ "1547" => 1547,
+ "1548" => 1548,
+ "1549" => 1549,
+ "1550" => 1550,
+ "1551" => 1551,
+ "1552" => 1552,
+ "1553" => 1553,
+ "1554" => 1554,
+ "1555" => 1555,
+ "1556" => 1556,
+ "1557" => 1557,
+ "1558" => 1558,
+ "1559" => 1559,
+ "1560" => 1560,
+ "1561" => 1561,
+ "1562" => 1562,
+ "1563" => 1563,
+ "1564" => 1564,
+ "1565" => 1565,
+ "1566" => 1566,
+ "1567" => 1567,
+ "1568" => 1568,
+ "1569" => 1569,
+ "1570" => 1570,
+ "1571" => 1571,
+ "1572" => 1572,
+ "1573" => 1573,
+ "1574" => 1574,
+ "1575" => 1575,
+ "1576" => 1576,
+ "1577" => 1577,
+ "1578" => 1578,
+ "1579" => 1579,
+ "1580" => 1580,
+ "1581" => 1581,
+ "1582" => 1582,
+ "1583" => 1583,
+ "1584" => 1584,
+ "1585" => 1585,
+ "1586" => 1586,
+ "1587" => 1587,
+ "1588" => 1588,
+ "1589" => 1589,
+ "1590" => 1590,
+ "1591" => 1591,
+ "1592" => 1592,
+ "1593" => 1593,
+ "1594" => 1594,
+ "1595" => 1595,
+ "1596" => 1596,
+ "1597" => 1597,
+ "1598" => 1598,
+ "1599" => 1599,
+ "1600" => 1600,
+ "1601" => 1601,
+ "1602" => 1602,
+ "1603" => 1603,
+ "1604" => 1604,
+ "1605" => 1605,
+ "1606" => 1606,
+ "1607" => 1607,
+ "1608" => 1608,
+ "1609" => 1609,
+ "1610" => 1610,
+ "1611" => 1611,
+ "1612" => 1612,
+ "1613" => 1613,
+ "1614" => 1614,
+ "1615" => 1615,
+ "1616" => 1616,
+ "1617" => 1617,
+ "1618" => 1618,
+ "1619" => 1619,
+ "1620" => 1620,
+ "1621" => 1621,
+ "1622" => 1622,
+ "1623" => 1623,
+ "1624" => 1624,
+ "1625" => 1625,
+ "1626" => 1626,
+ "1627" => 1627,
+ "1628" => 1628,
+ "1629" => 1629,
+ "1630" => 1630,
+ "1631" => 1631,
+ "1632" => 1632,
+ "1633" => 1633,
+ "1634" => 1634,
+ "1635" => 1635,
+ "1636" => 1636,
+ "1637" => 1637,
+ "1638" => 1638,
+ "1639" => 1639,
+ "1640" => 1640,
+ "1641" => 1641,
+ "1642" => 1642,
+ "1643" => 1643,
+ "1644" => 1644,
+ "1645" => 1645,
+ "1646" => 1646,
+ "1647" => 1647,
+ "1648" => 1648,
+ "1649" => 1649,
+ "1650" => 1650,
+ "1651" => 1651,
+ "1652" => 1652,
+ "1653" => 1653,
+ "1654" => 1654,
+ "1655" => 1655,
+ "1656" => 1656,
+ "1657" => 1657,
+ "1658" => 1658,
+ "1659" => 1659,
+ "1660" => 1660,
+ "1661" => 1661,
+ "1662" => 1662,
+ "1663" => 1663,
+ "1664" => 1664,
+ "1665" => 1665,
+ "1666" => 1666,
+ "1667" => 1667,
+ "1668" => 1668,
+ "1669" => 1669,
+ "1670" => 1670,
+ "1671" => 1671,
+ "1672" => 1672,
+ "1673" => 1673,
+ "1674" => 1674,
+ "1675" => 1675,
+ "1676" => 1676,
+ "1677" => 1677,
+ "1678" => 1678,
+ "1679" => 1679,
+ "1680" => 1680,
+ "1681" => 1681,
+ "1682" => 1682,
+ "1683" => 1683,
+ "1684" => 1684,
+ "1685" => 1685,
+ "1686" => 1686,
+ "1687" => 1687,
+ "1688" => 1688,
+ "1689" => 1689,
+ "1690" => 1690,
+ "1691" => 1691,
+ "1692" => 1692,
+ "1693" => 1693,
+ "1694" => 1694,
+ "1695" => 1695,
+ "1696" => 1696,
+ "1697" => 1697,
+ "1698" => 1698,
+ "1699" => 1699,
+ "1700" => 1700,
+ "1701" => 1701,
+ "1702" => 1702,
+ "1703" => 1703,
+ "1704" => 1704,
+ "1705" => 1705,
+ "1706" => 1706,
+ "1707" => 1707,
+ "1708" => 1708,
+ "1709" => 1709,
+ "1710" => 1710,
+ "1711" => 1711,
+ "1712" => 1712,
+ "1713" => 1713,
+ "1714" => 1714,
+ "1715" => 1715,
+ "1716" => 1716,
+ "1717" => 1717,
+ "1718" => 1718,
+ "1719" => 1719,
+ "1720" => 1720,
+ "1721" => 1721,
+ "1722" => 1722,
+ "1723" => 1723,
+ "1724" => 1724,
+ "1725" => 1725,
+ "1726" => 1726,
+ "1727" => 1727,
+ "1728" => 1728,
+ "1729" => 1729,
+ "1730" => 1730,
+ "1731" => 1731,
+ "1732" => 1732,
+ "1733" => 1733,
+ "1734" => 1734,
+ "1735" => 1735,
+ "1736" => 1736,
+ "1737" => 1737,
+ "1738" => 1738,
+ "1739" => 1739,
+ "1740" => 1740,
+ "1741" => 1741,
+ "1742" => 1742,
+ "1743" => 1743,
+ "1744" => 1744,
+ "1745" => 1745,
+ "1746" => 1746,
+ "1747" => 1747,
+ "1748" => 1748,
+ "1749" => 1749,
+ "1750" => 1750,
+ "1751" => 1751,
+ "1752" => 1752,
+ "1753" => 1753,
+ "1754" => 1754,
+ "1755" => 1755,
+ "1756" => 1756,
+ "1757" => 1757,
+ "1758" => 1758,
+ "1759" => 1759,
+ "1760" => 1760,
+ "1761" => 1761,
+ "1762" => 1762,
+ "1763" => 1763,
+ "1764" => 1764,
+ "1765" => 1765,
+ "1766" => 1766,
+ "1767" => 1767,
+ "1768" => 1768,
+ "1769" => 1769,
+ "1770" => 1770,
+ "1771" => 1771,
+ "1772" => 1772,
+ "1773" => 1773,
+ "1774" => 1774,
+ "1775" => 1775,
+ "1776" => 1776,
+ "1777" => 1777,
+ "1778" => 1778,
+ "1779" => 1779,
+ "1780" => 1780,
+ "1781" => 1781,
+ "1782" => 1782,
+ "1783" => 1783,
+ "1784" => 1784,
+ "1785" => 1785,
+ "1786" => 1786,
+ "1787" => 1787,
+ "1788" => 1788,
+ "1789" => 1789,
+ "1790" => 1790,
+ "1791" => 1791,
+ "1792" => 1792,
+ "1793" => 1793,
+ "1794" => 1794,
+ "1795" => 1795,
+ "1796" => 1796,
+ "1797" => 1797,
+ "1798" => 1798,
+ "1799" => 1799,
+ "1800" => 1800,
+ "1801" => 1801,
+ "1802" => 1802,
+ "1803" => 1803,
+ "1804" => 1804,
+ "1805" => 1805,
+ "1806" => 1806,
+ "1807" => 1807,
+ "1808" => 1808,
+ "1809" => 1809,
+ "1810" => 1810,
+ "1811" => 1811,
+ "1812" => 1812,
+ "1813" => 1813,
+ "1814" => 1814,
+ "1815" => 1815,
+ "1816" => 1816,
+ "1817" => 1817,
+ "1818" => 1818,
+ "1819" => 1819,
+ "1820" => 1820,
+ "1821" => 1821,
+ "1822" => 1822,
+ "1823" => 1823,
+ "1824" => 1824,
+ "1825" => 1825,
+ "1826" => 1826,
+ "1827" => 1827,
+ "1828" => 1828,
+ "1829" => 1829,
+ "1830" => 1830,
+ "1831" => 1831,
+ "1832" => 1832,
+ "1833" => 1833,
+ "1834" => 1834,
+ "1835" => 1835,
+ "1836" => 1836,
+ "1837" => 1837,
+ "1838" => 1838,
+ "1839" => 1839,
+ "1840" => 1840,
+ "1841" => 1841,
+ "1842" => 1842,
+ "1843" => 1843,
+ "1844" => 1844,
+ "1845" => 1845,
+ "1846" => 1846,
+ "1847" => 1847,
+ "1848" => 1848,
+ "1849" => 1849,
+ "1850" => 1850,
+ "1851" => 1851,
+ "1852" => 1852,
+ "1853" => 1853,
+ "1854" => 1854,
+ "1855" => 1855,
+ "1856" => 1856,
+ "1857" => 1857,
+ "1858" => 1858,
+ "1859" => 1859,
+ "1860" => 1860,
+ "1861" => 1861,
+ "1862" => 1862,
+ "1863" => 1863,
+ "1864" => 1864,
+ "1865" => 1865,
+ "1866" => 1866,
+ "1867" => 1867,
+ "1868" => 1868,
+ "1869" => 1869,
+ "1870" => 1870,
+ "1871" => 1871,
+ "1872" => 1872,
+ "1873" => 1873,
+ "1874" => 1874,
+ "1875" => 1875,
+ "1876" => 1876,
+ "1877" => 1877,
+ "1878" => 1878,
+ "1879" => 1879,
+ "1880" => 1880,
+ "1881" => 1881,
+ "1882" => 1882,
+ "1883" => 1883,
+ "1884" => 1884,
+ "1885" => 1885,
+ "1886" => 1886,
+ "1887" => 1887,
+ "1888" => 1888,
+ "1889" => 1889,
+ "1890" => 1890,
+ "1891" => 1891,
+ "1892" => 1892,
+ "1893" => 1893,
+ "1894" => 1894,
+ "1895" => 1895,
+ "1896" => 1896,
+ "1897" => 1897,
+ "1898" => 1898,
+ "1899" => 1899,
+ "1900" => 1900,
+ "1901" => 1901,
+ "1902" => 1902,
+ "1903" => 1903,
+ "1904" => 1904,
+ "1905" => 1905,
+ "1906" => 1906,
+ "1907" => 1907,
+ "1908" => 1908,
+ "1909" => 1909,
+ "1910" => 1910,
+ "1911" => 1911,
+ "1912" => 1912,
+ "1913" => 1913,
+ "1914" => 1914,
+ "1915" => 1915,
+ "1916" => 1916,
+ "1917" => 1917,
+ "1918" => 1918,
+ "1919" => 1919,
+ "1920" => 1920,
+ "1921" => 1921,
+ "1922" => 1922,
+ "1923" => 1923,
+ "1924" => 1924,
+ "1925" => 1925,
+ "1926" => 1926,
+ "1927" => 1927,
+ "1928" => 1928,
+ "1929" => 1929,
+ "1930" => 1930,
+ "1931" => 1931,
+ "1932" => 1932,
+ "1933" => 1933,
+ "1934" => 1934,
+ "1935" => 1935,
+ "1936" => 1936,
+ "1937" => 1937,
+ "1938" => 1938,
+ "1939" => 1939,
+ "1940" => 1940,
+ "1941" => 1941,
+ "1942" => 1942,
+ "1943" => 1943,
+ "1944" => 1944,
+ "1945" => 1945,
+ "1946" => 1946,
+ "1947" => 1947,
+ "1948" => 1948,
+ "1949" => 1949,
+ "1950" => 1950,
+ "1951" => 1951,
+ "1952" => 1952,
+ "1953" => 1953,
+ "1954" => 1954,
+ "1955" => 1955,
+ "1956" => 1956,
+ "1957" => 1957,
+ "1958" => 1958,
+ "1959" => 1959,
+ "1960" => 1960,
+ "1961" => 1961,
+ "1962" => 1962,
+ "1963" => 1963,
+ "1964" => 1964,
+ "1965" => 1965,
+ "1966" => 1966,
+ "1967" => 1967,
+ "1968" => 1968,
+ "1969" => 1969,
+ "1970" => 1970,
+ "1971" => 1971,
+ "1972" => 1972,
+ "1973" => 1973,
+ "1974" => 1974,
+ "1975" => 1975,
+ "1976" => 1976,
+ "1977" => 1977,
+ "1978" => 1978,
+ "1979" => 1979,
+ "1980" => 1980,
+ "1981" => 1981,
+ "1982" => 1982,
+ "1983" => 1983,
+ "1984" => 1984,
+ "1985" => 1985,
+ "1986" => 1986,
+ "1987" => 1987,
+ "1988" => 1988,
+ "1989" => 1989,
+ "1990" => 1990,
+ "1991" => 1991,
+ "1992" => 1992,
+ "1993" => 1993,
+ "1994" => 1994,
+ "1995" => 1995,
+ "1996" => 1996,
+ "1997" => 1997,
+ "1998" => 1998,
+ "1999" => 1999,
+ "2000" => 2000,
+ "2001" => 2001,
+ "2002" => 2002,
+ "2003" => 2003,
+ "2004" => 2004,
+ "2005" => 2005,
+ "2006" => 2006,
+ "2007" => 2007,
+ "2008" => 2008,
+ "2009" => 2009,
+ "2010" => 2010,
+ "2011" => 2011,
+ "2012" => 2012,
+ "2013" => 2013,
+ "2014" => 2014,
+ "2015" => 2015,
+ "2016" => 2016,
+ "2017" => 2017,
+ "2018" => 2018,
+ "2019" => 2019,
+ "2020" => 2020,
+ "2021" => 2021,
+ "2022" => 2022,
+ "2023" => 2023,
+ "2024" => 2024,
+ "2025" => 2025,
+ "2026" => 2026,
+ "2027" => 2027,
+ "2028" => 2028,
+ "2029" => 2029,
+ "2030" => 2030,
+ "2031" => 2031,
+ "2032" => 2032,
+ "2033" => 2033,
+ "2034" => 2034,
+ "2035" => 2035,
+ "2036" => 2036,
+ "2037" => 2037,
+ "2038" => 2038,
+ "2039" => 2039,
+ "2040" => 2040,
+ "2041" => 2041,
+ "2042" => 2042,
+ "2043" => 2043,
+ "2044" => 2044,
+ "2045" => 2045,
+ "2046" => 2046,
+ "2047" => 2047,
+ "2048" => 2048,
+ "2049" => 2049,
+ "2050" => 2050,
+ "2051" => 2051,
+ "2052" => 2052,
+ "2053" => 2053,
+ "2054" => 2054,
+ "2055" => 2055,
+ "2056" => 2056,
+ "2057" => 2057,
+ "2058" => 2058,
+ "2059" => 2059,
+ "2060" => 2060,
+ "2061" => 2061,
+ "2062" => 2062,
+ "2063" => 2063,
+ "2064" => 2064,
+ "2065" => 2065,
+ "2066" => 2066,
+ "2067" => 2067,
+ "2068" => 2068,
+ "2069" => 2069,
+ "2070" => 2070,
+ "2071" => 2071,
+ "2072" => 2072,
+ "2073" => 2073,
+ "2074" => 2074,
+ "2075" => 2075,
+ "2076" => 2076,
+ "2077" => 2077,
+ "2078" => 2078,
+ "2079" => 2079,
+ "2080" => 2080,
+ "2081" => 2081,
+ "2082" => 2082,
+ "2083" => 2083,
+ "2084" => 2084,
+ "2085" => 2085,
+ "2086" => 2086,
+ "2087" => 2087,
+ "2088" => 2088,
+ "2089" => 2089,
+ "2090" => 2090,
+ "2091" => 2091,
+ "2092" => 2092,
+ "2093" => 2093,
+ "2094" => 2094,
+ "2095" => 2095,
+ "2096" => 2096,
+ "2097" => 2097,
+ "2098" => 2098,
+ "2099" => 2099,
+ "2100" => 2100,
+ "2101" => 2101,
+ "2102" => 2102,
+ "2103" => 2103,
+ "2104" => 2104,
+ "2105" => 2105,
+ "2106" => 2106,
+ "2107" => 2107,
+ "2108" => 2108,
+ "2109" => 2109,
+ "2110" => 2110,
+ "2111" => 2111,
+ "2112" => 2112,
+ "2113" => 2113,
+ "2114" => 2114,
+ "2115" => 2115,
+ "2116" => 2116,
+ "2117" => 2117,
+ "2118" => 2118,
+ "2119" => 2119,
+ "2120" => 2120,
+ "2121" => 2121,
+ "2122" => 2122,
+ "2123" => 2123,
+ "2124" => 2124,
+ "2125" => 2125,
+ "2126" => 2126,
+ "2127" => 2127,
+ "2128" => 2128,
+ "2129" => 2129,
+ "2130" => 2130,
+ "2131" => 2131,
+ "2132" => 2132,
+ "2133" => 2133,
+ "2134" => 2134,
+ "2135" => 2135,
+ "2136" => 2136,
+ "2137" => 2137,
+ "2138" => 2138,
+ "2139" => 2139,
+ "2140" => 2140,
+ "2141" => 2141,
+ "2142" => 2142,
+ "2143" => 2143,
+ "2144" => 2144,
+ "2145" => 2145,
+ "2146" => 2146,
+ "2147" => 2147,
+ "2148" => 2148,
+ "2149" => 2149,
+ "2150" => 2150,
+ "2151" => 2151,
+ "2152" => 2152,
+ "2153" => 2153,
+ "2154" => 2154,
+ "2155" => 2155,
+ "2156" => 2156,
+ "2157" => 2157,
+ "2158" => 2158,
+ "2159" => 2159,
+ "2160" => 2160,
+ "2161" => 2161,
+ "2162" => 2162,
+ "2163" => 2163,
+ "2164" => 2164,
+ "2165" => 2165,
+ "2166" => 2166,
+ "2167" => 2167,
+ "2168" => 2168,
+ "2169" => 2169,
+ "2170" => 2170,
+ "2171" => 2171,
+ "2172" => 2172,
+ "2173" => 2173,
+ "2174" => 2174,
+ "2175" => 2175,
+ "2176" => 2176,
+ "2177" => 2177,
+ "2178" => 2178,
+ "2179" => 2179,
+ "2180" => 2180,
+ "2181" => 2181,
+ "2182" => 2182,
+ "2183" => 2183,
+ "2184" => 2184,
+ "2185" => 2185,
+ "2186" => 2186,
+ "2187" => 2187,
+ "2188" => 2188,
+ "2189" => 2189,
+ "2190" => 2190,
+ "2191" => 2191,
+ "2192" => 2192,
+ "2193" => 2193,
+ "2194" => 2194,
+ "2195" => 2195,
+ "2196" => 2196,
+ "2197" => 2197,
+ "2198" => 2198,
+ "2199" => 2199,
+ "2200" => 2200,
+ "2201" => 2201,
+ "2202" => 2202,
+ "2203" => 2203,
+ "2204" => 2204,
+ "2205" => 2205,
+ "2206" => 2206,
+ "2207" => 2207,
+ "2208" => 2208,
+ "2209" => 2209,
+ "2210" => 2210,
+ "2211" => 2211,
+ "2212" => 2212,
+ "2213" => 2213,
+ "2214" => 2214,
+ "2215" => 2215,
+ "2216" => 2216,
+ "2217" => 2217,
+ "2218" => 2218,
+ "2219" => 2219,
+ "2220" => 2220,
+ "2221" => 2221,
+ "2222" => 2222,
+ "2223" => 2223,
+ "2224" => 2224,
+ "2225" => 2225,
+ "2226" => 2226,
+ "2227" => 2227,
+ "2228" => 2228,
+ "2229" => 2229,
+ "2230" => 2230,
+ "2231" => 2231,
+ "2232" => 2232,
+ "2233" => 2233,
+ "2234" => 2234,
+ "2235" => 2235,
+ "2236" => 2236,
+ "2237" => 2237,
+ "2238" => 2238,
+ "2239" => 2239,
+ "2240" => 2240,
+ "2241" => 2241,
+ "2242" => 2242,
+ "2243" => 2243,
+ "2244" => 2244,
+ "2245" => 2245,
+ "2246" => 2246,
+ "2247" => 2247,
+ "2248" => 2248,
+ "2249" => 2249,
+ "2250" => 2250,
+ "2251" => 2251,
+ "2252" => 2252,
+ "2253" => 2253,
+ "2254" => 2254,
+ "2255" => 2255,
+ "2256" => 2256,
+ "2257" => 2257,
+ "2258" => 2258,
+ "2259" => 2259,
+ "2260" => 2260,
+ "2261" => 2261,
+ "2262" => 2262,
+ "2263" => 2263,
+ "2264" => 2264,
+ "2265" => 2265,
+ "2266" => 2266,
+ "2267" => 2267,
+ "2268" => 2268,
+ "2269" => 2269,
+ "2270" => 2270,
+ "2271" => 2271,
+ "2272" => 2272,
+ "2273" => 2273,
+ "2274" => 2274,
+ "2275" => 2275,
+ "2276" => 2276,
+ "2277" => 2277,
+ "2278" => 2278,
+ "2279" => 2279,
+ "2280" => 2280,
+ "2281" => 2281,
+ "2282" => 2282,
+ "2283" => 2283,
+ "2284" => 2284,
+ "2285" => 2285,
+ "2286" => 2286,
+ "2287" => 2287,
+ "2288" => 2288,
+ "2289" => 2289,
+ "2290" => 2290,
+ "2291" => 2291,
+ "2292" => 2292,
+ "2293" => 2293,
+ "2294" => 2294,
+ "2295" => 2295,
+ "2296" => 2296,
+ "2297" => 2297,
+ "2298" => 2298,
+ "2299" => 2299,
+ "2300" => 2300,
+ "2301" => 2301,
+ "2302" => 2302,
+ "2303" => 2303,
+ "2304" => 2304,
+ "2305" => 2305,
+ "2306" => 2306,
+ "2307" => 2307,
+ "2308" => 2308,
+ "2309" => 2309,
+ "2310" => 2310,
+ "2311" => 2311,
+ "2312" => 2312,
+ "2313" => 2313,
+ "2314" => 2314,
+ "2315" => 2315,
+ "2316" => 2316,
+ "2317" => 2317,
+ "2318" => 2318,
+ "2319" => 2319,
+ "2320" => 2320,
+ "2321" => 2321,
+ "2322" => 2322,
+ "2323" => 2323,
+ "2324" => 2324,
+ "2325" => 2325,
+ "2326" => 2326,
+ "2327" => 2327,
+ "2328" => 2328,
+ "2329" => 2329,
+ "2330" => 2330,
+ "2331" => 2331,
+ "2332" => 2332,
+ "2333" => 2333,
+ "2334" => 2334,
+ "2335" => 2335,
+ "2336" => 2336,
+ "2337" => 2337,
+ "2338" => 2338,
+ "2339" => 2339,
+ "2340" => 2340,
+ "2341" => 2341,
+ "2342" => 2342,
+ "2343" => 2343,
+ "2344" => 2344,
+ "2345" => 2345,
+ "2346" => 2346,
+ "2347" => 2347,
+ "2348" => 2348,
+ "2349" => 2349,
+ "2350" => 2350,
+ "2351" => 2351,
+ "2352" => 2352,
+ "2353" => 2353,
+ "2354" => 2354,
+ "2355" => 2355,
+ "2356" => 2356,
+ "2357" => 2357,
+ "2358" => 2358,
+ "2359" => 2359,
+ "2360" => 2360,
+ "2361" => 2361,
+ "2362" => 2362,
+ "2363" => 2363,
+ "2364" => 2364,
+ "2365" => 2365,
+ "2366" => 2366,
+ "2367" => 2367,
+ "2368" => 2368,
+ "2369" => 2369,
+ "2370" => 2370,
+ "2371" => 2371,
+ "2372" => 2372,
+ "2373" => 2373,
+ "2374" => 2374,
+ "2375" => 2375,
+ "2376" => 2376,
+ "2377" => 2377,
+ "2378" => 2378,
+ "2379" => 2379,
+ "2380" => 2380,
+ "2381" => 2381,
+ "2382" => 2382,
+ "2383" => 2383,
+ "2384" => 2384,
+ "2385" => 2385,
+ "2386" => 2386,
+ "2387" => 2387,
+ "2388" => 2388,
+ "2389" => 2389,
+ "2390" => 2390,
+ "2391" => 2391,
+ "2392" => 2392,
+ "2393" => 2393,
+ "2394" => 2394,
+ "2395" => 2395,
+ "2396" => 2396,
+ "2397" => 2397,
+ "2398" => 2398,
+ "2399" => 2399,
+ "2400" => 2400,
+ "2401" => 2401,
+ "2402" => 2402,
+ "2403" => 2403,
+ "2404" => 2404,
+ "2405" => 2405,
+ "2406" => 2406,
+ "2407" => 2407,
+ "2408" => 2408,
+ "2409" => 2409,
+ "2410" => 2410,
+ "2411" => 2411,
+ "2412" => 2412,
+ "2413" => 2413,
+ "2414" => 2414,
+ "2415" => 2415,
+ "2416" => 2416,
+ "2417" => 2417,
+ "2418" => 2418,
+ "2419" => 2419,
+ "2420" => 2420,
+ "2421" => 2421,
+ "2422" => 2422,
+ "2423" => 2423,
+ "2424" => 2424,
+ "2425" => 2425,
+ "2426" => 2426,
+ "2427" => 2427,
+ "2428" => 2428,
+ "2429" => 2429,
+ "2430" => 2430,
+ "2431" => 2431,
+ "2432" => 2432,
+ "2433" => 2433,
+ "2434" => 2434,
+ "2435" => 2435,
+ "2436" => 2436,
+ "2437" => 2437,
+ "2438" => 2438,
+ "2439" => 2439,
+ "2440" => 2440,
+ "2441" => 2441,
+ "2442" => 2442,
+ "2443" => 2443,
+ "2444" => 2444,
+ "2445" => 2445,
+ "2446" => 2446,
+ "2447" => 2447,
+ "2448" => 2448,
+ "2449" => 2449,
+ "2450" => 2450,
+ "2451" => 2451,
+ "2452" => 2452,
+ "2453" => 2453,
+ "2454" => 2454,
+ "2455" => 2455,
+ "2456" => 2456,
+ "2457" => 2457,
+ "2458" => 2458,
+ "2459" => 2459,
+ "2460" => 2460,
+ "2461" => 2461,
+ "2462" => 2462,
+ "2463" => 2463,
+ "2464" => 2464,
+ "2465" => 2465,
+ "2466" => 2466,
+ "2467" => 2467,
+ "2468" => 2468,
+ "2469" => 2469,
+ "2470" => 2470,
+ "2471" => 2471,
+ "2472" => 2472,
+ "2473" => 2473,
+ "2474" => 2474,
+ "2475" => 2475,
+ "2476" => 2476,
+ "2477" => 2477,
+ "2478" => 2478,
+ "2479" => 2479,
+ "2480" => 2480,
+ "2481" => 2481,
+ "2482" => 2482,
+ "2483" => 2483,
+ "2484" => 2484,
+ "2485" => 2485,
+ "2486" => 2486,
+ "2487" => 2487,
+ "2488" => 2488,
+ "2489" => 2489,
+ "2490" => 2490,
+ "2491" => 2491,
+ "2492" => 2492,
+ "2493" => 2493,
+ "2494" => 2494,
+ "2495" => 2495,
+ "2496" => 2496,
+ "2497" => 2497,
+ "2498" => 2498,
+ "2499" => 2499,
+ "2500" => 2500,
+ "2501" => 2501,
+ "2502" => 2502,
+ "2503" => 2503,
+ "2504" => 2504,
+ "2505" => 2505,
+ "2506" => 2506,
+ "2507" => 2507,
+ "2508" => 2508,
+ "2509" => 2509,
+ "2510" => 2510,
+ "2511" => 2511,
+ "2512" => 2512,
+ "2513" => 2513,
+ "2514" => 2514,
+ "2515" => 2515,
+ "2516" => 2516,
+ "2517" => 2517,
+ "2518" => 2518,
+ "2519" => 2519,
+ "2520" => 2520,
+ "2521" => 2521,
+ "2522" => 2522,
+ "2523" => 2523,
+ "2524" => 2524,
+ "2525" => 2525,
+ "2526" => 2526,
+ "2527" => 2527,
+ "2528" => 2528,
+ "2529" => 2529,
+ "2530" => 2530,
+ "2531" => 2531,
+ "2532" => 2532,
+ "2533" => 2533,
+ "2534" => 2534,
+ "2535" => 2535,
+ "2536" => 2536,
+ "2537" => 2537,
+ "2538" => 2538,
+ "2539" => 2539,
+ "2540" => 2540,
+ "2541" => 2541,
+ "2542" => 2542,
+ "2543" => 2543,
+ "2544" => 2544,
+ "2545" => 2545,
+ "2546" => 2546,
+ "2547" => 2547,
+ "2548" => 2548,
+ "2549" => 2549,
+ "2550" => 2550,
+ "2551" => 2551,
+ "2552" => 2552,
+ "2553" => 2553,
+ "2554" => 2554,
+ "2555" => 2555,
+ "2556" => 2556,
+ "2557" => 2557,
+ "2558" => 2558,
+ "2559" => 2559,
+ "2560" => 2560,
+ "2561" => 2561,
+ "2562" => 2562,
+ "2563" => 2563,
+ "2564" => 2564,
+ "2565" => 2565,
+ "2566" => 2566,
+ "2567" => 2567,
+ "2568" => 2568,
+ "2569" => 2569,
+ "2570" => 2570,
+ "2571" => 2571,
+ "2572" => 2572,
+ "2573" => 2573,
+ "2574" => 2574,
+ "2575" => 2575,
+ "2576" => 2576,
+ "2577" => 2577,
+ "2578" => 2578,
+ "2579" => 2579,
+ "2580" => 2580,
+ "2581" => 2581,
+ "2582" => 2582,
+ "2583" => 2583,
+ "2584" => 2584,
+ "2585" => 2585,
+ "2586" => 2586,
+ "2587" => 2587,
+ "2588" => 2588,
+ "2589" => 2589,
+ "2590" => 2590,
+ "2591" => 2591,
+ "2592" => 2592,
+ "2593" => 2593,
+ "2594" => 2594,
+ "2595" => 2595,
+ "2596" => 2596,
+ "2597" => 2597,
+ "2598" => 2598,
+ "2599" => 2599,
+ "2600" => 2600,
+ "2601" => 2601,
+ "2602" => 2602,
+ "2603" => 2603,
+ "2604" => 2604,
+ "2605" => 2605,
+ "2606" => 2606,
+ "2607" => 2607,
+ "2608" => 2608,
+ "2609" => 2609,
+ "2610" => 2610,
+ "2611" => 2611,
+ "2612" => 2612,
+ "2613" => 2613,
+ "2614" => 2614,
+ "2615" => 2615,
+ "2616" => 2616,
+ "2617" => 2617,
+ "2618" => 2618,
+ "2619" => 2619,
+ "2620" => 2620,
+ "2621" => 2621,
+ "2622" => 2622,
+ "2623" => 2623,
+ "2624" => 2624,
+ "2625" => 2625,
+ "2626" => 2626,
+ "2627" => 2627,
+ "2628" => 2628,
+ "2629" => 2629,
+ "2630" => 2630,
+ "2631" => 2631,
+ "2632" => 2632,
+ "2633" => 2633,
+ "2634" => 2634,
+ "2635" => 2635,
+ "2636" => 2636,
+ "2637" => 2637,
+ "2638" => 2638,
+ "2639" => 2639,
+ "2640" => 2640,
+ "2641" => 2641,
+ "2642" => 2642,
+ "2643" => 2643,
+ "2644" => 2644,
+ "2645" => 2645,
+ "2646" => 2646,
+ "2647" => 2647,
+ "2648" => 2648,
+ "2649" => 2649,
+ "2650" => 2650,
+ "2651" => 2651,
+ "2652" => 2652,
+ "2653" => 2653,
+ "2654" => 2654,
+ "2655" => 2655,
+ "2656" => 2656,
+ "2657" => 2657,
+ "2658" => 2658,
+ "2659" => 2659,
+ "2660" => 2660,
+ "2661" => 2661,
+ "2662" => 2662,
+ "2663" => 2663,
+ "2664" => 2664,
+ "2665" => 2665,
+ "2666" => 2666,
+ "2667" => 2667,
+ "2668" => 2668,
+ "2669" => 2669,
+ "2670" => 2670,
+ "2671" => 2671,
+ "2672" => 2672,
+ "2673" => 2673,
+ "2674" => 2674,
+ "2675" => 2675,
+ "2676" => 2676,
+ "2677" => 2677,
+ "2678" => 2678,
+ "2679" => 2679,
+ "2680" => 2680,
+ "2681" => 2681,
+ "2682" => 2682,
+ "2683" => 2683,
+ "2684" => 2684,
+ "2685" => 2685,
+ "2686" => 2686,
+ "2687" => 2687,
+ "2688" => 2688,
+ "2689" => 2689,
+ "2690" => 2690,
+ "2691" => 2691,
+ "2692" => 2692,
+ "2693" => 2693,
+ "2694" => 2694,
+ "2695" => 2695,
+ "2696" => 2696,
+ "2697" => 2697,
+ "2698" => 2698,
+ "2699" => 2699,
+ "2700" => 2700,
+ "2701" => 2701,
+ "2702" => 2702,
+ "2703" => 2703,
+ "2704" => 2704,
+ "2705" => 2705,
+ "2706" => 2706,
+ "2707" => 2707,
+ "2708" => 2708,
+ "2709" => 2709,
+ "2710" => 2710,
+ "2711" => 2711,
+ "2712" => 2712,
+ "2713" => 2713,
+ "2714" => 2714,
+ "2715" => 2715,
+ "2716" => 2716,
+ "2717" => 2717,
+ "2718" => 2718,
+ "2719" => 2719,
+ "2720" => 2720,
+ "2721" => 2721,
+ "2722" => 2722,
+ "2723" => 2723,
+ "2724" => 2724,
+ "2725" => 2725,
+ "2726" => 2726,
+ "2727" => 2727,
+ "2728" => 2728,
+ "2729" => 2729,
+ "2730" => 2730,
+ "2731" => 2731,
+ "2732" => 2732,
+ "2733" => 2733,
+ "2734" => 2734,
+ "2735" => 2735,
+ "2736" => 2736,
+ "2737" => 2737,
+ "2738" => 2738,
+ "2739" => 2739,
+ "2740" => 2740,
+ "2741" => 2741,
+ "2742" => 2742,
+ "2743" => 2743,
+ "2744" => 2744,
+ "2745" => 2745,
+ "2746" => 2746,
+ "2747" => 2747,
+ "2748" => 2748,
+ "2749" => 2749,
+ "2750" => 2750,
+ "2751" => 2751,
+ "2752" => 2752,
+ "2753" => 2753,
+ "2754" => 2754,
+ "2755" => 2755,
+ "2756" => 2756,
+ "2757" => 2757,
+ "2758" => 2758,
+ "2759" => 2759,
+ "2760" => 2760,
+ "2761" => 2761,
+ "2762" => 2762,
+ "2763" => 2763,
+ "2764" => 2764,
+ "2765" => 2765,
+ "2766" => 2766,
+ "2767" => 2767,
+ "2768" => 2768,
+ "2769" => 2769,
+ "2770" => 2770,
+ "2771" => 2771,
+ "2772" => 2772,
+ "2773" => 2773,
+ "2774" => 2774,
+ "2775" => 2775,
+ "2776" => 2776,
+ "2777" => 2777,
+ "2778" => 2778,
+ "2779" => 2779,
+ "2780" => 2780,
+ "2781" => 2781,
+ "2782" => 2782,
+ "2783" => 2783,
+ "2784" => 2784,
+ "2785" => 2785,
+ "2786" => 2786,
+ "2787" => 2787,
+ "2788" => 2788,
+ "2789" => 2789,
+ "2790" => 2790,
+ "2791" => 2791,
+ "2792" => 2792,
+ "2793" => 2793,
+ "2794" => 2794,
+ "2795" => 2795,
+ "2796" => 2796,
+ "2797" => 2797,
+ "2798" => 2798,
+ "2799" => 2799,
+ "2800" => 2800,
+ "2801" => 2801,
+ "2802" => 2802,
+ "2803" => 2803,
+ "2804" => 2804,
+ "2805" => 2805,
+ "2806" => 2806,
+ "2807" => 2807,
+ "2808" => 2808,
+ "2809" => 2809,
+ "2810" => 2810,
+ "2811" => 2811,
+ "2812" => 2812,
+ "2813" => 2813,
+ "2814" => 2814,
+ "2815" => 2815,
+ "2816" => 2816,
+ "2817" => 2817,
+ "2818" => 2818,
+ "2819" => 2819,
+ "2820" => 2820,
+ "2821" => 2821,
+ "2822" => 2822,
+ "2823" => 2823,
+ "2824" => 2824,
+ "2825" => 2825,
+ "2826" => 2826,
+ "2827" => 2827,
+ "2828" => 2828,
+ "2829" => 2829,
+ "2830" => 2830,
+ "2831" => 2831,
+ "2832" => 2832,
+ "2833" => 2833,
+ "2834" => 2834,
+ "2835" => 2835,
+ "2836" => 2836,
+ "2837" => 2837,
+ "2838" => 2838,
+ "2839" => 2839,
+ "2840" => 2840,
+ "2841" => 2841,
+ "2842" => 2842,
+ "2843" => 2843,
+ "2844" => 2844,
+ "2845" => 2845,
+ "2846" => 2846,
+ "2847" => 2847,
+ "2848" => 2848,
+ "2849" => 2849,
+ "2850" => 2850,
+ "2851" => 2851,
+ "2852" => 2852,
+ "2853" => 2853,
+ "2854" => 2854,
+ "2855" => 2855,
+ "2856" => 2856,
+ "2857" => 2857,
+ "2858" => 2858,
+ "2859" => 2859,
+ "2860" => 2860,
+ "2861" => 2861,
+ "2862" => 2862,
+ "2863" => 2863,
+ "2864" => 2864,
+ "2865" => 2865,
+ "2866" => 2866,
+ "2867" => 2867,
+ "2868" => 2868,
+ "2869" => 2869,
+ "2870" => 2870,
+ "2871" => 2871,
+ "2872" => 2872,
+ "2873" => 2873,
+ "2874" => 2874,
+ "2875" => 2875,
+ "2876" => 2876,
+ "2877" => 2877,
+ "2878" => 2878,
+ "2879" => 2879,
+ "2880" => 2880,
+ "2881" => 2881,
+ "2882" => 2882,
+ "2883" => 2883,
+ "2884" => 2884,
+ "2885" => 2885,
+ "2886" => 2886,
+ "2887" => 2887,
+ "2888" => 2888,
+ "2889" => 2889,
+ "2890" => 2890,
+ "2891" => 2891,
+ "2892" => 2892,
+ "2893" => 2893,
+ "2894" => 2894,
+ "2895" => 2895,
+ "2896" => 2896,
+ "2897" => 2897,
+ "2898" => 2898,
+ "2899" => 2899,
+ "2900" => 2900,
+ "2901" => 2901,
+ "2902" => 2902,
+ "2903" => 2903,
+ "2904" => 2904,
+ "2905" => 2905,
+ "2906" => 2906,
+ "2907" => 2907,
+ "2908" => 2908,
+ "2909" => 2909,
+ "2910" => 2910,
+ "2911" => 2911,
+ "2912" => 2912,
+ "2913" => 2913,
+ "2914" => 2914,
+ "2915" => 2915,
+ "2916" => 2916,
+ "2917" => 2917,
+ "2918" => 2918,
+ "2919" => 2919,
+ "2920" => 2920,
+ "2921" => 2921,
+ "2922" => 2922,
+ "2923" => 2923,
+ "2924" => 2924,
+ "2925" => 2925,
+ "2926" => 2926,
+ "2927" => 2927,
+ "2928" => 2928,
+ "2929" => 2929,
+ "2930" => 2930,
+ "2931" => 2931,
+ "2932" => 2932,
+ "2933" => 2933,
+ "2934" => 2934,
+ "2935" => 2935,
+ "2936" => 2936,
+ "2937" => 2937,
+ "2938" => 2938,
+ "2939" => 2939,
+ "2940" => 2940,
+ "2941" => 2941,
+ "2942" => 2942,
+ "2943" => 2943,
+ "2944" => 2944,
+ "2945" => 2945,
+ "2946" => 2946,
+ "2947" => 2947,
+ "2948" => 2948,
+ "2949" => 2949,
+ "2950" => 2950,
+ "2951" => 2951,
+ "2952" => 2952,
+ "2953" => 2953,
+ "2954" => 2954,
+ "2955" => 2955,
+ "2956" => 2956,
+ "2957" => 2957,
+ "2958" => 2958,
+ "2959" => 2959,
+ "2960" => 2960,
+ "2961" => 2961,
+ "2962" => 2962,
+ "2963" => 2963,
+ "2964" => 2964,
+ "2965" => 2965,
+ "2966" => 2966,
+ "2967" => 2967,
+ "2968" => 2968,
+ "2969" => 2969,
+ "2970" => 2970,
+ "2971" => 2971,
+ "2972" => 2972,
+ "2973" => 2973,
+ "2974" => 2974,
+ "2975" => 2975,
+ "2976" => 2976,
+ "2977" => 2977,
+ "2978" => 2978,
+ "2979" => 2979,
+ "2980" => 2980,
+ "2981" => 2981,
+ "2982" => 2982,
+ "2983" => 2983,
+ "2984" => 2984,
+ "2985" => 2985,
+ "2986" => 2986,
+ "2987" => 2987,
+ "2988" => 2988,
+ "2989" => 2989,
+ "2990" => 2990,
+ "2991" => 2991,
+ "2992" => 2992,
+ "2993" => 2993,
+ "2994" => 2994,
+ "2995" => 2995,
+ "2996" => 2996,
+ "2997" => 2997,
+ "2998" => 2998,
+ "2999" => 2999,
+ "3000" => 3000,
+ "3001" => 3001,
+ "3002" => 3002,
+ "3003" => 3003,
+ "3004" => 3004,
+ "3005" => 3005,
+ "3006" => 3006,
+ "3007" => 3007,
+ "3008" => 3008,
+ "3009" => 3009,
+ "3010" => 3010,
+ "3011" => 3011,
+ "3012" => 3012,
+ "3013" => 3013,
+ "3014" => 3014,
+ "3015" => 3015,
+ "3016" => 3016,
+ "3017" => 3017,
+ "3018" => 3018,
+ "3019" => 3019,
+ "3020" => 3020,
+ "3021" => 3021,
+ "3022" => 3022,
+ "3023" => 3023,
+ "3024" => 3024,
+ "3025" => 3025,
+ "3026" => 3026,
+ "3027" => 3027,
+ "3028" => 3028,
+ "3029" => 3029,
+ "3030" => 3030,
+ "3031" => 3031,
+ "3032" => 3032,
+ "3033" => 3033,
+ "3034" => 3034,
+ "3035" => 3035,
+ "3036" => 3036,
+ "3037" => 3037,
+ "3038" => 3038,
+ "3039" => 3039,
+ "3040" => 3040,
+ "3041" => 3041,
+ "3042" => 3042,
+ "3043" => 3043,
+ "3044" => 3044,
+ "3045" => 3045,
+ "3046" => 3046,
+ "3047" => 3047,
+ "3048" => 3048,
+ "3049" => 3049,
+ "3050" => 3050,
+ "3051" => 3051,
+ "3052" => 3052,
+ "3053" => 3053,
+ "3054" => 3054,
+ "3055" => 3055,
+ "3056" => 3056,
+ "3057" => 3057,
+ "3058" => 3058,
+ "3059" => 3059,
+ "3060" => 3060,
+ "3061" => 3061,
+ "3062" => 3062,
+ "3063" => 3063,
+ "3064" => 3064,
+ "3065" => 3065,
+ "3066" => 3066,
+ "3067" => 3067,
+ "3068" => 3068,
+ "3069" => 3069,
+ "3070" => 3070,
+ "3071" => 3071,
+ "3072" => 3072,
+ "3073" => 3073,
+ "3074" => 3074,
+ "3075" => 3075,
+ "3076" => 3076,
+ "3077" => 3077,
+ "3078" => 3078,
+ "3079" => 3079,
+ "3080" => 3080,
+ "3081" => 3081,
+ "3082" => 3082,
+ "3083" => 3083,
+ "3084" => 3084,
+ "3085" => 3085,
+ "3086" => 3086,
+ "3087" => 3087,
+ "3088" => 3088,
+ "3089" => 3089,
+ "3090" => 3090,
+ "3091" => 3091,
+ "3092" => 3092,
+ "3093" => 3093,
+ "3094" => 3094,
+ "3095" => 3095,
+ "3096" => 3096,
+ "3097" => 3097,
+ "3098" => 3098,
+ "3099" => 3099,
+ "3100" => 3100,
+ "3101" => 3101,
+ "3102" => 3102,
+ "3103" => 3103,
+ "3104" => 3104,
+ "3105" => 3105,
+ "3106" => 3106,
+ "3107" => 3107,
+ "3108" => 3108,
+ "3109" => 3109,
+ "3110" => 3110,
+ "3111" => 3111,
+ "3112" => 3112,
+ "3113" => 3113,
+ "3114" => 3114,
+ "3115" => 3115,
+ "3116" => 3116,
+ "3117" => 3117,
+ "3118" => 3118,
+ "3119" => 3119,
+ "3120" => 3120,
+ "3121" => 3121,
+ "3122" => 3122,
+ "3123" => 3123,
+ "3124" => 3124,
+ "3125" => 3125,
+ "3126" => 3126,
+ "3127" => 3127,
+ "3128" => 3128,
+ "3129" => 3129,
+ "3130" => 3130,
+ "3131" => 3131,
+ "3132" => 3132,
+ "3133" => 3133,
+ "3134" => 3134,
+ "3135" => 3135,
+ "3136" => 3136,
+ "3137" => 3137,
+ "3138" => 3138,
+ "3139" => 3139,
+ "3140" => 3140,
+ "3141" => 3141,
+ "3142" => 3142,
+ "3143" => 3143,
+ "3144" => 3144,
+ "3145" => 3145,
+ "3146" => 3146,
+ "3147" => 3147,
+ "3148" => 3148,
+ "3149" => 3149,
+ "3150" => 3150,
+ "3151" => 3151,
+ "3152" => 3152,
+ "3153" => 3153,
+ "3154" => 3154,
+ "3155" => 3155,
+ "3156" => 3156,
+ "3157" => 3157,
+ "3158" => 3158,
+ "3159" => 3159,
+ "3160" => 3160,
+ "3161" => 3161,
+ "3162" => 3162,
+ "3163" => 3163,
+ "3164" => 3164,
+ "3165" => 3165,
+ "3166" => 3166,
+ "3167" => 3167,
+ "3168" => 3168,
+ "3169" => 3169,
+ "3170" => 3170,
+ "3171" => 3171,
+ "3172" => 3172,
+ "3173" => 3173,
+ "3174" => 3174,
+ "3175" => 3175,
+ "3176" => 3176,
+ "3177" => 3177,
+ "3178" => 3178,
+ "3179" => 3179,
+ "3180" => 3180,
+ "3181" => 3181,
+ "3182" => 3182,
+ "3183" => 3183,
+ "3184" => 3184,
+ "3185" => 3185,
+ "3186" => 3186,
+ "3187" => 3187,
+ "3188" => 3188,
+ "3189" => 3189,
+ "3190" => 3190,
+ "3191" => 3191,
+ "3192" => 3192,
+ "3193" => 3193,
+ "3194" => 3194,
+ "3195" => 3195,
+ "3196" => 3196,
+ "3197" => 3197,
+ "3198" => 3198,
+ "3199" => 3199,
+ "3200" => 3200,
+ "3201" => 3201,
+ "3202" => 3202,
+ "3203" => 3203,
+ "3204" => 3204,
+ "3205" => 3205,
+ "3206" => 3206,
+ "3207" => 3207,
+ "3208" => 3208,
+ "3209" => 3209,
+ "3210" => 3210,
+ "3211" => 3211,
+ "3212" => 3212,
+ "3213" => 3213,
+ "3214" => 3214,
+ "3215" => 3215,
+ "3216" => 3216,
+ "3217" => 3217,
+ "3218" => 3218,
+ "3219" => 3219,
+ "3220" => 3220,
+ "3221" => 3221,
+ "3222" => 3222,
+ "3223" => 3223,
+ "3224" => 3224,
+ "3225" => 3225,
+ "3226" => 3226,
+ "3227" => 3227,
+ "3228" => 3228,
+ "3229" => 3229,
+ "3230" => 3230,
+ "3231" => 3231,
+ "3232" => 3232,
+ "3233" => 3233,
+ "3234" => 3234,
+ "3235" => 3235,
+ "3236" => 3236,
+ "3237" => 3237,
+ "3238" => 3238,
+ "3239" => 3239,
+ "3240" => 3240,
+ "3241" => 3241,
+ "3242" => 3242,
+ "3243" => 3243,
+ "3244" => 3244,
+ "3245" => 3245,
+ "3246" => 3246,
+ "3247" => 3247,
+ "3248" => 3248,
+ "3249" => 3249,
+ "3250" => 3250,
+ "3251" => 3251,
+ "3252" => 3252,
+ "3253" => 3253,
+ "3254" => 3254,
+ "3255" => 3255,
+ "3256" => 3256,
+ "3257" => 3257,
+ "3258" => 3258,
+ "3259" => 3259,
+ "3260" => 3260,
+ "3261" => 3261,
+ "3262" => 3262,
+ "3263" => 3263,
+ "3264" => 3264,
+ "3265" => 3265,
+ "3266" => 3266,
+ "3267" => 3267,
+ "3268" => 3268,
+ "3269" => 3269,
+ "3270" => 3270,
+ "3271" => 3271,
+ "3272" => 3272,
+ "3273" => 3273,
+ "3274" => 3274,
+ "3275" => 3275,
+ "3276" => 3276,
+ "3277" => 3277,
+ "3278" => 3278,
+ "3279" => 3279,
+ "3280" => 3280,
+ "3281" => 3281,
+ "3282" => 3282,
+ "3283" => 3283,
+ "3284" => 3284,
+ "3285" => 3285,
+ "3286" => 3286,
+ "3287" => 3287,
+ "3288" => 3288,
+ "3289" => 3289,
+ "3290" => 3290,
+ "3291" => 3291,
+ "3292" => 3292,
+ "3293" => 3293,
+ "3294" => 3294,
+ "3295" => 3295,
+ "3296" => 3296,
+ "3297" => 3297,
+ "3298" => 3298,
+ "3299" => 3299,
+ "3300" => 3300,
+ "3301" => 3301,
+ "3302" => 3302,
+ "3303" => 3303,
+ "3304" => 3304,
+ "3305" => 3305,
+ "3306" => 3306,
+ "3307" => 3307,
+ "3308" => 3308,
+ "3309" => 3309,
+ "3310" => 3310,
+ "3311" => 3311,
+ "3312" => 3312,
+ "3313" => 3313,
+ "3314" => 3314,
+ "3315" => 3315,
+ "3316" => 3316,
+ "3317" => 3317,
+ "3318" => 3318,
+ "3319" => 3319,
+ "3320" => 3320,
+ "3321" => 3321,
+ "3322" => 3322,
+ "3323" => 3323,
+ "3324" => 3324,
+ "3325" => 3325,
+ "3326" => 3326,
+ "3327" => 3327,
+ "3328" => 3328,
+ "3329" => 3329,
+ "3330" => 3330,
+ "3331" => 3331,
+ "3332" => 3332,
+ "3333" => 3333,
+ "3334" => 3334,
+ "3335" => 3335,
+ "3336" => 3336,
+ "3337" => 3337,
+ "3338" => 3338,
+ "3339" => 3339,
+ "3340" => 3340,
+ "3341" => 3341,
+ "3342" => 3342,
+ "3343" => 3343,
+ "3344" => 3344,
+ "3345" => 3345,
+ "3346" => 3346,
+ "3347" => 3347,
+ "3348" => 3348,
+ "3349" => 3349,
+ "3350" => 3350,
+ "3351" => 3351,
+ "3352" => 3352,
+ "3353" => 3353,
+ "3354" => 3354,
+ "3355" => 3355,
+ "3356" => 3356,
+ "3357" => 3357,
+ "3358" => 3358,
+ "3359" => 3359,
+ "3360" => 3360,
+ "3361" => 3361,
+ "3362" => 3362,
+ "3363" => 3363,
+ "3364" => 3364,
+ "3365" => 3365,
+ "3366" => 3366,
+ "3367" => 3367,
+ "3368" => 3368,
+ "3369" => 3369,
+ "3370" => 3370,
+ "3371" => 3371,
+ "3372" => 3372,
+ "3373" => 3373,
+ "3374" => 3374,
+ "3375" => 3375,
+ "3376" => 3376,
+ "3377" => 3377,
+ "3378" => 3378,
+ "3379" => 3379,
+ "3380" => 3380,
+ "3381" => 3381,
+ "3382" => 3382,
+ "3383" => 3383,
+ "3384" => 3384,
+ "3385" => 3385,
+ "3386" => 3386,
+ "3387" => 3387,
+ "3388" => 3388,
+ "3389" => 3389,
+ "3390" => 3390,
+ "3391" => 3391,
+ "3392" => 3392,
+ "3393" => 3393,
+ "3394" => 3394,
+ "3395" => 3395,
+ "3396" => 3396,
+ "3397" => 3397,
+ "3398" => 3398,
+ "3399" => 3399,
+ "3400" => 3400,
+ "3401" => 3401,
+ "3402" => 3402,
+ "3403" => 3403,
+ "3404" => 3404,
+ "3405" => 3405,
+ "3406" => 3406,
+ "3407" => 3407,
+ "3408" => 3408,
+ "3409" => 3409,
+ "3410" => 3410,
+ "3411" => 3411,
+ "3412" => 3412,
+ "3413" => 3413,
+ "3414" => 3414,
+ "3415" => 3415,
+ "3416" => 3416,
+ "3417" => 3417,
+ "3418" => 3418,
+ "3419" => 3419,
+ "3420" => 3420,
+ "3421" => 3421,
+ "3422" => 3422,
+ "3423" => 3423,
+ "3424" => 3424,
+ "3425" => 3425,
+ "3426" => 3426,
+ "3427" => 3427,
+ "3428" => 3428,
+ "3429" => 3429,
+ "3430" => 3430,
+ "3431" => 3431,
+ "3432" => 3432,
+ "3433" => 3433,
+ "3434" => 3434,
+ "3435" => 3435,
+ "3436" => 3436,
+ "3437" => 3437,
+ "3438" => 3438,
+ "3439" => 3439,
+ "3440" => 3440,
+ "3441" => 3441,
+ "3442" => 3442,
+ "3443" => 3443,
+ "3444" => 3444,
+ "3445" => 3445,
+ "3446" => 3446,
+ "3447" => 3447,
+ "3448" => 3448,
+ "3449" => 3449,
+ "3450" => 3450,
+ "3451" => 3451,
+ "3452" => 3452,
+ "3453" => 3453,
+ "3454" => 3454,
+ "3455" => 3455,
+ "3456" => 3456,
+ "3457" => 3457,
+ "3458" => 3458,
+ "3459" => 3459,
+ "3460" => 3460,
+ "3461" => 3461,
+ "3462" => 3462,
+ "3463" => 3463,
+ "3464" => 3464,
+ "3465" => 3465,
+ "3466" => 3466,
+ "3467" => 3467,
+ "3468" => 3468,
+ "3469" => 3469,
+ "3470" => 3470,
+ "3471" => 3471,
+ "3472" => 3472,
+ "3473" => 3473,
+ "3474" => 3474,
+ "3475" => 3475,
+ "3476" => 3476,
+ "3477" => 3477,
+ "3478" => 3478,
+ "3479" => 3479,
+ "3480" => 3480,
+ "3481" => 3481,
+ "3482" => 3482,
+ "3483" => 3483,
+ "3484" => 3484,
+ "3485" => 3485,
+ "3486" => 3486,
+ "3487" => 3487,
+ "3488" => 3488,
+ "3489" => 3489,
+ "3490" => 3490,
+ "3491" => 3491,
+ "3492" => 3492,
+ "3493" => 3493,
+ "3494" => 3494,
+ "3495" => 3495,
+ "3496" => 3496,
+ "3497" => 3497,
+ "3498" => 3498,
+ "3499" => 3499,
+ "3500" => 3500,
+ "3501" => 3501,
+ "3502" => 3502,
+ "3503" => 3503,
+ "3504" => 3504,
+ "3505" => 3505,
+ "3506" => 3506,
+ "3507" => 3507,
+ "3508" => 3508,
+ "3509" => 3509,
+ "3510" => 3510,
+ "3511" => 3511,
+ "3512" => 3512,
+ "3513" => 3513,
+ "3514" => 3514,
+ "3515" => 3515,
+ "3516" => 3516,
+ "3517" => 3517,
+ "3518" => 3518,
+ "3519" => 3519,
+ "3520" => 3520,
+ "3521" => 3521,
+ "3522" => 3522,
+ "3523" => 3523,
+ "3524" => 3524,
+ "3525" => 3525,
+ "3526" => 3526,
+ "3527" => 3527,
+ "3528" => 3528,
+ "3529" => 3529,
+ "3530" => 3530,
+ "3531" => 3531,
+ "3532" => 3532,
+ "3533" => 3533,
+ "3534" => 3534,
+ "3535" => 3535,
+ "3536" => 3536,
+ "3537" => 3537,
+ "3538" => 3538,
+ "3539" => 3539,
+ "3540" => 3540,
+ "3541" => 3541,
+ "3542" => 3542,
+ "3543" => 3543,
+ "3544" => 3544,
+ "3545" => 3545,
+ "3546" => 3546,
+ "3547" => 3547,
+ "3548" => 3548,
+ "3549" => 3549,
+ "3550" => 3550,
+ "3551" => 3551,
+ "3552" => 3552,
+ "3553" => 3553,
+ "3554" => 3554,
+ "3555" => 3555,
+ "3556" => 3556,
+ "3557" => 3557,
+ "3558" => 3558,
+ "3559" => 3559,
+ "3560" => 3560,
+ "3561" => 3561,
+ "3562" => 3562,
+ "3563" => 3563,
+ "3564" => 3564,
+ "3565" => 3565,
+ "3566" => 3566,
+ "3567" => 3567,
+ "3568" => 3568,
+ "3569" => 3569,
+ "3570" => 3570,
+ "3571" => 3571,
+ "3572" => 3572,
+ "3573" => 3573,
+ "3574" => 3574,
+ "3575" => 3575,
+ "3576" => 3576,
+ "3577" => 3577,
+ "3578" => 3578,
+ "3579" => 3579,
+ "3580" => 3580,
+ "3581" => 3581,
+ "3582" => 3582,
+ "3583" => 3583,
+ "3584" => 3584,
+ "3585" => 3585,
+ "3586" => 3586,
+ "3587" => 3587,
+ "3588" => 3588,
+ "3589" => 3589,
+ "3590" => 3590,
+ "3591" => 3591,
+ "3592" => 3592,
+ "3593" => 3593,
+ "3594" => 3594,
+ "3595" => 3595,
+ "3596" => 3596,
+ "3597" => 3597,
+ "3598" => 3598,
+ "3599" => 3599,
+ "3600" => 3600,
+ "3601" => 3601,
+ "3602" => 3602,
+ "3603" => 3603,
+ "3604" => 3604,
+ "3605" => 3605,
+ "3606" => 3606,
+ "3607" => 3607,
+ "3608" => 3608,
+ "3609" => 3609,
+ "3610" => 3610,
+ "3611" => 3611,
+ "3612" => 3612,
+ "3613" => 3613,
+ "3614" => 3614,
+ "3615" => 3615,
+ "3616" => 3616,
+ "3617" => 3617,
+ "3618" => 3618,
+ "3619" => 3619,
+ "3620" => 3620,
+ "3621" => 3621,
+ "3622" => 3622,
+ "3623" => 3623,
+ "3624" => 3624,
+ "3625" => 3625,
+ "3626" => 3626,
+ "3627" => 3627,
+ "3628" => 3628,
+ "3629" => 3629,
+ "3630" => 3630,
+ "3631" => 3631,
+ "3632" => 3632,
+ "3633" => 3633,
+ "3634" => 3634,
+ "3635" => 3635,
+ "3636" => 3636,
+ "3637" => 3637,
+ "3638" => 3638,
+ "3639" => 3639,
+ "3640" => 3640,
+ "3641" => 3641,
+ "3642" => 3642,
+ "3643" => 3643,
+ "3644" => 3644,
+ "3645" => 3645,
+ "3646" => 3646,
+ "3647" => 3647,
+ "3648" => 3648,
+ "3649" => 3649,
+ "3650" => 3650,
+ "3651" => 3651,
+ "3652" => 3652,
+ "3653" => 3653,
+ "3654" => 3654,
+ "3655" => 3655,
+ "3656" => 3656,
+ "3657" => 3657,
+ "3658" => 3658,
+ "3659" => 3659,
+ "3660" => 3660,
+ "3661" => 3661,
+ "3662" => 3662,
+ "3663" => 3663,
+ "3664" => 3664,
+ "3665" => 3665,
+ "3666" => 3666,
+ "3667" => 3667,
+ "3668" => 3668,
+ "3669" => 3669,
+ "3670" => 3670,
+ "3671" => 3671,
+ "3672" => 3672,
+ "3673" => 3673,
+ "3674" => 3674,
+ "3675" => 3675,
+ "3676" => 3676,
+ "3677" => 3677,
+ "3678" => 3678,
+ "3679" => 3679,
+ "3680" => 3680,
+ "3681" => 3681,
+ "3682" => 3682,
+ "3683" => 3683,
+ "3684" => 3684,
+ "3685" => 3685,
+ "3686" => 3686,
+ "3687" => 3687,
+ "3688" => 3688,
+ "3689" => 3689,
+ "3690" => 3690,
+ "3691" => 3691,
+ "3692" => 3692,
+ "3693" => 3693,
+ "3694" => 3694,
+ "3695" => 3695,
+ "3696" => 3696,
+ "3697" => 3697,
+ "3698" => 3698,
+ "3699" => 3699,
+ "3700" => 3700,
+ "3701" => 3701,
+ "3702" => 3702,
+ "3703" => 3703,
+ "3704" => 3704,
+ "3705" => 3705,
+ "3706" => 3706,
+ "3707" => 3707,
+ "3708" => 3708,
+ "3709" => 3709,
+ "3710" => 3710,
+ "3711" => 3711,
+ "3712" => 3712,
+ "3713" => 3713,
+ "3714" => 3714,
+ "3715" => 3715,
+ "3716" => 3716,
+ "3717" => 3717,
+ "3718" => 3718,
+ "3719" => 3719,
+ "3720" => 3720,
+ "3721" => 3721,
+ "3722" => 3722,
+ "3723" => 3723,
+ "3724" => 3724,
+ "3725" => 3725,
+ "3726" => 3726,
+ "3727" => 3727,
+ "3728" => 3728,
+ "3729" => 3729,
+ "3730" => 3730,
+ "3731" => 3731,
+ "3732" => 3732,
+ "3733" => 3733,
+ "3734" => 3734,
+ "3735" => 3735,
+ "3736" => 3736,
+ "3737" => 3737,
+ "3738" => 3738,
+ "3739" => 3739,
+ "3740" => 3740,
+ "3741" => 3741,
+ "3742" => 3742,
+ "3743" => 3743,
+ "3744" => 3744,
+ "3745" => 3745,
+ "3746" => 3746,
+ "3747" => 3747,
+ "3748" => 3748,
+ "3749" => 3749,
+ "3750" => 3750,
+ "3751" => 3751,
+ "3752" => 3752,
+ "3753" => 3753,
+ "3754" => 3754,
+ "3755" => 3755,
+ "3756" => 3756,
+ "3757" => 3757,
+ "3758" => 3758,
+ "3759" => 3759,
+ "3760" => 3760,
+ "3761" => 3761,
+ "3762" => 3762,
+ "3763" => 3763,
+ "3764" => 3764,
+ "3765" => 3765,
+ "3766" => 3766,
+ "3767" => 3767,
+ "3768" => 3768,
+ "3769" => 3769,
+ "3770" => 3770,
+ "3771" => 3771,
+ "3772" => 3772,
+ "3773" => 3773,
+ "3774" => 3774,
+ "3775" => 3775,
+ "3776" => 3776,
+ "3777" => 3777,
+ "3778" => 3778,
+ "3779" => 3779,
+ "3780" => 3780,
+ "3781" => 3781,
+ "3782" => 3782,
+ "3783" => 3783,
+ "3784" => 3784,
+ "3785" => 3785,
+ "3786" => 3786,
+ "3787" => 3787,
+ "3788" => 3788,
+ "3789" => 3789,
+ "3790" => 3790,
+ "3791" => 3791,
+ "3792" => 3792,
+ "3793" => 3793,
+ "3794" => 3794,
+ "3795" => 3795,
+ "3796" => 3796,
+ "3797" => 3797,
+ "3798" => 3798,
+ "3799" => 3799,
+ "3800" => 3800,
+ "3801" => 3801,
+ "3802" => 3802,
+ "3803" => 3803,
+ "3804" => 3804,
+ "3805" => 3805,
+ "3806" => 3806,
+ "3807" => 3807,
+ "3808" => 3808,
+ "3809" => 3809,
+ "3810" => 3810,
+ "3811" => 3811,
+ "3812" => 3812,
+ "3813" => 3813,
+ "3814" => 3814,
+ "3815" => 3815,
+ "3816" => 3816,
+ "3817" => 3817,
+ "3818" => 3818,
+ "3819" => 3819,
+ "3820" => 3820,
+ "3821" => 3821,
+ "3822" => 3822,
+ "3823" => 3823,
+ "3824" => 3824,
+ "3825" => 3825,
+ "3826" => 3826,
+ "3827" => 3827,
+ "3828" => 3828,
+ "3829" => 3829,
+ "3830" => 3830,
+ "3831" => 3831,
+ "3832" => 3832,
+ "3833" => 3833,
+ "3834" => 3834,
+ "3835" => 3835,
+ "3836" => 3836,
+ "3837" => 3837,
+ "3838" => 3838,
+ "3839" => 3839,
+ "3840" => 3840,
+ "3841" => 3841,
+ "3842" => 3842,
+ "3843" => 3843,
+ "3844" => 3844,
+ "3845" => 3845,
+ "3846" => 3846,
+ "3847" => 3847,
+ "3848" => 3848,
+ "3849" => 3849,
+ "3850" => 3850,
+ "3851" => 3851,
+ "3852" => 3852,
+ "3853" => 3853,
+ "3854" => 3854,
+ "3855" => 3855,
+ "3856" => 3856,
+ "3857" => 3857,
+ "3858" => 3858,
+ "3859" => 3859,
+ "3860" => 3860,
+ "3861" => 3861,
+ "3862" => 3862,
+ "3863" => 3863,
+ "3864" => 3864,
+ "3865" => 3865,
+ "3866" => 3866,
+ "3867" => 3867,
+ "3868" => 3868,
+ "3869" => 3869,
+ "3870" => 3870,
+ "3871" => 3871,
+ "3872" => 3872,
+ "3873" => 3873,
+ "3874" => 3874,
+ "3875" => 3875,
+ "3876" => 3876,
+ "3877" => 3877,
+ "3878" => 3878,
+ "3879" => 3879,
+ "3880" => 3880,
+ "3881" => 3881,
+ "3882" => 3882,
+ "3883" => 3883,
+ "3884" => 3884,
+ "3885" => 3885,
+ "3886" => 3886,
+ "3887" => 3887,
+ "3888" => 3888,
+ "3889" => 3889,
+ "3890" => 3890,
+ "3891" => 3891,
+ "3892" => 3892,
+ "3893" => 3893,
+ "3894" => 3894,
+ "3895" => 3895,
+ "3896" => 3896,
+ "3897" => 3897,
+ "3898" => 3898,
+ "3899" => 3899,
+ "3900" => 3900,
+ "3901" => 3901,
+ "3902" => 3902,
+ "3903" => 3903,
+ "3904" => 3904,
+ "3905" => 3905,
+ "3906" => 3906,
+ "3907" => 3907,
+ "3908" => 3908,
+ "3909" => 3909,
+ "3910" => 3910,
+ "3911" => 3911,
+ "3912" => 3912,
+ "3913" => 3913,
+ "3914" => 3914,
+ "3915" => 3915,
+ "3916" => 3916,
+ "3917" => 3917,
+ "3918" => 3918,
+ "3919" => 3919,
+ "3920" => 3920,
+ "3921" => 3921,
+ "3922" => 3922,
+ "3923" => 3923,
+ "3924" => 3924,
+ "3925" => 3925,
+ "3926" => 3926,
+ "3927" => 3927,
+ "3928" => 3928,
+ "3929" => 3929,
+ "3930" => 3930,
+ "3931" => 3931,
+ "3932" => 3932,
+ "3933" => 3933,
+ "3934" => 3934,
+ "3935" => 3935,
+ "3936" => 3936,
+ "3937" => 3937,
+ "3938" => 3938,
+ "3939" => 3939,
+ "3940" => 3940,
+ "3941" => 3941,
+ "3942" => 3942,
+ "3943" => 3943,
+ "3944" => 3944,
+ "3945" => 3945,
+ "3946" => 3946,
+ "3947" => 3947,
+ "3948" => 3948,
+ "3949" => 3949,
+ "3950" => 3950,
+ "3951" => 3951,
+ "3952" => 3952,
+ "3953" => 3953,
+ "3954" => 3954,
+ "3955" => 3955,
+ "3956" => 3956,
+ "3957" => 3957,
+ "3958" => 3958,
+ "3959" => 3959,
+ "3960" => 3960,
+ "3961" => 3961,
+ "3962" => 3962,
+ "3963" => 3963,
+ "3964" => 3964,
+ "3965" => 3965,
+ "3966" => 3966,
+ "3967" => 3967,
+ "3968" => 3968,
+ "3969" => 3969,
+ "3970" => 3970,
+ "3971" => 3971,
+ "3972" => 3972,
+ "3973" => 3973,
+ "3974" => 3974,
+ "3975" => 3975,
+ "3976" => 3976,
+ "3977" => 3977,
+ "3978" => 3978,
+ "3979" => 3979,
+ "3980" => 3980,
+ "3981" => 3981,
+ "3982" => 3982,
+ "3983" => 3983,
+ "3984" => 3984,
+ "3985" => 3985,
+ "3986" => 3986,
+ "3987" => 3987,
+ "3988" => 3988,
+ "3989" => 3989,
+ "3990" => 3990,
+ "3991" => 3991,
+ "3992" => 3992,
+ "3993" => 3993,
+ "3994" => 3994,
+ "3995" => 3995,
+ "3996" => 3996,
+ "3997" => 3997,
+ "3998" => 3998,
+ "3999" => 3999,
+ "4000" => 4000,
+ "4001" => 4001,
+ "4002" => 4002,
+ "4003" => 4003,
+ "4004" => 4004,
+ "4005" => 4005,
+ "4006" => 4006,
+ "4007" => 4007,
+ "4008" => 4008,
+ "4009" => 4009,
+ "4010" => 4010,
+ "4011" => 4011,
+ "4012" => 4012,
+ "4013" => 4013,
+ "4014" => 4014,
+ "4015" => 4015,
+ "4016" => 4016,
+ "4017" => 4017,
+ "4018" => 4018,
+ "4019" => 4019,
+ "4020" => 4020,
+ "4021" => 4021,
+ "4022" => 4022,
+ "4023" => 4023,
+ "4024" => 4024,
+ "4025" => 4025,
+ "4026" => 4026,
+ "4027" => 4027,
+ "4028" => 4028,
+ "4029" => 4029,
+ "4030" => 4030,
+ "4031" => 4031,
+ "4032" => 4032,
+ "4033" => 4033,
+ "4034" => 4034,
+ "4035" => 4035,
+ "4036" => 4036,
+ "4037" => 4037,
+ "4038" => 4038,
+ "4039" => 4039,
+ "4040" => 4040,
+ "4041" => 4041,
+ "4042" => 4042,
+ "4043" => 4043,
+ "4044" => 4044,
+ "4045" => 4045,
+ "4046" => 4046,
+ "4047" => 4047,
+ "4048" => 4048,
+ "4049" => 4049,
+ "4050" => 4050,
+ "4051" => 4051,
+ "4052" => 4052,
+ "4053" => 4053,
+ "4054" => 4054,
+ "4055" => 4055,
+ "4056" => 4056,
+ "4057" => 4057,
+ "4058" => 4058,
+ "4059" => 4059,
+ "4060" => 4060,
+ "4061" => 4061,
+ "4062" => 4062,
+ "4063" => 4063,
+ "4064" => 4064,
+ "4065" => 4065,
+ "4066" => 4066,
+ "4067" => 4067,
+ "4068" => 4068,
+ "4069" => 4069,
+ "4070" => 4070,
+ "4071" => 4071,
+ "4072" => 4072,
+ "4073" => 4073,
+ "4074" => 4074,
+ "4075" => 4075,
+ "4076" => 4076,
+ "4077" => 4077,
+ "4078" => 4078,
+ "4079" => 4079,
+ "4080" => 4080,
+ "4081" => 4081,
+ "4082" => 4082,
+ "4083" => 4083,
+ "4084" => 4084,
+ "4085" => 4085,
+ "4086" => 4086,
+ "4087" => 4087,
+ "4088" => 4088,
+ "4089" => 4089,
+ "4090" => 4090,
+ "4091" => 4091,
+ "4092" => 4092,
+ "4093" => 4093,
+ "4094" => 4094,
+ "4095" => 4095,
+ "4096" => 4096,
+ "4097" => 4097,
+ "4098" => 4098,
+ "4099" => 4099,
+ "4100" => 4100,
+ "4101" => 4101,
+ "4102" => 4102,
+ "4103" => 4103,
+ "4104" => 4104,
+ "4105" => 4105,
+ "4106" => 4106,
+ "4107" => 4107,
+ "4108" => 4108,
+ "4109" => 4109,
+ "4110" => 4110,
+ "4111" => 4111,
+ "4112" => 4112,
+ "4113" => 4113,
+ "4114" => 4114,
+ "4115" => 4115,
+ "4116" => 4116,
+ "4117" => 4117,
+ "4118" => 4118,
+ "4119" => 4119,
+ "4120" => 4120,
+ "4121" => 4121,
+ "4122" => 4122,
+ "4123" => 4123,
+ "4124" => 4124,
+ "4125" => 4125,
+ "4126" => 4126,
+ "4127" => 4127,
+ "4128" => 4128,
+ "4129" => 4129,
+ "4130" => 4130,
+ "4131" => 4131,
+ "4132" => 4132,
+ "4133" => 4133,
+ "4134" => 4134,
+ "4135" => 4135,
+ "4136" => 4136,
+ "4137" => 4137,
+ "4138" => 4138,
+ "4139" => 4139,
+ "4140" => 4140,
+ "4141" => 4141,
+ "4142" => 4142,
+ "4143" => 4143,
+ "4144" => 4144,
+ "4145" => 4145,
+ "4146" => 4146,
+ "4147" => 4147,
+ "4148" => 4148,
+ "4149" => 4149,
+ "4150" => 4150,
+ "4151" => 4151,
+ "4152" => 4152,
+ "4153" => 4153,
+ "4154" => 4154,
+ "4155" => 4155,
+ "4156" => 4156,
+ "4157" => 4157,
+ "4158" => 4158,
+ "4159" => 4159,
+ "4160" => 4160,
+ "4161" => 4161,
+ "4162" => 4162,
+ "4163" => 4163,
+ "4164" => 4164,
+ "4165" => 4165,
+ "4166" => 4166,
+ "4167" => 4167,
+ "4168" => 4168,
+ "4169" => 4169,
+ "4170" => 4170,
+ "4171" => 4171,
+ "4172" => 4172,
+ "4173" => 4173,
+ "4174" => 4174,
+ "4175" => 4175,
+ "4176" => 4176,
+ "4177" => 4177,
+ "4178" => 4178,
+ "4179" => 4179,
+ "4180" => 4180,
+ "4181" => 4181,
+ "4182" => 4182,
+ "4183" => 4183,
+ "4184" => 4184,
+ "4185" => 4185,
+ "4186" => 4186,
+ "4187" => 4187,
+ "4188" => 4188,
+ "4189" => 4189,
+ "4190" => 4190,
+ "4191" => 4191,
+ "4192" => 4192,
+ "4193" => 4193,
+ "4194" => 4194,
+ "4195" => 4195,
+ "4196" => 4196,
+ "4197" => 4197,
+ "4198" => 4198,
+ "4199" => 4199,
+ "4200" => 4200,
+ "4201" => 4201,
+ "4202" => 4202,
+ "4203" => 4203,
+ "4204" => 4204,
+ "4205" => 4205,
+ "4206" => 4206,
+ "4207" => 4207,
+ "4208" => 4208,
+ "4209" => 4209,
+ "4210" => 4210,
+ "4211" => 4211,
+ "4212" => 4212,
+ "4213" => 4213,
+ "4214" => 4214,
+ "4215" => 4215,
+ "4216" => 4216,
+ "4217" => 4217,
+ "4218" => 4218,
+ "4219" => 4219,
+ "4220" => 4220,
+ "4221" => 4221,
+ "4222" => 4222,
+ "4223" => 4223,
+ "4224" => 4224,
+ "4225" => 4225,
+ "4226" => 4226,
+ "4227" => 4227,
+ "4228" => 4228,
+ "4229" => 4229,
+ "4230" => 4230,
+ "4231" => 4231,
+ "4232" => 4232,
+ "4233" => 4233,
+ "4234" => 4234,
+ "4235" => 4235,
+ "4236" => 4236,
+ "4237" => 4237,
+ "4238" => 4238,
+ "4239" => 4239,
+ "4240" => 4240,
+ "4241" => 4241,
+ "4242" => 4242,
+ "4243" => 4243,
+ "4244" => 4244,
+ "4245" => 4245,
+ "4246" => 4246,
+ "4247" => 4247,
+ "4248" => 4248,
+ "4249" => 4249,
+ "4250" => 4250,
+ "4251" => 4251,
+ "4252" => 4252,
+ "4253" => 4253,
+ "4254" => 4254,
+ "4255" => 4255,
+ "4256" => 4256,
+ "4257" => 4257,
+ "4258" => 4258,
+ "4259" => 4259,
+ "4260" => 4260,
+ "4261" => 4261,
+ "4262" => 4262,
+ "4263" => 4263,
+ "4264" => 4264,
+ "4265" => 4265,
+ "4266" => 4266,
+ "4267" => 4267,
+ "4268" => 4268,
+ "4269" => 4269,
+ "4270" => 4270,
+ "4271" => 4271,
+ "4272" => 4272,
+ "4273" => 4273,
+ "4274" => 4274,
+ "4275" => 4275,
+ "4276" => 4276,
+ "4277" => 4277,
+ "4278" => 4278,
+ "4279" => 4279,
+ "4280" => 4280,
+ "4281" => 4281,
+ "4282" => 4282,
+ "4283" => 4283,
+ "4284" => 4284,
+ "4285" => 4285,
+ "4286" => 4286,
+ "4287" => 4287,
+ "4288" => 4288,
+ "4289" => 4289,
+ "4290" => 4290,
+ "4291" => 4291,
+ "4292" => 4292,
+ "4293" => 4293,
+ "4294" => 4294,
+ "4295" => 4295,
+ "4296" => 4296,
+ "4297" => 4297,
+ "4298" => 4298,
+ "4299" => 4299,
+ "4300" => 4300,
+ "4301" => 4301,
+ "4302" => 4302,
+ "4303" => 4303,
+ "4304" => 4304,
+ "4305" => 4305,
+ "4306" => 4306,
+ "4307" => 4307,
+ "4308" => 4308,
+ "4309" => 4309,
+ "4310" => 4310,
+ "4311" => 4311,
+ "4312" => 4312,
+ "4313" => 4313,
+ "4314" => 4314,
+ "4315" => 4315,
+ "4316" => 4316,
+ "4317" => 4317,
+ "4318" => 4318,
+ "4319" => 4319,
+ "4320" => 4320,
+ "4321" => 4321,
+ "4322" => 4322,
+ "4323" => 4323,
+ "4324" => 4324,
+ "4325" => 4325,
+ "4326" => 4326,
+ "4327" => 4327,
+ "4328" => 4328,
+ "4329" => 4329,
+ "4330" => 4330,
+ "4331" => 4331,
+ "4332" => 4332,
+ "4333" => 4333,
+ "4334" => 4334,
+ "4335" => 4335,
+ "4336" => 4336,
+ "4337" => 4337,
+ "4338" => 4338,
+ "4339" => 4339,
+ "4340" => 4340,
+ "4341" => 4341,
+ "4342" => 4342,
+ "4343" => 4343,
+ "4344" => 4344,
+ "4345" => 4345,
+ "4346" => 4346,
+ "4347" => 4347,
+ "4348" => 4348,
+ "4349" => 4349,
+ "4350" => 4350,
+ "4351" => 4351,
+ "4352" => 4352,
+ "4353" => 4353,
+ "4354" => 4354,
+ "4355" => 4355,
+ "4356" => 4356,
+ "4357" => 4357,
+ "4358" => 4358,
+ "4359" => 4359,
+ "4360" => 4360,
+ "4361" => 4361,
+ "4362" => 4362,
+ "4363" => 4363,
+ "4364" => 4364,
+ "4365" => 4365,
+ "4366" => 4366,
+ "4367" => 4367,
+ "4368" => 4368,
+ "4369" => 4369,
+ "4370" => 4370,
+ "4371" => 4371,
+ "4372" => 4372,
+ "4373" => 4373,
+ "4374" => 4374,
+ "4375" => 4375,
+ "4376" => 4376,
+ "4377" => 4377,
+ "4378" => 4378,
+ "4379" => 4379,
+ "4380" => 4380,
+ "4381" => 4381,
+ "4382" => 4382,
+ "4383" => 4383,
+ "4384" => 4384,
+ "4385" => 4385,
+ "4386" => 4386,
+ "4387" => 4387,
+ "4388" => 4388,
+ "4389" => 4389,
+ "4390" => 4390,
+ "4391" => 4391,
+ "4392" => 4392,
+ "4393" => 4393,
+ "4394" => 4394,
+ "4395" => 4395,
+ "4396" => 4396,
+ "4397" => 4397,
+ "4398" => 4398,
+ "4399" => 4399,
+ "4400" => 4400,
+ "4401" => 4401,
+ "4402" => 4402,
+ "4403" => 4403,
+ "4404" => 4404,
+ "4405" => 4405,
+ "4406" => 4406,
+ "4407" => 4407,
+ "4408" => 4408,
+ "4409" => 4409,
+ "4410" => 4410,
+ "4411" => 4411,
+ "4412" => 4412,
+ "4413" => 4413,
+ "4414" => 4414,
+ "4415" => 4415,
+ "4416" => 4416,
+ "4417" => 4417,
+ "4418" => 4418,
+ "4419" => 4419,
+ "4420" => 4420,
+ "4421" => 4421,
+ "4422" => 4422,
+ "4423" => 4423,
+ "4424" => 4424,
+ "4425" => 4425,
+ "4426" => 4426,
+ "4427" => 4427,
+ "4428" => 4428,
+ "4429" => 4429,
+ "4430" => 4430,
+ "4431" => 4431,
+ "4432" => 4432,
+ "4433" => 4433,
+ "4434" => 4434,
+ "4435" => 4435,
+ "4436" => 4436,
+ "4437" => 4437,
+ "4438" => 4438,
+ "4439" => 4439,
+ "4440" => 4440,
+ "4441" => 4441,
+ "4442" => 4442,
+ "4443" => 4443,
+ "4444" => 4444,
+ "4445" => 4445,
+ "4446" => 4446,
+ "4447" => 4447,
+ "4448" => 4448,
+ "4449" => 4449,
+ "4450" => 4450,
+ "4451" => 4451,
+ "4452" => 4452,
+ "4453" => 4453,
+ "4454" => 4454,
+ "4455" => 4455,
+ "4456" => 4456,
+ "4457" => 4457,
+ "4458" => 4458,
+ "4459" => 4459,
+ "4460" => 4460,
+ "4461" => 4461,
+ "4462" => 4462,
+ "4463" => 4463,
+ "4464" => 4464,
+ "4465" => 4465,
+ "4466" => 4466,
+ "4467" => 4467,
+ "4468" => 4468,
+ "4469" => 4469,
+ "4470" => 4470,
+ "4471" => 4471,
+ "4472" => 4472,
+ "4473" => 4473,
+ "4474" => 4474,
+ "4475" => 4475,
+ "4476" => 4476,
+ "4477" => 4477,
+ "4478" => 4478,
+ "4479" => 4479,
+ "4480" => 4480,
+ "4481" => 4481,
+ "4482" => 4482,
+ "4483" => 4483,
+ "4484" => 4484,
+ "4485" => 4485,
+ "4486" => 4486,
+ "4487" => 4487,
+ "4488" => 4488,
+ "4489" => 4489,
+ "4490" => 4490,
+ "4491" => 4491,
+ "4492" => 4492,
+ "4493" => 4493,
+ "4494" => 4494,
+ "4495" => 4495,
+ "4496" => 4496,
+ "4497" => 4497,
+ "4498" => 4498,
+ "4499" => 4499,
+ "4500" => 4500,
+ "4501" => 4501,
+ "4502" => 4502,
+ "4503" => 4503,
+ "4504" => 4504,
+ "4505" => 4505,
+ "4506" => 4506,
+ "4507" => 4507,
+ "4508" => 4508,
+ "4509" => 4509,
+ "4510" => 4510,
+ "4511" => 4511,
+ "4512" => 4512,
+ "4513" => 4513,
+ "4514" => 4514,
+ "4515" => 4515,
+ "4516" => 4516,
+ "4517" => 4517,
+ "4518" => 4518,
+ "4519" => 4519,
+ "4520" => 4520,
+ "4521" => 4521,
+ "4522" => 4522,
+ "4523" => 4523,
+ "4524" => 4524,
+ "4525" => 4525,
+ "4526" => 4526,
+ "4527" => 4527,
+ "4528" => 4528,
+ "4529" => 4529,
+ "4530" => 4530,
+ "4531" => 4531,
+ "4532" => 4532,
+ "4533" => 4533,
+ "4534" => 4534,
+ "4535" => 4535,
+ "4536" => 4536,
+ "4537" => 4537,
+ "4538" => 4538,
+ "4539" => 4539,
+ "4540" => 4540,
+ "4541" => 4541,
+ "4542" => 4542,
+ "4543" => 4543,
+ "4544" => 4544,
+ "4545" => 4545,
+ "4546" => 4546,
+ "4547" => 4547,
+ "4548" => 4548,
+ "4549" => 4549,
+ "4550" => 4550,
+ "4551" => 4551,
+ "4552" => 4552,
+ "4553" => 4553,
+ "4554" => 4554,
+ "4555" => 4555,
+ "4556" => 4556,
+ "4557" => 4557,
+ "4558" => 4558,
+ "4559" => 4559,
+ "4560" => 4560,
+ "4561" => 4561,
+ "4562" => 4562,
+ "4563" => 4563,
+ "4564" => 4564,
+ "4565" => 4565,
+ "4566" => 4566,
+ "4567" => 4567,
+ "4568" => 4568,
+ "4569" => 4569,
+ "4570" => 4570,
+ "4571" => 4571,
+ "4572" => 4572,
+ "4573" => 4573,
+ "4574" => 4574,
+ "4575" => 4575,
+ "4576" => 4576,
+ "4577" => 4577,
+ "4578" => 4578,
+ "4579" => 4579,
+ "4580" => 4580,
+ "4581" => 4581,
+ "4582" => 4582,
+ "4583" => 4583,
+ "4584" => 4584,
+ "4585" => 4585,
+ "4586" => 4586,
+ "4587" => 4587,
+ "4588" => 4588,
+ "4589" => 4589,
+ "4590" => 4590,
+ "4591" => 4591,
+ "4592" => 4592,
+ "4593" => 4593,
+ "4594" => 4594,
+ "4595" => 4595,
+ "4596" => 4596,
+ "4597" => 4597,
+ "4598" => 4598,
+ "4599" => 4599,
+ "4600" => 4600,
+ "4601" => 4601,
+ "4602" => 4602,
+ "4603" => 4603,
+ "4604" => 4604,
+ "4605" => 4605,
+ "4606" => 4606,
+ "4607" => 4607,
+ "4608" => 4608,
+ "4609" => 4609,
+ "4610" => 4610,
+ "4611" => 4611,
+ "4612" => 4612,
+ "4613" => 4613,
+ "4614" => 4614,
+ "4615" => 4615,
+ "4616" => 4616,
+ "4617" => 4617,
+ "4618" => 4618,
+ "4619" => 4619,
+ "4620" => 4620,
+ "4621" => 4621,
+ "4622" => 4622,
+ "4623" => 4623,
+ "4624" => 4624,
+ "4625" => 4625,
+ "4626" => 4626,
+ "4627" => 4627,
+ "4628" => 4628,
+ "4629" => 4629,
+ "4630" => 4630,
+ "4631" => 4631,
+ "4632" => 4632,
+ "4633" => 4633,
+ "4634" => 4634,
+ "4635" => 4635,
+ "4636" => 4636,
+ "4637" => 4637,
+ "4638" => 4638,
+ "4639" => 4639,
+ "4640" => 4640,
+ "4641" => 4641,
+ "4642" => 4642,
+ "4643" => 4643,
+ "4644" => 4644,
+ "4645" => 4645,
+ "4646" => 4646,
+ "4647" => 4647,
+ "4648" => 4648,
+ "4649" => 4649,
+ "4650" => 4650,
+ "4651" => 4651,
+ "4652" => 4652,
+ "4653" => 4653,
+ "4654" => 4654,
+ "4655" => 4655,
+ "4656" => 4656,
+ "4657" => 4657,
+ "4658" => 4658,
+ "4659" => 4659,
+ "4660" => 4660,
+ "4661" => 4661,
+ "4662" => 4662,
+ "4663" => 4663,
+ "4664" => 4664,
+ "4665" => 4665,
+ "4666" => 4666,
+ "4667" => 4667,
+ "4668" => 4668,
+ "4669" => 4669,
+ "4670" => 4670,
+ "4671" => 4671,
+ "4672" => 4672,
+ "4673" => 4673,
+ "4674" => 4674,
+ "4675" => 4675,
+ "4676" => 4676,
+ "4677" => 4677,
+ "4678" => 4678,
+ "4679" => 4679,
+ "4680" => 4680,
+ "4681" => 4681,
+ "4682" => 4682,
+ "4683" => 4683,
+ "4684" => 4684,
+ "4685" => 4685,
+ "4686" => 4686,
+ "4687" => 4687,
+ "4688" => 4688,
+ "4689" => 4689,
+ "4690" => 4690,
+ "4691" => 4691,
+ "4692" => 4692,
+ "4693" => 4693,
+ "4694" => 4694,
+ "4695" => 4695,
+ "4696" => 4696,
+ "4697" => 4697,
+ "4698" => 4698,
+ "4699" => 4699,
+ "4700" => 4700,
+ "4701" => 4701,
+ "4702" => 4702,
+ "4703" => 4703,
+ "4704" => 4704,
+ "4705" => 4705,
+ "4706" => 4706,
+ "4707" => 4707,
+ "4708" => 4708,
+ "4709" => 4709,
+ "4710" => 4710,
+ "4711" => 4711,
+ "4712" => 4712,
+ "4713" => 4713,
+ "4714" => 4714,
+ "4715" => 4715,
+ "4716" => 4716,
+ "4717" => 4717,
+ "4718" => 4718,
+ "4719" => 4719,
+ "4720" => 4720,
+ "4721" => 4721,
+ "4722" => 4722,
+ "4723" => 4723,
+ "4724" => 4724,
+ "4725" => 4725,
+ "4726" => 4726,
+ "4727" => 4727,
+ "4728" => 4728,
+ "4729" => 4729,
+ "4730" => 4730,
+ "4731" => 4731,
+ "4732" => 4732,
+ "4733" => 4733,
+ "4734" => 4734,
+ "4735" => 4735,
+ "4736" => 4736,
+ "4737" => 4737,
+ "4738" => 4738,
+ "4739" => 4739,
+ "4740" => 4740,
+ "4741" => 4741,
+ "4742" => 4742,
+ "4743" => 4743,
+ "4744" => 4744,
+ "4745" => 4745,
+ "4746" => 4746,
+ "4747" => 4747,
+ "4748" => 4748,
+ "4749" => 4749,
+ "4750" => 4750,
+ "4751" => 4751,
+ "4752" => 4752,
+ "4753" => 4753,
+ "4754" => 4754,
+ "4755" => 4755,
+ "4756" => 4756,
+ "4757" => 4757,
+ "4758" => 4758,
+ "4759" => 4759,
+ "4760" => 4760,
+ "4761" => 4761,
+ "4762" => 4762,
+ "4763" => 4763,
+ "4764" => 4764,
+ "4765" => 4765,
+ "4766" => 4766,
+ "4767" => 4767,
+ "4768" => 4768,
+ "4769" => 4769,
+ "4770" => 4770,
+ "4771" => 4771,
+ "4772" => 4772,
+ "4773" => 4773,
+ "4774" => 4774,
+ "4775" => 4775,
+ "4776" => 4776,
+ "4777" => 4777,
+ "4778" => 4778,
+ "4779" => 4779,
+ "4780" => 4780,
+ "4781" => 4781,
+ "4782" => 4782,
+ "4783" => 4783,
+ "4784" => 4784,
+ "4785" => 4785,
+ "4786" => 4786,
+ "4787" => 4787,
+ "4788" => 4788,
+ "4789" => 4789,
+ "4790" => 4790,
+ "4791" => 4791,
+ "4792" => 4792,
+ "4793" => 4793,
+ "4794" => 4794,
+ "4795" => 4795,
+ "4796" => 4796,
+ "4797" => 4797,
+ "4798" => 4798,
+ "4799" => 4799,
+ "4800" => 4800,
+ "4801" => 4801,
+ "4802" => 4802,
+ "4803" => 4803,
+ "4804" => 4804,
+ "4805" => 4805,
+ "4806" => 4806,
+ "4807" => 4807,
+ "4808" => 4808,
+ "4809" => 4809,
+ "4810" => 4810,
+ "4811" => 4811,
+ "4812" => 4812,
+ "4813" => 4813,
+ "4814" => 4814,
+ "4815" => 4815,
+ "4816" => 4816,
+ "4817" => 4817,
+ "4818" => 4818,
+ "4819" => 4819,
+ "4820" => 4820,
+ "4821" => 4821,
+ "4822" => 4822,
+ "4823" => 4823,
+ "4824" => 4824,
+ "4825" => 4825,
+ "4826" => 4826,
+ "4827" => 4827,
+ "4828" => 4828,
+ "4829" => 4829,
+ "4830" => 4830,
+ "4831" => 4831,
+ "4832" => 4832,
+ "4833" => 4833,
+ "4834" => 4834,
+ "4835" => 4835,
+ "4836" => 4836,
+ "4837" => 4837,
+ "4838" => 4838,
+ "4839" => 4839,
+ "4840" => 4840,
+ "4841" => 4841,
+ "4842" => 4842,
+ "4843" => 4843,
+ "4844" => 4844,
+ "4845" => 4845,
+ "4846" => 4846,
+ "4847" => 4847,
+ "4848" => 4848,
+ "4849" => 4849,
+ "4850" => 4850,
+ "4851" => 4851,
+ "4852" => 4852,
+ "4853" => 4853,
+ "4854" => 4854,
+ "4855" => 4855,
+ "4856" => 4856,
+ "4857" => 4857,
+ "4858" => 4858,
+ "4859" => 4859,
+ "4860" => 4860,
+ "4861" => 4861,
+ "4862" => 4862,
+ "4863" => 4863,
+ "4864" => 4864,
+ "4865" => 4865,
+ "4866" => 4866,
+ "4867" => 4867,
+ "4868" => 4868,
+ "4869" => 4869,
+ "4870" => 4870,
+ "4871" => 4871,
+ "4872" => 4872,
+ "4873" => 4873,
+ "4874" => 4874,
+ "4875" => 4875,
+ "4876" => 4876,
+ "4877" => 4877,
+ "4878" => 4878,
+ "4879" => 4879,
+ "4880" => 4880,
+ "4881" => 4881,
+ "4882" => 4882,
+ "4883" => 4883,
+ "4884" => 4884,
+ "4885" => 4885,
+ "4886" => 4886,
+ "4887" => 4887,
+ "4888" => 4888,
+ "4889" => 4889,
+ "4890" => 4890,
+ "4891" => 4891,
+ "4892" => 4892,
+ "4893" => 4893,
+ "4894" => 4894,
+ "4895" => 4895,
+ "4896" => 4896,
+ "4897" => 4897,
+ "4898" => 4898,
+ "4899" => 4899,
+ "4900" => 4900,
+ "4901" => 4901,
+ "4902" => 4902,
+ "4903" => 4903,
+ "4904" => 4904,
+ "4905" => 4905,
+ "4906" => 4906,
+ "4907" => 4907,
+ "4908" => 4908,
+ "4909" => 4909,
+ "4910" => 4910,
+ "4911" => 4911,
+ "4912" => 4912,
+ "4913" => 4913,
+ "4914" => 4914,
+ "4915" => 4915,
+ "4916" => 4916,
+ "4917" => 4917,
+ "4918" => 4918,
+ "4919" => 4919,
+ "4920" => 4920,
+ "4921" => 4921,
+ "4922" => 4922,
+ "4923" => 4923,
+ "4924" => 4924,
+ "4925" => 4925,
+ "4926" => 4926,
+ "4927" => 4927,
+ "4928" => 4928,
+ "4929" => 4929,
+ "4930" => 4930,
+ "4931" => 4931,
+ "4932" => 4932,
+ "4933" => 4933,
+ "4934" => 4934,
+ "4935" => 4935,
+ "4936" => 4936,
+ "4937" => 4937,
+ "4938" => 4938,
+ "4939" => 4939,
+ "4940" => 4940,
+ "4941" => 4941,
+ "4942" => 4942,
+ "4943" => 4943,
+ "4944" => 4944,
+ "4945" => 4945,
+ "4946" => 4946,
+ "4947" => 4947,
+ "4948" => 4948,
+ "4949" => 4949,
+ "4950" => 4950,
+ "4951" => 4951,
+ "4952" => 4952,
+ "4953" => 4953,
+ "4954" => 4954,
+ "4955" => 4955,
+ "4956" => 4956,
+ "4957" => 4957,
+ "4958" => 4958,
+ "4959" => 4959,
+ "4960" => 4960,
+ "4961" => 4961,
+ "4962" => 4962,
+ "4963" => 4963,
+ "4964" => 4964,
+ "4965" => 4965,
+ "4966" => 4966,
+ "4967" => 4967,
+ "4968" => 4968,
+ "4969" => 4969,
+ "4970" => 4970,
+ "4971" => 4971,
+ "4972" => 4972,
+ "4973" => 4973,
+ "4974" => 4974,
+ "4975" => 4975,
+ "4976" => 4976,
+ "4977" => 4977,
+ "4978" => 4978,
+ "4979" => 4979,
+ "4980" => 4980,
+ "4981" => 4981,
+ "4982" => 4982,
+ "4983" => 4983,
+ "4984" => 4984,
+ "4985" => 4985,
+ "4986" => 4986,
+ "4987" => 4987,
+ "4988" => 4988,
+ "4989" => 4989,
+ "4990" => 4990,
+ "4991" => 4991,
+ "4992" => 4992,
+ "4993" => 4993,
+ "4994" => 4994,
+ "4995" => 4995,
+ "4996" => 4996,
+ "4997" => 4997,
+ "4998" => 4998,
+ "4999" => 4999,
+ "5000" => 5000,
+ "5001" => 5001,
+ "5002" => 5002,
+ "5003" => 5003,
+ "5004" => 5004,
+ "5005" => 5005,
+ "5006" => 5006,
+ "5007" => 5007,
+ "5008" => 5008,
+ "5009" => 5009,
+ "5010" => 5010,
+ "5011" => 5011,
+ "5012" => 5012,
+ "5013" => 5013,
+ "5014" => 5014,
+ "5015" => 5015,
+ "5016" => 5016,
+ "5017" => 5017,
+ "5018" => 5018,
+ "5019" => 5019,
+ "5020" => 5020,
+ "5021" => 5021,
+ "5022" => 5022,
+ "5023" => 5023,
+ "5024" => 5024,
+ "5025" => 5025,
+ "5026" => 5026,
+ "5027" => 5027,
+ "5028" => 5028,
+ "5029" => 5029,
+ "5030" => 5030,
+ "5031" => 5031,
+ "5032" => 5032,
+ "5033" => 5033,
+ "5034" => 5034,
+ "5035" => 5035,
+ "5036" => 5036,
+ "5037" => 5037,
+ "5038" => 5038,
+ "5039" => 5039,
+ "5040" => 5040,
+ "5041" => 5041,
+ "5042" => 5042,
+ "5043" => 5043,
+ "5044" => 5044,
+ "5045" => 5045,
+ "5046" => 5046,
+ "5047" => 5047,
+ "5048" => 5048,
+ "5049" => 5049,
+ "5050" => 5050,
+ "5051" => 5051,
+ "5052" => 5052,
+ "5053" => 5053,
+ "5054" => 5054,
+ "5055" => 5055,
+ "5056" => 5056,
+ "5057" => 5057,
+ "5058" => 5058,
+ "5059" => 5059,
+ "5060" => 5060,
+ "5061" => 5061,
+ "5062" => 5062,
+ "5063" => 5063,
+ "5064" => 5064,
+ "5065" => 5065,
+ "5066" => 5066,
+ "5067" => 5067,
+ "5068" => 5068,
+ "5069" => 5069,
+ "5070" => 5070,
+ "5071" => 5071,
+ "5072" => 5072,
+ "5073" => 5073,
+ "5074" => 5074,
+ "5075" => 5075,
+ "5076" => 5076,
+ "5077" => 5077,
+ "5078" => 5078,
+ "5079" => 5079,
+ "5080" => 5080,
+ "5081" => 5081,
+ "5082" => 5082,
+ "5083" => 5083,
+ "5084" => 5084,
+ "5085" => 5085,
+ "5086" => 5086,
+ "5087" => 5087,
+ "5088" => 5088,
+ "5089" => 5089,
+ "5090" => 5090,
+ "5091" => 5091,
+ "5092" => 5092,
+ "5093" => 5093,
+ "5094" => 5094,
+ "5095" => 5095,
+ "5096" => 5096,
+ "5097" => 5097,
+ "5098" => 5098,
+ "5099" => 5099,
+ "5100" => 5100,
+ "5101" => 5101,
+ "5102" => 5102,
+ "5103" => 5103,
+ "5104" => 5104,
+ "5105" => 5105,
+ "5106" => 5106,
+ "5107" => 5107,
+ "5108" => 5108,
+ "5109" => 5109,
+ "5110" => 5110,
+ "5111" => 5111,
+ "5112" => 5112,
+ "5113" => 5113,
+ "5114" => 5114,
+ "5115" => 5115,
+ "5116" => 5116,
+ "5117" => 5117,
+ "5118" => 5118,
+ "5119" => 5119,
+ "5120" => 5120,
+ "5121" => 5121,
+ "5122" => 5122,
+ "5123" => 5123,
+ "5124" => 5124,
+ "5125" => 5125,
+ "5126" => 5126,
+ "5127" => 5127,
+ "5128" => 5128,
+ "5129" => 5129,
+ "5130" => 5130,
+ "5131" => 5131,
+ "5132" => 5132,
+ "5133" => 5133,
+ "5134" => 5134,
+ "5135" => 5135,
+ "5136" => 5136,
+ "5137" => 5137,
+ "5138" => 5138,
+ "5139" => 5139,
+ "5140" => 5140,
+ "5141" => 5141,
+ "5142" => 5142,
+ "5143" => 5143,
+ "5144" => 5144,
+ "5145" => 5145,
+ "5146" => 5146,
+ "5147" => 5147,
+ "5148" => 5148,
+ "5149" => 5149,
+ "5150" => 5150,
+ "5151" => 5151,
+ "5152" => 5152,
+ "5153" => 5153,
+ "5154" => 5154,
+ "5155" => 5155,
+ "5156" => 5156,
+ "5157" => 5157,
+ "5158" => 5158,
+ "5159" => 5159,
+ "5160" => 5160,
+ "5161" => 5161,
+ "5162" => 5162,
+ "5163" => 5163,
+ "5164" => 5164,
+ "5165" => 5165,
+ "5166" => 5166,
+ "5167" => 5167,
+ "5168" => 5168,
+ "5169" => 5169,
+ "5170" => 5170,
+ "5171" => 5171,
+ "5172" => 5172,
+ "5173" => 5173,
+ "5174" => 5174,
+ "5175" => 5175,
+ "5176" => 5176,
+ "5177" => 5177,
+ "5178" => 5178,
+ "5179" => 5179,
+ "5180" => 5180,
+ "5181" => 5181,
+ "5182" => 5182,
+ "5183" => 5183,
+ "5184" => 5184,
+ "5185" => 5185,
+ "5186" => 5186,
+ "5187" => 5187,
+ "5188" => 5188,
+ "5189" => 5189,
+ "5190" => 5190,
+ "5191" => 5191,
+ "5192" => 5192,
+ "5193" => 5193,
+ "5194" => 5194,
+ "5195" => 5195,
+ "5196" => 5196,
+ "5197" => 5197,
+ "5198" => 5198,
+ _ => 5199,
+ }
+}
diff --git a/tests/ui/issues/issue-73112.rs b/tests/ui/issues/issue-73112.rs
new file mode 100644
index 000000000..cc7be9c95
--- /dev/null
+++ b/tests/ui/issues/issue-73112.rs
@@ -0,0 +1,13 @@
+// aux-build:issue-73112.rs
+
+extern crate issue_73112;
+
+fn main() {
+ use issue_73112::PageTable;
+
+ #[repr(C, packed)]
+ struct SomeStruct {
+ //~^ ERROR packed type cannot transitively contain a `#[repr(align)]` type [E0588]
+ page_table: PageTable,
+ }
+}
diff --git a/tests/ui/issues/issue-73112.stderr b/tests/ui/issues/issue-73112.stderr
new file mode 100644
index 000000000..4b8b97966
--- /dev/null
+++ b/tests/ui/issues/issue-73112.stderr
@@ -0,0 +1,15 @@
+error[E0588]: packed type cannot transitively contain a `#[repr(align)]` type
+ --> $DIR/issue-73112.rs:9:5
+ |
+LL | struct SomeStruct {
+ | ^^^^^^^^^^^^^^^^^
+ |
+note: `PageTable` has a `#[repr(align)]` attribute
+ --> $DIR/auxiliary/issue-73112.rs:8:1
+ |
+LL | pub struct PageTable {
+ | ^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0588`.
diff --git a/tests/ui/issues/issue-73229.rs b/tests/ui/issues/issue-73229.rs
new file mode 100644
index 000000000..35346199a
--- /dev/null
+++ b/tests/ui/issues/issue-73229.rs
@@ -0,0 +1,33 @@
+// check-pass
+
+fn any<T>() -> T {
+ loop {}
+}
+
+trait Foo {
+ type V;
+}
+
+trait Callback<T: Foo>: Fn(&T, &T::V) {}
+impl<T: Foo, F: Fn(&T, &T::V)> Callback<T> for F {}
+
+struct Bar<T: Foo> {
+ callback: Box<dyn Callback<T>>,
+}
+
+impl<T: Foo> Bar<T> {
+ fn event(&self) {
+ (self.callback)(any(), any());
+ }
+}
+
+struct A;
+struct B;
+impl Foo for A {
+ type V = B;
+}
+
+fn main() {
+ let foo = Bar::<A> { callback: Box::new(|_: &A, _: &B| ()) };
+ foo.event();
+}
diff --git a/tests/ui/issues/issue-7344.rs b/tests/ui/issues/issue-7344.rs
new file mode 100644
index 000000000..f1727d0c1
--- /dev/null
+++ b/tests/ui/issues/issue-7344.rs
@@ -0,0 +1,22 @@
+// run-pass
+#![allow(unused_must_use)]
+// pretty-expanded FIXME #23616
+
+#![allow(unreachable_code)]
+
+fn foo() -> bool { false }
+
+fn bar() {
+ return;
+ !foo();
+}
+
+fn baz() {
+ return;
+ if "" == "" {}
+}
+
+pub fn main() {
+ bar();
+ baz();
+}
diff --git a/tests/ui/issues/issue-7364.rs b/tests/ui/issues/issue-7364.rs
new file mode 100644
index 000000000..79642bd41
--- /dev/null
+++ b/tests/ui/issues/issue-7364.rs
@@ -0,0 +1,7 @@
+use std::cell::RefCell;
+
+// Regression test for issue 7364
+static boxed: Box<RefCell<isize>> = Box::new(RefCell::new(0));
+//~^ ERROR `RefCell<isize>` cannot be shared between threads safely [E0277]
+
+fn main() { }
diff --git a/tests/ui/issues/issue-7364.stderr b/tests/ui/issues/issue-7364.stderr
new file mode 100644
index 000000000..5dc8c2b60
--- /dev/null
+++ b/tests/ui/issues/issue-7364.stderr
@@ -0,0 +1,14 @@
+error[E0277]: `RefCell<isize>` cannot be shared between threads safely
+ --> $DIR/issue-7364.rs:4:15
+ |
+LL | static boxed: Box<RefCell<isize>> = Box::new(RefCell::new(0));
+ | ^^^^^^^^^^^^^^^^^^^ `RefCell<isize>` cannot be shared between threads safely
+ |
+ = help: the trait `Sync` is not implemented for `RefCell<isize>`
+ = note: required for `Unique<RefCell<isize>>` to implement `Sync`
+ = note: required because it appears within the type `Box<RefCell<isize>>`
+ = note: shared static variables must have a type that implements `Sync`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-74082.rs b/tests/ui/issues/issue-74082.rs
new file mode 100644
index 000000000..e3e400c79
--- /dev/null
+++ b/tests/ui/issues/issue-74082.rs
@@ -0,0 +1,9 @@
+#![allow(dead_code)]
+
+#[repr(i128)] //~ ERROR: attribute should be applied to an enum
+struct Foo;
+
+#[repr(u128)] //~ ERROR: attribute should be applied to an enum
+struct Bar;
+
+fn main() {}
diff --git a/tests/ui/issues/issue-74082.stderr b/tests/ui/issues/issue-74082.stderr
new file mode 100644
index 000000000..12f5a3b27
--- /dev/null
+++ b/tests/ui/issues/issue-74082.stderr
@@ -0,0 +1,19 @@
+error[E0517]: attribute should be applied to an enum
+ --> $DIR/issue-74082.rs:3:8
+ |
+LL | #[repr(i128)]
+ | ^^^^
+LL | struct Foo;
+ | ----------- not an enum
+
+error[E0517]: attribute should be applied to an enum
+ --> $DIR/issue-74082.rs:6:8
+ |
+LL | #[repr(u128)]
+ | ^^^^
+LL | struct Bar;
+ | ----------- not an enum
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0517`.
diff --git a/tests/ui/issues/issue-74236/auxiliary/dep.rs b/tests/ui/issues/issue-74236/auxiliary/dep.rs
new file mode 100644
index 000000000..45f2601d3
--- /dev/null
+++ b/tests/ui/issues/issue-74236/auxiliary/dep.rs
@@ -0,0 +1,8 @@
+// edition:2018
+
+mod private { pub struct Pub; }
+
+// Reexport built-in attribute without a DefId (requires Rust 2018).
+pub use cfg_attr as attr;
+// This export needs to be after the built-in attribute to trigger the bug.
+pub use private::Pub as Renamed;
diff --git a/tests/ui/issues/issue-74236/main.rs b/tests/ui/issues/issue-74236/main.rs
new file mode 100644
index 000000000..daa7cfcf9
--- /dev/null
+++ b/tests/ui/issues/issue-74236/main.rs
@@ -0,0 +1,9 @@
+// edition:2018
+// aux-build:dep.rs
+// compile-flags:--extern dep
+
+fn main() {
+ // Trigger an error that will print the path of dep::private::Pub (as "dep::Renamed").
+ let () = dep::Renamed;
+ //~^ ERROR mismatched types
+}
diff --git a/tests/ui/issues/issue-74236/main.stderr b/tests/ui/issues/issue-74236/main.stderr
new file mode 100644
index 000000000..55e94ae72
--- /dev/null
+++ b/tests/ui/issues/issue-74236/main.stderr
@@ -0,0 +1,11 @@
+error[E0308]: mismatched types
+ --> $DIR/main.rs:7:9
+ |
+LL | let () = dep::Renamed;
+ | ^^ ------------ this expression has type `Renamed`
+ | |
+ | expected struct `Renamed`, found `()`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-74564-if-expr-stack-overflow.rs b/tests/ui/issues/issue-74564-if-expr-stack-overflow.rs
new file mode 100644
index 000000000..36e993260
--- /dev/null
+++ b/tests/ui/issues/issue-74564-if-expr-stack-overflow.rs
@@ -0,0 +1,10419 @@
+// build-pass
+// ignore-tidy-filelength
+#![crate_type = "rlib"]
+
+fn banana(v: &str) -> u32 {
+ if v == "1" {
+ 1
+ } else if v == "2" {
+ 2
+ } else if v == "3" {
+ 3
+ } else if v == "4" {
+ 4
+ } else if v == "5" {
+ 5
+ } else if v == "6" {
+ 6
+ } else if v == "7" {
+ 7
+ } else if v == "8" {
+ 8
+ } else if v == "9" {
+ 9
+ } else if v == "10" {
+ 10
+ } else if v == "11" {
+ 11
+ } else if v == "12" {
+ 12
+ } else if v == "13" {
+ 13
+ } else if v == "14" {
+ 14
+ } else if v == "15" {
+ 15
+ } else if v == "16" {
+ 16
+ } else if v == "17" {
+ 17
+ } else if v == "18" {
+ 18
+ } else if v == "19" {
+ 19
+ } else if v == "20" {
+ 20
+ } else if v == "21" {
+ 21
+ } else if v == "22" {
+ 22
+ } else if v == "23" {
+ 23
+ } else if v == "24" {
+ 24
+ } else if v == "25" {
+ 25
+ } else if v == "26" {
+ 26
+ } else if v == "27" {
+ 27
+ } else if v == "28" {
+ 28
+ } else if v == "29" {
+ 29
+ } else if v == "30" {
+ 30
+ } else if v == "31" {
+ 31
+ } else if v == "32" {
+ 32
+ } else if v == "33" {
+ 33
+ } else if v == "34" {
+ 34
+ } else if v == "35" {
+ 35
+ } else if v == "36" {
+ 36
+ } else if v == "37" {
+ 37
+ } else if v == "38" {
+ 38
+ } else if v == "39" {
+ 39
+ } else if v == "40" {
+ 40
+ } else if v == "41" {
+ 41
+ } else if v == "42" {
+ 42
+ } else if v == "43" {
+ 43
+ } else if v == "44" {
+ 44
+ } else if v == "45" {
+ 45
+ } else if v == "46" {
+ 46
+ } else if v == "47" {
+ 47
+ } else if v == "48" {
+ 48
+ } else if v == "49" {
+ 49
+ } else if v == "50" {
+ 50
+ } else if v == "51" {
+ 51
+ } else if v == "52" {
+ 52
+ } else if v == "53" {
+ 53
+ } else if v == "54" {
+ 54
+ } else if v == "55" {
+ 55
+ } else if v == "56" {
+ 56
+ } else if v == "57" {
+ 57
+ } else if v == "58" {
+ 58
+ } else if v == "59" {
+ 59
+ } else if v == "60" {
+ 60
+ } else if v == "61" {
+ 61
+ } else if v == "62" {
+ 62
+ } else if v == "63" {
+ 63
+ } else if v == "64" {
+ 64
+ } else if v == "65" {
+ 65
+ } else if v == "66" {
+ 66
+ } else if v == "67" {
+ 67
+ } else if v == "68" {
+ 68
+ } else if v == "69" {
+ 69
+ } else if v == "70" {
+ 70
+ } else if v == "71" {
+ 71
+ } else if v == "72" {
+ 72
+ } else if v == "73" {
+ 73
+ } else if v == "74" {
+ 74
+ } else if v == "75" {
+ 75
+ } else if v == "76" {
+ 76
+ } else if v == "77" {
+ 77
+ } else if v == "78" {
+ 78
+ } else if v == "79" {
+ 79
+ } else if v == "80" {
+ 80
+ } else if v == "81" {
+ 81
+ } else if v == "82" {
+ 82
+ } else if v == "83" {
+ 83
+ } else if v == "84" {
+ 84
+ } else if v == "85" {
+ 85
+ } else if v == "86" {
+ 86
+ } else if v == "87" {
+ 87
+ } else if v == "88" {
+ 88
+ } else if v == "89" {
+ 89
+ } else if v == "90" {
+ 90
+ } else if v == "91" {
+ 91
+ } else if v == "92" {
+ 92
+ } else if v == "93" {
+ 93
+ } else if v == "94" {
+ 94
+ } else if v == "95" {
+ 95
+ } else if v == "96" {
+ 96
+ } else if v == "97" {
+ 97
+ } else if v == "98" {
+ 98
+ } else if v == "99" {
+ 99
+ } else if v == "100" {
+ 100
+ } else if v == "101" {
+ 101
+ } else if v == "102" {
+ 102
+ } else if v == "103" {
+ 103
+ } else if v == "104" {
+ 104
+ } else if v == "105" {
+ 105
+ } else if v == "106" {
+ 106
+ } else if v == "107" {
+ 107
+ } else if v == "108" {
+ 108
+ } else if v == "109" {
+ 109
+ } else if v == "110" {
+ 110
+ } else if v == "111" {
+ 111
+ } else if v == "112" {
+ 112
+ } else if v == "113" {
+ 113
+ } else if v == "114" {
+ 114
+ } else if v == "115" {
+ 115
+ } else if v == "116" {
+ 116
+ } else if v == "117" {
+ 117
+ } else if v == "118" {
+ 118
+ } else if v == "119" {
+ 119
+ } else if v == "120" {
+ 120
+ } else if v == "121" {
+ 121
+ } else if v == "122" {
+ 122
+ } else if v == "123" {
+ 123
+ } else if v == "124" {
+ 124
+ } else if v == "125" {
+ 125
+ } else if v == "126" {
+ 126
+ } else if v == "127" {
+ 127
+ } else if v == "128" {
+ 128
+ } else if v == "129" {
+ 129
+ } else if v == "130" {
+ 130
+ } else if v == "131" {
+ 131
+ } else if v == "132" {
+ 132
+ } else if v == "133" {
+ 133
+ } else if v == "134" {
+ 134
+ } else if v == "135" {
+ 135
+ } else if v == "136" {
+ 136
+ } else if v == "137" {
+ 137
+ } else if v == "138" {
+ 138
+ } else if v == "139" {
+ 139
+ } else if v == "140" {
+ 140
+ } else if v == "141" {
+ 141
+ } else if v == "142" {
+ 142
+ } else if v == "143" {
+ 143
+ } else if v == "144" {
+ 144
+ } else if v == "145" {
+ 145
+ } else if v == "146" {
+ 146
+ } else if v == "147" {
+ 147
+ } else if v == "148" {
+ 148
+ } else if v == "149" {
+ 149
+ } else if v == "150" {
+ 150
+ } else if v == "151" {
+ 151
+ } else if v == "152" {
+ 152
+ } else if v == "153" {
+ 153
+ } else if v == "154" {
+ 154
+ } else if v == "155" {
+ 155
+ } else if v == "156" {
+ 156
+ } else if v == "157" {
+ 157
+ } else if v == "158" {
+ 158
+ } else if v == "159" {
+ 159
+ } else if v == "160" {
+ 160
+ } else if v == "161" {
+ 161
+ } else if v == "162" {
+ 162
+ } else if v == "163" {
+ 163
+ } else if v == "164" {
+ 164
+ } else if v == "165" {
+ 165
+ } else if v == "166" {
+ 166
+ } else if v == "167" {
+ 167
+ } else if v == "168" {
+ 168
+ } else if v == "169" {
+ 169
+ } else if v == "170" {
+ 170
+ } else if v == "171" {
+ 171
+ } else if v == "172" {
+ 172
+ } else if v == "173" {
+ 173
+ } else if v == "174" {
+ 174
+ } else if v == "175" {
+ 175
+ } else if v == "176" {
+ 176
+ } else if v == "177" {
+ 177
+ } else if v == "178" {
+ 178
+ } else if v == "179" {
+ 179
+ } else if v == "180" {
+ 180
+ } else if v == "181" {
+ 181
+ } else if v == "182" {
+ 182
+ } else if v == "183" {
+ 183
+ } else if v == "184" {
+ 184
+ } else if v == "185" {
+ 185
+ } else if v == "186" {
+ 186
+ } else if v == "187" {
+ 187
+ } else if v == "188" {
+ 188
+ } else if v == "189" {
+ 189
+ } else if v == "190" {
+ 190
+ } else if v == "191" {
+ 191
+ } else if v == "192" {
+ 192
+ } else if v == "193" {
+ 193
+ } else if v == "194" {
+ 194
+ } else if v == "195" {
+ 195
+ } else if v == "196" {
+ 196
+ } else if v == "197" {
+ 197
+ } else if v == "198" {
+ 198
+ } else if v == "199" {
+ 199
+ } else if v == "200" {
+ 200
+ } else if v == "201" {
+ 201
+ } else if v == "202" {
+ 202
+ } else if v == "203" {
+ 203
+ } else if v == "204" {
+ 204
+ } else if v == "205" {
+ 205
+ } else if v == "206" {
+ 206
+ } else if v == "207" {
+ 207
+ } else if v == "208" {
+ 208
+ } else if v == "209" {
+ 209
+ } else if v == "210" {
+ 210
+ } else if v == "211" {
+ 211
+ } else if v == "212" {
+ 212
+ } else if v == "213" {
+ 213
+ } else if v == "214" {
+ 214
+ } else if v == "215" {
+ 215
+ } else if v == "216" {
+ 216
+ } else if v == "217" {
+ 217
+ } else if v == "218" {
+ 218
+ } else if v == "219" {
+ 219
+ } else if v == "220" {
+ 220
+ } else if v == "221" {
+ 221
+ } else if v == "222" {
+ 222
+ } else if v == "223" {
+ 223
+ } else if v == "224" {
+ 224
+ } else if v == "225" {
+ 225
+ } else if v == "226" {
+ 226
+ } else if v == "227" {
+ 227
+ } else if v == "228" {
+ 228
+ } else if v == "229" {
+ 229
+ } else if v == "230" {
+ 230
+ } else if v == "231" {
+ 231
+ } else if v == "232" {
+ 232
+ } else if v == "233" {
+ 233
+ } else if v == "234" {
+ 234
+ } else if v == "235" {
+ 235
+ } else if v == "236" {
+ 236
+ } else if v == "237" {
+ 237
+ } else if v == "238" {
+ 238
+ } else if v == "239" {
+ 239
+ } else if v == "240" {
+ 240
+ } else if v == "241" {
+ 241
+ } else if v == "242" {
+ 242
+ } else if v == "243" {
+ 243
+ } else if v == "244" {
+ 244
+ } else if v == "245" {
+ 245
+ } else if v == "246" {
+ 246
+ } else if v == "247" {
+ 247
+ } else if v == "248" {
+ 248
+ } else if v == "249" {
+ 249
+ } else if v == "250" {
+ 250
+ } else if v == "251" {
+ 251
+ } else if v == "252" {
+ 252
+ } else if v == "253" {
+ 253
+ } else if v == "254" {
+ 254
+ } else if v == "255" {
+ 255
+ } else if v == "256" {
+ 256
+ } else if v == "257" {
+ 257
+ } else if v == "258" {
+ 258
+ } else if v == "259" {
+ 259
+ } else if v == "260" {
+ 260
+ } else if v == "261" {
+ 261
+ } else if v == "262" {
+ 262
+ } else if v == "263" {
+ 263
+ } else if v == "264" {
+ 264
+ } else if v == "265" {
+ 265
+ } else if v == "266" {
+ 266
+ } else if v == "267" {
+ 267
+ } else if v == "268" {
+ 268
+ } else if v == "269" {
+ 269
+ } else if v == "270" {
+ 270
+ } else if v == "271" {
+ 271
+ } else if v == "272" {
+ 272
+ } else if v == "273" {
+ 273
+ } else if v == "274" {
+ 274
+ } else if v == "275" {
+ 275
+ } else if v == "276" {
+ 276
+ } else if v == "277" {
+ 277
+ } else if v == "278" {
+ 278
+ } else if v == "279" {
+ 279
+ } else if v == "280" {
+ 280
+ } else if v == "281" {
+ 281
+ } else if v == "282" {
+ 282
+ } else if v == "283" {
+ 283
+ } else if v == "284" {
+ 284
+ } else if v == "285" {
+ 285
+ } else if v == "286" {
+ 286
+ } else if v == "287" {
+ 287
+ } else if v == "288" {
+ 288
+ } else if v == "289" {
+ 289
+ } else if v == "290" {
+ 290
+ } else if v == "291" {
+ 291
+ } else if v == "292" {
+ 292
+ } else if v == "293" {
+ 293
+ } else if v == "294" {
+ 294
+ } else if v == "295" {
+ 295
+ } else if v == "296" {
+ 296
+ } else if v == "297" {
+ 297
+ } else if v == "298" {
+ 298
+ } else if v == "299" {
+ 299
+ } else if v == "300" {
+ 300
+ } else if v == "301" {
+ 301
+ } else if v == "302" {
+ 302
+ } else if v == "303" {
+ 303
+ } else if v == "304" {
+ 304
+ } else if v == "305" {
+ 305
+ } else if v == "306" {
+ 306
+ } else if v == "307" {
+ 307
+ } else if v == "308" {
+ 308
+ } else if v == "309" {
+ 309
+ } else if v == "310" {
+ 310
+ } else if v == "311" {
+ 311
+ } else if v == "312" {
+ 312
+ } else if v == "313" {
+ 313
+ } else if v == "314" {
+ 314
+ } else if v == "315" {
+ 315
+ } else if v == "316" {
+ 316
+ } else if v == "317" {
+ 317
+ } else if v == "318" {
+ 318
+ } else if v == "319" {
+ 319
+ } else if v == "320" {
+ 320
+ } else if v == "321" {
+ 321
+ } else if v == "322" {
+ 322
+ } else if v == "323" {
+ 323
+ } else if v == "324" {
+ 324
+ } else if v == "325" {
+ 325
+ } else if v == "326" {
+ 326
+ } else if v == "327" {
+ 327
+ } else if v == "328" {
+ 328
+ } else if v == "329" {
+ 329
+ } else if v == "330" {
+ 330
+ } else if v == "331" {
+ 331
+ } else if v == "332" {
+ 332
+ } else if v == "333" {
+ 333
+ } else if v == "334" {
+ 334
+ } else if v == "335" {
+ 335
+ } else if v == "336" {
+ 336
+ } else if v == "337" {
+ 337
+ } else if v == "338" {
+ 338
+ } else if v == "339" {
+ 339
+ } else if v == "340" {
+ 340
+ } else if v == "341" {
+ 341
+ } else if v == "342" {
+ 342
+ } else if v == "343" {
+ 343
+ } else if v == "344" {
+ 344
+ } else if v == "345" {
+ 345
+ } else if v == "346" {
+ 346
+ } else if v == "347" {
+ 347
+ } else if v == "348" {
+ 348
+ } else if v == "349" {
+ 349
+ } else if v == "350" {
+ 350
+ } else if v == "351" {
+ 351
+ } else if v == "352" {
+ 352
+ } else if v == "353" {
+ 353
+ } else if v == "354" {
+ 354
+ } else if v == "355" {
+ 355
+ } else if v == "356" {
+ 356
+ } else if v == "357" {
+ 357
+ } else if v == "358" {
+ 358
+ } else if v == "359" {
+ 359
+ } else if v == "360" {
+ 360
+ } else if v == "361" {
+ 361
+ } else if v == "362" {
+ 362
+ } else if v == "363" {
+ 363
+ } else if v == "364" {
+ 364
+ } else if v == "365" {
+ 365
+ } else if v == "366" {
+ 366
+ } else if v == "367" {
+ 367
+ } else if v == "368" {
+ 368
+ } else if v == "369" {
+ 369
+ } else if v == "370" {
+ 370
+ } else if v == "371" {
+ 371
+ } else if v == "372" {
+ 372
+ } else if v == "373" {
+ 373
+ } else if v == "374" {
+ 374
+ } else if v == "375" {
+ 375
+ } else if v == "376" {
+ 376
+ } else if v == "377" {
+ 377
+ } else if v == "378" {
+ 378
+ } else if v == "379" {
+ 379
+ } else if v == "380" {
+ 380
+ } else if v == "381" {
+ 381
+ } else if v == "382" {
+ 382
+ } else if v == "383" {
+ 383
+ } else if v == "384" {
+ 384
+ } else if v == "385" {
+ 385
+ } else if v == "386" {
+ 386
+ } else if v == "387" {
+ 387
+ } else if v == "388" {
+ 388
+ } else if v == "389" {
+ 389
+ } else if v == "390" {
+ 390
+ } else if v == "391" {
+ 391
+ } else if v == "392" {
+ 392
+ } else if v == "393" {
+ 393
+ } else if v == "394" {
+ 394
+ } else if v == "395" {
+ 395
+ } else if v == "396" {
+ 396
+ } else if v == "397" {
+ 397
+ } else if v == "398" {
+ 398
+ } else if v == "399" {
+ 399
+ } else if v == "400" {
+ 400
+ } else if v == "401" {
+ 401
+ } else if v == "402" {
+ 402
+ } else if v == "403" {
+ 403
+ } else if v == "404" {
+ 404
+ } else if v == "405" {
+ 405
+ } else if v == "406" {
+ 406
+ } else if v == "407" {
+ 407
+ } else if v == "408" {
+ 408
+ } else if v == "409" {
+ 409
+ } else if v == "410" {
+ 410
+ } else if v == "411" {
+ 411
+ } else if v == "412" {
+ 412
+ } else if v == "413" {
+ 413
+ } else if v == "414" {
+ 414
+ } else if v == "415" {
+ 415
+ } else if v == "416" {
+ 416
+ } else if v == "417" {
+ 417
+ } else if v == "418" {
+ 418
+ } else if v == "419" {
+ 419
+ } else if v == "420" {
+ 420
+ } else if v == "421" {
+ 421
+ } else if v == "422" {
+ 422
+ } else if v == "423" {
+ 423
+ } else if v == "424" {
+ 424
+ } else if v == "425" {
+ 425
+ } else if v == "426" {
+ 426
+ } else if v == "427" {
+ 427
+ } else if v == "428" {
+ 428
+ } else if v == "429" {
+ 429
+ } else if v == "430" {
+ 430
+ } else if v == "431" {
+ 431
+ } else if v == "432" {
+ 432
+ } else if v == "433" {
+ 433
+ } else if v == "434" {
+ 434
+ } else if v == "435" {
+ 435
+ } else if v == "436" {
+ 436
+ } else if v == "437" {
+ 437
+ } else if v == "438" {
+ 438
+ } else if v == "439" {
+ 439
+ } else if v == "440" {
+ 440
+ } else if v == "441" {
+ 441
+ } else if v == "442" {
+ 442
+ } else if v == "443" {
+ 443
+ } else if v == "444" {
+ 444
+ } else if v == "445" {
+ 445
+ } else if v == "446" {
+ 446
+ } else if v == "447" {
+ 447
+ } else if v == "448" {
+ 448
+ } else if v == "449" {
+ 449
+ } else if v == "450" {
+ 450
+ } else if v == "451" {
+ 451
+ } else if v == "452" {
+ 452
+ } else if v == "453" {
+ 453
+ } else if v == "454" {
+ 454
+ } else if v == "455" {
+ 455
+ } else if v == "456" {
+ 456
+ } else if v == "457" {
+ 457
+ } else if v == "458" {
+ 458
+ } else if v == "459" {
+ 459
+ } else if v == "460" {
+ 460
+ } else if v == "461" {
+ 461
+ } else if v == "462" {
+ 462
+ } else if v == "463" {
+ 463
+ } else if v == "464" {
+ 464
+ } else if v == "465" {
+ 465
+ } else if v == "466" {
+ 466
+ } else if v == "467" {
+ 467
+ } else if v == "468" {
+ 468
+ } else if v == "469" {
+ 469
+ } else if v == "470" {
+ 470
+ } else if v == "471" {
+ 471
+ } else if v == "472" {
+ 472
+ } else if v == "473" {
+ 473
+ } else if v == "474" {
+ 474
+ } else if v == "475" {
+ 475
+ } else if v == "476" {
+ 476
+ } else if v == "477" {
+ 477
+ } else if v == "478" {
+ 478
+ } else if v == "479" {
+ 479
+ } else if v == "480" {
+ 480
+ } else if v == "481" {
+ 481
+ } else if v == "482" {
+ 482
+ } else if v == "483" {
+ 483
+ } else if v == "484" {
+ 484
+ } else if v == "485" {
+ 485
+ } else if v == "486" {
+ 486
+ } else if v == "487" {
+ 487
+ } else if v == "488" {
+ 488
+ } else if v == "489" {
+ 489
+ } else if v == "490" {
+ 490
+ } else if v == "491" {
+ 491
+ } else if v == "492" {
+ 492
+ } else if v == "493" {
+ 493
+ } else if v == "494" {
+ 494
+ } else if v == "495" {
+ 495
+ } else if v == "496" {
+ 496
+ } else if v == "497" {
+ 497
+ } else if v == "498" {
+ 498
+ } else if v == "499" {
+ 499
+ } else if v == "500" {
+ 500
+ } else if v == "501" {
+ 501
+ } else if v == "502" {
+ 502
+ } else if v == "503" {
+ 503
+ } else if v == "504" {
+ 504
+ } else if v == "505" {
+ 505
+ } else if v == "506" {
+ 506
+ } else if v == "507" {
+ 507
+ } else if v == "508" {
+ 508
+ } else if v == "509" {
+ 509
+ } else if v == "510" {
+ 510
+ } else if v == "511" {
+ 511
+ } else if v == "512" {
+ 512
+ } else if v == "513" {
+ 513
+ } else if v == "514" {
+ 514
+ } else if v == "515" {
+ 515
+ } else if v == "516" {
+ 516
+ } else if v == "517" {
+ 517
+ } else if v == "518" {
+ 518
+ } else if v == "519" {
+ 519
+ } else if v == "520" {
+ 520
+ } else if v == "521" {
+ 521
+ } else if v == "522" {
+ 522
+ } else if v == "523" {
+ 523
+ } else if v == "524" {
+ 524
+ } else if v == "525" {
+ 525
+ } else if v == "526" {
+ 526
+ } else if v == "527" {
+ 527
+ } else if v == "528" {
+ 528
+ } else if v == "529" {
+ 529
+ } else if v == "530" {
+ 530
+ } else if v == "531" {
+ 531
+ } else if v == "532" {
+ 532
+ } else if v == "533" {
+ 533
+ } else if v == "534" {
+ 534
+ } else if v == "535" {
+ 535
+ } else if v == "536" {
+ 536
+ } else if v == "537" {
+ 537
+ } else if v == "538" {
+ 538
+ } else if v == "539" {
+ 539
+ } else if v == "540" {
+ 540
+ } else if v == "541" {
+ 541
+ } else if v == "542" {
+ 542
+ } else if v == "543" {
+ 543
+ } else if v == "544" {
+ 544
+ } else if v == "545" {
+ 545
+ } else if v == "546" {
+ 546
+ } else if v == "547" {
+ 547
+ } else if v == "548" {
+ 548
+ } else if v == "549" {
+ 549
+ } else if v == "550" {
+ 550
+ } else if v == "551" {
+ 551
+ } else if v == "552" {
+ 552
+ } else if v == "553" {
+ 553
+ } else if v == "554" {
+ 554
+ } else if v == "555" {
+ 555
+ } else if v == "556" {
+ 556
+ } else if v == "557" {
+ 557
+ } else if v == "558" {
+ 558
+ } else if v == "559" {
+ 559
+ } else if v == "560" {
+ 560
+ } else if v == "561" {
+ 561
+ } else if v == "562" {
+ 562
+ } else if v == "563" {
+ 563
+ } else if v == "564" {
+ 564
+ } else if v == "565" {
+ 565
+ } else if v == "566" {
+ 566
+ } else if v == "567" {
+ 567
+ } else if v == "568" {
+ 568
+ } else if v == "569" {
+ 569
+ } else if v == "570" {
+ 570
+ } else if v == "571" {
+ 571
+ } else if v == "572" {
+ 572
+ } else if v == "573" {
+ 573
+ } else if v == "574" {
+ 574
+ } else if v == "575" {
+ 575
+ } else if v == "576" {
+ 576
+ } else if v == "577" {
+ 577
+ } else if v == "578" {
+ 578
+ } else if v == "579" {
+ 579
+ } else if v == "580" {
+ 580
+ } else if v == "581" {
+ 581
+ } else if v == "582" {
+ 582
+ } else if v == "583" {
+ 583
+ } else if v == "584" {
+ 584
+ } else if v == "585" {
+ 585
+ } else if v == "586" {
+ 586
+ } else if v == "587" {
+ 587
+ } else if v == "588" {
+ 588
+ } else if v == "589" {
+ 589
+ } else if v == "590" {
+ 590
+ } else if v == "591" {
+ 591
+ } else if v == "592" {
+ 592
+ } else if v == "593" {
+ 593
+ } else if v == "594" {
+ 594
+ } else if v == "595" {
+ 595
+ } else if v == "596" {
+ 596
+ } else if v == "597" {
+ 597
+ } else if v == "598" {
+ 598
+ } else if v == "599" {
+ 599
+ } else if v == "600" {
+ 600
+ } else if v == "601" {
+ 601
+ } else if v == "602" {
+ 602
+ } else if v == "603" {
+ 603
+ } else if v == "604" {
+ 604
+ } else if v == "605" {
+ 605
+ } else if v == "606" {
+ 606
+ } else if v == "607" {
+ 607
+ } else if v == "608" {
+ 608
+ } else if v == "609" {
+ 609
+ } else if v == "610" {
+ 610
+ } else if v == "611" {
+ 611
+ } else if v == "612" {
+ 612
+ } else if v == "613" {
+ 613
+ } else if v == "614" {
+ 614
+ } else if v == "615" {
+ 615
+ } else if v == "616" {
+ 616
+ } else if v == "617" {
+ 617
+ } else if v == "618" {
+ 618
+ } else if v == "619" {
+ 619
+ } else if v == "620" {
+ 620
+ } else if v == "621" {
+ 621
+ } else if v == "622" {
+ 622
+ } else if v == "623" {
+ 623
+ } else if v == "624" {
+ 624
+ } else if v == "625" {
+ 625
+ } else if v == "626" {
+ 626
+ } else if v == "627" {
+ 627
+ } else if v == "628" {
+ 628
+ } else if v == "629" {
+ 629
+ } else if v == "630" {
+ 630
+ } else if v == "631" {
+ 631
+ } else if v == "632" {
+ 632
+ } else if v == "633" {
+ 633
+ } else if v == "634" {
+ 634
+ } else if v == "635" {
+ 635
+ } else if v == "636" {
+ 636
+ } else if v == "637" {
+ 637
+ } else if v == "638" {
+ 638
+ } else if v == "639" {
+ 639
+ } else if v == "640" {
+ 640
+ } else if v == "641" {
+ 641
+ } else if v == "642" {
+ 642
+ } else if v == "643" {
+ 643
+ } else if v == "644" {
+ 644
+ } else if v == "645" {
+ 645
+ } else if v == "646" {
+ 646
+ } else if v == "647" {
+ 647
+ } else if v == "648" {
+ 648
+ } else if v == "649" {
+ 649
+ } else if v == "650" {
+ 650
+ } else if v == "651" {
+ 651
+ } else if v == "652" {
+ 652
+ } else if v == "653" {
+ 653
+ } else if v == "654" {
+ 654
+ } else if v == "655" {
+ 655
+ } else if v == "656" {
+ 656
+ } else if v == "657" {
+ 657
+ } else if v == "658" {
+ 658
+ } else if v == "659" {
+ 659
+ } else if v == "660" {
+ 660
+ } else if v == "661" {
+ 661
+ } else if v == "662" {
+ 662
+ } else if v == "663" {
+ 663
+ } else if v == "664" {
+ 664
+ } else if v == "665" {
+ 665
+ } else if v == "666" {
+ 666
+ } else if v == "667" {
+ 667
+ } else if v == "668" {
+ 668
+ } else if v == "669" {
+ 669
+ } else if v == "670" {
+ 670
+ } else if v == "671" {
+ 671
+ } else if v == "672" {
+ 672
+ } else if v == "673" {
+ 673
+ } else if v == "674" {
+ 674
+ } else if v == "675" {
+ 675
+ } else if v == "676" {
+ 676
+ } else if v == "677" {
+ 677
+ } else if v == "678" {
+ 678
+ } else if v == "679" {
+ 679
+ } else if v == "680" {
+ 680
+ } else if v == "681" {
+ 681
+ } else if v == "682" {
+ 682
+ } else if v == "683" {
+ 683
+ } else if v == "684" {
+ 684
+ } else if v == "685" {
+ 685
+ } else if v == "686" {
+ 686
+ } else if v == "687" {
+ 687
+ } else if v == "688" {
+ 688
+ } else if v == "689" {
+ 689
+ } else if v == "690" {
+ 690
+ } else if v == "691" {
+ 691
+ } else if v == "692" {
+ 692
+ } else if v == "693" {
+ 693
+ } else if v == "694" {
+ 694
+ } else if v == "695" {
+ 695
+ } else if v == "696" {
+ 696
+ } else if v == "697" {
+ 697
+ } else if v == "698" {
+ 698
+ } else if v == "699" {
+ 699
+ } else if v == "700" {
+ 700
+ } else if v == "701" {
+ 701
+ } else if v == "702" {
+ 702
+ } else if v == "703" {
+ 703
+ } else if v == "704" {
+ 704
+ } else if v == "705" {
+ 705
+ } else if v == "706" {
+ 706
+ } else if v == "707" {
+ 707
+ } else if v == "708" {
+ 708
+ } else if v == "709" {
+ 709
+ } else if v == "710" {
+ 710
+ } else if v == "711" {
+ 711
+ } else if v == "712" {
+ 712
+ } else if v == "713" {
+ 713
+ } else if v == "714" {
+ 714
+ } else if v == "715" {
+ 715
+ } else if v == "716" {
+ 716
+ } else if v == "717" {
+ 717
+ } else if v == "718" {
+ 718
+ } else if v == "719" {
+ 719
+ } else if v == "720" {
+ 720
+ } else if v == "721" {
+ 721
+ } else if v == "722" {
+ 722
+ } else if v == "723" {
+ 723
+ } else if v == "724" {
+ 724
+ } else if v == "725" {
+ 725
+ } else if v == "726" {
+ 726
+ } else if v == "727" {
+ 727
+ } else if v == "728" {
+ 728
+ } else if v == "729" {
+ 729
+ } else if v == "730" {
+ 730
+ } else if v == "731" {
+ 731
+ } else if v == "732" {
+ 732
+ } else if v == "733" {
+ 733
+ } else if v == "734" {
+ 734
+ } else if v == "735" {
+ 735
+ } else if v == "736" {
+ 736
+ } else if v == "737" {
+ 737
+ } else if v == "738" {
+ 738
+ } else if v == "739" {
+ 739
+ } else if v == "740" {
+ 740
+ } else if v == "741" {
+ 741
+ } else if v == "742" {
+ 742
+ } else if v == "743" {
+ 743
+ } else if v == "744" {
+ 744
+ } else if v == "745" {
+ 745
+ } else if v == "746" {
+ 746
+ } else if v == "747" {
+ 747
+ } else if v == "748" {
+ 748
+ } else if v == "749" {
+ 749
+ } else if v == "750" {
+ 750
+ } else if v == "751" {
+ 751
+ } else if v == "752" {
+ 752
+ } else if v == "753" {
+ 753
+ } else if v == "754" {
+ 754
+ } else if v == "755" {
+ 755
+ } else if v == "756" {
+ 756
+ } else if v == "757" {
+ 757
+ } else if v == "758" {
+ 758
+ } else if v == "759" {
+ 759
+ } else if v == "760" {
+ 760
+ } else if v == "761" {
+ 761
+ } else if v == "762" {
+ 762
+ } else if v == "763" {
+ 763
+ } else if v == "764" {
+ 764
+ } else if v == "765" {
+ 765
+ } else if v == "766" {
+ 766
+ } else if v == "767" {
+ 767
+ } else if v == "768" {
+ 768
+ } else if v == "769" {
+ 769
+ } else if v == "770" {
+ 770
+ } else if v == "771" {
+ 771
+ } else if v == "772" {
+ 772
+ } else if v == "773" {
+ 773
+ } else if v == "774" {
+ 774
+ } else if v == "775" {
+ 775
+ } else if v == "776" {
+ 776
+ } else if v == "777" {
+ 777
+ } else if v == "778" {
+ 778
+ } else if v == "779" {
+ 779
+ } else if v == "780" {
+ 780
+ } else if v == "781" {
+ 781
+ } else if v == "782" {
+ 782
+ } else if v == "783" {
+ 783
+ } else if v == "784" {
+ 784
+ } else if v == "785" {
+ 785
+ } else if v == "786" {
+ 786
+ } else if v == "787" {
+ 787
+ } else if v == "788" {
+ 788
+ } else if v == "789" {
+ 789
+ } else if v == "790" {
+ 790
+ } else if v == "791" {
+ 791
+ } else if v == "792" {
+ 792
+ } else if v == "793" {
+ 793
+ } else if v == "794" {
+ 794
+ } else if v == "795" {
+ 795
+ } else if v == "796" {
+ 796
+ } else if v == "797" {
+ 797
+ } else if v == "798" {
+ 798
+ } else if v == "799" {
+ 799
+ } else if v == "800" {
+ 800
+ } else if v == "801" {
+ 801
+ } else if v == "802" {
+ 802
+ } else if v == "803" {
+ 803
+ } else if v == "804" {
+ 804
+ } else if v == "805" {
+ 805
+ } else if v == "806" {
+ 806
+ } else if v == "807" {
+ 807
+ } else if v == "808" {
+ 808
+ } else if v == "809" {
+ 809
+ } else if v == "810" {
+ 810
+ } else if v == "811" {
+ 811
+ } else if v == "812" {
+ 812
+ } else if v == "813" {
+ 813
+ } else if v == "814" {
+ 814
+ } else if v == "815" {
+ 815
+ } else if v == "816" {
+ 816
+ } else if v == "817" {
+ 817
+ } else if v == "818" {
+ 818
+ } else if v == "819" {
+ 819
+ } else if v == "820" {
+ 820
+ } else if v == "821" {
+ 821
+ } else if v == "822" {
+ 822
+ } else if v == "823" {
+ 823
+ } else if v == "824" {
+ 824
+ } else if v == "825" {
+ 825
+ } else if v == "826" {
+ 826
+ } else if v == "827" {
+ 827
+ } else if v == "828" {
+ 828
+ } else if v == "829" {
+ 829
+ } else if v == "830" {
+ 830
+ } else if v == "831" {
+ 831
+ } else if v == "832" {
+ 832
+ } else if v == "833" {
+ 833
+ } else if v == "834" {
+ 834
+ } else if v == "835" {
+ 835
+ } else if v == "836" {
+ 836
+ } else if v == "837" {
+ 837
+ } else if v == "838" {
+ 838
+ } else if v == "839" {
+ 839
+ } else if v == "840" {
+ 840
+ } else if v == "841" {
+ 841
+ } else if v == "842" {
+ 842
+ } else if v == "843" {
+ 843
+ } else if v == "844" {
+ 844
+ } else if v == "845" {
+ 845
+ } else if v == "846" {
+ 846
+ } else if v == "847" {
+ 847
+ } else if v == "848" {
+ 848
+ } else if v == "849" {
+ 849
+ } else if v == "850" {
+ 850
+ } else if v == "851" {
+ 851
+ } else if v == "852" {
+ 852
+ } else if v == "853" {
+ 853
+ } else if v == "854" {
+ 854
+ } else if v == "855" {
+ 855
+ } else if v == "856" {
+ 856
+ } else if v == "857" {
+ 857
+ } else if v == "858" {
+ 858
+ } else if v == "859" {
+ 859
+ } else if v == "860" {
+ 860
+ } else if v == "861" {
+ 861
+ } else if v == "862" {
+ 862
+ } else if v == "863" {
+ 863
+ } else if v == "864" {
+ 864
+ } else if v == "865" {
+ 865
+ } else if v == "866" {
+ 866
+ } else if v == "867" {
+ 867
+ } else if v == "868" {
+ 868
+ } else if v == "869" {
+ 869
+ } else if v == "870" {
+ 870
+ } else if v == "871" {
+ 871
+ } else if v == "872" {
+ 872
+ } else if v == "873" {
+ 873
+ } else if v == "874" {
+ 874
+ } else if v == "875" {
+ 875
+ } else if v == "876" {
+ 876
+ } else if v == "877" {
+ 877
+ } else if v == "878" {
+ 878
+ } else if v == "879" {
+ 879
+ } else if v == "880" {
+ 880
+ } else if v == "881" {
+ 881
+ } else if v == "882" {
+ 882
+ } else if v == "883" {
+ 883
+ } else if v == "884" {
+ 884
+ } else if v == "885" {
+ 885
+ } else if v == "886" {
+ 886
+ } else if v == "887" {
+ 887
+ } else if v == "888" {
+ 888
+ } else if v == "889" {
+ 889
+ } else if v == "890" {
+ 890
+ } else if v == "891" {
+ 891
+ } else if v == "892" {
+ 892
+ } else if v == "893" {
+ 893
+ } else if v == "894" {
+ 894
+ } else if v == "895" {
+ 895
+ } else if v == "896" {
+ 896
+ } else if v == "897" {
+ 897
+ } else if v == "898" {
+ 898
+ } else if v == "899" {
+ 899
+ } else if v == "900" {
+ 900
+ } else if v == "901" {
+ 901
+ } else if v == "902" {
+ 902
+ } else if v == "903" {
+ 903
+ } else if v == "904" {
+ 904
+ } else if v == "905" {
+ 905
+ } else if v == "906" {
+ 906
+ } else if v == "907" {
+ 907
+ } else if v == "908" {
+ 908
+ } else if v == "909" {
+ 909
+ } else if v == "910" {
+ 910
+ } else if v == "911" {
+ 911
+ } else if v == "912" {
+ 912
+ } else if v == "913" {
+ 913
+ } else if v == "914" {
+ 914
+ } else if v == "915" {
+ 915
+ } else if v == "916" {
+ 916
+ } else if v == "917" {
+ 917
+ } else if v == "918" {
+ 918
+ } else if v == "919" {
+ 919
+ } else if v == "920" {
+ 920
+ } else if v == "921" {
+ 921
+ } else if v == "922" {
+ 922
+ } else if v == "923" {
+ 923
+ } else if v == "924" {
+ 924
+ } else if v == "925" {
+ 925
+ } else if v == "926" {
+ 926
+ } else if v == "927" {
+ 927
+ } else if v == "928" {
+ 928
+ } else if v == "929" {
+ 929
+ } else if v == "930" {
+ 930
+ } else if v == "931" {
+ 931
+ } else if v == "932" {
+ 932
+ } else if v == "933" {
+ 933
+ } else if v == "934" {
+ 934
+ } else if v == "935" {
+ 935
+ } else if v == "936" {
+ 936
+ } else if v == "937" {
+ 937
+ } else if v == "938" {
+ 938
+ } else if v == "939" {
+ 939
+ } else if v == "940" {
+ 940
+ } else if v == "941" {
+ 941
+ } else if v == "942" {
+ 942
+ } else if v == "943" {
+ 943
+ } else if v == "944" {
+ 944
+ } else if v == "945" {
+ 945
+ } else if v == "946" {
+ 946
+ } else if v == "947" {
+ 947
+ } else if v == "948" {
+ 948
+ } else if v == "949" {
+ 949
+ } else if v == "950" {
+ 950
+ } else if v == "951" {
+ 951
+ } else if v == "952" {
+ 952
+ } else if v == "953" {
+ 953
+ } else if v == "954" {
+ 954
+ } else if v == "955" {
+ 955
+ } else if v == "956" {
+ 956
+ } else if v == "957" {
+ 957
+ } else if v == "958" {
+ 958
+ } else if v == "959" {
+ 959
+ } else if v == "960" {
+ 960
+ } else if v == "961" {
+ 961
+ } else if v == "962" {
+ 962
+ } else if v == "963" {
+ 963
+ } else if v == "964" {
+ 964
+ } else if v == "965" {
+ 965
+ } else if v == "966" {
+ 966
+ } else if v == "967" {
+ 967
+ } else if v == "968" {
+ 968
+ } else if v == "969" {
+ 969
+ } else if v == "970" {
+ 970
+ } else if v == "971" {
+ 971
+ } else if v == "972" {
+ 972
+ } else if v == "973" {
+ 973
+ } else if v == "974" {
+ 974
+ } else if v == "975" {
+ 975
+ } else if v == "976" {
+ 976
+ } else if v == "977" {
+ 977
+ } else if v == "978" {
+ 978
+ } else if v == "979" {
+ 979
+ } else if v == "980" {
+ 980
+ } else if v == "981" {
+ 981
+ } else if v == "982" {
+ 982
+ } else if v == "983" {
+ 983
+ } else if v == "984" {
+ 984
+ } else if v == "985" {
+ 985
+ } else if v == "986" {
+ 986
+ } else if v == "987" {
+ 987
+ } else if v == "988" {
+ 988
+ } else if v == "989" {
+ 989
+ } else if v == "990" {
+ 990
+ } else if v == "991" {
+ 991
+ } else if v == "992" {
+ 992
+ } else if v == "993" {
+ 993
+ } else if v == "994" {
+ 994
+ } else if v == "995" {
+ 995
+ } else if v == "996" {
+ 996
+ } else if v == "997" {
+ 997
+ } else if v == "998" {
+ 998
+ } else if v == "999" {
+ 999
+ } else if v == "1000" {
+ 1000
+ } else if v == "1001" {
+ 1001
+ } else if v == "1002" {
+ 1002
+ } else if v == "1003" {
+ 1003
+ } else if v == "1004" {
+ 1004
+ } else if v == "1005" {
+ 1005
+ } else if v == "1006" {
+ 1006
+ } else if v == "1007" {
+ 1007
+ } else if v == "1008" {
+ 1008
+ } else if v == "1009" {
+ 1009
+ } else if v == "1010" {
+ 1010
+ } else if v == "1011" {
+ 1011
+ } else if v == "1012" {
+ 1012
+ } else if v == "1013" {
+ 1013
+ } else if v == "1014" {
+ 1014
+ } else if v == "1015" {
+ 1015
+ } else if v == "1016" {
+ 1016
+ } else if v == "1017" {
+ 1017
+ } else if v == "1018" {
+ 1018
+ } else if v == "1019" {
+ 1019
+ } else if v == "1020" {
+ 1020
+ } else if v == "1021" {
+ 1021
+ } else if v == "1022" {
+ 1022
+ } else if v == "1023" {
+ 1023
+ } else if v == "1024" {
+ 1024
+ } else if v == "1025" {
+ 1025
+ } else if v == "1026" {
+ 1026
+ } else if v == "1027" {
+ 1027
+ } else if v == "1028" {
+ 1028
+ } else if v == "1029" {
+ 1029
+ } else if v == "1030" {
+ 1030
+ } else if v == "1031" {
+ 1031
+ } else if v == "1032" {
+ 1032
+ } else if v == "1033" {
+ 1033
+ } else if v == "1034" {
+ 1034
+ } else if v == "1035" {
+ 1035
+ } else if v == "1036" {
+ 1036
+ } else if v == "1037" {
+ 1037
+ } else if v == "1038" {
+ 1038
+ } else if v == "1039" {
+ 1039
+ } else if v == "1040" {
+ 1040
+ } else if v == "1041" {
+ 1041
+ } else if v == "1042" {
+ 1042
+ } else if v == "1043" {
+ 1043
+ } else if v == "1044" {
+ 1044
+ } else if v == "1045" {
+ 1045
+ } else if v == "1046" {
+ 1046
+ } else if v == "1047" {
+ 1047
+ } else if v == "1048" {
+ 1048
+ } else if v == "1049" {
+ 1049
+ } else if v == "1050" {
+ 1050
+ } else if v == "1051" {
+ 1051
+ } else if v == "1052" {
+ 1052
+ } else if v == "1053" {
+ 1053
+ } else if v == "1054" {
+ 1054
+ } else if v == "1055" {
+ 1055
+ } else if v == "1056" {
+ 1056
+ } else if v == "1057" {
+ 1057
+ } else if v == "1058" {
+ 1058
+ } else if v == "1059" {
+ 1059
+ } else if v == "1060" {
+ 1060
+ } else if v == "1061" {
+ 1061
+ } else if v == "1062" {
+ 1062
+ } else if v == "1063" {
+ 1063
+ } else if v == "1064" {
+ 1064
+ } else if v == "1065" {
+ 1065
+ } else if v == "1066" {
+ 1066
+ } else if v == "1067" {
+ 1067
+ } else if v == "1068" {
+ 1068
+ } else if v == "1069" {
+ 1069
+ } else if v == "1070" {
+ 1070
+ } else if v == "1071" {
+ 1071
+ } else if v == "1072" {
+ 1072
+ } else if v == "1073" {
+ 1073
+ } else if v == "1074" {
+ 1074
+ } else if v == "1075" {
+ 1075
+ } else if v == "1076" {
+ 1076
+ } else if v == "1077" {
+ 1077
+ } else if v == "1078" {
+ 1078
+ } else if v == "1079" {
+ 1079
+ } else if v == "1080" {
+ 1080
+ } else if v == "1081" {
+ 1081
+ } else if v == "1082" {
+ 1082
+ } else if v == "1083" {
+ 1083
+ } else if v == "1084" {
+ 1084
+ } else if v == "1085" {
+ 1085
+ } else if v == "1086" {
+ 1086
+ } else if v == "1087" {
+ 1087
+ } else if v == "1088" {
+ 1088
+ } else if v == "1089" {
+ 1089
+ } else if v == "1090" {
+ 1090
+ } else if v == "1091" {
+ 1091
+ } else if v == "1092" {
+ 1092
+ } else if v == "1093" {
+ 1093
+ } else if v == "1094" {
+ 1094
+ } else if v == "1095" {
+ 1095
+ } else if v == "1096" {
+ 1096
+ } else if v == "1097" {
+ 1097
+ } else if v == "1098" {
+ 1098
+ } else if v == "1099" {
+ 1099
+ } else if v == "1100" {
+ 1100
+ } else if v == "1101" {
+ 1101
+ } else if v == "1102" {
+ 1102
+ } else if v == "1103" {
+ 1103
+ } else if v == "1104" {
+ 1104
+ } else if v == "1105" {
+ 1105
+ } else if v == "1106" {
+ 1106
+ } else if v == "1107" {
+ 1107
+ } else if v == "1108" {
+ 1108
+ } else if v == "1109" {
+ 1109
+ } else if v == "1110" {
+ 1110
+ } else if v == "1111" {
+ 1111
+ } else if v == "1112" {
+ 1112
+ } else if v == "1113" {
+ 1113
+ } else if v == "1114" {
+ 1114
+ } else if v == "1115" {
+ 1115
+ } else if v == "1116" {
+ 1116
+ } else if v == "1117" {
+ 1117
+ } else if v == "1118" {
+ 1118
+ } else if v == "1119" {
+ 1119
+ } else if v == "1120" {
+ 1120
+ } else if v == "1121" {
+ 1121
+ } else if v == "1122" {
+ 1122
+ } else if v == "1123" {
+ 1123
+ } else if v == "1124" {
+ 1124
+ } else if v == "1125" {
+ 1125
+ } else if v == "1126" {
+ 1126
+ } else if v == "1127" {
+ 1127
+ } else if v == "1128" {
+ 1128
+ } else if v == "1129" {
+ 1129
+ } else if v == "1130" {
+ 1130
+ } else if v == "1131" {
+ 1131
+ } else if v == "1132" {
+ 1132
+ } else if v == "1133" {
+ 1133
+ } else if v == "1134" {
+ 1134
+ } else if v == "1135" {
+ 1135
+ } else if v == "1136" {
+ 1136
+ } else if v == "1137" {
+ 1137
+ } else if v == "1138" {
+ 1138
+ } else if v == "1139" {
+ 1139
+ } else if v == "1140" {
+ 1140
+ } else if v == "1141" {
+ 1141
+ } else if v == "1142" {
+ 1142
+ } else if v == "1143" {
+ 1143
+ } else if v == "1144" {
+ 1144
+ } else if v == "1145" {
+ 1145
+ } else if v == "1146" {
+ 1146
+ } else if v == "1147" {
+ 1147
+ } else if v == "1148" {
+ 1148
+ } else if v == "1149" {
+ 1149
+ } else if v == "1150" {
+ 1150
+ } else if v == "1151" {
+ 1151
+ } else if v == "1152" {
+ 1152
+ } else if v == "1153" {
+ 1153
+ } else if v == "1154" {
+ 1154
+ } else if v == "1155" {
+ 1155
+ } else if v == "1156" {
+ 1156
+ } else if v == "1157" {
+ 1157
+ } else if v == "1158" {
+ 1158
+ } else if v == "1159" {
+ 1159
+ } else if v == "1160" {
+ 1160
+ } else if v == "1161" {
+ 1161
+ } else if v == "1162" {
+ 1162
+ } else if v == "1163" {
+ 1163
+ } else if v == "1164" {
+ 1164
+ } else if v == "1165" {
+ 1165
+ } else if v == "1166" {
+ 1166
+ } else if v == "1167" {
+ 1167
+ } else if v == "1168" {
+ 1168
+ } else if v == "1169" {
+ 1169
+ } else if v == "1170" {
+ 1170
+ } else if v == "1171" {
+ 1171
+ } else if v == "1172" {
+ 1172
+ } else if v == "1173" {
+ 1173
+ } else if v == "1174" {
+ 1174
+ } else if v == "1175" {
+ 1175
+ } else if v == "1176" {
+ 1176
+ } else if v == "1177" {
+ 1177
+ } else if v == "1178" {
+ 1178
+ } else if v == "1179" {
+ 1179
+ } else if v == "1180" {
+ 1180
+ } else if v == "1181" {
+ 1181
+ } else if v == "1182" {
+ 1182
+ } else if v == "1183" {
+ 1183
+ } else if v == "1184" {
+ 1184
+ } else if v == "1185" {
+ 1185
+ } else if v == "1186" {
+ 1186
+ } else if v == "1187" {
+ 1187
+ } else if v == "1188" {
+ 1188
+ } else if v == "1189" {
+ 1189
+ } else if v == "1190" {
+ 1190
+ } else if v == "1191" {
+ 1191
+ } else if v == "1192" {
+ 1192
+ } else if v == "1193" {
+ 1193
+ } else if v == "1194" {
+ 1194
+ } else if v == "1195" {
+ 1195
+ } else if v == "1196" {
+ 1196
+ } else if v == "1197" {
+ 1197
+ } else if v == "1198" {
+ 1198
+ } else if v == "1199" {
+ 1199
+ } else if v == "1200" {
+ 1200
+ } else if v == "1201" {
+ 1201
+ } else if v == "1202" {
+ 1202
+ } else if v == "1203" {
+ 1203
+ } else if v == "1204" {
+ 1204
+ } else if v == "1205" {
+ 1205
+ } else if v == "1206" {
+ 1206
+ } else if v == "1207" {
+ 1207
+ } else if v == "1208" {
+ 1208
+ } else if v == "1209" {
+ 1209
+ } else if v == "1210" {
+ 1210
+ } else if v == "1211" {
+ 1211
+ } else if v == "1212" {
+ 1212
+ } else if v == "1213" {
+ 1213
+ } else if v == "1214" {
+ 1214
+ } else if v == "1215" {
+ 1215
+ } else if v == "1216" {
+ 1216
+ } else if v == "1217" {
+ 1217
+ } else if v == "1218" {
+ 1218
+ } else if v == "1219" {
+ 1219
+ } else if v == "1220" {
+ 1220
+ } else if v == "1221" {
+ 1221
+ } else if v == "1222" {
+ 1222
+ } else if v == "1223" {
+ 1223
+ } else if v == "1224" {
+ 1224
+ } else if v == "1225" {
+ 1225
+ } else if v == "1226" {
+ 1226
+ } else if v == "1227" {
+ 1227
+ } else if v == "1228" {
+ 1228
+ } else if v == "1229" {
+ 1229
+ } else if v == "1230" {
+ 1230
+ } else if v == "1231" {
+ 1231
+ } else if v == "1232" {
+ 1232
+ } else if v == "1233" {
+ 1233
+ } else if v == "1234" {
+ 1234
+ } else if v == "1235" {
+ 1235
+ } else if v == "1236" {
+ 1236
+ } else if v == "1237" {
+ 1237
+ } else if v == "1238" {
+ 1238
+ } else if v == "1239" {
+ 1239
+ } else if v == "1240" {
+ 1240
+ } else if v == "1241" {
+ 1241
+ } else if v == "1242" {
+ 1242
+ } else if v == "1243" {
+ 1243
+ } else if v == "1244" {
+ 1244
+ } else if v == "1245" {
+ 1245
+ } else if v == "1246" {
+ 1246
+ } else if v == "1247" {
+ 1247
+ } else if v == "1248" {
+ 1248
+ } else if v == "1249" {
+ 1249
+ } else if v == "1250" {
+ 1250
+ } else if v == "1251" {
+ 1251
+ } else if v == "1252" {
+ 1252
+ } else if v == "1253" {
+ 1253
+ } else if v == "1254" {
+ 1254
+ } else if v == "1255" {
+ 1255
+ } else if v == "1256" {
+ 1256
+ } else if v == "1257" {
+ 1257
+ } else if v == "1258" {
+ 1258
+ } else if v == "1259" {
+ 1259
+ } else if v == "1260" {
+ 1260
+ } else if v == "1261" {
+ 1261
+ } else if v == "1262" {
+ 1262
+ } else if v == "1263" {
+ 1263
+ } else if v == "1264" {
+ 1264
+ } else if v == "1265" {
+ 1265
+ } else if v == "1266" {
+ 1266
+ } else if v == "1267" {
+ 1267
+ } else if v == "1268" {
+ 1268
+ } else if v == "1269" {
+ 1269
+ } else if v == "1270" {
+ 1270
+ } else if v == "1271" {
+ 1271
+ } else if v == "1272" {
+ 1272
+ } else if v == "1273" {
+ 1273
+ } else if v == "1274" {
+ 1274
+ } else if v == "1275" {
+ 1275
+ } else if v == "1276" {
+ 1276
+ } else if v == "1277" {
+ 1277
+ } else if v == "1278" {
+ 1278
+ } else if v == "1279" {
+ 1279
+ } else if v == "1280" {
+ 1280
+ } else if v == "1281" {
+ 1281
+ } else if v == "1282" {
+ 1282
+ } else if v == "1283" {
+ 1283
+ } else if v == "1284" {
+ 1284
+ } else if v == "1285" {
+ 1285
+ } else if v == "1286" {
+ 1286
+ } else if v == "1287" {
+ 1287
+ } else if v == "1288" {
+ 1288
+ } else if v == "1289" {
+ 1289
+ } else if v == "1290" {
+ 1290
+ } else if v == "1291" {
+ 1291
+ } else if v == "1292" {
+ 1292
+ } else if v == "1293" {
+ 1293
+ } else if v == "1294" {
+ 1294
+ } else if v == "1295" {
+ 1295
+ } else if v == "1296" {
+ 1296
+ } else if v == "1297" {
+ 1297
+ } else if v == "1298" {
+ 1298
+ } else if v == "1299" {
+ 1299
+ } else if v == "1300" {
+ 1300
+ } else if v == "1301" {
+ 1301
+ } else if v == "1302" {
+ 1302
+ } else if v == "1303" {
+ 1303
+ } else if v == "1304" {
+ 1304
+ } else if v == "1305" {
+ 1305
+ } else if v == "1306" {
+ 1306
+ } else if v == "1307" {
+ 1307
+ } else if v == "1308" {
+ 1308
+ } else if v == "1309" {
+ 1309
+ } else if v == "1310" {
+ 1310
+ } else if v == "1311" {
+ 1311
+ } else if v == "1312" {
+ 1312
+ } else if v == "1313" {
+ 1313
+ } else if v == "1314" {
+ 1314
+ } else if v == "1315" {
+ 1315
+ } else if v == "1316" {
+ 1316
+ } else if v == "1317" {
+ 1317
+ } else if v == "1318" {
+ 1318
+ } else if v == "1319" {
+ 1319
+ } else if v == "1320" {
+ 1320
+ } else if v == "1321" {
+ 1321
+ } else if v == "1322" {
+ 1322
+ } else if v == "1323" {
+ 1323
+ } else if v == "1324" {
+ 1324
+ } else if v == "1325" {
+ 1325
+ } else if v == "1326" {
+ 1326
+ } else if v == "1327" {
+ 1327
+ } else if v == "1328" {
+ 1328
+ } else if v == "1329" {
+ 1329
+ } else if v == "1330" {
+ 1330
+ } else if v == "1331" {
+ 1331
+ } else if v == "1332" {
+ 1332
+ } else if v == "1333" {
+ 1333
+ } else if v == "1334" {
+ 1334
+ } else if v == "1335" {
+ 1335
+ } else if v == "1336" {
+ 1336
+ } else if v == "1337" {
+ 1337
+ } else if v == "1338" {
+ 1338
+ } else if v == "1339" {
+ 1339
+ } else if v == "1340" {
+ 1340
+ } else if v == "1341" {
+ 1341
+ } else if v == "1342" {
+ 1342
+ } else if v == "1343" {
+ 1343
+ } else if v == "1344" {
+ 1344
+ } else if v == "1345" {
+ 1345
+ } else if v == "1346" {
+ 1346
+ } else if v == "1347" {
+ 1347
+ } else if v == "1348" {
+ 1348
+ } else if v == "1349" {
+ 1349
+ } else if v == "1350" {
+ 1350
+ } else if v == "1351" {
+ 1351
+ } else if v == "1352" {
+ 1352
+ } else if v == "1353" {
+ 1353
+ } else if v == "1354" {
+ 1354
+ } else if v == "1355" {
+ 1355
+ } else if v == "1356" {
+ 1356
+ } else if v == "1357" {
+ 1357
+ } else if v == "1358" {
+ 1358
+ } else if v == "1359" {
+ 1359
+ } else if v == "1360" {
+ 1360
+ } else if v == "1361" {
+ 1361
+ } else if v == "1362" {
+ 1362
+ } else if v == "1363" {
+ 1363
+ } else if v == "1364" {
+ 1364
+ } else if v == "1365" {
+ 1365
+ } else if v == "1366" {
+ 1366
+ } else if v == "1367" {
+ 1367
+ } else if v == "1368" {
+ 1368
+ } else if v == "1369" {
+ 1369
+ } else if v == "1370" {
+ 1370
+ } else if v == "1371" {
+ 1371
+ } else if v == "1372" {
+ 1372
+ } else if v == "1373" {
+ 1373
+ } else if v == "1374" {
+ 1374
+ } else if v == "1375" {
+ 1375
+ } else if v == "1376" {
+ 1376
+ } else if v == "1377" {
+ 1377
+ } else if v == "1378" {
+ 1378
+ } else if v == "1379" {
+ 1379
+ } else if v == "1380" {
+ 1380
+ } else if v == "1381" {
+ 1381
+ } else if v == "1382" {
+ 1382
+ } else if v == "1383" {
+ 1383
+ } else if v == "1384" {
+ 1384
+ } else if v == "1385" {
+ 1385
+ } else if v == "1386" {
+ 1386
+ } else if v == "1387" {
+ 1387
+ } else if v == "1388" {
+ 1388
+ } else if v == "1389" {
+ 1389
+ } else if v == "1390" {
+ 1390
+ } else if v == "1391" {
+ 1391
+ } else if v == "1392" {
+ 1392
+ } else if v == "1393" {
+ 1393
+ } else if v == "1394" {
+ 1394
+ } else if v == "1395" {
+ 1395
+ } else if v == "1396" {
+ 1396
+ } else if v == "1397" {
+ 1397
+ } else if v == "1398" {
+ 1398
+ } else if v == "1399" {
+ 1399
+ } else if v == "1400" {
+ 1400
+ } else if v == "1401" {
+ 1401
+ } else if v == "1402" {
+ 1402
+ } else if v == "1403" {
+ 1403
+ } else if v == "1404" {
+ 1404
+ } else if v == "1405" {
+ 1405
+ } else if v == "1406" {
+ 1406
+ } else if v == "1407" {
+ 1407
+ } else if v == "1408" {
+ 1408
+ } else if v == "1409" {
+ 1409
+ } else if v == "1410" {
+ 1410
+ } else if v == "1411" {
+ 1411
+ } else if v == "1412" {
+ 1412
+ } else if v == "1413" {
+ 1413
+ } else if v == "1414" {
+ 1414
+ } else if v == "1415" {
+ 1415
+ } else if v == "1416" {
+ 1416
+ } else if v == "1417" {
+ 1417
+ } else if v == "1418" {
+ 1418
+ } else if v == "1419" {
+ 1419
+ } else if v == "1420" {
+ 1420
+ } else if v == "1421" {
+ 1421
+ } else if v == "1422" {
+ 1422
+ } else if v == "1423" {
+ 1423
+ } else if v == "1424" {
+ 1424
+ } else if v == "1425" {
+ 1425
+ } else if v == "1426" {
+ 1426
+ } else if v == "1427" {
+ 1427
+ } else if v == "1428" {
+ 1428
+ } else if v == "1429" {
+ 1429
+ } else if v == "1430" {
+ 1430
+ } else if v == "1431" {
+ 1431
+ } else if v == "1432" {
+ 1432
+ } else if v == "1433" {
+ 1433
+ } else if v == "1434" {
+ 1434
+ } else if v == "1435" {
+ 1435
+ } else if v == "1436" {
+ 1436
+ } else if v == "1437" {
+ 1437
+ } else if v == "1438" {
+ 1438
+ } else if v == "1439" {
+ 1439
+ } else if v == "1440" {
+ 1440
+ } else if v == "1441" {
+ 1441
+ } else if v == "1442" {
+ 1442
+ } else if v == "1443" {
+ 1443
+ } else if v == "1444" {
+ 1444
+ } else if v == "1445" {
+ 1445
+ } else if v == "1446" {
+ 1446
+ } else if v == "1447" {
+ 1447
+ } else if v == "1448" {
+ 1448
+ } else if v == "1449" {
+ 1449
+ } else if v == "1450" {
+ 1450
+ } else if v == "1451" {
+ 1451
+ } else if v == "1452" {
+ 1452
+ } else if v == "1453" {
+ 1453
+ } else if v == "1454" {
+ 1454
+ } else if v == "1455" {
+ 1455
+ } else if v == "1456" {
+ 1456
+ } else if v == "1457" {
+ 1457
+ } else if v == "1458" {
+ 1458
+ } else if v == "1459" {
+ 1459
+ } else if v == "1460" {
+ 1460
+ } else if v == "1461" {
+ 1461
+ } else if v == "1462" {
+ 1462
+ } else if v == "1463" {
+ 1463
+ } else if v == "1464" {
+ 1464
+ } else if v == "1465" {
+ 1465
+ } else if v == "1466" {
+ 1466
+ } else if v == "1467" {
+ 1467
+ } else if v == "1468" {
+ 1468
+ } else if v == "1469" {
+ 1469
+ } else if v == "1470" {
+ 1470
+ } else if v == "1471" {
+ 1471
+ } else if v == "1472" {
+ 1472
+ } else if v == "1473" {
+ 1473
+ } else if v == "1474" {
+ 1474
+ } else if v == "1475" {
+ 1475
+ } else if v == "1476" {
+ 1476
+ } else if v == "1477" {
+ 1477
+ } else if v == "1478" {
+ 1478
+ } else if v == "1479" {
+ 1479
+ } else if v == "1480" {
+ 1480
+ } else if v == "1481" {
+ 1481
+ } else if v == "1482" {
+ 1482
+ } else if v == "1483" {
+ 1483
+ } else if v == "1484" {
+ 1484
+ } else if v == "1485" {
+ 1485
+ } else if v == "1486" {
+ 1486
+ } else if v == "1487" {
+ 1487
+ } else if v == "1488" {
+ 1488
+ } else if v == "1489" {
+ 1489
+ } else if v == "1490" {
+ 1490
+ } else if v == "1491" {
+ 1491
+ } else if v == "1492" {
+ 1492
+ } else if v == "1493" {
+ 1493
+ } else if v == "1494" {
+ 1494
+ } else if v == "1495" {
+ 1495
+ } else if v == "1496" {
+ 1496
+ } else if v == "1497" {
+ 1497
+ } else if v == "1498" {
+ 1498
+ } else if v == "1499" {
+ 1499
+ } else if v == "1500" {
+ 1500
+ } else if v == "1501" {
+ 1501
+ } else if v == "1502" {
+ 1502
+ } else if v == "1503" {
+ 1503
+ } else if v == "1504" {
+ 1504
+ } else if v == "1505" {
+ 1505
+ } else if v == "1506" {
+ 1506
+ } else if v == "1507" {
+ 1507
+ } else if v == "1508" {
+ 1508
+ } else if v == "1509" {
+ 1509
+ } else if v == "1510" {
+ 1510
+ } else if v == "1511" {
+ 1511
+ } else if v == "1512" {
+ 1512
+ } else if v == "1513" {
+ 1513
+ } else if v == "1514" {
+ 1514
+ } else if v == "1515" {
+ 1515
+ } else if v == "1516" {
+ 1516
+ } else if v == "1517" {
+ 1517
+ } else if v == "1518" {
+ 1518
+ } else if v == "1519" {
+ 1519
+ } else if v == "1520" {
+ 1520
+ } else if v == "1521" {
+ 1521
+ } else if v == "1522" {
+ 1522
+ } else if v == "1523" {
+ 1523
+ } else if v == "1524" {
+ 1524
+ } else if v == "1525" {
+ 1525
+ } else if v == "1526" {
+ 1526
+ } else if v == "1527" {
+ 1527
+ } else if v == "1528" {
+ 1528
+ } else if v == "1529" {
+ 1529
+ } else if v == "1530" {
+ 1530
+ } else if v == "1531" {
+ 1531
+ } else if v == "1532" {
+ 1532
+ } else if v == "1533" {
+ 1533
+ } else if v == "1534" {
+ 1534
+ } else if v == "1535" {
+ 1535
+ } else if v == "1536" {
+ 1536
+ } else if v == "1537" {
+ 1537
+ } else if v == "1538" {
+ 1538
+ } else if v == "1539" {
+ 1539
+ } else if v == "1540" {
+ 1540
+ } else if v == "1541" {
+ 1541
+ } else if v == "1542" {
+ 1542
+ } else if v == "1543" {
+ 1543
+ } else if v == "1544" {
+ 1544
+ } else if v == "1545" {
+ 1545
+ } else if v == "1546" {
+ 1546
+ } else if v == "1547" {
+ 1547
+ } else if v == "1548" {
+ 1548
+ } else if v == "1549" {
+ 1549
+ } else if v == "1550" {
+ 1550
+ } else if v == "1551" {
+ 1551
+ } else if v == "1552" {
+ 1552
+ } else if v == "1553" {
+ 1553
+ } else if v == "1554" {
+ 1554
+ } else if v == "1555" {
+ 1555
+ } else if v == "1556" {
+ 1556
+ } else if v == "1557" {
+ 1557
+ } else if v == "1558" {
+ 1558
+ } else if v == "1559" {
+ 1559
+ } else if v == "1560" {
+ 1560
+ } else if v == "1561" {
+ 1561
+ } else if v == "1562" {
+ 1562
+ } else if v == "1563" {
+ 1563
+ } else if v == "1564" {
+ 1564
+ } else if v == "1565" {
+ 1565
+ } else if v == "1566" {
+ 1566
+ } else if v == "1567" {
+ 1567
+ } else if v == "1568" {
+ 1568
+ } else if v == "1569" {
+ 1569
+ } else if v == "1570" {
+ 1570
+ } else if v == "1571" {
+ 1571
+ } else if v == "1572" {
+ 1572
+ } else if v == "1573" {
+ 1573
+ } else if v == "1574" {
+ 1574
+ } else if v == "1575" {
+ 1575
+ } else if v == "1576" {
+ 1576
+ } else if v == "1577" {
+ 1577
+ } else if v == "1578" {
+ 1578
+ } else if v == "1579" {
+ 1579
+ } else if v == "1580" {
+ 1580
+ } else if v == "1581" {
+ 1581
+ } else if v == "1582" {
+ 1582
+ } else if v == "1583" {
+ 1583
+ } else if v == "1584" {
+ 1584
+ } else if v == "1585" {
+ 1585
+ } else if v == "1586" {
+ 1586
+ } else if v == "1587" {
+ 1587
+ } else if v == "1588" {
+ 1588
+ } else if v == "1589" {
+ 1589
+ } else if v == "1590" {
+ 1590
+ } else if v == "1591" {
+ 1591
+ } else if v == "1592" {
+ 1592
+ } else if v == "1593" {
+ 1593
+ } else if v == "1594" {
+ 1594
+ } else if v == "1595" {
+ 1595
+ } else if v == "1596" {
+ 1596
+ } else if v == "1597" {
+ 1597
+ } else if v == "1598" {
+ 1598
+ } else if v == "1599" {
+ 1599
+ } else if v == "1600" {
+ 1600
+ } else if v == "1601" {
+ 1601
+ } else if v == "1602" {
+ 1602
+ } else if v == "1603" {
+ 1603
+ } else if v == "1604" {
+ 1604
+ } else if v == "1605" {
+ 1605
+ } else if v == "1606" {
+ 1606
+ } else if v == "1607" {
+ 1607
+ } else if v == "1608" {
+ 1608
+ } else if v == "1609" {
+ 1609
+ } else if v == "1610" {
+ 1610
+ } else if v == "1611" {
+ 1611
+ } else if v == "1612" {
+ 1612
+ } else if v == "1613" {
+ 1613
+ } else if v == "1614" {
+ 1614
+ } else if v == "1615" {
+ 1615
+ } else if v == "1616" {
+ 1616
+ } else if v == "1617" {
+ 1617
+ } else if v == "1618" {
+ 1618
+ } else if v == "1619" {
+ 1619
+ } else if v == "1620" {
+ 1620
+ } else if v == "1621" {
+ 1621
+ } else if v == "1622" {
+ 1622
+ } else if v == "1623" {
+ 1623
+ } else if v == "1624" {
+ 1624
+ } else if v == "1625" {
+ 1625
+ } else if v == "1626" {
+ 1626
+ } else if v == "1627" {
+ 1627
+ } else if v == "1628" {
+ 1628
+ } else if v == "1629" {
+ 1629
+ } else if v == "1630" {
+ 1630
+ } else if v == "1631" {
+ 1631
+ } else if v == "1632" {
+ 1632
+ } else if v == "1633" {
+ 1633
+ } else if v == "1634" {
+ 1634
+ } else if v == "1635" {
+ 1635
+ } else if v == "1636" {
+ 1636
+ } else if v == "1637" {
+ 1637
+ } else if v == "1638" {
+ 1638
+ } else if v == "1639" {
+ 1639
+ } else if v == "1640" {
+ 1640
+ } else if v == "1641" {
+ 1641
+ } else if v == "1642" {
+ 1642
+ } else if v == "1643" {
+ 1643
+ } else if v == "1644" {
+ 1644
+ } else if v == "1645" {
+ 1645
+ } else if v == "1646" {
+ 1646
+ } else if v == "1647" {
+ 1647
+ } else if v == "1648" {
+ 1648
+ } else if v == "1649" {
+ 1649
+ } else if v == "1650" {
+ 1650
+ } else if v == "1651" {
+ 1651
+ } else if v == "1652" {
+ 1652
+ } else if v == "1653" {
+ 1653
+ } else if v == "1654" {
+ 1654
+ } else if v == "1655" {
+ 1655
+ } else if v == "1656" {
+ 1656
+ } else if v == "1657" {
+ 1657
+ } else if v == "1658" {
+ 1658
+ } else if v == "1659" {
+ 1659
+ } else if v == "1660" {
+ 1660
+ } else if v == "1661" {
+ 1661
+ } else if v == "1662" {
+ 1662
+ } else if v == "1663" {
+ 1663
+ } else if v == "1664" {
+ 1664
+ } else if v == "1665" {
+ 1665
+ } else if v == "1666" {
+ 1666
+ } else if v == "1667" {
+ 1667
+ } else if v == "1668" {
+ 1668
+ } else if v == "1669" {
+ 1669
+ } else if v == "1670" {
+ 1670
+ } else if v == "1671" {
+ 1671
+ } else if v == "1672" {
+ 1672
+ } else if v == "1673" {
+ 1673
+ } else if v == "1674" {
+ 1674
+ } else if v == "1675" {
+ 1675
+ } else if v == "1676" {
+ 1676
+ } else if v == "1677" {
+ 1677
+ } else if v == "1678" {
+ 1678
+ } else if v == "1679" {
+ 1679
+ } else if v == "1680" {
+ 1680
+ } else if v == "1681" {
+ 1681
+ } else if v == "1682" {
+ 1682
+ } else if v == "1683" {
+ 1683
+ } else if v == "1684" {
+ 1684
+ } else if v == "1685" {
+ 1685
+ } else if v == "1686" {
+ 1686
+ } else if v == "1687" {
+ 1687
+ } else if v == "1688" {
+ 1688
+ } else if v == "1689" {
+ 1689
+ } else if v == "1690" {
+ 1690
+ } else if v == "1691" {
+ 1691
+ } else if v == "1692" {
+ 1692
+ } else if v == "1693" {
+ 1693
+ } else if v == "1694" {
+ 1694
+ } else if v == "1695" {
+ 1695
+ } else if v == "1696" {
+ 1696
+ } else if v == "1697" {
+ 1697
+ } else if v == "1698" {
+ 1698
+ } else if v == "1699" {
+ 1699
+ } else if v == "1700" {
+ 1700
+ } else if v == "1701" {
+ 1701
+ } else if v == "1702" {
+ 1702
+ } else if v == "1703" {
+ 1703
+ } else if v == "1704" {
+ 1704
+ } else if v == "1705" {
+ 1705
+ } else if v == "1706" {
+ 1706
+ } else if v == "1707" {
+ 1707
+ } else if v == "1708" {
+ 1708
+ } else if v == "1709" {
+ 1709
+ } else if v == "1710" {
+ 1710
+ } else if v == "1711" {
+ 1711
+ } else if v == "1712" {
+ 1712
+ } else if v == "1713" {
+ 1713
+ } else if v == "1714" {
+ 1714
+ } else if v == "1715" {
+ 1715
+ } else if v == "1716" {
+ 1716
+ } else if v == "1717" {
+ 1717
+ } else if v == "1718" {
+ 1718
+ } else if v == "1719" {
+ 1719
+ } else if v == "1720" {
+ 1720
+ } else if v == "1721" {
+ 1721
+ } else if v == "1722" {
+ 1722
+ } else if v == "1723" {
+ 1723
+ } else if v == "1724" {
+ 1724
+ } else if v == "1725" {
+ 1725
+ } else if v == "1726" {
+ 1726
+ } else if v == "1727" {
+ 1727
+ } else if v == "1728" {
+ 1728
+ } else if v == "1729" {
+ 1729
+ } else if v == "1730" {
+ 1730
+ } else if v == "1731" {
+ 1731
+ } else if v == "1732" {
+ 1732
+ } else if v == "1733" {
+ 1733
+ } else if v == "1734" {
+ 1734
+ } else if v == "1735" {
+ 1735
+ } else if v == "1736" {
+ 1736
+ } else if v == "1737" {
+ 1737
+ } else if v == "1738" {
+ 1738
+ } else if v == "1739" {
+ 1739
+ } else if v == "1740" {
+ 1740
+ } else if v == "1741" {
+ 1741
+ } else if v == "1742" {
+ 1742
+ } else if v == "1743" {
+ 1743
+ } else if v == "1744" {
+ 1744
+ } else if v == "1745" {
+ 1745
+ } else if v == "1746" {
+ 1746
+ } else if v == "1747" {
+ 1747
+ } else if v == "1748" {
+ 1748
+ } else if v == "1749" {
+ 1749
+ } else if v == "1750" {
+ 1750
+ } else if v == "1751" {
+ 1751
+ } else if v == "1752" {
+ 1752
+ } else if v == "1753" {
+ 1753
+ } else if v == "1754" {
+ 1754
+ } else if v == "1755" {
+ 1755
+ } else if v == "1756" {
+ 1756
+ } else if v == "1757" {
+ 1757
+ } else if v == "1758" {
+ 1758
+ } else if v == "1759" {
+ 1759
+ } else if v == "1760" {
+ 1760
+ } else if v == "1761" {
+ 1761
+ } else if v == "1762" {
+ 1762
+ } else if v == "1763" {
+ 1763
+ } else if v == "1764" {
+ 1764
+ } else if v == "1765" {
+ 1765
+ } else if v == "1766" {
+ 1766
+ } else if v == "1767" {
+ 1767
+ } else if v == "1768" {
+ 1768
+ } else if v == "1769" {
+ 1769
+ } else if v == "1770" {
+ 1770
+ } else if v == "1771" {
+ 1771
+ } else if v == "1772" {
+ 1772
+ } else if v == "1773" {
+ 1773
+ } else if v == "1774" {
+ 1774
+ } else if v == "1775" {
+ 1775
+ } else if v == "1776" {
+ 1776
+ } else if v == "1777" {
+ 1777
+ } else if v == "1778" {
+ 1778
+ } else if v == "1779" {
+ 1779
+ } else if v == "1780" {
+ 1780
+ } else if v == "1781" {
+ 1781
+ } else if v == "1782" {
+ 1782
+ } else if v == "1783" {
+ 1783
+ } else if v == "1784" {
+ 1784
+ } else if v == "1785" {
+ 1785
+ } else if v == "1786" {
+ 1786
+ } else if v == "1787" {
+ 1787
+ } else if v == "1788" {
+ 1788
+ } else if v == "1789" {
+ 1789
+ } else if v == "1790" {
+ 1790
+ } else if v == "1791" {
+ 1791
+ } else if v == "1792" {
+ 1792
+ } else if v == "1793" {
+ 1793
+ } else if v == "1794" {
+ 1794
+ } else if v == "1795" {
+ 1795
+ } else if v == "1796" {
+ 1796
+ } else if v == "1797" {
+ 1797
+ } else if v == "1798" {
+ 1798
+ } else if v == "1799" {
+ 1799
+ } else if v == "1800" {
+ 1800
+ } else if v == "1801" {
+ 1801
+ } else if v == "1802" {
+ 1802
+ } else if v == "1803" {
+ 1803
+ } else if v == "1804" {
+ 1804
+ } else if v == "1805" {
+ 1805
+ } else if v == "1806" {
+ 1806
+ } else if v == "1807" {
+ 1807
+ } else if v == "1808" {
+ 1808
+ } else if v == "1809" {
+ 1809
+ } else if v == "1810" {
+ 1810
+ } else if v == "1811" {
+ 1811
+ } else if v == "1812" {
+ 1812
+ } else if v == "1813" {
+ 1813
+ } else if v == "1814" {
+ 1814
+ } else if v == "1815" {
+ 1815
+ } else if v == "1816" {
+ 1816
+ } else if v == "1817" {
+ 1817
+ } else if v == "1818" {
+ 1818
+ } else if v == "1819" {
+ 1819
+ } else if v == "1820" {
+ 1820
+ } else if v == "1821" {
+ 1821
+ } else if v == "1822" {
+ 1822
+ } else if v == "1823" {
+ 1823
+ } else if v == "1824" {
+ 1824
+ } else if v == "1825" {
+ 1825
+ } else if v == "1826" {
+ 1826
+ } else if v == "1827" {
+ 1827
+ } else if v == "1828" {
+ 1828
+ } else if v == "1829" {
+ 1829
+ } else if v == "1830" {
+ 1830
+ } else if v == "1831" {
+ 1831
+ } else if v == "1832" {
+ 1832
+ } else if v == "1833" {
+ 1833
+ } else if v == "1834" {
+ 1834
+ } else if v == "1835" {
+ 1835
+ } else if v == "1836" {
+ 1836
+ } else if v == "1837" {
+ 1837
+ } else if v == "1838" {
+ 1838
+ } else if v == "1839" {
+ 1839
+ } else if v == "1840" {
+ 1840
+ } else if v == "1841" {
+ 1841
+ } else if v == "1842" {
+ 1842
+ } else if v == "1843" {
+ 1843
+ } else if v == "1844" {
+ 1844
+ } else if v == "1845" {
+ 1845
+ } else if v == "1846" {
+ 1846
+ } else if v == "1847" {
+ 1847
+ } else if v == "1848" {
+ 1848
+ } else if v == "1849" {
+ 1849
+ } else if v == "1850" {
+ 1850
+ } else if v == "1851" {
+ 1851
+ } else if v == "1852" {
+ 1852
+ } else if v == "1853" {
+ 1853
+ } else if v == "1854" {
+ 1854
+ } else if v == "1855" {
+ 1855
+ } else if v == "1856" {
+ 1856
+ } else if v == "1857" {
+ 1857
+ } else if v == "1858" {
+ 1858
+ } else if v == "1859" {
+ 1859
+ } else if v == "1860" {
+ 1860
+ } else if v == "1861" {
+ 1861
+ } else if v == "1862" {
+ 1862
+ } else if v == "1863" {
+ 1863
+ } else if v == "1864" {
+ 1864
+ } else if v == "1865" {
+ 1865
+ } else if v == "1866" {
+ 1866
+ } else if v == "1867" {
+ 1867
+ } else if v == "1868" {
+ 1868
+ } else if v == "1869" {
+ 1869
+ } else if v == "1870" {
+ 1870
+ } else if v == "1871" {
+ 1871
+ } else if v == "1872" {
+ 1872
+ } else if v == "1873" {
+ 1873
+ } else if v == "1874" {
+ 1874
+ } else if v == "1875" {
+ 1875
+ } else if v == "1876" {
+ 1876
+ } else if v == "1877" {
+ 1877
+ } else if v == "1878" {
+ 1878
+ } else if v == "1879" {
+ 1879
+ } else if v == "1880" {
+ 1880
+ } else if v == "1881" {
+ 1881
+ } else if v == "1882" {
+ 1882
+ } else if v == "1883" {
+ 1883
+ } else if v == "1884" {
+ 1884
+ } else if v == "1885" {
+ 1885
+ } else if v == "1886" {
+ 1886
+ } else if v == "1887" {
+ 1887
+ } else if v == "1888" {
+ 1888
+ } else if v == "1889" {
+ 1889
+ } else if v == "1890" {
+ 1890
+ } else if v == "1891" {
+ 1891
+ } else if v == "1892" {
+ 1892
+ } else if v == "1893" {
+ 1893
+ } else if v == "1894" {
+ 1894
+ } else if v == "1895" {
+ 1895
+ } else if v == "1896" {
+ 1896
+ } else if v == "1897" {
+ 1897
+ } else if v == "1898" {
+ 1898
+ } else if v == "1899" {
+ 1899
+ } else if v == "1900" {
+ 1900
+ } else if v == "1901" {
+ 1901
+ } else if v == "1902" {
+ 1902
+ } else if v == "1903" {
+ 1903
+ } else if v == "1904" {
+ 1904
+ } else if v == "1905" {
+ 1905
+ } else if v == "1906" {
+ 1906
+ } else if v == "1907" {
+ 1907
+ } else if v == "1908" {
+ 1908
+ } else if v == "1909" {
+ 1909
+ } else if v == "1910" {
+ 1910
+ } else if v == "1911" {
+ 1911
+ } else if v == "1912" {
+ 1912
+ } else if v == "1913" {
+ 1913
+ } else if v == "1914" {
+ 1914
+ } else if v == "1915" {
+ 1915
+ } else if v == "1916" {
+ 1916
+ } else if v == "1917" {
+ 1917
+ } else if v == "1918" {
+ 1918
+ } else if v == "1919" {
+ 1919
+ } else if v == "1920" {
+ 1920
+ } else if v == "1921" {
+ 1921
+ } else if v == "1922" {
+ 1922
+ } else if v == "1923" {
+ 1923
+ } else if v == "1924" {
+ 1924
+ } else if v == "1925" {
+ 1925
+ } else if v == "1926" {
+ 1926
+ } else if v == "1927" {
+ 1927
+ } else if v == "1928" {
+ 1928
+ } else if v == "1929" {
+ 1929
+ } else if v == "1930" {
+ 1930
+ } else if v == "1931" {
+ 1931
+ } else if v == "1932" {
+ 1932
+ } else if v == "1933" {
+ 1933
+ } else if v == "1934" {
+ 1934
+ } else if v == "1935" {
+ 1935
+ } else if v == "1936" {
+ 1936
+ } else if v == "1937" {
+ 1937
+ } else if v == "1938" {
+ 1938
+ } else if v == "1939" {
+ 1939
+ } else if v == "1940" {
+ 1940
+ } else if v == "1941" {
+ 1941
+ } else if v == "1942" {
+ 1942
+ } else if v == "1943" {
+ 1943
+ } else if v == "1944" {
+ 1944
+ } else if v == "1945" {
+ 1945
+ } else if v == "1946" {
+ 1946
+ } else if v == "1947" {
+ 1947
+ } else if v == "1948" {
+ 1948
+ } else if v == "1949" {
+ 1949
+ } else if v == "1950" {
+ 1950
+ } else if v == "1951" {
+ 1951
+ } else if v == "1952" {
+ 1952
+ } else if v == "1953" {
+ 1953
+ } else if v == "1954" {
+ 1954
+ } else if v == "1955" {
+ 1955
+ } else if v == "1956" {
+ 1956
+ } else if v == "1957" {
+ 1957
+ } else if v == "1958" {
+ 1958
+ } else if v == "1959" {
+ 1959
+ } else if v == "1960" {
+ 1960
+ } else if v == "1961" {
+ 1961
+ } else if v == "1962" {
+ 1962
+ } else if v == "1963" {
+ 1963
+ } else if v == "1964" {
+ 1964
+ } else if v == "1965" {
+ 1965
+ } else if v == "1966" {
+ 1966
+ } else if v == "1967" {
+ 1967
+ } else if v == "1968" {
+ 1968
+ } else if v == "1969" {
+ 1969
+ } else if v == "1970" {
+ 1970
+ } else if v == "1971" {
+ 1971
+ } else if v == "1972" {
+ 1972
+ } else if v == "1973" {
+ 1973
+ } else if v == "1974" {
+ 1974
+ } else if v == "1975" {
+ 1975
+ } else if v == "1976" {
+ 1976
+ } else if v == "1977" {
+ 1977
+ } else if v == "1978" {
+ 1978
+ } else if v == "1979" {
+ 1979
+ } else if v == "1980" {
+ 1980
+ } else if v == "1981" {
+ 1981
+ } else if v == "1982" {
+ 1982
+ } else if v == "1983" {
+ 1983
+ } else if v == "1984" {
+ 1984
+ } else if v == "1985" {
+ 1985
+ } else if v == "1986" {
+ 1986
+ } else if v == "1987" {
+ 1987
+ } else if v == "1988" {
+ 1988
+ } else if v == "1989" {
+ 1989
+ } else if v == "1990" {
+ 1990
+ } else if v == "1991" {
+ 1991
+ } else if v == "1992" {
+ 1992
+ } else if v == "1993" {
+ 1993
+ } else if v == "1994" {
+ 1994
+ } else if v == "1995" {
+ 1995
+ } else if v == "1996" {
+ 1996
+ } else if v == "1997" {
+ 1997
+ } else if v == "1998" {
+ 1998
+ } else if v == "1999" {
+ 1999
+ } else if v == "2000" {
+ 2000
+ } else if v == "2001" {
+ 2001
+ } else if v == "2002" {
+ 2002
+ } else if v == "2003" {
+ 2003
+ } else if v == "2004" {
+ 2004
+ } else if v == "2005" {
+ 2005
+ } else if v == "2006" {
+ 2006
+ } else if v == "2007" {
+ 2007
+ } else if v == "2008" {
+ 2008
+ } else if v == "2009" {
+ 2009
+ } else if v == "2010" {
+ 2010
+ } else if v == "2011" {
+ 2011
+ } else if v == "2012" {
+ 2012
+ } else if v == "2013" {
+ 2013
+ } else if v == "2014" {
+ 2014
+ } else if v == "2015" {
+ 2015
+ } else if v == "2016" {
+ 2016
+ } else if v == "2017" {
+ 2017
+ } else if v == "2018" {
+ 2018
+ } else if v == "2019" {
+ 2019
+ } else if v == "2020" {
+ 2020
+ } else if v == "2021" {
+ 2021
+ } else if v == "2022" {
+ 2022
+ } else if v == "2023" {
+ 2023
+ } else if v == "2024" {
+ 2024
+ } else if v == "2025" {
+ 2025
+ } else if v == "2026" {
+ 2026
+ } else if v == "2027" {
+ 2027
+ } else if v == "2028" {
+ 2028
+ } else if v == "2029" {
+ 2029
+ } else if v == "2030" {
+ 2030
+ } else if v == "2031" {
+ 2031
+ } else if v == "2032" {
+ 2032
+ } else if v == "2033" {
+ 2033
+ } else if v == "2034" {
+ 2034
+ } else if v == "2035" {
+ 2035
+ } else if v == "2036" {
+ 2036
+ } else if v == "2037" {
+ 2037
+ } else if v == "2038" {
+ 2038
+ } else if v == "2039" {
+ 2039
+ } else if v == "2040" {
+ 2040
+ } else if v == "2041" {
+ 2041
+ } else if v == "2042" {
+ 2042
+ } else if v == "2043" {
+ 2043
+ } else if v == "2044" {
+ 2044
+ } else if v == "2045" {
+ 2045
+ } else if v == "2046" {
+ 2046
+ } else if v == "2047" {
+ 2047
+ } else if v == "2048" {
+ 2048
+ } else if v == "2049" {
+ 2049
+ } else if v == "2050" {
+ 2050
+ } else if v == "2051" {
+ 2051
+ } else if v == "2052" {
+ 2052
+ } else if v == "2053" {
+ 2053
+ } else if v == "2054" {
+ 2054
+ } else if v == "2055" {
+ 2055
+ } else if v == "2056" {
+ 2056
+ } else if v == "2057" {
+ 2057
+ } else if v == "2058" {
+ 2058
+ } else if v == "2059" {
+ 2059
+ } else if v == "2060" {
+ 2060
+ } else if v == "2061" {
+ 2061
+ } else if v == "2062" {
+ 2062
+ } else if v == "2063" {
+ 2063
+ } else if v == "2064" {
+ 2064
+ } else if v == "2065" {
+ 2065
+ } else if v == "2066" {
+ 2066
+ } else if v == "2067" {
+ 2067
+ } else if v == "2068" {
+ 2068
+ } else if v == "2069" {
+ 2069
+ } else if v == "2070" {
+ 2070
+ } else if v == "2071" {
+ 2071
+ } else if v == "2072" {
+ 2072
+ } else if v == "2073" {
+ 2073
+ } else if v == "2074" {
+ 2074
+ } else if v == "2075" {
+ 2075
+ } else if v == "2076" {
+ 2076
+ } else if v == "2077" {
+ 2077
+ } else if v == "2078" {
+ 2078
+ } else if v == "2079" {
+ 2079
+ } else if v == "2080" {
+ 2080
+ } else if v == "2081" {
+ 2081
+ } else if v == "2082" {
+ 2082
+ } else if v == "2083" {
+ 2083
+ } else if v == "2084" {
+ 2084
+ } else if v == "2085" {
+ 2085
+ } else if v == "2086" {
+ 2086
+ } else if v == "2087" {
+ 2087
+ } else if v == "2088" {
+ 2088
+ } else if v == "2089" {
+ 2089
+ } else if v == "2090" {
+ 2090
+ } else if v == "2091" {
+ 2091
+ } else if v == "2092" {
+ 2092
+ } else if v == "2093" {
+ 2093
+ } else if v == "2094" {
+ 2094
+ } else if v == "2095" {
+ 2095
+ } else if v == "2096" {
+ 2096
+ } else if v == "2097" {
+ 2097
+ } else if v == "2098" {
+ 2098
+ } else if v == "2099" {
+ 2099
+ } else if v == "2100" {
+ 2100
+ } else if v == "2101" {
+ 2101
+ } else if v == "2102" {
+ 2102
+ } else if v == "2103" {
+ 2103
+ } else if v == "2104" {
+ 2104
+ } else if v == "2105" {
+ 2105
+ } else if v == "2106" {
+ 2106
+ } else if v == "2107" {
+ 2107
+ } else if v == "2108" {
+ 2108
+ } else if v == "2109" {
+ 2109
+ } else if v == "2110" {
+ 2110
+ } else if v == "2111" {
+ 2111
+ } else if v == "2112" {
+ 2112
+ } else if v == "2113" {
+ 2113
+ } else if v == "2114" {
+ 2114
+ } else if v == "2115" {
+ 2115
+ } else if v == "2116" {
+ 2116
+ } else if v == "2117" {
+ 2117
+ } else if v == "2118" {
+ 2118
+ } else if v == "2119" {
+ 2119
+ } else if v == "2120" {
+ 2120
+ } else if v == "2121" {
+ 2121
+ } else if v == "2122" {
+ 2122
+ } else if v == "2123" {
+ 2123
+ } else if v == "2124" {
+ 2124
+ } else if v == "2125" {
+ 2125
+ } else if v == "2126" {
+ 2126
+ } else if v == "2127" {
+ 2127
+ } else if v == "2128" {
+ 2128
+ } else if v == "2129" {
+ 2129
+ } else if v == "2130" {
+ 2130
+ } else if v == "2131" {
+ 2131
+ } else if v == "2132" {
+ 2132
+ } else if v == "2133" {
+ 2133
+ } else if v == "2134" {
+ 2134
+ } else if v == "2135" {
+ 2135
+ } else if v == "2136" {
+ 2136
+ } else if v == "2137" {
+ 2137
+ } else if v == "2138" {
+ 2138
+ } else if v == "2139" {
+ 2139
+ } else if v == "2140" {
+ 2140
+ } else if v == "2141" {
+ 2141
+ } else if v == "2142" {
+ 2142
+ } else if v == "2143" {
+ 2143
+ } else if v == "2144" {
+ 2144
+ } else if v == "2145" {
+ 2145
+ } else if v == "2146" {
+ 2146
+ } else if v == "2147" {
+ 2147
+ } else if v == "2148" {
+ 2148
+ } else if v == "2149" {
+ 2149
+ } else if v == "2150" {
+ 2150
+ } else if v == "2151" {
+ 2151
+ } else if v == "2152" {
+ 2152
+ } else if v == "2153" {
+ 2153
+ } else if v == "2154" {
+ 2154
+ } else if v == "2155" {
+ 2155
+ } else if v == "2156" {
+ 2156
+ } else if v == "2157" {
+ 2157
+ } else if v == "2158" {
+ 2158
+ } else if v == "2159" {
+ 2159
+ } else if v == "2160" {
+ 2160
+ } else if v == "2161" {
+ 2161
+ } else if v == "2162" {
+ 2162
+ } else if v == "2163" {
+ 2163
+ } else if v == "2164" {
+ 2164
+ } else if v == "2165" {
+ 2165
+ } else if v == "2166" {
+ 2166
+ } else if v == "2167" {
+ 2167
+ } else if v == "2168" {
+ 2168
+ } else if v == "2169" {
+ 2169
+ } else if v == "2170" {
+ 2170
+ } else if v == "2171" {
+ 2171
+ } else if v == "2172" {
+ 2172
+ } else if v == "2173" {
+ 2173
+ } else if v == "2174" {
+ 2174
+ } else if v == "2175" {
+ 2175
+ } else if v == "2176" {
+ 2176
+ } else if v == "2177" {
+ 2177
+ } else if v == "2178" {
+ 2178
+ } else if v == "2179" {
+ 2179
+ } else if v == "2180" {
+ 2180
+ } else if v == "2181" {
+ 2181
+ } else if v == "2182" {
+ 2182
+ } else if v == "2183" {
+ 2183
+ } else if v == "2184" {
+ 2184
+ } else if v == "2185" {
+ 2185
+ } else if v == "2186" {
+ 2186
+ } else if v == "2187" {
+ 2187
+ } else if v == "2188" {
+ 2188
+ } else if v == "2189" {
+ 2189
+ } else if v == "2190" {
+ 2190
+ } else if v == "2191" {
+ 2191
+ } else if v == "2192" {
+ 2192
+ } else if v == "2193" {
+ 2193
+ } else if v == "2194" {
+ 2194
+ } else if v == "2195" {
+ 2195
+ } else if v == "2196" {
+ 2196
+ } else if v == "2197" {
+ 2197
+ } else if v == "2198" {
+ 2198
+ } else if v == "2199" {
+ 2199
+ } else if v == "2200" {
+ 2200
+ } else if v == "2201" {
+ 2201
+ } else if v == "2202" {
+ 2202
+ } else if v == "2203" {
+ 2203
+ } else if v == "2204" {
+ 2204
+ } else if v == "2205" {
+ 2205
+ } else if v == "2206" {
+ 2206
+ } else if v == "2207" {
+ 2207
+ } else if v == "2208" {
+ 2208
+ } else if v == "2209" {
+ 2209
+ } else if v == "2210" {
+ 2210
+ } else if v == "2211" {
+ 2211
+ } else if v == "2212" {
+ 2212
+ } else if v == "2213" {
+ 2213
+ } else if v == "2214" {
+ 2214
+ } else if v == "2215" {
+ 2215
+ } else if v == "2216" {
+ 2216
+ } else if v == "2217" {
+ 2217
+ } else if v == "2218" {
+ 2218
+ } else if v == "2219" {
+ 2219
+ } else if v == "2220" {
+ 2220
+ } else if v == "2221" {
+ 2221
+ } else if v == "2222" {
+ 2222
+ } else if v == "2223" {
+ 2223
+ } else if v == "2224" {
+ 2224
+ } else if v == "2225" {
+ 2225
+ } else if v == "2226" {
+ 2226
+ } else if v == "2227" {
+ 2227
+ } else if v == "2228" {
+ 2228
+ } else if v == "2229" {
+ 2229
+ } else if v == "2230" {
+ 2230
+ } else if v == "2231" {
+ 2231
+ } else if v == "2232" {
+ 2232
+ } else if v == "2233" {
+ 2233
+ } else if v == "2234" {
+ 2234
+ } else if v == "2235" {
+ 2235
+ } else if v == "2236" {
+ 2236
+ } else if v == "2237" {
+ 2237
+ } else if v == "2238" {
+ 2238
+ } else if v == "2239" {
+ 2239
+ } else if v == "2240" {
+ 2240
+ } else if v == "2241" {
+ 2241
+ } else if v == "2242" {
+ 2242
+ } else if v == "2243" {
+ 2243
+ } else if v == "2244" {
+ 2244
+ } else if v == "2245" {
+ 2245
+ } else if v == "2246" {
+ 2246
+ } else if v == "2247" {
+ 2247
+ } else if v == "2248" {
+ 2248
+ } else if v == "2249" {
+ 2249
+ } else if v == "2250" {
+ 2250
+ } else if v == "2251" {
+ 2251
+ } else if v == "2252" {
+ 2252
+ } else if v == "2253" {
+ 2253
+ } else if v == "2254" {
+ 2254
+ } else if v == "2255" {
+ 2255
+ } else if v == "2256" {
+ 2256
+ } else if v == "2257" {
+ 2257
+ } else if v == "2258" {
+ 2258
+ } else if v == "2259" {
+ 2259
+ } else if v == "2260" {
+ 2260
+ } else if v == "2261" {
+ 2261
+ } else if v == "2262" {
+ 2262
+ } else if v == "2263" {
+ 2263
+ } else if v == "2264" {
+ 2264
+ } else if v == "2265" {
+ 2265
+ } else if v == "2266" {
+ 2266
+ } else if v == "2267" {
+ 2267
+ } else if v == "2268" {
+ 2268
+ } else if v == "2269" {
+ 2269
+ } else if v == "2270" {
+ 2270
+ } else if v == "2271" {
+ 2271
+ } else if v == "2272" {
+ 2272
+ } else if v == "2273" {
+ 2273
+ } else if v == "2274" {
+ 2274
+ } else if v == "2275" {
+ 2275
+ } else if v == "2276" {
+ 2276
+ } else if v == "2277" {
+ 2277
+ } else if v == "2278" {
+ 2278
+ } else if v == "2279" {
+ 2279
+ } else if v == "2280" {
+ 2280
+ } else if v == "2281" {
+ 2281
+ } else if v == "2282" {
+ 2282
+ } else if v == "2283" {
+ 2283
+ } else if v == "2284" {
+ 2284
+ } else if v == "2285" {
+ 2285
+ } else if v == "2286" {
+ 2286
+ } else if v == "2287" {
+ 2287
+ } else if v == "2288" {
+ 2288
+ } else if v == "2289" {
+ 2289
+ } else if v == "2290" {
+ 2290
+ } else if v == "2291" {
+ 2291
+ } else if v == "2292" {
+ 2292
+ } else if v == "2293" {
+ 2293
+ } else if v == "2294" {
+ 2294
+ } else if v == "2295" {
+ 2295
+ } else if v == "2296" {
+ 2296
+ } else if v == "2297" {
+ 2297
+ } else if v == "2298" {
+ 2298
+ } else if v == "2299" {
+ 2299
+ } else if v == "2300" {
+ 2300
+ } else if v == "2301" {
+ 2301
+ } else if v == "2302" {
+ 2302
+ } else if v == "2303" {
+ 2303
+ } else if v == "2304" {
+ 2304
+ } else if v == "2305" {
+ 2305
+ } else if v == "2306" {
+ 2306
+ } else if v == "2307" {
+ 2307
+ } else if v == "2308" {
+ 2308
+ } else if v == "2309" {
+ 2309
+ } else if v == "2310" {
+ 2310
+ } else if v == "2311" {
+ 2311
+ } else if v == "2312" {
+ 2312
+ } else if v == "2313" {
+ 2313
+ } else if v == "2314" {
+ 2314
+ } else if v == "2315" {
+ 2315
+ } else if v == "2316" {
+ 2316
+ } else if v == "2317" {
+ 2317
+ } else if v == "2318" {
+ 2318
+ } else if v == "2319" {
+ 2319
+ } else if v == "2320" {
+ 2320
+ } else if v == "2321" {
+ 2321
+ } else if v == "2322" {
+ 2322
+ } else if v == "2323" {
+ 2323
+ } else if v == "2324" {
+ 2324
+ } else if v == "2325" {
+ 2325
+ } else if v == "2326" {
+ 2326
+ } else if v == "2327" {
+ 2327
+ } else if v == "2328" {
+ 2328
+ } else if v == "2329" {
+ 2329
+ } else if v == "2330" {
+ 2330
+ } else if v == "2331" {
+ 2331
+ } else if v == "2332" {
+ 2332
+ } else if v == "2333" {
+ 2333
+ } else if v == "2334" {
+ 2334
+ } else if v == "2335" {
+ 2335
+ } else if v == "2336" {
+ 2336
+ } else if v == "2337" {
+ 2337
+ } else if v == "2338" {
+ 2338
+ } else if v == "2339" {
+ 2339
+ } else if v == "2340" {
+ 2340
+ } else if v == "2341" {
+ 2341
+ } else if v == "2342" {
+ 2342
+ } else if v == "2343" {
+ 2343
+ } else if v == "2344" {
+ 2344
+ } else if v == "2345" {
+ 2345
+ } else if v == "2346" {
+ 2346
+ } else if v == "2347" {
+ 2347
+ } else if v == "2348" {
+ 2348
+ } else if v == "2349" {
+ 2349
+ } else if v == "2350" {
+ 2350
+ } else if v == "2351" {
+ 2351
+ } else if v == "2352" {
+ 2352
+ } else if v == "2353" {
+ 2353
+ } else if v == "2354" {
+ 2354
+ } else if v == "2355" {
+ 2355
+ } else if v == "2356" {
+ 2356
+ } else if v == "2357" {
+ 2357
+ } else if v == "2358" {
+ 2358
+ } else if v == "2359" {
+ 2359
+ } else if v == "2360" {
+ 2360
+ } else if v == "2361" {
+ 2361
+ } else if v == "2362" {
+ 2362
+ } else if v == "2363" {
+ 2363
+ } else if v == "2364" {
+ 2364
+ } else if v == "2365" {
+ 2365
+ } else if v == "2366" {
+ 2366
+ } else if v == "2367" {
+ 2367
+ } else if v == "2368" {
+ 2368
+ } else if v == "2369" {
+ 2369
+ } else if v == "2370" {
+ 2370
+ } else if v == "2371" {
+ 2371
+ } else if v == "2372" {
+ 2372
+ } else if v == "2373" {
+ 2373
+ } else if v == "2374" {
+ 2374
+ } else if v == "2375" {
+ 2375
+ } else if v == "2376" {
+ 2376
+ } else if v == "2377" {
+ 2377
+ } else if v == "2378" {
+ 2378
+ } else if v == "2379" {
+ 2379
+ } else if v == "2380" {
+ 2380
+ } else if v == "2381" {
+ 2381
+ } else if v == "2382" {
+ 2382
+ } else if v == "2383" {
+ 2383
+ } else if v == "2384" {
+ 2384
+ } else if v == "2385" {
+ 2385
+ } else if v == "2386" {
+ 2386
+ } else if v == "2387" {
+ 2387
+ } else if v == "2388" {
+ 2388
+ } else if v == "2389" {
+ 2389
+ } else if v == "2390" {
+ 2390
+ } else if v == "2391" {
+ 2391
+ } else if v == "2392" {
+ 2392
+ } else if v == "2393" {
+ 2393
+ } else if v == "2394" {
+ 2394
+ } else if v == "2395" {
+ 2395
+ } else if v == "2396" {
+ 2396
+ } else if v == "2397" {
+ 2397
+ } else if v == "2398" {
+ 2398
+ } else if v == "2399" {
+ 2399
+ } else if v == "2400" {
+ 2400
+ } else if v == "2401" {
+ 2401
+ } else if v == "2402" {
+ 2402
+ } else if v == "2403" {
+ 2403
+ } else if v == "2404" {
+ 2404
+ } else if v == "2405" {
+ 2405
+ } else if v == "2406" {
+ 2406
+ } else if v == "2407" {
+ 2407
+ } else if v == "2408" {
+ 2408
+ } else if v == "2409" {
+ 2409
+ } else if v == "2410" {
+ 2410
+ } else if v == "2411" {
+ 2411
+ } else if v == "2412" {
+ 2412
+ } else if v == "2413" {
+ 2413
+ } else if v == "2414" {
+ 2414
+ } else if v == "2415" {
+ 2415
+ } else if v == "2416" {
+ 2416
+ } else if v == "2417" {
+ 2417
+ } else if v == "2418" {
+ 2418
+ } else if v == "2419" {
+ 2419
+ } else if v == "2420" {
+ 2420
+ } else if v == "2421" {
+ 2421
+ } else if v == "2422" {
+ 2422
+ } else if v == "2423" {
+ 2423
+ } else if v == "2424" {
+ 2424
+ } else if v == "2425" {
+ 2425
+ } else if v == "2426" {
+ 2426
+ } else if v == "2427" {
+ 2427
+ } else if v == "2428" {
+ 2428
+ } else if v == "2429" {
+ 2429
+ } else if v == "2430" {
+ 2430
+ } else if v == "2431" {
+ 2431
+ } else if v == "2432" {
+ 2432
+ } else if v == "2433" {
+ 2433
+ } else if v == "2434" {
+ 2434
+ } else if v == "2435" {
+ 2435
+ } else if v == "2436" {
+ 2436
+ } else if v == "2437" {
+ 2437
+ } else if v == "2438" {
+ 2438
+ } else if v == "2439" {
+ 2439
+ } else if v == "2440" {
+ 2440
+ } else if v == "2441" {
+ 2441
+ } else if v == "2442" {
+ 2442
+ } else if v == "2443" {
+ 2443
+ } else if v == "2444" {
+ 2444
+ } else if v == "2445" {
+ 2445
+ } else if v == "2446" {
+ 2446
+ } else if v == "2447" {
+ 2447
+ } else if v == "2448" {
+ 2448
+ } else if v == "2449" {
+ 2449
+ } else if v == "2450" {
+ 2450
+ } else if v == "2451" {
+ 2451
+ } else if v == "2452" {
+ 2452
+ } else if v == "2453" {
+ 2453
+ } else if v == "2454" {
+ 2454
+ } else if v == "2455" {
+ 2455
+ } else if v == "2456" {
+ 2456
+ } else if v == "2457" {
+ 2457
+ } else if v == "2458" {
+ 2458
+ } else if v == "2459" {
+ 2459
+ } else if v == "2460" {
+ 2460
+ } else if v == "2461" {
+ 2461
+ } else if v == "2462" {
+ 2462
+ } else if v == "2463" {
+ 2463
+ } else if v == "2464" {
+ 2464
+ } else if v == "2465" {
+ 2465
+ } else if v == "2466" {
+ 2466
+ } else if v == "2467" {
+ 2467
+ } else if v == "2468" {
+ 2468
+ } else if v == "2469" {
+ 2469
+ } else if v == "2470" {
+ 2470
+ } else if v == "2471" {
+ 2471
+ } else if v == "2472" {
+ 2472
+ } else if v == "2473" {
+ 2473
+ } else if v == "2474" {
+ 2474
+ } else if v == "2475" {
+ 2475
+ } else if v == "2476" {
+ 2476
+ } else if v == "2477" {
+ 2477
+ } else if v == "2478" {
+ 2478
+ } else if v == "2479" {
+ 2479
+ } else if v == "2480" {
+ 2480
+ } else if v == "2481" {
+ 2481
+ } else if v == "2482" {
+ 2482
+ } else if v == "2483" {
+ 2483
+ } else if v == "2484" {
+ 2484
+ } else if v == "2485" {
+ 2485
+ } else if v == "2486" {
+ 2486
+ } else if v == "2487" {
+ 2487
+ } else if v == "2488" {
+ 2488
+ } else if v == "2489" {
+ 2489
+ } else if v == "2490" {
+ 2490
+ } else if v == "2491" {
+ 2491
+ } else if v == "2492" {
+ 2492
+ } else if v == "2493" {
+ 2493
+ } else if v == "2494" {
+ 2494
+ } else if v == "2495" {
+ 2495
+ } else if v == "2496" {
+ 2496
+ } else if v == "2497" {
+ 2497
+ } else if v == "2498" {
+ 2498
+ } else if v == "2499" {
+ 2499
+ } else if v == "2500" {
+ 2500
+ } else if v == "2501" {
+ 2501
+ } else if v == "2502" {
+ 2502
+ } else if v == "2503" {
+ 2503
+ } else if v == "2504" {
+ 2504
+ } else if v == "2505" {
+ 2505
+ } else if v == "2506" {
+ 2506
+ } else if v == "2507" {
+ 2507
+ } else if v == "2508" {
+ 2508
+ } else if v == "2509" {
+ 2509
+ } else if v == "2510" {
+ 2510
+ } else if v == "2511" {
+ 2511
+ } else if v == "2512" {
+ 2512
+ } else if v == "2513" {
+ 2513
+ } else if v == "2514" {
+ 2514
+ } else if v == "2515" {
+ 2515
+ } else if v == "2516" {
+ 2516
+ } else if v == "2517" {
+ 2517
+ } else if v == "2518" {
+ 2518
+ } else if v == "2519" {
+ 2519
+ } else if v == "2520" {
+ 2520
+ } else if v == "2521" {
+ 2521
+ } else if v == "2522" {
+ 2522
+ } else if v == "2523" {
+ 2523
+ } else if v == "2524" {
+ 2524
+ } else if v == "2525" {
+ 2525
+ } else if v == "2526" {
+ 2526
+ } else if v == "2527" {
+ 2527
+ } else if v == "2528" {
+ 2528
+ } else if v == "2529" {
+ 2529
+ } else if v == "2530" {
+ 2530
+ } else if v == "2531" {
+ 2531
+ } else if v == "2532" {
+ 2532
+ } else if v == "2533" {
+ 2533
+ } else if v == "2534" {
+ 2534
+ } else if v == "2535" {
+ 2535
+ } else if v == "2536" {
+ 2536
+ } else if v == "2537" {
+ 2537
+ } else if v == "2538" {
+ 2538
+ } else if v == "2539" {
+ 2539
+ } else if v == "2540" {
+ 2540
+ } else if v == "2541" {
+ 2541
+ } else if v == "2542" {
+ 2542
+ } else if v == "2543" {
+ 2543
+ } else if v == "2544" {
+ 2544
+ } else if v == "2545" {
+ 2545
+ } else if v == "2546" {
+ 2546
+ } else if v == "2547" {
+ 2547
+ } else if v == "2548" {
+ 2548
+ } else if v == "2549" {
+ 2549
+ } else if v == "2550" {
+ 2550
+ } else if v == "2551" {
+ 2551
+ } else if v == "2552" {
+ 2552
+ } else if v == "2553" {
+ 2553
+ } else if v == "2554" {
+ 2554
+ } else if v == "2555" {
+ 2555
+ } else if v == "2556" {
+ 2556
+ } else if v == "2557" {
+ 2557
+ } else if v == "2558" {
+ 2558
+ } else if v == "2559" {
+ 2559
+ } else if v == "2560" {
+ 2560
+ } else if v == "2561" {
+ 2561
+ } else if v == "2562" {
+ 2562
+ } else if v == "2563" {
+ 2563
+ } else if v == "2564" {
+ 2564
+ } else if v == "2565" {
+ 2565
+ } else if v == "2566" {
+ 2566
+ } else if v == "2567" {
+ 2567
+ } else if v == "2568" {
+ 2568
+ } else if v == "2569" {
+ 2569
+ } else if v == "2570" {
+ 2570
+ } else if v == "2571" {
+ 2571
+ } else if v == "2572" {
+ 2572
+ } else if v == "2573" {
+ 2573
+ } else if v == "2574" {
+ 2574
+ } else if v == "2575" {
+ 2575
+ } else if v == "2576" {
+ 2576
+ } else if v == "2577" {
+ 2577
+ } else if v == "2578" {
+ 2578
+ } else if v == "2579" {
+ 2579
+ } else if v == "2580" {
+ 2580
+ } else if v == "2581" {
+ 2581
+ } else if v == "2582" {
+ 2582
+ } else if v == "2583" {
+ 2583
+ } else if v == "2584" {
+ 2584
+ } else if v == "2585" {
+ 2585
+ } else if v == "2586" {
+ 2586
+ } else if v == "2587" {
+ 2587
+ } else if v == "2588" {
+ 2588
+ } else if v == "2589" {
+ 2589
+ } else if v == "2590" {
+ 2590
+ } else if v == "2591" {
+ 2591
+ } else if v == "2592" {
+ 2592
+ } else if v == "2593" {
+ 2593
+ } else if v == "2594" {
+ 2594
+ } else if v == "2595" {
+ 2595
+ } else if v == "2596" {
+ 2596
+ } else if v == "2597" {
+ 2597
+ } else if v == "2598" {
+ 2598
+ } else if v == "2599" {
+ 2599
+ } else if v == "2600" {
+ 2600
+ } else if v == "2601" {
+ 2601
+ } else if v == "2602" {
+ 2602
+ } else if v == "2603" {
+ 2603
+ } else if v == "2604" {
+ 2604
+ } else if v == "2605" {
+ 2605
+ } else if v == "2606" {
+ 2606
+ } else if v == "2607" {
+ 2607
+ } else if v == "2608" {
+ 2608
+ } else if v == "2609" {
+ 2609
+ } else if v == "2610" {
+ 2610
+ } else if v == "2611" {
+ 2611
+ } else if v == "2612" {
+ 2612
+ } else if v == "2613" {
+ 2613
+ } else if v == "2614" {
+ 2614
+ } else if v == "2615" {
+ 2615
+ } else if v == "2616" {
+ 2616
+ } else if v == "2617" {
+ 2617
+ } else if v == "2618" {
+ 2618
+ } else if v == "2619" {
+ 2619
+ } else if v == "2620" {
+ 2620
+ } else if v == "2621" {
+ 2621
+ } else if v == "2622" {
+ 2622
+ } else if v == "2623" {
+ 2623
+ } else if v == "2624" {
+ 2624
+ } else if v == "2625" {
+ 2625
+ } else if v == "2626" {
+ 2626
+ } else if v == "2627" {
+ 2627
+ } else if v == "2628" {
+ 2628
+ } else if v == "2629" {
+ 2629
+ } else if v == "2630" {
+ 2630
+ } else if v == "2631" {
+ 2631
+ } else if v == "2632" {
+ 2632
+ } else if v == "2633" {
+ 2633
+ } else if v == "2634" {
+ 2634
+ } else if v == "2635" {
+ 2635
+ } else if v == "2636" {
+ 2636
+ } else if v == "2637" {
+ 2637
+ } else if v == "2638" {
+ 2638
+ } else if v == "2639" {
+ 2639
+ } else if v == "2640" {
+ 2640
+ } else if v == "2641" {
+ 2641
+ } else if v == "2642" {
+ 2642
+ } else if v == "2643" {
+ 2643
+ } else if v == "2644" {
+ 2644
+ } else if v == "2645" {
+ 2645
+ } else if v == "2646" {
+ 2646
+ } else if v == "2647" {
+ 2647
+ } else if v == "2648" {
+ 2648
+ } else if v == "2649" {
+ 2649
+ } else if v == "2650" {
+ 2650
+ } else if v == "2651" {
+ 2651
+ } else if v == "2652" {
+ 2652
+ } else if v == "2653" {
+ 2653
+ } else if v == "2654" {
+ 2654
+ } else if v == "2655" {
+ 2655
+ } else if v == "2656" {
+ 2656
+ } else if v == "2657" {
+ 2657
+ } else if v == "2658" {
+ 2658
+ } else if v == "2659" {
+ 2659
+ } else if v == "2660" {
+ 2660
+ } else if v == "2661" {
+ 2661
+ } else if v == "2662" {
+ 2662
+ } else if v == "2663" {
+ 2663
+ } else if v == "2664" {
+ 2664
+ } else if v == "2665" {
+ 2665
+ } else if v == "2666" {
+ 2666
+ } else if v == "2667" {
+ 2667
+ } else if v == "2668" {
+ 2668
+ } else if v == "2669" {
+ 2669
+ } else if v == "2670" {
+ 2670
+ } else if v == "2671" {
+ 2671
+ } else if v == "2672" {
+ 2672
+ } else if v == "2673" {
+ 2673
+ } else if v == "2674" {
+ 2674
+ } else if v == "2675" {
+ 2675
+ } else if v == "2676" {
+ 2676
+ } else if v == "2677" {
+ 2677
+ } else if v == "2678" {
+ 2678
+ } else if v == "2679" {
+ 2679
+ } else if v == "2680" {
+ 2680
+ } else if v == "2681" {
+ 2681
+ } else if v == "2682" {
+ 2682
+ } else if v == "2683" {
+ 2683
+ } else if v == "2684" {
+ 2684
+ } else if v == "2685" {
+ 2685
+ } else if v == "2686" {
+ 2686
+ } else if v == "2687" {
+ 2687
+ } else if v == "2688" {
+ 2688
+ } else if v == "2689" {
+ 2689
+ } else if v == "2690" {
+ 2690
+ } else if v == "2691" {
+ 2691
+ } else if v == "2692" {
+ 2692
+ } else if v == "2693" {
+ 2693
+ } else if v == "2694" {
+ 2694
+ } else if v == "2695" {
+ 2695
+ } else if v == "2696" {
+ 2696
+ } else if v == "2697" {
+ 2697
+ } else if v == "2698" {
+ 2698
+ } else if v == "2699" {
+ 2699
+ } else if v == "2700" {
+ 2700
+ } else if v == "2701" {
+ 2701
+ } else if v == "2702" {
+ 2702
+ } else if v == "2703" {
+ 2703
+ } else if v == "2704" {
+ 2704
+ } else if v == "2705" {
+ 2705
+ } else if v == "2706" {
+ 2706
+ } else if v == "2707" {
+ 2707
+ } else if v == "2708" {
+ 2708
+ } else if v == "2709" {
+ 2709
+ } else if v == "2710" {
+ 2710
+ } else if v == "2711" {
+ 2711
+ } else if v == "2712" {
+ 2712
+ } else if v == "2713" {
+ 2713
+ } else if v == "2714" {
+ 2714
+ } else if v == "2715" {
+ 2715
+ } else if v == "2716" {
+ 2716
+ } else if v == "2717" {
+ 2717
+ } else if v == "2718" {
+ 2718
+ } else if v == "2719" {
+ 2719
+ } else if v == "2720" {
+ 2720
+ } else if v == "2721" {
+ 2721
+ } else if v == "2722" {
+ 2722
+ } else if v == "2723" {
+ 2723
+ } else if v == "2724" {
+ 2724
+ } else if v == "2725" {
+ 2725
+ } else if v == "2726" {
+ 2726
+ } else if v == "2727" {
+ 2727
+ } else if v == "2728" {
+ 2728
+ } else if v == "2729" {
+ 2729
+ } else if v == "2730" {
+ 2730
+ } else if v == "2731" {
+ 2731
+ } else if v == "2732" {
+ 2732
+ } else if v == "2733" {
+ 2733
+ } else if v == "2734" {
+ 2734
+ } else if v == "2735" {
+ 2735
+ } else if v == "2736" {
+ 2736
+ } else if v == "2737" {
+ 2737
+ } else if v == "2738" {
+ 2738
+ } else if v == "2739" {
+ 2739
+ } else if v == "2740" {
+ 2740
+ } else if v == "2741" {
+ 2741
+ } else if v == "2742" {
+ 2742
+ } else if v == "2743" {
+ 2743
+ } else if v == "2744" {
+ 2744
+ } else if v == "2745" {
+ 2745
+ } else if v == "2746" {
+ 2746
+ } else if v == "2747" {
+ 2747
+ } else if v == "2748" {
+ 2748
+ } else if v == "2749" {
+ 2749
+ } else if v == "2750" {
+ 2750
+ } else if v == "2751" {
+ 2751
+ } else if v == "2752" {
+ 2752
+ } else if v == "2753" {
+ 2753
+ } else if v == "2754" {
+ 2754
+ } else if v == "2755" {
+ 2755
+ } else if v == "2756" {
+ 2756
+ } else if v == "2757" {
+ 2757
+ } else if v == "2758" {
+ 2758
+ } else if v == "2759" {
+ 2759
+ } else if v == "2760" {
+ 2760
+ } else if v == "2761" {
+ 2761
+ } else if v == "2762" {
+ 2762
+ } else if v == "2763" {
+ 2763
+ } else if v == "2764" {
+ 2764
+ } else if v == "2765" {
+ 2765
+ } else if v == "2766" {
+ 2766
+ } else if v == "2767" {
+ 2767
+ } else if v == "2768" {
+ 2768
+ } else if v == "2769" {
+ 2769
+ } else if v == "2770" {
+ 2770
+ } else if v == "2771" {
+ 2771
+ } else if v == "2772" {
+ 2772
+ } else if v == "2773" {
+ 2773
+ } else if v == "2774" {
+ 2774
+ } else if v == "2775" {
+ 2775
+ } else if v == "2776" {
+ 2776
+ } else if v == "2777" {
+ 2777
+ } else if v == "2778" {
+ 2778
+ } else if v == "2779" {
+ 2779
+ } else if v == "2780" {
+ 2780
+ } else if v == "2781" {
+ 2781
+ } else if v == "2782" {
+ 2782
+ } else if v == "2783" {
+ 2783
+ } else if v == "2784" {
+ 2784
+ } else if v == "2785" {
+ 2785
+ } else if v == "2786" {
+ 2786
+ } else if v == "2787" {
+ 2787
+ } else if v == "2788" {
+ 2788
+ } else if v == "2789" {
+ 2789
+ } else if v == "2790" {
+ 2790
+ } else if v == "2791" {
+ 2791
+ } else if v == "2792" {
+ 2792
+ } else if v == "2793" {
+ 2793
+ } else if v == "2794" {
+ 2794
+ } else if v == "2795" {
+ 2795
+ } else if v == "2796" {
+ 2796
+ } else if v == "2797" {
+ 2797
+ } else if v == "2798" {
+ 2798
+ } else if v == "2799" {
+ 2799
+ } else if v == "2800" {
+ 2800
+ } else if v == "2801" {
+ 2801
+ } else if v == "2802" {
+ 2802
+ } else if v == "2803" {
+ 2803
+ } else if v == "2804" {
+ 2804
+ } else if v == "2805" {
+ 2805
+ } else if v == "2806" {
+ 2806
+ } else if v == "2807" {
+ 2807
+ } else if v == "2808" {
+ 2808
+ } else if v == "2809" {
+ 2809
+ } else if v == "2810" {
+ 2810
+ } else if v == "2811" {
+ 2811
+ } else if v == "2812" {
+ 2812
+ } else if v == "2813" {
+ 2813
+ } else if v == "2814" {
+ 2814
+ } else if v == "2815" {
+ 2815
+ } else if v == "2816" {
+ 2816
+ } else if v == "2817" {
+ 2817
+ } else if v == "2818" {
+ 2818
+ } else if v == "2819" {
+ 2819
+ } else if v == "2820" {
+ 2820
+ } else if v == "2821" {
+ 2821
+ } else if v == "2822" {
+ 2822
+ } else if v == "2823" {
+ 2823
+ } else if v == "2824" {
+ 2824
+ } else if v == "2825" {
+ 2825
+ } else if v == "2826" {
+ 2826
+ } else if v == "2827" {
+ 2827
+ } else if v == "2828" {
+ 2828
+ } else if v == "2829" {
+ 2829
+ } else if v == "2830" {
+ 2830
+ } else if v == "2831" {
+ 2831
+ } else if v == "2832" {
+ 2832
+ } else if v == "2833" {
+ 2833
+ } else if v == "2834" {
+ 2834
+ } else if v == "2835" {
+ 2835
+ } else if v == "2836" {
+ 2836
+ } else if v == "2837" {
+ 2837
+ } else if v == "2838" {
+ 2838
+ } else if v == "2839" {
+ 2839
+ } else if v == "2840" {
+ 2840
+ } else if v == "2841" {
+ 2841
+ } else if v == "2842" {
+ 2842
+ } else if v == "2843" {
+ 2843
+ } else if v == "2844" {
+ 2844
+ } else if v == "2845" {
+ 2845
+ } else if v == "2846" {
+ 2846
+ } else if v == "2847" {
+ 2847
+ } else if v == "2848" {
+ 2848
+ } else if v == "2849" {
+ 2849
+ } else if v == "2850" {
+ 2850
+ } else if v == "2851" {
+ 2851
+ } else if v == "2852" {
+ 2852
+ } else if v == "2853" {
+ 2853
+ } else if v == "2854" {
+ 2854
+ } else if v == "2855" {
+ 2855
+ } else if v == "2856" {
+ 2856
+ } else if v == "2857" {
+ 2857
+ } else if v == "2858" {
+ 2858
+ } else if v == "2859" {
+ 2859
+ } else if v == "2860" {
+ 2860
+ } else if v == "2861" {
+ 2861
+ } else if v == "2862" {
+ 2862
+ } else if v == "2863" {
+ 2863
+ } else if v == "2864" {
+ 2864
+ } else if v == "2865" {
+ 2865
+ } else if v == "2866" {
+ 2866
+ } else if v == "2867" {
+ 2867
+ } else if v == "2868" {
+ 2868
+ } else if v == "2869" {
+ 2869
+ } else if v == "2870" {
+ 2870
+ } else if v == "2871" {
+ 2871
+ } else if v == "2872" {
+ 2872
+ } else if v == "2873" {
+ 2873
+ } else if v == "2874" {
+ 2874
+ } else if v == "2875" {
+ 2875
+ } else if v == "2876" {
+ 2876
+ } else if v == "2877" {
+ 2877
+ } else if v == "2878" {
+ 2878
+ } else if v == "2879" {
+ 2879
+ } else if v == "2880" {
+ 2880
+ } else if v == "2881" {
+ 2881
+ } else if v == "2882" {
+ 2882
+ } else if v == "2883" {
+ 2883
+ } else if v == "2884" {
+ 2884
+ } else if v == "2885" {
+ 2885
+ } else if v == "2886" {
+ 2886
+ } else if v == "2887" {
+ 2887
+ } else if v == "2888" {
+ 2888
+ } else if v == "2889" {
+ 2889
+ } else if v == "2890" {
+ 2890
+ } else if v == "2891" {
+ 2891
+ } else if v == "2892" {
+ 2892
+ } else if v == "2893" {
+ 2893
+ } else if v == "2894" {
+ 2894
+ } else if v == "2895" {
+ 2895
+ } else if v == "2896" {
+ 2896
+ } else if v == "2897" {
+ 2897
+ } else if v == "2898" {
+ 2898
+ } else if v == "2899" {
+ 2899
+ } else if v == "2900" {
+ 2900
+ } else if v == "2901" {
+ 2901
+ } else if v == "2902" {
+ 2902
+ } else if v == "2903" {
+ 2903
+ } else if v == "2904" {
+ 2904
+ } else if v == "2905" {
+ 2905
+ } else if v == "2906" {
+ 2906
+ } else if v == "2907" {
+ 2907
+ } else if v == "2908" {
+ 2908
+ } else if v == "2909" {
+ 2909
+ } else if v == "2910" {
+ 2910
+ } else if v == "2911" {
+ 2911
+ } else if v == "2912" {
+ 2912
+ } else if v == "2913" {
+ 2913
+ } else if v == "2914" {
+ 2914
+ } else if v == "2915" {
+ 2915
+ } else if v == "2916" {
+ 2916
+ } else if v == "2917" {
+ 2917
+ } else if v == "2918" {
+ 2918
+ } else if v == "2919" {
+ 2919
+ } else if v == "2920" {
+ 2920
+ } else if v == "2921" {
+ 2921
+ } else if v == "2922" {
+ 2922
+ } else if v == "2923" {
+ 2923
+ } else if v == "2924" {
+ 2924
+ } else if v == "2925" {
+ 2925
+ } else if v == "2926" {
+ 2926
+ } else if v == "2927" {
+ 2927
+ } else if v == "2928" {
+ 2928
+ } else if v == "2929" {
+ 2929
+ } else if v == "2930" {
+ 2930
+ } else if v == "2931" {
+ 2931
+ } else if v == "2932" {
+ 2932
+ } else if v == "2933" {
+ 2933
+ } else if v == "2934" {
+ 2934
+ } else if v == "2935" {
+ 2935
+ } else if v == "2936" {
+ 2936
+ } else if v == "2937" {
+ 2937
+ } else if v == "2938" {
+ 2938
+ } else if v == "2939" {
+ 2939
+ } else if v == "2940" {
+ 2940
+ } else if v == "2941" {
+ 2941
+ } else if v == "2942" {
+ 2942
+ } else if v == "2943" {
+ 2943
+ } else if v == "2944" {
+ 2944
+ } else if v == "2945" {
+ 2945
+ } else if v == "2946" {
+ 2946
+ } else if v == "2947" {
+ 2947
+ } else if v == "2948" {
+ 2948
+ } else if v == "2949" {
+ 2949
+ } else if v == "2950" {
+ 2950
+ } else if v == "2951" {
+ 2951
+ } else if v == "2952" {
+ 2952
+ } else if v == "2953" {
+ 2953
+ } else if v == "2954" {
+ 2954
+ } else if v == "2955" {
+ 2955
+ } else if v == "2956" {
+ 2956
+ } else if v == "2957" {
+ 2957
+ } else if v == "2958" {
+ 2958
+ } else if v == "2959" {
+ 2959
+ } else if v == "2960" {
+ 2960
+ } else if v == "2961" {
+ 2961
+ } else if v == "2962" {
+ 2962
+ } else if v == "2963" {
+ 2963
+ } else if v == "2964" {
+ 2964
+ } else if v == "2965" {
+ 2965
+ } else if v == "2966" {
+ 2966
+ } else if v == "2967" {
+ 2967
+ } else if v == "2968" {
+ 2968
+ } else if v == "2969" {
+ 2969
+ } else if v == "2970" {
+ 2970
+ } else if v == "2971" {
+ 2971
+ } else if v == "2972" {
+ 2972
+ } else if v == "2973" {
+ 2973
+ } else if v == "2974" {
+ 2974
+ } else if v == "2975" {
+ 2975
+ } else if v == "2976" {
+ 2976
+ } else if v == "2977" {
+ 2977
+ } else if v == "2978" {
+ 2978
+ } else if v == "2979" {
+ 2979
+ } else if v == "2980" {
+ 2980
+ } else if v == "2981" {
+ 2981
+ } else if v == "2982" {
+ 2982
+ } else if v == "2983" {
+ 2983
+ } else if v == "2984" {
+ 2984
+ } else if v == "2985" {
+ 2985
+ } else if v == "2986" {
+ 2986
+ } else if v == "2987" {
+ 2987
+ } else if v == "2988" {
+ 2988
+ } else if v == "2989" {
+ 2989
+ } else if v == "2990" {
+ 2990
+ } else if v == "2991" {
+ 2991
+ } else if v == "2992" {
+ 2992
+ } else if v == "2993" {
+ 2993
+ } else if v == "2994" {
+ 2994
+ } else if v == "2995" {
+ 2995
+ } else if v == "2996" {
+ 2996
+ } else if v == "2997" {
+ 2997
+ } else if v == "2998" {
+ 2998
+ } else if v == "2999" {
+ 2999
+ } else if v == "3000" {
+ 3000
+ } else if v == "3001" {
+ 3001
+ } else if v == "3002" {
+ 3002
+ } else if v == "3003" {
+ 3003
+ } else if v == "3004" {
+ 3004
+ } else if v == "3005" {
+ 3005
+ } else if v == "3006" {
+ 3006
+ } else if v == "3007" {
+ 3007
+ } else if v == "3008" {
+ 3008
+ } else if v == "3009" {
+ 3009
+ } else if v == "3010" {
+ 3010
+ } else if v == "3011" {
+ 3011
+ } else if v == "3012" {
+ 3012
+ } else if v == "3013" {
+ 3013
+ } else if v == "3014" {
+ 3014
+ } else if v == "3015" {
+ 3015
+ } else if v == "3016" {
+ 3016
+ } else if v == "3017" {
+ 3017
+ } else if v == "3018" {
+ 3018
+ } else if v == "3019" {
+ 3019
+ } else if v == "3020" {
+ 3020
+ } else if v == "3021" {
+ 3021
+ } else if v == "3022" {
+ 3022
+ } else if v == "3023" {
+ 3023
+ } else if v == "3024" {
+ 3024
+ } else if v == "3025" {
+ 3025
+ } else if v == "3026" {
+ 3026
+ } else if v == "3027" {
+ 3027
+ } else if v == "3028" {
+ 3028
+ } else if v == "3029" {
+ 3029
+ } else if v == "3030" {
+ 3030
+ } else if v == "3031" {
+ 3031
+ } else if v == "3032" {
+ 3032
+ } else if v == "3033" {
+ 3033
+ } else if v == "3034" {
+ 3034
+ } else if v == "3035" {
+ 3035
+ } else if v == "3036" {
+ 3036
+ } else if v == "3037" {
+ 3037
+ } else if v == "3038" {
+ 3038
+ } else if v == "3039" {
+ 3039
+ } else if v == "3040" {
+ 3040
+ } else if v == "3041" {
+ 3041
+ } else if v == "3042" {
+ 3042
+ } else if v == "3043" {
+ 3043
+ } else if v == "3044" {
+ 3044
+ } else if v == "3045" {
+ 3045
+ } else if v == "3046" {
+ 3046
+ } else if v == "3047" {
+ 3047
+ } else if v == "3048" {
+ 3048
+ } else if v == "3049" {
+ 3049
+ } else if v == "3050" {
+ 3050
+ } else if v == "3051" {
+ 3051
+ } else if v == "3052" {
+ 3052
+ } else if v == "3053" {
+ 3053
+ } else if v == "3054" {
+ 3054
+ } else if v == "3055" {
+ 3055
+ } else if v == "3056" {
+ 3056
+ } else if v == "3057" {
+ 3057
+ } else if v == "3058" {
+ 3058
+ } else if v == "3059" {
+ 3059
+ } else if v == "3060" {
+ 3060
+ } else if v == "3061" {
+ 3061
+ } else if v == "3062" {
+ 3062
+ } else if v == "3063" {
+ 3063
+ } else if v == "3064" {
+ 3064
+ } else if v == "3065" {
+ 3065
+ } else if v == "3066" {
+ 3066
+ } else if v == "3067" {
+ 3067
+ } else if v == "3068" {
+ 3068
+ } else if v == "3069" {
+ 3069
+ } else if v == "3070" {
+ 3070
+ } else if v == "3071" {
+ 3071
+ } else if v == "3072" {
+ 3072
+ } else if v == "3073" {
+ 3073
+ } else if v == "3074" {
+ 3074
+ } else if v == "3075" {
+ 3075
+ } else if v == "3076" {
+ 3076
+ } else if v == "3077" {
+ 3077
+ } else if v == "3078" {
+ 3078
+ } else if v == "3079" {
+ 3079
+ } else if v == "3080" {
+ 3080
+ } else if v == "3081" {
+ 3081
+ } else if v == "3082" {
+ 3082
+ } else if v == "3083" {
+ 3083
+ } else if v == "3084" {
+ 3084
+ } else if v == "3085" {
+ 3085
+ } else if v == "3086" {
+ 3086
+ } else if v == "3087" {
+ 3087
+ } else if v == "3088" {
+ 3088
+ } else if v == "3089" {
+ 3089
+ } else if v == "3090" {
+ 3090
+ } else if v == "3091" {
+ 3091
+ } else if v == "3092" {
+ 3092
+ } else if v == "3093" {
+ 3093
+ } else if v == "3094" {
+ 3094
+ } else if v == "3095" {
+ 3095
+ } else if v == "3096" {
+ 3096
+ } else if v == "3097" {
+ 3097
+ } else if v == "3098" {
+ 3098
+ } else if v == "3099" {
+ 3099
+ } else if v == "3100" {
+ 3100
+ } else if v == "3101" {
+ 3101
+ } else if v == "3102" {
+ 3102
+ } else if v == "3103" {
+ 3103
+ } else if v == "3104" {
+ 3104
+ } else if v == "3105" {
+ 3105
+ } else if v == "3106" {
+ 3106
+ } else if v == "3107" {
+ 3107
+ } else if v == "3108" {
+ 3108
+ } else if v == "3109" {
+ 3109
+ } else if v == "3110" {
+ 3110
+ } else if v == "3111" {
+ 3111
+ } else if v == "3112" {
+ 3112
+ } else if v == "3113" {
+ 3113
+ } else if v == "3114" {
+ 3114
+ } else if v == "3115" {
+ 3115
+ } else if v == "3116" {
+ 3116
+ } else if v == "3117" {
+ 3117
+ } else if v == "3118" {
+ 3118
+ } else if v == "3119" {
+ 3119
+ } else if v == "3120" {
+ 3120
+ } else if v == "3121" {
+ 3121
+ } else if v == "3122" {
+ 3122
+ } else if v == "3123" {
+ 3123
+ } else if v == "3124" {
+ 3124
+ } else if v == "3125" {
+ 3125
+ } else if v == "3126" {
+ 3126
+ } else if v == "3127" {
+ 3127
+ } else if v == "3128" {
+ 3128
+ } else if v == "3129" {
+ 3129
+ } else if v == "3130" {
+ 3130
+ } else if v == "3131" {
+ 3131
+ } else if v == "3132" {
+ 3132
+ } else if v == "3133" {
+ 3133
+ } else if v == "3134" {
+ 3134
+ } else if v == "3135" {
+ 3135
+ } else if v == "3136" {
+ 3136
+ } else if v == "3137" {
+ 3137
+ } else if v == "3138" {
+ 3138
+ } else if v == "3139" {
+ 3139
+ } else if v == "3140" {
+ 3140
+ } else if v == "3141" {
+ 3141
+ } else if v == "3142" {
+ 3142
+ } else if v == "3143" {
+ 3143
+ } else if v == "3144" {
+ 3144
+ } else if v == "3145" {
+ 3145
+ } else if v == "3146" {
+ 3146
+ } else if v == "3147" {
+ 3147
+ } else if v == "3148" {
+ 3148
+ } else if v == "3149" {
+ 3149
+ } else if v == "3150" {
+ 3150
+ } else if v == "3151" {
+ 3151
+ } else if v == "3152" {
+ 3152
+ } else if v == "3153" {
+ 3153
+ } else if v == "3154" {
+ 3154
+ } else if v == "3155" {
+ 3155
+ } else if v == "3156" {
+ 3156
+ } else if v == "3157" {
+ 3157
+ } else if v == "3158" {
+ 3158
+ } else if v == "3159" {
+ 3159
+ } else if v == "3160" {
+ 3160
+ } else if v == "3161" {
+ 3161
+ } else if v == "3162" {
+ 3162
+ } else if v == "3163" {
+ 3163
+ } else if v == "3164" {
+ 3164
+ } else if v == "3165" {
+ 3165
+ } else if v == "3166" {
+ 3166
+ } else if v == "3167" {
+ 3167
+ } else if v == "3168" {
+ 3168
+ } else if v == "3169" {
+ 3169
+ } else if v == "3170" {
+ 3170
+ } else if v == "3171" {
+ 3171
+ } else if v == "3172" {
+ 3172
+ } else if v == "3173" {
+ 3173
+ } else if v == "3174" {
+ 3174
+ } else if v == "3175" {
+ 3175
+ } else if v == "3176" {
+ 3176
+ } else if v == "3177" {
+ 3177
+ } else if v == "3178" {
+ 3178
+ } else if v == "3179" {
+ 3179
+ } else if v == "3180" {
+ 3180
+ } else if v == "3181" {
+ 3181
+ } else if v == "3182" {
+ 3182
+ } else if v == "3183" {
+ 3183
+ } else if v == "3184" {
+ 3184
+ } else if v == "3185" {
+ 3185
+ } else if v == "3186" {
+ 3186
+ } else if v == "3187" {
+ 3187
+ } else if v == "3188" {
+ 3188
+ } else if v == "3189" {
+ 3189
+ } else if v == "3190" {
+ 3190
+ } else if v == "3191" {
+ 3191
+ } else if v == "3192" {
+ 3192
+ } else if v == "3193" {
+ 3193
+ } else if v == "3194" {
+ 3194
+ } else if v == "3195" {
+ 3195
+ } else if v == "3196" {
+ 3196
+ } else if v == "3197" {
+ 3197
+ } else if v == "3198" {
+ 3198
+ } else if v == "3199" {
+ 3199
+ } else if v == "3200" {
+ 3200
+ } else if v == "3201" {
+ 3201
+ } else if v == "3202" {
+ 3202
+ } else if v == "3203" {
+ 3203
+ } else if v == "3204" {
+ 3204
+ } else if v == "3205" {
+ 3205
+ } else if v == "3206" {
+ 3206
+ } else if v == "3207" {
+ 3207
+ } else if v == "3208" {
+ 3208
+ } else if v == "3209" {
+ 3209
+ } else if v == "3210" {
+ 3210
+ } else if v == "3211" {
+ 3211
+ } else if v == "3212" {
+ 3212
+ } else if v == "3213" {
+ 3213
+ } else if v == "3214" {
+ 3214
+ } else if v == "3215" {
+ 3215
+ } else if v == "3216" {
+ 3216
+ } else if v == "3217" {
+ 3217
+ } else if v == "3218" {
+ 3218
+ } else if v == "3219" {
+ 3219
+ } else if v == "3220" {
+ 3220
+ } else if v == "3221" {
+ 3221
+ } else if v == "3222" {
+ 3222
+ } else if v == "3223" {
+ 3223
+ } else if v == "3224" {
+ 3224
+ } else if v == "3225" {
+ 3225
+ } else if v == "3226" {
+ 3226
+ } else if v == "3227" {
+ 3227
+ } else if v == "3228" {
+ 3228
+ } else if v == "3229" {
+ 3229
+ } else if v == "3230" {
+ 3230
+ } else if v == "3231" {
+ 3231
+ } else if v == "3232" {
+ 3232
+ } else if v == "3233" {
+ 3233
+ } else if v == "3234" {
+ 3234
+ } else if v == "3235" {
+ 3235
+ } else if v == "3236" {
+ 3236
+ } else if v == "3237" {
+ 3237
+ } else if v == "3238" {
+ 3238
+ } else if v == "3239" {
+ 3239
+ } else if v == "3240" {
+ 3240
+ } else if v == "3241" {
+ 3241
+ } else if v == "3242" {
+ 3242
+ } else if v == "3243" {
+ 3243
+ } else if v == "3244" {
+ 3244
+ } else if v == "3245" {
+ 3245
+ } else if v == "3246" {
+ 3246
+ } else if v == "3247" {
+ 3247
+ } else if v == "3248" {
+ 3248
+ } else if v == "3249" {
+ 3249
+ } else if v == "3250" {
+ 3250
+ } else if v == "3251" {
+ 3251
+ } else if v == "3252" {
+ 3252
+ } else if v == "3253" {
+ 3253
+ } else if v == "3254" {
+ 3254
+ } else if v == "3255" {
+ 3255
+ } else if v == "3256" {
+ 3256
+ } else if v == "3257" {
+ 3257
+ } else if v == "3258" {
+ 3258
+ } else if v == "3259" {
+ 3259
+ } else if v == "3260" {
+ 3260
+ } else if v == "3261" {
+ 3261
+ } else if v == "3262" {
+ 3262
+ } else if v == "3263" {
+ 3263
+ } else if v == "3264" {
+ 3264
+ } else if v == "3265" {
+ 3265
+ } else if v == "3266" {
+ 3266
+ } else if v == "3267" {
+ 3267
+ } else if v == "3268" {
+ 3268
+ } else if v == "3269" {
+ 3269
+ } else if v == "3270" {
+ 3270
+ } else if v == "3271" {
+ 3271
+ } else if v == "3272" {
+ 3272
+ } else if v == "3273" {
+ 3273
+ } else if v == "3274" {
+ 3274
+ } else if v == "3275" {
+ 3275
+ } else if v == "3276" {
+ 3276
+ } else if v == "3277" {
+ 3277
+ } else if v == "3278" {
+ 3278
+ } else if v == "3279" {
+ 3279
+ } else if v == "3280" {
+ 3280
+ } else if v == "3281" {
+ 3281
+ } else if v == "3282" {
+ 3282
+ } else if v == "3283" {
+ 3283
+ } else if v == "3284" {
+ 3284
+ } else if v == "3285" {
+ 3285
+ } else if v == "3286" {
+ 3286
+ } else if v == "3287" {
+ 3287
+ } else if v == "3288" {
+ 3288
+ } else if v == "3289" {
+ 3289
+ } else if v == "3290" {
+ 3290
+ } else if v == "3291" {
+ 3291
+ } else if v == "3292" {
+ 3292
+ } else if v == "3293" {
+ 3293
+ } else if v == "3294" {
+ 3294
+ } else if v == "3295" {
+ 3295
+ } else if v == "3296" {
+ 3296
+ } else if v == "3297" {
+ 3297
+ } else if v == "3298" {
+ 3298
+ } else if v == "3299" {
+ 3299
+ } else if v == "3300" {
+ 3300
+ } else if v == "3301" {
+ 3301
+ } else if v == "3302" {
+ 3302
+ } else if v == "3303" {
+ 3303
+ } else if v == "3304" {
+ 3304
+ } else if v == "3305" {
+ 3305
+ } else if v == "3306" {
+ 3306
+ } else if v == "3307" {
+ 3307
+ } else if v == "3308" {
+ 3308
+ } else if v == "3309" {
+ 3309
+ } else if v == "3310" {
+ 3310
+ } else if v == "3311" {
+ 3311
+ } else if v == "3312" {
+ 3312
+ } else if v == "3313" {
+ 3313
+ } else if v == "3314" {
+ 3314
+ } else if v == "3315" {
+ 3315
+ } else if v == "3316" {
+ 3316
+ } else if v == "3317" {
+ 3317
+ } else if v == "3318" {
+ 3318
+ } else if v == "3319" {
+ 3319
+ } else if v == "3320" {
+ 3320
+ } else if v == "3321" {
+ 3321
+ } else if v == "3322" {
+ 3322
+ } else if v == "3323" {
+ 3323
+ } else if v == "3324" {
+ 3324
+ } else if v == "3325" {
+ 3325
+ } else if v == "3326" {
+ 3326
+ } else if v == "3327" {
+ 3327
+ } else if v == "3328" {
+ 3328
+ } else if v == "3329" {
+ 3329
+ } else if v == "3330" {
+ 3330
+ } else if v == "3331" {
+ 3331
+ } else if v == "3332" {
+ 3332
+ } else if v == "3333" {
+ 3333
+ } else if v == "3334" {
+ 3334
+ } else if v == "3335" {
+ 3335
+ } else if v == "3336" {
+ 3336
+ } else if v == "3337" {
+ 3337
+ } else if v == "3338" {
+ 3338
+ } else if v == "3339" {
+ 3339
+ } else if v == "3340" {
+ 3340
+ } else if v == "3341" {
+ 3341
+ } else if v == "3342" {
+ 3342
+ } else if v == "3343" {
+ 3343
+ } else if v == "3344" {
+ 3344
+ } else if v == "3345" {
+ 3345
+ } else if v == "3346" {
+ 3346
+ } else if v == "3347" {
+ 3347
+ } else if v == "3348" {
+ 3348
+ } else if v == "3349" {
+ 3349
+ } else if v == "3350" {
+ 3350
+ } else if v == "3351" {
+ 3351
+ } else if v == "3352" {
+ 3352
+ } else if v == "3353" {
+ 3353
+ } else if v == "3354" {
+ 3354
+ } else if v == "3355" {
+ 3355
+ } else if v == "3356" {
+ 3356
+ } else if v == "3357" {
+ 3357
+ } else if v == "3358" {
+ 3358
+ } else if v == "3359" {
+ 3359
+ } else if v == "3360" {
+ 3360
+ } else if v == "3361" {
+ 3361
+ } else if v == "3362" {
+ 3362
+ } else if v == "3363" {
+ 3363
+ } else if v == "3364" {
+ 3364
+ } else if v == "3365" {
+ 3365
+ } else if v == "3366" {
+ 3366
+ } else if v == "3367" {
+ 3367
+ } else if v == "3368" {
+ 3368
+ } else if v == "3369" {
+ 3369
+ } else if v == "3370" {
+ 3370
+ } else if v == "3371" {
+ 3371
+ } else if v == "3372" {
+ 3372
+ } else if v == "3373" {
+ 3373
+ } else if v == "3374" {
+ 3374
+ } else if v == "3375" {
+ 3375
+ } else if v == "3376" {
+ 3376
+ } else if v == "3377" {
+ 3377
+ } else if v == "3378" {
+ 3378
+ } else if v == "3379" {
+ 3379
+ } else if v == "3380" {
+ 3380
+ } else if v == "3381" {
+ 3381
+ } else if v == "3382" {
+ 3382
+ } else if v == "3383" {
+ 3383
+ } else if v == "3384" {
+ 3384
+ } else if v == "3385" {
+ 3385
+ } else if v == "3386" {
+ 3386
+ } else if v == "3387" {
+ 3387
+ } else if v == "3388" {
+ 3388
+ } else if v == "3389" {
+ 3389
+ } else if v == "3390" {
+ 3390
+ } else if v == "3391" {
+ 3391
+ } else if v == "3392" {
+ 3392
+ } else if v == "3393" {
+ 3393
+ } else if v == "3394" {
+ 3394
+ } else if v == "3395" {
+ 3395
+ } else if v == "3396" {
+ 3396
+ } else if v == "3397" {
+ 3397
+ } else if v == "3398" {
+ 3398
+ } else if v == "3399" {
+ 3399
+ } else if v == "3400" {
+ 3400
+ } else if v == "3401" {
+ 3401
+ } else if v == "3402" {
+ 3402
+ } else if v == "3403" {
+ 3403
+ } else if v == "3404" {
+ 3404
+ } else if v == "3405" {
+ 3405
+ } else if v == "3406" {
+ 3406
+ } else if v == "3407" {
+ 3407
+ } else if v == "3408" {
+ 3408
+ } else if v == "3409" {
+ 3409
+ } else if v == "3410" {
+ 3410
+ } else if v == "3411" {
+ 3411
+ } else if v == "3412" {
+ 3412
+ } else if v == "3413" {
+ 3413
+ } else if v == "3414" {
+ 3414
+ } else if v == "3415" {
+ 3415
+ } else if v == "3416" {
+ 3416
+ } else if v == "3417" {
+ 3417
+ } else if v == "3418" {
+ 3418
+ } else if v == "3419" {
+ 3419
+ } else if v == "3420" {
+ 3420
+ } else if v == "3421" {
+ 3421
+ } else if v == "3422" {
+ 3422
+ } else if v == "3423" {
+ 3423
+ } else if v == "3424" {
+ 3424
+ } else if v == "3425" {
+ 3425
+ } else if v == "3426" {
+ 3426
+ } else if v == "3427" {
+ 3427
+ } else if v == "3428" {
+ 3428
+ } else if v == "3429" {
+ 3429
+ } else if v == "3430" {
+ 3430
+ } else if v == "3431" {
+ 3431
+ } else if v == "3432" {
+ 3432
+ } else if v == "3433" {
+ 3433
+ } else if v == "3434" {
+ 3434
+ } else if v == "3435" {
+ 3435
+ } else if v == "3436" {
+ 3436
+ } else if v == "3437" {
+ 3437
+ } else if v == "3438" {
+ 3438
+ } else if v == "3439" {
+ 3439
+ } else if v == "3440" {
+ 3440
+ } else if v == "3441" {
+ 3441
+ } else if v == "3442" {
+ 3442
+ } else if v == "3443" {
+ 3443
+ } else if v == "3444" {
+ 3444
+ } else if v == "3445" {
+ 3445
+ } else if v == "3446" {
+ 3446
+ } else if v == "3447" {
+ 3447
+ } else if v == "3448" {
+ 3448
+ } else if v == "3449" {
+ 3449
+ } else if v == "3450" {
+ 3450
+ } else if v == "3451" {
+ 3451
+ } else if v == "3452" {
+ 3452
+ } else if v == "3453" {
+ 3453
+ } else if v == "3454" {
+ 3454
+ } else if v == "3455" {
+ 3455
+ } else if v == "3456" {
+ 3456
+ } else if v == "3457" {
+ 3457
+ } else if v == "3458" {
+ 3458
+ } else if v == "3459" {
+ 3459
+ } else if v == "3460" {
+ 3460
+ } else if v == "3461" {
+ 3461
+ } else if v == "3462" {
+ 3462
+ } else if v == "3463" {
+ 3463
+ } else if v == "3464" {
+ 3464
+ } else if v == "3465" {
+ 3465
+ } else if v == "3466" {
+ 3466
+ } else if v == "3467" {
+ 3467
+ } else if v == "3468" {
+ 3468
+ } else if v == "3469" {
+ 3469
+ } else if v == "3470" {
+ 3470
+ } else if v == "3471" {
+ 3471
+ } else if v == "3472" {
+ 3472
+ } else if v == "3473" {
+ 3473
+ } else if v == "3474" {
+ 3474
+ } else if v == "3475" {
+ 3475
+ } else if v == "3476" {
+ 3476
+ } else if v == "3477" {
+ 3477
+ } else if v == "3478" {
+ 3478
+ } else if v == "3479" {
+ 3479
+ } else if v == "3480" {
+ 3480
+ } else if v == "3481" {
+ 3481
+ } else if v == "3482" {
+ 3482
+ } else if v == "3483" {
+ 3483
+ } else if v == "3484" {
+ 3484
+ } else if v == "3485" {
+ 3485
+ } else if v == "3486" {
+ 3486
+ } else if v == "3487" {
+ 3487
+ } else if v == "3488" {
+ 3488
+ } else if v == "3489" {
+ 3489
+ } else if v == "3490" {
+ 3490
+ } else if v == "3491" {
+ 3491
+ } else if v == "3492" {
+ 3492
+ } else if v == "3493" {
+ 3493
+ } else if v == "3494" {
+ 3494
+ } else if v == "3495" {
+ 3495
+ } else if v == "3496" {
+ 3496
+ } else if v == "3497" {
+ 3497
+ } else if v == "3498" {
+ 3498
+ } else if v == "3499" {
+ 3499
+ } else if v == "3500" {
+ 3500
+ } else if v == "3501" {
+ 3501
+ } else if v == "3502" {
+ 3502
+ } else if v == "3503" {
+ 3503
+ } else if v == "3504" {
+ 3504
+ } else if v == "3505" {
+ 3505
+ } else if v == "3506" {
+ 3506
+ } else if v == "3507" {
+ 3507
+ } else if v == "3508" {
+ 3508
+ } else if v == "3509" {
+ 3509
+ } else if v == "3510" {
+ 3510
+ } else if v == "3511" {
+ 3511
+ } else if v == "3512" {
+ 3512
+ } else if v == "3513" {
+ 3513
+ } else if v == "3514" {
+ 3514
+ } else if v == "3515" {
+ 3515
+ } else if v == "3516" {
+ 3516
+ } else if v == "3517" {
+ 3517
+ } else if v == "3518" {
+ 3518
+ } else if v == "3519" {
+ 3519
+ } else if v == "3520" {
+ 3520
+ } else if v == "3521" {
+ 3521
+ } else if v == "3522" {
+ 3522
+ } else if v == "3523" {
+ 3523
+ } else if v == "3524" {
+ 3524
+ } else if v == "3525" {
+ 3525
+ } else if v == "3526" {
+ 3526
+ } else if v == "3527" {
+ 3527
+ } else if v == "3528" {
+ 3528
+ } else if v == "3529" {
+ 3529
+ } else if v == "3530" {
+ 3530
+ } else if v == "3531" {
+ 3531
+ } else if v == "3532" {
+ 3532
+ } else if v == "3533" {
+ 3533
+ } else if v == "3534" {
+ 3534
+ } else if v == "3535" {
+ 3535
+ } else if v == "3536" {
+ 3536
+ } else if v == "3537" {
+ 3537
+ } else if v == "3538" {
+ 3538
+ } else if v == "3539" {
+ 3539
+ } else if v == "3540" {
+ 3540
+ } else if v == "3541" {
+ 3541
+ } else if v == "3542" {
+ 3542
+ } else if v == "3543" {
+ 3543
+ } else if v == "3544" {
+ 3544
+ } else if v == "3545" {
+ 3545
+ } else if v == "3546" {
+ 3546
+ } else if v == "3547" {
+ 3547
+ } else if v == "3548" {
+ 3548
+ } else if v == "3549" {
+ 3549
+ } else if v == "3550" {
+ 3550
+ } else if v == "3551" {
+ 3551
+ } else if v == "3552" {
+ 3552
+ } else if v == "3553" {
+ 3553
+ } else if v == "3554" {
+ 3554
+ } else if v == "3555" {
+ 3555
+ } else if v == "3556" {
+ 3556
+ } else if v == "3557" {
+ 3557
+ } else if v == "3558" {
+ 3558
+ } else if v == "3559" {
+ 3559
+ } else if v == "3560" {
+ 3560
+ } else if v == "3561" {
+ 3561
+ } else if v == "3562" {
+ 3562
+ } else if v == "3563" {
+ 3563
+ } else if v == "3564" {
+ 3564
+ } else if v == "3565" {
+ 3565
+ } else if v == "3566" {
+ 3566
+ } else if v == "3567" {
+ 3567
+ } else if v == "3568" {
+ 3568
+ } else if v == "3569" {
+ 3569
+ } else if v == "3570" {
+ 3570
+ } else if v == "3571" {
+ 3571
+ } else if v == "3572" {
+ 3572
+ } else if v == "3573" {
+ 3573
+ } else if v == "3574" {
+ 3574
+ } else if v == "3575" {
+ 3575
+ } else if v == "3576" {
+ 3576
+ } else if v == "3577" {
+ 3577
+ } else if v == "3578" {
+ 3578
+ } else if v == "3579" {
+ 3579
+ } else if v == "3580" {
+ 3580
+ } else if v == "3581" {
+ 3581
+ } else if v == "3582" {
+ 3582
+ } else if v == "3583" {
+ 3583
+ } else if v == "3584" {
+ 3584
+ } else if v == "3585" {
+ 3585
+ } else if v == "3586" {
+ 3586
+ } else if v == "3587" {
+ 3587
+ } else if v == "3588" {
+ 3588
+ } else if v == "3589" {
+ 3589
+ } else if v == "3590" {
+ 3590
+ } else if v == "3591" {
+ 3591
+ } else if v == "3592" {
+ 3592
+ } else if v == "3593" {
+ 3593
+ } else if v == "3594" {
+ 3594
+ } else if v == "3595" {
+ 3595
+ } else if v == "3596" {
+ 3596
+ } else if v == "3597" {
+ 3597
+ } else if v == "3598" {
+ 3598
+ } else if v == "3599" {
+ 3599
+ } else if v == "3600" {
+ 3600
+ } else if v == "3601" {
+ 3601
+ } else if v == "3602" {
+ 3602
+ } else if v == "3603" {
+ 3603
+ } else if v == "3604" {
+ 3604
+ } else if v == "3605" {
+ 3605
+ } else if v == "3606" {
+ 3606
+ } else if v == "3607" {
+ 3607
+ } else if v == "3608" {
+ 3608
+ } else if v == "3609" {
+ 3609
+ } else if v == "3610" {
+ 3610
+ } else if v == "3611" {
+ 3611
+ } else if v == "3612" {
+ 3612
+ } else if v == "3613" {
+ 3613
+ } else if v == "3614" {
+ 3614
+ } else if v == "3615" {
+ 3615
+ } else if v == "3616" {
+ 3616
+ } else if v == "3617" {
+ 3617
+ } else if v == "3618" {
+ 3618
+ } else if v == "3619" {
+ 3619
+ } else if v == "3620" {
+ 3620
+ } else if v == "3621" {
+ 3621
+ } else if v == "3622" {
+ 3622
+ } else if v == "3623" {
+ 3623
+ } else if v == "3624" {
+ 3624
+ } else if v == "3625" {
+ 3625
+ } else if v == "3626" {
+ 3626
+ } else if v == "3627" {
+ 3627
+ } else if v == "3628" {
+ 3628
+ } else if v == "3629" {
+ 3629
+ } else if v == "3630" {
+ 3630
+ } else if v == "3631" {
+ 3631
+ } else if v == "3632" {
+ 3632
+ } else if v == "3633" {
+ 3633
+ } else if v == "3634" {
+ 3634
+ } else if v == "3635" {
+ 3635
+ } else if v == "3636" {
+ 3636
+ } else if v == "3637" {
+ 3637
+ } else if v == "3638" {
+ 3638
+ } else if v == "3639" {
+ 3639
+ } else if v == "3640" {
+ 3640
+ } else if v == "3641" {
+ 3641
+ } else if v == "3642" {
+ 3642
+ } else if v == "3643" {
+ 3643
+ } else if v == "3644" {
+ 3644
+ } else if v == "3645" {
+ 3645
+ } else if v == "3646" {
+ 3646
+ } else if v == "3647" {
+ 3647
+ } else if v == "3648" {
+ 3648
+ } else if v == "3649" {
+ 3649
+ } else if v == "3650" {
+ 3650
+ } else if v == "3651" {
+ 3651
+ } else if v == "3652" {
+ 3652
+ } else if v == "3653" {
+ 3653
+ } else if v == "3654" {
+ 3654
+ } else if v == "3655" {
+ 3655
+ } else if v == "3656" {
+ 3656
+ } else if v == "3657" {
+ 3657
+ } else if v == "3658" {
+ 3658
+ } else if v == "3659" {
+ 3659
+ } else if v == "3660" {
+ 3660
+ } else if v == "3661" {
+ 3661
+ } else if v == "3662" {
+ 3662
+ } else if v == "3663" {
+ 3663
+ } else if v == "3664" {
+ 3664
+ } else if v == "3665" {
+ 3665
+ } else if v == "3666" {
+ 3666
+ } else if v == "3667" {
+ 3667
+ } else if v == "3668" {
+ 3668
+ } else if v == "3669" {
+ 3669
+ } else if v == "3670" {
+ 3670
+ } else if v == "3671" {
+ 3671
+ } else if v == "3672" {
+ 3672
+ } else if v == "3673" {
+ 3673
+ } else if v == "3674" {
+ 3674
+ } else if v == "3675" {
+ 3675
+ } else if v == "3676" {
+ 3676
+ } else if v == "3677" {
+ 3677
+ } else if v == "3678" {
+ 3678
+ } else if v == "3679" {
+ 3679
+ } else if v == "3680" {
+ 3680
+ } else if v == "3681" {
+ 3681
+ } else if v == "3682" {
+ 3682
+ } else if v == "3683" {
+ 3683
+ } else if v == "3684" {
+ 3684
+ } else if v == "3685" {
+ 3685
+ } else if v == "3686" {
+ 3686
+ } else if v == "3687" {
+ 3687
+ } else if v == "3688" {
+ 3688
+ } else if v == "3689" {
+ 3689
+ } else if v == "3690" {
+ 3690
+ } else if v == "3691" {
+ 3691
+ } else if v == "3692" {
+ 3692
+ } else if v == "3693" {
+ 3693
+ } else if v == "3694" {
+ 3694
+ } else if v == "3695" {
+ 3695
+ } else if v == "3696" {
+ 3696
+ } else if v == "3697" {
+ 3697
+ } else if v == "3698" {
+ 3698
+ } else if v == "3699" {
+ 3699
+ } else if v == "3700" {
+ 3700
+ } else if v == "3701" {
+ 3701
+ } else if v == "3702" {
+ 3702
+ } else if v == "3703" {
+ 3703
+ } else if v == "3704" {
+ 3704
+ } else if v == "3705" {
+ 3705
+ } else if v == "3706" {
+ 3706
+ } else if v == "3707" {
+ 3707
+ } else if v == "3708" {
+ 3708
+ } else if v == "3709" {
+ 3709
+ } else if v == "3710" {
+ 3710
+ } else if v == "3711" {
+ 3711
+ } else if v == "3712" {
+ 3712
+ } else if v == "3713" {
+ 3713
+ } else if v == "3714" {
+ 3714
+ } else if v == "3715" {
+ 3715
+ } else if v == "3716" {
+ 3716
+ } else if v == "3717" {
+ 3717
+ } else if v == "3718" {
+ 3718
+ } else if v == "3719" {
+ 3719
+ } else if v == "3720" {
+ 3720
+ } else if v == "3721" {
+ 3721
+ } else if v == "3722" {
+ 3722
+ } else if v == "3723" {
+ 3723
+ } else if v == "3724" {
+ 3724
+ } else if v == "3725" {
+ 3725
+ } else if v == "3726" {
+ 3726
+ } else if v == "3727" {
+ 3727
+ } else if v == "3728" {
+ 3728
+ } else if v == "3729" {
+ 3729
+ } else if v == "3730" {
+ 3730
+ } else if v == "3731" {
+ 3731
+ } else if v == "3732" {
+ 3732
+ } else if v == "3733" {
+ 3733
+ } else if v == "3734" {
+ 3734
+ } else if v == "3735" {
+ 3735
+ } else if v == "3736" {
+ 3736
+ } else if v == "3737" {
+ 3737
+ } else if v == "3738" {
+ 3738
+ } else if v == "3739" {
+ 3739
+ } else if v == "3740" {
+ 3740
+ } else if v == "3741" {
+ 3741
+ } else if v == "3742" {
+ 3742
+ } else if v == "3743" {
+ 3743
+ } else if v == "3744" {
+ 3744
+ } else if v == "3745" {
+ 3745
+ } else if v == "3746" {
+ 3746
+ } else if v == "3747" {
+ 3747
+ } else if v == "3748" {
+ 3748
+ } else if v == "3749" {
+ 3749
+ } else if v == "3750" {
+ 3750
+ } else if v == "3751" {
+ 3751
+ } else if v == "3752" {
+ 3752
+ } else if v == "3753" {
+ 3753
+ } else if v == "3754" {
+ 3754
+ } else if v == "3755" {
+ 3755
+ } else if v == "3756" {
+ 3756
+ } else if v == "3757" {
+ 3757
+ } else if v == "3758" {
+ 3758
+ } else if v == "3759" {
+ 3759
+ } else if v == "3760" {
+ 3760
+ } else if v == "3761" {
+ 3761
+ } else if v == "3762" {
+ 3762
+ } else if v == "3763" {
+ 3763
+ } else if v == "3764" {
+ 3764
+ } else if v == "3765" {
+ 3765
+ } else if v == "3766" {
+ 3766
+ } else if v == "3767" {
+ 3767
+ } else if v == "3768" {
+ 3768
+ } else if v == "3769" {
+ 3769
+ } else if v == "3770" {
+ 3770
+ } else if v == "3771" {
+ 3771
+ } else if v == "3772" {
+ 3772
+ } else if v == "3773" {
+ 3773
+ } else if v == "3774" {
+ 3774
+ } else if v == "3775" {
+ 3775
+ } else if v == "3776" {
+ 3776
+ } else if v == "3777" {
+ 3777
+ } else if v == "3778" {
+ 3778
+ } else if v == "3779" {
+ 3779
+ } else if v == "3780" {
+ 3780
+ } else if v == "3781" {
+ 3781
+ } else if v == "3782" {
+ 3782
+ } else if v == "3783" {
+ 3783
+ } else if v == "3784" {
+ 3784
+ } else if v == "3785" {
+ 3785
+ } else if v == "3786" {
+ 3786
+ } else if v == "3787" {
+ 3787
+ } else if v == "3788" {
+ 3788
+ } else if v == "3789" {
+ 3789
+ } else if v == "3790" {
+ 3790
+ } else if v == "3791" {
+ 3791
+ } else if v == "3792" {
+ 3792
+ } else if v == "3793" {
+ 3793
+ } else if v == "3794" {
+ 3794
+ } else if v == "3795" {
+ 3795
+ } else if v == "3796" {
+ 3796
+ } else if v == "3797" {
+ 3797
+ } else if v == "3798" {
+ 3798
+ } else if v == "3799" {
+ 3799
+ } else if v == "3800" {
+ 3800
+ } else if v == "3801" {
+ 3801
+ } else if v == "3802" {
+ 3802
+ } else if v == "3803" {
+ 3803
+ } else if v == "3804" {
+ 3804
+ } else if v == "3805" {
+ 3805
+ } else if v == "3806" {
+ 3806
+ } else if v == "3807" {
+ 3807
+ } else if v == "3808" {
+ 3808
+ } else if v == "3809" {
+ 3809
+ } else if v == "3810" {
+ 3810
+ } else if v == "3811" {
+ 3811
+ } else if v == "3812" {
+ 3812
+ } else if v == "3813" {
+ 3813
+ } else if v == "3814" {
+ 3814
+ } else if v == "3815" {
+ 3815
+ } else if v == "3816" {
+ 3816
+ } else if v == "3817" {
+ 3817
+ } else if v == "3818" {
+ 3818
+ } else if v == "3819" {
+ 3819
+ } else if v == "3820" {
+ 3820
+ } else if v == "3821" {
+ 3821
+ } else if v == "3822" {
+ 3822
+ } else if v == "3823" {
+ 3823
+ } else if v == "3824" {
+ 3824
+ } else if v == "3825" {
+ 3825
+ } else if v == "3826" {
+ 3826
+ } else if v == "3827" {
+ 3827
+ } else if v == "3828" {
+ 3828
+ } else if v == "3829" {
+ 3829
+ } else if v == "3830" {
+ 3830
+ } else if v == "3831" {
+ 3831
+ } else if v == "3832" {
+ 3832
+ } else if v == "3833" {
+ 3833
+ } else if v == "3834" {
+ 3834
+ } else if v == "3835" {
+ 3835
+ } else if v == "3836" {
+ 3836
+ } else if v == "3837" {
+ 3837
+ } else if v == "3838" {
+ 3838
+ } else if v == "3839" {
+ 3839
+ } else if v == "3840" {
+ 3840
+ } else if v == "3841" {
+ 3841
+ } else if v == "3842" {
+ 3842
+ } else if v == "3843" {
+ 3843
+ } else if v == "3844" {
+ 3844
+ } else if v == "3845" {
+ 3845
+ } else if v == "3846" {
+ 3846
+ } else if v == "3847" {
+ 3847
+ } else if v == "3848" {
+ 3848
+ } else if v == "3849" {
+ 3849
+ } else if v == "3850" {
+ 3850
+ } else if v == "3851" {
+ 3851
+ } else if v == "3852" {
+ 3852
+ } else if v == "3853" {
+ 3853
+ } else if v == "3854" {
+ 3854
+ } else if v == "3855" {
+ 3855
+ } else if v == "3856" {
+ 3856
+ } else if v == "3857" {
+ 3857
+ } else if v == "3858" {
+ 3858
+ } else if v == "3859" {
+ 3859
+ } else if v == "3860" {
+ 3860
+ } else if v == "3861" {
+ 3861
+ } else if v == "3862" {
+ 3862
+ } else if v == "3863" {
+ 3863
+ } else if v == "3864" {
+ 3864
+ } else if v == "3865" {
+ 3865
+ } else if v == "3866" {
+ 3866
+ } else if v == "3867" {
+ 3867
+ } else if v == "3868" {
+ 3868
+ } else if v == "3869" {
+ 3869
+ } else if v == "3870" {
+ 3870
+ } else if v == "3871" {
+ 3871
+ } else if v == "3872" {
+ 3872
+ } else if v == "3873" {
+ 3873
+ } else if v == "3874" {
+ 3874
+ } else if v == "3875" {
+ 3875
+ } else if v == "3876" {
+ 3876
+ } else if v == "3877" {
+ 3877
+ } else if v == "3878" {
+ 3878
+ } else if v == "3879" {
+ 3879
+ } else if v == "3880" {
+ 3880
+ } else if v == "3881" {
+ 3881
+ } else if v == "3882" {
+ 3882
+ } else if v == "3883" {
+ 3883
+ } else if v == "3884" {
+ 3884
+ } else if v == "3885" {
+ 3885
+ } else if v == "3886" {
+ 3886
+ } else if v == "3887" {
+ 3887
+ } else if v == "3888" {
+ 3888
+ } else if v == "3889" {
+ 3889
+ } else if v == "3890" {
+ 3890
+ } else if v == "3891" {
+ 3891
+ } else if v == "3892" {
+ 3892
+ } else if v == "3893" {
+ 3893
+ } else if v == "3894" {
+ 3894
+ } else if v == "3895" {
+ 3895
+ } else if v == "3896" {
+ 3896
+ } else if v == "3897" {
+ 3897
+ } else if v == "3898" {
+ 3898
+ } else if v == "3899" {
+ 3899
+ } else if v == "3900" {
+ 3900
+ } else if v == "3901" {
+ 3901
+ } else if v == "3902" {
+ 3902
+ } else if v == "3903" {
+ 3903
+ } else if v == "3904" {
+ 3904
+ } else if v == "3905" {
+ 3905
+ } else if v == "3906" {
+ 3906
+ } else if v == "3907" {
+ 3907
+ } else if v == "3908" {
+ 3908
+ } else if v == "3909" {
+ 3909
+ } else if v == "3910" {
+ 3910
+ } else if v == "3911" {
+ 3911
+ } else if v == "3912" {
+ 3912
+ } else if v == "3913" {
+ 3913
+ } else if v == "3914" {
+ 3914
+ } else if v == "3915" {
+ 3915
+ } else if v == "3916" {
+ 3916
+ } else if v == "3917" {
+ 3917
+ } else if v == "3918" {
+ 3918
+ } else if v == "3919" {
+ 3919
+ } else if v == "3920" {
+ 3920
+ } else if v == "3921" {
+ 3921
+ } else if v == "3922" {
+ 3922
+ } else if v == "3923" {
+ 3923
+ } else if v == "3924" {
+ 3924
+ } else if v == "3925" {
+ 3925
+ } else if v == "3926" {
+ 3926
+ } else if v == "3927" {
+ 3927
+ } else if v == "3928" {
+ 3928
+ } else if v == "3929" {
+ 3929
+ } else if v == "3930" {
+ 3930
+ } else if v == "3931" {
+ 3931
+ } else if v == "3932" {
+ 3932
+ } else if v == "3933" {
+ 3933
+ } else if v == "3934" {
+ 3934
+ } else if v == "3935" {
+ 3935
+ } else if v == "3936" {
+ 3936
+ } else if v == "3937" {
+ 3937
+ } else if v == "3938" {
+ 3938
+ } else if v == "3939" {
+ 3939
+ } else if v == "3940" {
+ 3940
+ } else if v == "3941" {
+ 3941
+ } else if v == "3942" {
+ 3942
+ } else if v == "3943" {
+ 3943
+ } else if v == "3944" {
+ 3944
+ } else if v == "3945" {
+ 3945
+ } else if v == "3946" {
+ 3946
+ } else if v == "3947" {
+ 3947
+ } else if v == "3948" {
+ 3948
+ } else if v == "3949" {
+ 3949
+ } else if v == "3950" {
+ 3950
+ } else if v == "3951" {
+ 3951
+ } else if v == "3952" {
+ 3952
+ } else if v == "3953" {
+ 3953
+ } else if v == "3954" {
+ 3954
+ } else if v == "3955" {
+ 3955
+ } else if v == "3956" {
+ 3956
+ } else if v == "3957" {
+ 3957
+ } else if v == "3958" {
+ 3958
+ } else if v == "3959" {
+ 3959
+ } else if v == "3960" {
+ 3960
+ } else if v == "3961" {
+ 3961
+ } else if v == "3962" {
+ 3962
+ } else if v == "3963" {
+ 3963
+ } else if v == "3964" {
+ 3964
+ } else if v == "3965" {
+ 3965
+ } else if v == "3966" {
+ 3966
+ } else if v == "3967" {
+ 3967
+ } else if v == "3968" {
+ 3968
+ } else if v == "3969" {
+ 3969
+ } else if v == "3970" {
+ 3970
+ } else if v == "3971" {
+ 3971
+ } else if v == "3972" {
+ 3972
+ } else if v == "3973" {
+ 3973
+ } else if v == "3974" {
+ 3974
+ } else if v == "3975" {
+ 3975
+ } else if v == "3976" {
+ 3976
+ } else if v == "3977" {
+ 3977
+ } else if v == "3978" {
+ 3978
+ } else if v == "3979" {
+ 3979
+ } else if v == "3980" {
+ 3980
+ } else if v == "3981" {
+ 3981
+ } else if v == "3982" {
+ 3982
+ } else if v == "3983" {
+ 3983
+ } else if v == "3984" {
+ 3984
+ } else if v == "3985" {
+ 3985
+ } else if v == "3986" {
+ 3986
+ } else if v == "3987" {
+ 3987
+ } else if v == "3988" {
+ 3988
+ } else if v == "3989" {
+ 3989
+ } else if v == "3990" {
+ 3990
+ } else if v == "3991" {
+ 3991
+ } else if v == "3992" {
+ 3992
+ } else if v == "3993" {
+ 3993
+ } else if v == "3994" {
+ 3994
+ } else if v == "3995" {
+ 3995
+ } else if v == "3996" {
+ 3996
+ } else if v == "3997" {
+ 3997
+ } else if v == "3998" {
+ 3998
+ } else if v == "3999" {
+ 3999
+ } else if v == "4000" {
+ 4000
+ } else if v == "4001" {
+ 4001
+ } else if v == "4002" {
+ 4002
+ } else if v == "4003" {
+ 4003
+ } else if v == "4004" {
+ 4004
+ } else if v == "4005" {
+ 4005
+ } else if v == "4006" {
+ 4006
+ } else if v == "4007" {
+ 4007
+ } else if v == "4008" {
+ 4008
+ } else if v == "4009" {
+ 4009
+ } else if v == "4010" {
+ 4010
+ } else if v == "4011" {
+ 4011
+ } else if v == "4012" {
+ 4012
+ } else if v == "4013" {
+ 4013
+ } else if v == "4014" {
+ 4014
+ } else if v == "4015" {
+ 4015
+ } else if v == "4016" {
+ 4016
+ } else if v == "4017" {
+ 4017
+ } else if v == "4018" {
+ 4018
+ } else if v == "4019" {
+ 4019
+ } else if v == "4020" {
+ 4020
+ } else if v == "4021" {
+ 4021
+ } else if v == "4022" {
+ 4022
+ } else if v == "4023" {
+ 4023
+ } else if v == "4024" {
+ 4024
+ } else if v == "4025" {
+ 4025
+ } else if v == "4026" {
+ 4026
+ } else if v == "4027" {
+ 4027
+ } else if v == "4028" {
+ 4028
+ } else if v == "4029" {
+ 4029
+ } else if v == "4030" {
+ 4030
+ } else if v == "4031" {
+ 4031
+ } else if v == "4032" {
+ 4032
+ } else if v == "4033" {
+ 4033
+ } else if v == "4034" {
+ 4034
+ } else if v == "4035" {
+ 4035
+ } else if v == "4036" {
+ 4036
+ } else if v == "4037" {
+ 4037
+ } else if v == "4038" {
+ 4038
+ } else if v == "4039" {
+ 4039
+ } else if v == "4040" {
+ 4040
+ } else if v == "4041" {
+ 4041
+ } else if v == "4042" {
+ 4042
+ } else if v == "4043" {
+ 4043
+ } else if v == "4044" {
+ 4044
+ } else if v == "4045" {
+ 4045
+ } else if v == "4046" {
+ 4046
+ } else if v == "4047" {
+ 4047
+ } else if v == "4048" {
+ 4048
+ } else if v == "4049" {
+ 4049
+ } else if v == "4050" {
+ 4050
+ } else if v == "4051" {
+ 4051
+ } else if v == "4052" {
+ 4052
+ } else if v == "4053" {
+ 4053
+ } else if v == "4054" {
+ 4054
+ } else if v == "4055" {
+ 4055
+ } else if v == "4056" {
+ 4056
+ } else if v == "4057" {
+ 4057
+ } else if v == "4058" {
+ 4058
+ } else if v == "4059" {
+ 4059
+ } else if v == "4060" {
+ 4060
+ } else if v == "4061" {
+ 4061
+ } else if v == "4062" {
+ 4062
+ } else if v == "4063" {
+ 4063
+ } else if v == "4064" {
+ 4064
+ } else if v == "4065" {
+ 4065
+ } else if v == "4066" {
+ 4066
+ } else if v == "4067" {
+ 4067
+ } else if v == "4068" {
+ 4068
+ } else if v == "4069" {
+ 4069
+ } else if v == "4070" {
+ 4070
+ } else if v == "4071" {
+ 4071
+ } else if v == "4072" {
+ 4072
+ } else if v == "4073" {
+ 4073
+ } else if v == "4074" {
+ 4074
+ } else if v == "4075" {
+ 4075
+ } else if v == "4076" {
+ 4076
+ } else if v == "4077" {
+ 4077
+ } else if v == "4078" {
+ 4078
+ } else if v == "4079" {
+ 4079
+ } else if v == "4080" {
+ 4080
+ } else if v == "4081" {
+ 4081
+ } else if v == "4082" {
+ 4082
+ } else if v == "4083" {
+ 4083
+ } else if v == "4084" {
+ 4084
+ } else if v == "4085" {
+ 4085
+ } else if v == "4086" {
+ 4086
+ } else if v == "4087" {
+ 4087
+ } else if v == "4088" {
+ 4088
+ } else if v == "4089" {
+ 4089
+ } else if v == "4090" {
+ 4090
+ } else if v == "4091" {
+ 4091
+ } else if v == "4092" {
+ 4092
+ } else if v == "4093" {
+ 4093
+ } else if v == "4094" {
+ 4094
+ } else if v == "4095" {
+ 4095
+ } else if v == "4096" {
+ 4096
+ } else if v == "4097" {
+ 4097
+ } else if v == "4098" {
+ 4098
+ } else if v == "4099" {
+ 4099
+ } else if v == "4100" {
+ 4100
+ } else if v == "4101" {
+ 4101
+ } else if v == "4102" {
+ 4102
+ } else if v == "4103" {
+ 4103
+ } else if v == "4104" {
+ 4104
+ } else if v == "4105" {
+ 4105
+ } else if v == "4106" {
+ 4106
+ } else if v == "4107" {
+ 4107
+ } else if v == "4108" {
+ 4108
+ } else if v == "4109" {
+ 4109
+ } else if v == "4110" {
+ 4110
+ } else if v == "4111" {
+ 4111
+ } else if v == "4112" {
+ 4112
+ } else if v == "4113" {
+ 4113
+ } else if v == "4114" {
+ 4114
+ } else if v == "4115" {
+ 4115
+ } else if v == "4116" {
+ 4116
+ } else if v == "4117" {
+ 4117
+ } else if v == "4118" {
+ 4118
+ } else if v == "4119" {
+ 4119
+ } else if v == "4120" {
+ 4120
+ } else if v == "4121" {
+ 4121
+ } else if v == "4122" {
+ 4122
+ } else if v == "4123" {
+ 4123
+ } else if v == "4124" {
+ 4124
+ } else if v == "4125" {
+ 4125
+ } else if v == "4126" {
+ 4126
+ } else if v == "4127" {
+ 4127
+ } else if v == "4128" {
+ 4128
+ } else if v == "4129" {
+ 4129
+ } else if v == "4130" {
+ 4130
+ } else if v == "4131" {
+ 4131
+ } else if v == "4132" {
+ 4132
+ } else if v == "4133" {
+ 4133
+ } else if v == "4134" {
+ 4134
+ } else if v == "4135" {
+ 4135
+ } else if v == "4136" {
+ 4136
+ } else if v == "4137" {
+ 4137
+ } else if v == "4138" {
+ 4138
+ } else if v == "4139" {
+ 4139
+ } else if v == "4140" {
+ 4140
+ } else if v == "4141" {
+ 4141
+ } else if v == "4142" {
+ 4142
+ } else if v == "4143" {
+ 4143
+ } else if v == "4144" {
+ 4144
+ } else if v == "4145" {
+ 4145
+ } else if v == "4146" {
+ 4146
+ } else if v == "4147" {
+ 4147
+ } else if v == "4148" {
+ 4148
+ } else if v == "4149" {
+ 4149
+ } else if v == "4150" {
+ 4150
+ } else if v == "4151" {
+ 4151
+ } else if v == "4152" {
+ 4152
+ } else if v == "4153" {
+ 4153
+ } else if v == "4154" {
+ 4154
+ } else if v == "4155" {
+ 4155
+ } else if v == "4156" {
+ 4156
+ } else if v == "4157" {
+ 4157
+ } else if v == "4158" {
+ 4158
+ } else if v == "4159" {
+ 4159
+ } else if v == "4160" {
+ 4160
+ } else if v == "4161" {
+ 4161
+ } else if v == "4162" {
+ 4162
+ } else if v == "4163" {
+ 4163
+ } else if v == "4164" {
+ 4164
+ } else if v == "4165" {
+ 4165
+ } else if v == "4166" {
+ 4166
+ } else if v == "4167" {
+ 4167
+ } else if v == "4168" {
+ 4168
+ } else if v == "4169" {
+ 4169
+ } else if v == "4170" {
+ 4170
+ } else if v == "4171" {
+ 4171
+ } else if v == "4172" {
+ 4172
+ } else if v == "4173" {
+ 4173
+ } else if v == "4174" {
+ 4174
+ } else if v == "4175" {
+ 4175
+ } else if v == "4176" {
+ 4176
+ } else if v == "4177" {
+ 4177
+ } else if v == "4178" {
+ 4178
+ } else if v == "4179" {
+ 4179
+ } else if v == "4180" {
+ 4180
+ } else if v == "4181" {
+ 4181
+ } else if v == "4182" {
+ 4182
+ } else if v == "4183" {
+ 4183
+ } else if v == "4184" {
+ 4184
+ } else if v == "4185" {
+ 4185
+ } else if v == "4186" {
+ 4186
+ } else if v == "4187" {
+ 4187
+ } else if v == "4188" {
+ 4188
+ } else if v == "4189" {
+ 4189
+ } else if v == "4190" {
+ 4190
+ } else if v == "4191" {
+ 4191
+ } else if v == "4192" {
+ 4192
+ } else if v == "4193" {
+ 4193
+ } else if v == "4194" {
+ 4194
+ } else if v == "4195" {
+ 4195
+ } else if v == "4196" {
+ 4196
+ } else if v == "4197" {
+ 4197
+ } else if v == "4198" {
+ 4198
+ } else if v == "4199" {
+ 4199
+ } else if v == "4200" {
+ 4200
+ } else if v == "4201" {
+ 4201
+ } else if v == "4202" {
+ 4202
+ } else if v == "4203" {
+ 4203
+ } else if v == "4204" {
+ 4204
+ } else if v == "4205" {
+ 4205
+ } else if v == "4206" {
+ 4206
+ } else if v == "4207" {
+ 4207
+ } else if v == "4208" {
+ 4208
+ } else if v == "4209" {
+ 4209
+ } else if v == "4210" {
+ 4210
+ } else if v == "4211" {
+ 4211
+ } else if v == "4212" {
+ 4212
+ } else if v == "4213" {
+ 4213
+ } else if v == "4214" {
+ 4214
+ } else if v == "4215" {
+ 4215
+ } else if v == "4216" {
+ 4216
+ } else if v == "4217" {
+ 4217
+ } else if v == "4218" {
+ 4218
+ } else if v == "4219" {
+ 4219
+ } else if v == "4220" {
+ 4220
+ } else if v == "4221" {
+ 4221
+ } else if v == "4222" {
+ 4222
+ } else if v == "4223" {
+ 4223
+ } else if v == "4224" {
+ 4224
+ } else if v == "4225" {
+ 4225
+ } else if v == "4226" {
+ 4226
+ } else if v == "4227" {
+ 4227
+ } else if v == "4228" {
+ 4228
+ } else if v == "4229" {
+ 4229
+ } else if v == "4230" {
+ 4230
+ } else if v == "4231" {
+ 4231
+ } else if v == "4232" {
+ 4232
+ } else if v == "4233" {
+ 4233
+ } else if v == "4234" {
+ 4234
+ } else if v == "4235" {
+ 4235
+ } else if v == "4236" {
+ 4236
+ } else if v == "4237" {
+ 4237
+ } else if v == "4238" {
+ 4238
+ } else if v == "4239" {
+ 4239
+ } else if v == "4240" {
+ 4240
+ } else if v == "4241" {
+ 4241
+ } else if v == "4242" {
+ 4242
+ } else if v == "4243" {
+ 4243
+ } else if v == "4244" {
+ 4244
+ } else if v == "4245" {
+ 4245
+ } else if v == "4246" {
+ 4246
+ } else if v == "4247" {
+ 4247
+ } else if v == "4248" {
+ 4248
+ } else if v == "4249" {
+ 4249
+ } else if v == "4250" {
+ 4250
+ } else if v == "4251" {
+ 4251
+ } else if v == "4252" {
+ 4252
+ } else if v == "4253" {
+ 4253
+ } else if v == "4254" {
+ 4254
+ } else if v == "4255" {
+ 4255
+ } else if v == "4256" {
+ 4256
+ } else if v == "4257" {
+ 4257
+ } else if v == "4258" {
+ 4258
+ } else if v == "4259" {
+ 4259
+ } else if v == "4260" {
+ 4260
+ } else if v == "4261" {
+ 4261
+ } else if v == "4262" {
+ 4262
+ } else if v == "4263" {
+ 4263
+ } else if v == "4264" {
+ 4264
+ } else if v == "4265" {
+ 4265
+ } else if v == "4266" {
+ 4266
+ } else if v == "4267" {
+ 4267
+ } else if v == "4268" {
+ 4268
+ } else if v == "4269" {
+ 4269
+ } else if v == "4270" {
+ 4270
+ } else if v == "4271" {
+ 4271
+ } else if v == "4272" {
+ 4272
+ } else if v == "4273" {
+ 4273
+ } else if v == "4274" {
+ 4274
+ } else if v == "4275" {
+ 4275
+ } else if v == "4276" {
+ 4276
+ } else if v == "4277" {
+ 4277
+ } else if v == "4278" {
+ 4278
+ } else if v == "4279" {
+ 4279
+ } else if v == "4280" {
+ 4280
+ } else if v == "4281" {
+ 4281
+ } else if v == "4282" {
+ 4282
+ } else if v == "4283" {
+ 4283
+ } else if v == "4284" {
+ 4284
+ } else if v == "4285" {
+ 4285
+ } else if v == "4286" {
+ 4286
+ } else if v == "4287" {
+ 4287
+ } else if v == "4288" {
+ 4288
+ } else if v == "4289" {
+ 4289
+ } else if v == "4290" {
+ 4290
+ } else if v == "4291" {
+ 4291
+ } else if v == "4292" {
+ 4292
+ } else if v == "4293" {
+ 4293
+ } else if v == "4294" {
+ 4294
+ } else if v == "4295" {
+ 4295
+ } else if v == "4296" {
+ 4296
+ } else if v == "4297" {
+ 4297
+ } else if v == "4298" {
+ 4298
+ } else if v == "4299" {
+ 4299
+ } else if v == "4300" {
+ 4300
+ } else if v == "4301" {
+ 4301
+ } else if v == "4302" {
+ 4302
+ } else if v == "4303" {
+ 4303
+ } else if v == "4304" {
+ 4304
+ } else if v == "4305" {
+ 4305
+ } else if v == "4306" {
+ 4306
+ } else if v == "4307" {
+ 4307
+ } else if v == "4308" {
+ 4308
+ } else if v == "4309" {
+ 4309
+ } else if v == "4310" {
+ 4310
+ } else if v == "4311" {
+ 4311
+ } else if v == "4312" {
+ 4312
+ } else if v == "4313" {
+ 4313
+ } else if v == "4314" {
+ 4314
+ } else if v == "4315" {
+ 4315
+ } else if v == "4316" {
+ 4316
+ } else if v == "4317" {
+ 4317
+ } else if v == "4318" {
+ 4318
+ } else if v == "4319" {
+ 4319
+ } else if v == "4320" {
+ 4320
+ } else if v == "4321" {
+ 4321
+ } else if v == "4322" {
+ 4322
+ } else if v == "4323" {
+ 4323
+ } else if v == "4324" {
+ 4324
+ } else if v == "4325" {
+ 4325
+ } else if v == "4326" {
+ 4326
+ } else if v == "4327" {
+ 4327
+ } else if v == "4328" {
+ 4328
+ } else if v == "4329" {
+ 4329
+ } else if v == "4330" {
+ 4330
+ } else if v == "4331" {
+ 4331
+ } else if v == "4332" {
+ 4332
+ } else if v == "4333" {
+ 4333
+ } else if v == "4334" {
+ 4334
+ } else if v == "4335" {
+ 4335
+ } else if v == "4336" {
+ 4336
+ } else if v == "4337" {
+ 4337
+ } else if v == "4338" {
+ 4338
+ } else if v == "4339" {
+ 4339
+ } else if v == "4340" {
+ 4340
+ } else if v == "4341" {
+ 4341
+ } else if v == "4342" {
+ 4342
+ } else if v == "4343" {
+ 4343
+ } else if v == "4344" {
+ 4344
+ } else if v == "4345" {
+ 4345
+ } else if v == "4346" {
+ 4346
+ } else if v == "4347" {
+ 4347
+ } else if v == "4348" {
+ 4348
+ } else if v == "4349" {
+ 4349
+ } else if v == "4350" {
+ 4350
+ } else if v == "4351" {
+ 4351
+ } else if v == "4352" {
+ 4352
+ } else if v == "4353" {
+ 4353
+ } else if v == "4354" {
+ 4354
+ } else if v == "4355" {
+ 4355
+ } else if v == "4356" {
+ 4356
+ } else if v == "4357" {
+ 4357
+ } else if v == "4358" {
+ 4358
+ } else if v == "4359" {
+ 4359
+ } else if v == "4360" {
+ 4360
+ } else if v == "4361" {
+ 4361
+ } else if v == "4362" {
+ 4362
+ } else if v == "4363" {
+ 4363
+ } else if v == "4364" {
+ 4364
+ } else if v == "4365" {
+ 4365
+ } else if v == "4366" {
+ 4366
+ } else if v == "4367" {
+ 4367
+ } else if v == "4368" {
+ 4368
+ } else if v == "4369" {
+ 4369
+ } else if v == "4370" {
+ 4370
+ } else if v == "4371" {
+ 4371
+ } else if v == "4372" {
+ 4372
+ } else if v == "4373" {
+ 4373
+ } else if v == "4374" {
+ 4374
+ } else if v == "4375" {
+ 4375
+ } else if v == "4376" {
+ 4376
+ } else if v == "4377" {
+ 4377
+ } else if v == "4378" {
+ 4378
+ } else if v == "4379" {
+ 4379
+ } else if v == "4380" {
+ 4380
+ } else if v == "4381" {
+ 4381
+ } else if v == "4382" {
+ 4382
+ } else if v == "4383" {
+ 4383
+ } else if v == "4384" {
+ 4384
+ } else if v == "4385" {
+ 4385
+ } else if v == "4386" {
+ 4386
+ } else if v == "4387" {
+ 4387
+ } else if v == "4388" {
+ 4388
+ } else if v == "4389" {
+ 4389
+ } else if v == "4390" {
+ 4390
+ } else if v == "4391" {
+ 4391
+ } else if v == "4392" {
+ 4392
+ } else if v == "4393" {
+ 4393
+ } else if v == "4394" {
+ 4394
+ } else if v == "4395" {
+ 4395
+ } else if v == "4396" {
+ 4396
+ } else if v == "4397" {
+ 4397
+ } else if v == "4398" {
+ 4398
+ } else if v == "4399" {
+ 4399
+ } else if v == "4400" {
+ 4400
+ } else if v == "4401" {
+ 4401
+ } else if v == "4402" {
+ 4402
+ } else if v == "4403" {
+ 4403
+ } else if v == "4404" {
+ 4404
+ } else if v == "4405" {
+ 4405
+ } else if v == "4406" {
+ 4406
+ } else if v == "4407" {
+ 4407
+ } else if v == "4408" {
+ 4408
+ } else if v == "4409" {
+ 4409
+ } else if v == "4410" {
+ 4410
+ } else if v == "4411" {
+ 4411
+ } else if v == "4412" {
+ 4412
+ } else if v == "4413" {
+ 4413
+ } else if v == "4414" {
+ 4414
+ } else if v == "4415" {
+ 4415
+ } else if v == "4416" {
+ 4416
+ } else if v == "4417" {
+ 4417
+ } else if v == "4418" {
+ 4418
+ } else if v == "4419" {
+ 4419
+ } else if v == "4420" {
+ 4420
+ } else if v == "4421" {
+ 4421
+ } else if v == "4422" {
+ 4422
+ } else if v == "4423" {
+ 4423
+ } else if v == "4424" {
+ 4424
+ } else if v == "4425" {
+ 4425
+ } else if v == "4426" {
+ 4426
+ } else if v == "4427" {
+ 4427
+ } else if v == "4428" {
+ 4428
+ } else if v == "4429" {
+ 4429
+ } else if v == "4430" {
+ 4430
+ } else if v == "4431" {
+ 4431
+ } else if v == "4432" {
+ 4432
+ } else if v == "4433" {
+ 4433
+ } else if v == "4434" {
+ 4434
+ } else if v == "4435" {
+ 4435
+ } else if v == "4436" {
+ 4436
+ } else if v == "4437" {
+ 4437
+ } else if v == "4438" {
+ 4438
+ } else if v == "4439" {
+ 4439
+ } else if v == "4440" {
+ 4440
+ } else if v == "4441" {
+ 4441
+ } else if v == "4442" {
+ 4442
+ } else if v == "4443" {
+ 4443
+ } else if v == "4444" {
+ 4444
+ } else if v == "4445" {
+ 4445
+ } else if v == "4446" {
+ 4446
+ } else if v == "4447" {
+ 4447
+ } else if v == "4448" {
+ 4448
+ } else if v == "4449" {
+ 4449
+ } else if v == "4450" {
+ 4450
+ } else if v == "4451" {
+ 4451
+ } else if v == "4452" {
+ 4452
+ } else if v == "4453" {
+ 4453
+ } else if v == "4454" {
+ 4454
+ } else if v == "4455" {
+ 4455
+ } else if v == "4456" {
+ 4456
+ } else if v == "4457" {
+ 4457
+ } else if v == "4458" {
+ 4458
+ } else if v == "4459" {
+ 4459
+ } else if v == "4460" {
+ 4460
+ } else if v == "4461" {
+ 4461
+ } else if v == "4462" {
+ 4462
+ } else if v == "4463" {
+ 4463
+ } else if v == "4464" {
+ 4464
+ } else if v == "4465" {
+ 4465
+ } else if v == "4466" {
+ 4466
+ } else if v == "4467" {
+ 4467
+ } else if v == "4468" {
+ 4468
+ } else if v == "4469" {
+ 4469
+ } else if v == "4470" {
+ 4470
+ } else if v == "4471" {
+ 4471
+ } else if v == "4472" {
+ 4472
+ } else if v == "4473" {
+ 4473
+ } else if v == "4474" {
+ 4474
+ } else if v == "4475" {
+ 4475
+ } else if v == "4476" {
+ 4476
+ } else if v == "4477" {
+ 4477
+ } else if v == "4478" {
+ 4478
+ } else if v == "4479" {
+ 4479
+ } else if v == "4480" {
+ 4480
+ } else if v == "4481" {
+ 4481
+ } else if v == "4482" {
+ 4482
+ } else if v == "4483" {
+ 4483
+ } else if v == "4484" {
+ 4484
+ } else if v == "4485" {
+ 4485
+ } else if v == "4486" {
+ 4486
+ } else if v == "4487" {
+ 4487
+ } else if v == "4488" {
+ 4488
+ } else if v == "4489" {
+ 4489
+ } else if v == "4490" {
+ 4490
+ } else if v == "4491" {
+ 4491
+ } else if v == "4492" {
+ 4492
+ } else if v == "4493" {
+ 4493
+ } else if v == "4494" {
+ 4494
+ } else if v == "4495" {
+ 4495
+ } else if v == "4496" {
+ 4496
+ } else if v == "4497" {
+ 4497
+ } else if v == "4498" {
+ 4498
+ } else if v == "4499" {
+ 4499
+ } else if v == "4500" {
+ 4500
+ } else if v == "4501" {
+ 4501
+ } else if v == "4502" {
+ 4502
+ } else if v == "4503" {
+ 4503
+ } else if v == "4504" {
+ 4504
+ } else if v == "4505" {
+ 4505
+ } else if v == "4506" {
+ 4506
+ } else if v == "4507" {
+ 4507
+ } else if v == "4508" {
+ 4508
+ } else if v == "4509" {
+ 4509
+ } else if v == "4510" {
+ 4510
+ } else if v == "4511" {
+ 4511
+ } else if v == "4512" {
+ 4512
+ } else if v == "4513" {
+ 4513
+ } else if v == "4514" {
+ 4514
+ } else if v == "4515" {
+ 4515
+ } else if v == "4516" {
+ 4516
+ } else if v == "4517" {
+ 4517
+ } else if v == "4518" {
+ 4518
+ } else if v == "4519" {
+ 4519
+ } else if v == "4520" {
+ 4520
+ } else if v == "4521" {
+ 4521
+ } else if v == "4522" {
+ 4522
+ } else if v == "4523" {
+ 4523
+ } else if v == "4524" {
+ 4524
+ } else if v == "4525" {
+ 4525
+ } else if v == "4526" {
+ 4526
+ } else if v == "4527" {
+ 4527
+ } else if v == "4528" {
+ 4528
+ } else if v == "4529" {
+ 4529
+ } else if v == "4530" {
+ 4530
+ } else if v == "4531" {
+ 4531
+ } else if v == "4532" {
+ 4532
+ } else if v == "4533" {
+ 4533
+ } else if v == "4534" {
+ 4534
+ } else if v == "4535" {
+ 4535
+ } else if v == "4536" {
+ 4536
+ } else if v == "4537" {
+ 4537
+ } else if v == "4538" {
+ 4538
+ } else if v == "4539" {
+ 4539
+ } else if v == "4540" {
+ 4540
+ } else if v == "4541" {
+ 4541
+ } else if v == "4542" {
+ 4542
+ } else if v == "4543" {
+ 4543
+ } else if v == "4544" {
+ 4544
+ } else if v == "4545" {
+ 4545
+ } else if v == "4546" {
+ 4546
+ } else if v == "4547" {
+ 4547
+ } else if v == "4548" {
+ 4548
+ } else if v == "4549" {
+ 4549
+ } else if v == "4550" {
+ 4550
+ } else if v == "4551" {
+ 4551
+ } else if v == "4552" {
+ 4552
+ } else if v == "4553" {
+ 4553
+ } else if v == "4554" {
+ 4554
+ } else if v == "4555" {
+ 4555
+ } else if v == "4556" {
+ 4556
+ } else if v == "4557" {
+ 4557
+ } else if v == "4558" {
+ 4558
+ } else if v == "4559" {
+ 4559
+ } else if v == "4560" {
+ 4560
+ } else if v == "4561" {
+ 4561
+ } else if v == "4562" {
+ 4562
+ } else if v == "4563" {
+ 4563
+ } else if v == "4564" {
+ 4564
+ } else if v == "4565" {
+ 4565
+ } else if v == "4566" {
+ 4566
+ } else if v == "4567" {
+ 4567
+ } else if v == "4568" {
+ 4568
+ } else if v == "4569" {
+ 4569
+ } else if v == "4570" {
+ 4570
+ } else if v == "4571" {
+ 4571
+ } else if v == "4572" {
+ 4572
+ } else if v == "4573" {
+ 4573
+ } else if v == "4574" {
+ 4574
+ } else if v == "4575" {
+ 4575
+ } else if v == "4576" {
+ 4576
+ } else if v == "4577" {
+ 4577
+ } else if v == "4578" {
+ 4578
+ } else if v == "4579" {
+ 4579
+ } else if v == "4580" {
+ 4580
+ } else if v == "4581" {
+ 4581
+ } else if v == "4582" {
+ 4582
+ } else if v == "4583" {
+ 4583
+ } else if v == "4584" {
+ 4584
+ } else if v == "4585" {
+ 4585
+ } else if v == "4586" {
+ 4586
+ } else if v == "4587" {
+ 4587
+ } else if v == "4588" {
+ 4588
+ } else if v == "4589" {
+ 4589
+ } else if v == "4590" {
+ 4590
+ } else if v == "4591" {
+ 4591
+ } else if v == "4592" {
+ 4592
+ } else if v == "4593" {
+ 4593
+ } else if v == "4594" {
+ 4594
+ } else if v == "4595" {
+ 4595
+ } else if v == "4596" {
+ 4596
+ } else if v == "4597" {
+ 4597
+ } else if v == "4598" {
+ 4598
+ } else if v == "4599" {
+ 4599
+ } else if v == "4600" {
+ 4600
+ } else if v == "4601" {
+ 4601
+ } else if v == "4602" {
+ 4602
+ } else if v == "4603" {
+ 4603
+ } else if v == "4604" {
+ 4604
+ } else if v == "4605" {
+ 4605
+ } else if v == "4606" {
+ 4606
+ } else if v == "4607" {
+ 4607
+ } else if v == "4608" {
+ 4608
+ } else if v == "4609" {
+ 4609
+ } else if v == "4610" {
+ 4610
+ } else if v == "4611" {
+ 4611
+ } else if v == "4612" {
+ 4612
+ } else if v == "4613" {
+ 4613
+ } else if v == "4614" {
+ 4614
+ } else if v == "4615" {
+ 4615
+ } else if v == "4616" {
+ 4616
+ } else if v == "4617" {
+ 4617
+ } else if v == "4618" {
+ 4618
+ } else if v == "4619" {
+ 4619
+ } else if v == "4620" {
+ 4620
+ } else if v == "4621" {
+ 4621
+ } else if v == "4622" {
+ 4622
+ } else if v == "4623" {
+ 4623
+ } else if v == "4624" {
+ 4624
+ } else if v == "4625" {
+ 4625
+ } else if v == "4626" {
+ 4626
+ } else if v == "4627" {
+ 4627
+ } else if v == "4628" {
+ 4628
+ } else if v == "4629" {
+ 4629
+ } else if v == "4630" {
+ 4630
+ } else if v == "4631" {
+ 4631
+ } else if v == "4632" {
+ 4632
+ } else if v == "4633" {
+ 4633
+ } else if v == "4634" {
+ 4634
+ } else if v == "4635" {
+ 4635
+ } else if v == "4636" {
+ 4636
+ } else if v == "4637" {
+ 4637
+ } else if v == "4638" {
+ 4638
+ } else if v == "4639" {
+ 4639
+ } else if v == "4640" {
+ 4640
+ } else if v == "4641" {
+ 4641
+ } else if v == "4642" {
+ 4642
+ } else if v == "4643" {
+ 4643
+ } else if v == "4644" {
+ 4644
+ } else if v == "4645" {
+ 4645
+ } else if v == "4646" {
+ 4646
+ } else if v == "4647" {
+ 4647
+ } else if v == "4648" {
+ 4648
+ } else if v == "4649" {
+ 4649
+ } else if v == "4650" {
+ 4650
+ } else if v == "4651" {
+ 4651
+ } else if v == "4652" {
+ 4652
+ } else if v == "4653" {
+ 4653
+ } else if v == "4654" {
+ 4654
+ } else if v == "4655" {
+ 4655
+ } else if v == "4656" {
+ 4656
+ } else if v == "4657" {
+ 4657
+ } else if v == "4658" {
+ 4658
+ } else if v == "4659" {
+ 4659
+ } else if v == "4660" {
+ 4660
+ } else if v == "4661" {
+ 4661
+ } else if v == "4662" {
+ 4662
+ } else if v == "4663" {
+ 4663
+ } else if v == "4664" {
+ 4664
+ } else if v == "4665" {
+ 4665
+ } else if v == "4666" {
+ 4666
+ } else if v == "4667" {
+ 4667
+ } else if v == "4668" {
+ 4668
+ } else if v == "4669" {
+ 4669
+ } else if v == "4670" {
+ 4670
+ } else if v == "4671" {
+ 4671
+ } else if v == "4672" {
+ 4672
+ } else if v == "4673" {
+ 4673
+ } else if v == "4674" {
+ 4674
+ } else if v == "4675" {
+ 4675
+ } else if v == "4676" {
+ 4676
+ } else if v == "4677" {
+ 4677
+ } else if v == "4678" {
+ 4678
+ } else if v == "4679" {
+ 4679
+ } else if v == "4680" {
+ 4680
+ } else if v == "4681" {
+ 4681
+ } else if v == "4682" {
+ 4682
+ } else if v == "4683" {
+ 4683
+ } else if v == "4684" {
+ 4684
+ } else if v == "4685" {
+ 4685
+ } else if v == "4686" {
+ 4686
+ } else if v == "4687" {
+ 4687
+ } else if v == "4688" {
+ 4688
+ } else if v == "4689" {
+ 4689
+ } else if v == "4690" {
+ 4690
+ } else if v == "4691" {
+ 4691
+ } else if v == "4692" {
+ 4692
+ } else if v == "4693" {
+ 4693
+ } else if v == "4694" {
+ 4694
+ } else if v == "4695" {
+ 4695
+ } else if v == "4696" {
+ 4696
+ } else if v == "4697" {
+ 4697
+ } else if v == "4698" {
+ 4698
+ } else if v == "4699" {
+ 4699
+ } else if v == "4700" {
+ 4700
+ } else if v == "4701" {
+ 4701
+ } else if v == "4702" {
+ 4702
+ } else if v == "4703" {
+ 4703
+ } else if v == "4704" {
+ 4704
+ } else if v == "4705" {
+ 4705
+ } else if v == "4706" {
+ 4706
+ } else if v == "4707" {
+ 4707
+ } else if v == "4708" {
+ 4708
+ } else if v == "4709" {
+ 4709
+ } else if v == "4710" {
+ 4710
+ } else if v == "4711" {
+ 4711
+ } else if v == "4712" {
+ 4712
+ } else if v == "4713" {
+ 4713
+ } else if v == "4714" {
+ 4714
+ } else if v == "4715" {
+ 4715
+ } else if v == "4716" {
+ 4716
+ } else if v == "4717" {
+ 4717
+ } else if v == "4718" {
+ 4718
+ } else if v == "4719" {
+ 4719
+ } else if v == "4720" {
+ 4720
+ } else if v == "4721" {
+ 4721
+ } else if v == "4722" {
+ 4722
+ } else if v == "4723" {
+ 4723
+ } else if v == "4724" {
+ 4724
+ } else if v == "4725" {
+ 4725
+ } else if v == "4726" {
+ 4726
+ } else if v == "4727" {
+ 4727
+ } else if v == "4728" {
+ 4728
+ } else if v == "4729" {
+ 4729
+ } else if v == "4730" {
+ 4730
+ } else if v == "4731" {
+ 4731
+ } else if v == "4732" {
+ 4732
+ } else if v == "4733" {
+ 4733
+ } else if v == "4734" {
+ 4734
+ } else if v == "4735" {
+ 4735
+ } else if v == "4736" {
+ 4736
+ } else if v == "4737" {
+ 4737
+ } else if v == "4738" {
+ 4738
+ } else if v == "4739" {
+ 4739
+ } else if v == "4740" {
+ 4740
+ } else if v == "4741" {
+ 4741
+ } else if v == "4742" {
+ 4742
+ } else if v == "4743" {
+ 4743
+ } else if v == "4744" {
+ 4744
+ } else if v == "4745" {
+ 4745
+ } else if v == "4746" {
+ 4746
+ } else if v == "4747" {
+ 4747
+ } else if v == "4748" {
+ 4748
+ } else if v == "4749" {
+ 4749
+ } else if v == "4750" {
+ 4750
+ } else if v == "4751" {
+ 4751
+ } else if v == "4752" {
+ 4752
+ } else if v == "4753" {
+ 4753
+ } else if v == "4754" {
+ 4754
+ } else if v == "4755" {
+ 4755
+ } else if v == "4756" {
+ 4756
+ } else if v == "4757" {
+ 4757
+ } else if v == "4758" {
+ 4758
+ } else if v == "4759" {
+ 4759
+ } else if v == "4760" {
+ 4760
+ } else if v == "4761" {
+ 4761
+ } else if v == "4762" {
+ 4762
+ } else if v == "4763" {
+ 4763
+ } else if v == "4764" {
+ 4764
+ } else if v == "4765" {
+ 4765
+ } else if v == "4766" {
+ 4766
+ } else if v == "4767" {
+ 4767
+ } else if v == "4768" {
+ 4768
+ } else if v == "4769" {
+ 4769
+ } else if v == "4770" {
+ 4770
+ } else if v == "4771" {
+ 4771
+ } else if v == "4772" {
+ 4772
+ } else if v == "4773" {
+ 4773
+ } else if v == "4774" {
+ 4774
+ } else if v == "4775" {
+ 4775
+ } else if v == "4776" {
+ 4776
+ } else if v == "4777" {
+ 4777
+ } else if v == "4778" {
+ 4778
+ } else if v == "4779" {
+ 4779
+ } else if v == "4780" {
+ 4780
+ } else if v == "4781" {
+ 4781
+ } else if v == "4782" {
+ 4782
+ } else if v == "4783" {
+ 4783
+ } else if v == "4784" {
+ 4784
+ } else if v == "4785" {
+ 4785
+ } else if v == "4786" {
+ 4786
+ } else if v == "4787" {
+ 4787
+ } else if v == "4788" {
+ 4788
+ } else if v == "4789" {
+ 4789
+ } else if v == "4790" {
+ 4790
+ } else if v == "4791" {
+ 4791
+ } else if v == "4792" {
+ 4792
+ } else if v == "4793" {
+ 4793
+ } else if v == "4794" {
+ 4794
+ } else if v == "4795" {
+ 4795
+ } else if v == "4796" {
+ 4796
+ } else if v == "4797" {
+ 4797
+ } else if v == "4798" {
+ 4798
+ } else if v == "4799" {
+ 4799
+ } else if v == "4800" {
+ 4800
+ } else if v == "4801" {
+ 4801
+ } else if v == "4802" {
+ 4802
+ } else if v == "4803" {
+ 4803
+ } else if v == "4804" {
+ 4804
+ } else if v == "4805" {
+ 4805
+ } else if v == "4806" {
+ 4806
+ } else if v == "4807" {
+ 4807
+ } else if v == "4808" {
+ 4808
+ } else if v == "4809" {
+ 4809
+ } else if v == "4810" {
+ 4810
+ } else if v == "4811" {
+ 4811
+ } else if v == "4812" {
+ 4812
+ } else if v == "4813" {
+ 4813
+ } else if v == "4814" {
+ 4814
+ } else if v == "4815" {
+ 4815
+ } else if v == "4816" {
+ 4816
+ } else if v == "4817" {
+ 4817
+ } else if v == "4818" {
+ 4818
+ } else if v == "4819" {
+ 4819
+ } else if v == "4820" {
+ 4820
+ } else if v == "4821" {
+ 4821
+ } else if v == "4822" {
+ 4822
+ } else if v == "4823" {
+ 4823
+ } else if v == "4824" {
+ 4824
+ } else if v == "4825" {
+ 4825
+ } else if v == "4826" {
+ 4826
+ } else if v == "4827" {
+ 4827
+ } else if v == "4828" {
+ 4828
+ } else if v == "4829" {
+ 4829
+ } else if v == "4830" {
+ 4830
+ } else if v == "4831" {
+ 4831
+ } else if v == "4832" {
+ 4832
+ } else if v == "4833" {
+ 4833
+ } else if v == "4834" {
+ 4834
+ } else if v == "4835" {
+ 4835
+ } else if v == "4836" {
+ 4836
+ } else if v == "4837" {
+ 4837
+ } else if v == "4838" {
+ 4838
+ } else if v == "4839" {
+ 4839
+ } else if v == "4840" {
+ 4840
+ } else if v == "4841" {
+ 4841
+ } else if v == "4842" {
+ 4842
+ } else if v == "4843" {
+ 4843
+ } else if v == "4844" {
+ 4844
+ } else if v == "4845" {
+ 4845
+ } else if v == "4846" {
+ 4846
+ } else if v == "4847" {
+ 4847
+ } else if v == "4848" {
+ 4848
+ } else if v == "4849" {
+ 4849
+ } else if v == "4850" {
+ 4850
+ } else if v == "4851" {
+ 4851
+ } else if v == "4852" {
+ 4852
+ } else if v == "4853" {
+ 4853
+ } else if v == "4854" {
+ 4854
+ } else if v == "4855" {
+ 4855
+ } else if v == "4856" {
+ 4856
+ } else if v == "4857" {
+ 4857
+ } else if v == "4858" {
+ 4858
+ } else if v == "4859" {
+ 4859
+ } else if v == "4860" {
+ 4860
+ } else if v == "4861" {
+ 4861
+ } else if v == "4862" {
+ 4862
+ } else if v == "4863" {
+ 4863
+ } else if v == "4864" {
+ 4864
+ } else if v == "4865" {
+ 4865
+ } else if v == "4866" {
+ 4866
+ } else if v == "4867" {
+ 4867
+ } else if v == "4868" {
+ 4868
+ } else if v == "4869" {
+ 4869
+ } else if v == "4870" {
+ 4870
+ } else if v == "4871" {
+ 4871
+ } else if v == "4872" {
+ 4872
+ } else if v == "4873" {
+ 4873
+ } else if v == "4874" {
+ 4874
+ } else if v == "4875" {
+ 4875
+ } else if v == "4876" {
+ 4876
+ } else if v == "4877" {
+ 4877
+ } else if v == "4878" {
+ 4878
+ } else if v == "4879" {
+ 4879
+ } else if v == "4880" {
+ 4880
+ } else if v == "4881" {
+ 4881
+ } else if v == "4882" {
+ 4882
+ } else if v == "4883" {
+ 4883
+ } else if v == "4884" {
+ 4884
+ } else if v == "4885" {
+ 4885
+ } else if v == "4886" {
+ 4886
+ } else if v == "4887" {
+ 4887
+ } else if v == "4888" {
+ 4888
+ } else if v == "4889" {
+ 4889
+ } else if v == "4890" {
+ 4890
+ } else if v == "4891" {
+ 4891
+ } else if v == "4892" {
+ 4892
+ } else if v == "4893" {
+ 4893
+ } else if v == "4894" {
+ 4894
+ } else if v == "4895" {
+ 4895
+ } else if v == "4896" {
+ 4896
+ } else if v == "4897" {
+ 4897
+ } else if v == "4898" {
+ 4898
+ } else if v == "4899" {
+ 4899
+ } else if v == "4900" {
+ 4900
+ } else if v == "4901" {
+ 4901
+ } else if v == "4902" {
+ 4902
+ } else if v == "4903" {
+ 4903
+ } else if v == "4904" {
+ 4904
+ } else if v == "4905" {
+ 4905
+ } else if v == "4906" {
+ 4906
+ } else if v == "4907" {
+ 4907
+ } else if v == "4908" {
+ 4908
+ } else if v == "4909" {
+ 4909
+ } else if v == "4910" {
+ 4910
+ } else if v == "4911" {
+ 4911
+ } else if v == "4912" {
+ 4912
+ } else if v == "4913" {
+ 4913
+ } else if v == "4914" {
+ 4914
+ } else if v == "4915" {
+ 4915
+ } else if v == "4916" {
+ 4916
+ } else if v == "4917" {
+ 4917
+ } else if v == "4918" {
+ 4918
+ } else if v == "4919" {
+ 4919
+ } else if v == "4920" {
+ 4920
+ } else if v == "4921" {
+ 4921
+ } else if v == "4922" {
+ 4922
+ } else if v == "4923" {
+ 4923
+ } else if v == "4924" {
+ 4924
+ } else if v == "4925" {
+ 4925
+ } else if v == "4926" {
+ 4926
+ } else if v == "4927" {
+ 4927
+ } else if v == "4928" {
+ 4928
+ } else if v == "4929" {
+ 4929
+ } else if v == "4930" {
+ 4930
+ } else if v == "4931" {
+ 4931
+ } else if v == "4932" {
+ 4932
+ } else if v == "4933" {
+ 4933
+ } else if v == "4934" {
+ 4934
+ } else if v == "4935" {
+ 4935
+ } else if v == "4936" {
+ 4936
+ } else if v == "4937" {
+ 4937
+ } else if v == "4938" {
+ 4938
+ } else if v == "4939" {
+ 4939
+ } else if v == "4940" {
+ 4940
+ } else if v == "4941" {
+ 4941
+ } else if v == "4942" {
+ 4942
+ } else if v == "4943" {
+ 4943
+ } else if v == "4944" {
+ 4944
+ } else if v == "4945" {
+ 4945
+ } else if v == "4946" {
+ 4946
+ } else if v == "4947" {
+ 4947
+ } else if v == "4948" {
+ 4948
+ } else if v == "4949" {
+ 4949
+ } else if v == "4950" {
+ 4950
+ } else if v == "4951" {
+ 4951
+ } else if v == "4952" {
+ 4952
+ } else if v == "4953" {
+ 4953
+ } else if v == "4954" {
+ 4954
+ } else if v == "4955" {
+ 4955
+ } else if v == "4956" {
+ 4956
+ } else if v == "4957" {
+ 4957
+ } else if v == "4958" {
+ 4958
+ } else if v == "4959" {
+ 4959
+ } else if v == "4960" {
+ 4960
+ } else if v == "4961" {
+ 4961
+ } else if v == "4962" {
+ 4962
+ } else if v == "4963" {
+ 4963
+ } else if v == "4964" {
+ 4964
+ } else if v == "4965" {
+ 4965
+ } else if v == "4966" {
+ 4966
+ } else if v == "4967" {
+ 4967
+ } else if v == "4968" {
+ 4968
+ } else if v == "4969" {
+ 4969
+ } else if v == "4970" {
+ 4970
+ } else if v == "4971" {
+ 4971
+ } else if v == "4972" {
+ 4972
+ } else if v == "4973" {
+ 4973
+ } else if v == "4974" {
+ 4974
+ } else if v == "4975" {
+ 4975
+ } else if v == "4976" {
+ 4976
+ } else if v == "4977" {
+ 4977
+ } else if v == "4978" {
+ 4978
+ } else if v == "4979" {
+ 4979
+ } else if v == "4980" {
+ 4980
+ } else if v == "4981" {
+ 4981
+ } else if v == "4982" {
+ 4982
+ } else if v == "4983" {
+ 4983
+ } else if v == "4984" {
+ 4984
+ } else if v == "4985" {
+ 4985
+ } else if v == "4986" {
+ 4986
+ } else if v == "4987" {
+ 4987
+ } else if v == "4988" {
+ 4988
+ } else if v == "4989" {
+ 4989
+ } else if v == "4990" {
+ 4990
+ } else if v == "4991" {
+ 4991
+ } else if v == "4992" {
+ 4992
+ } else if v == "4993" {
+ 4993
+ } else if v == "4994" {
+ 4994
+ } else if v == "4995" {
+ 4995
+ } else if v == "4996" {
+ 4996
+ } else if v == "4997" {
+ 4997
+ } else if v == "4998" {
+ 4998
+ } else if v == "4999" {
+ 4999
+ } else if v == "5000" {
+ 5000
+ } else if v == "5001" {
+ 5001
+ } else if v == "5002" {
+ 5002
+ } else if v == "5003" {
+ 5003
+ } else if v == "5004" {
+ 5004
+ } else if v == "5005" {
+ 5005
+ } else if v == "5006" {
+ 5006
+ } else if v == "5007" {
+ 5007
+ } else if v == "5008" {
+ 5008
+ } else if v == "5009" {
+ 5009
+ } else if v == "5010" {
+ 5010
+ } else if v == "5011" {
+ 5011
+ } else if v == "5012" {
+ 5012
+ } else if v == "5013" {
+ 5013
+ } else if v == "5014" {
+ 5014
+ } else if v == "5015" {
+ 5015
+ } else if v == "5016" {
+ 5016
+ } else if v == "5017" {
+ 5017
+ } else if v == "5018" {
+ 5018
+ } else if v == "5019" {
+ 5019
+ } else if v == "5020" {
+ 5020
+ } else if v == "5021" {
+ 5021
+ } else if v == "5022" {
+ 5022
+ } else if v == "5023" {
+ 5023
+ } else if v == "5024" {
+ 5024
+ } else if v == "5025" {
+ 5025
+ } else if v == "5026" {
+ 5026
+ } else if v == "5027" {
+ 5027
+ } else if v == "5028" {
+ 5028
+ } else if v == "5029" {
+ 5029
+ } else if v == "5030" {
+ 5030
+ } else if v == "5031" {
+ 5031
+ } else if v == "5032" {
+ 5032
+ } else if v == "5033" {
+ 5033
+ } else if v == "5034" {
+ 5034
+ } else if v == "5035" {
+ 5035
+ } else if v == "5036" {
+ 5036
+ } else if v == "5037" {
+ 5037
+ } else if v == "5038" {
+ 5038
+ } else if v == "5039" {
+ 5039
+ } else if v == "5040" {
+ 5040
+ } else if v == "5041" {
+ 5041
+ } else if v == "5042" {
+ 5042
+ } else if v == "5043" {
+ 5043
+ } else if v == "5044" {
+ 5044
+ } else if v == "5045" {
+ 5045
+ } else if v == "5046" {
+ 5046
+ } else if v == "5047" {
+ 5047
+ } else if v == "5048" {
+ 5048
+ } else if v == "5049" {
+ 5049
+ } else if v == "5050" {
+ 5050
+ } else if v == "5051" {
+ 5051
+ } else if v == "5052" {
+ 5052
+ } else if v == "5053" {
+ 5053
+ } else if v == "5054" {
+ 5054
+ } else if v == "5055" {
+ 5055
+ } else if v == "5056" {
+ 5056
+ } else if v == "5057" {
+ 5057
+ } else if v == "5058" {
+ 5058
+ } else if v == "5059" {
+ 5059
+ } else if v == "5060" {
+ 5060
+ } else if v == "5061" {
+ 5061
+ } else if v == "5062" {
+ 5062
+ } else if v == "5063" {
+ 5063
+ } else if v == "5064" {
+ 5064
+ } else if v == "5065" {
+ 5065
+ } else if v == "5066" {
+ 5066
+ } else if v == "5067" {
+ 5067
+ } else if v == "5068" {
+ 5068
+ } else if v == "5069" {
+ 5069
+ } else if v == "5070" {
+ 5070
+ } else if v == "5071" {
+ 5071
+ } else if v == "5072" {
+ 5072
+ } else if v == "5073" {
+ 5073
+ } else if v == "5074" {
+ 5074
+ } else if v == "5075" {
+ 5075
+ } else if v == "5076" {
+ 5076
+ } else if v == "5077" {
+ 5077
+ } else if v == "5078" {
+ 5078
+ } else if v == "5079" {
+ 5079
+ } else if v == "5080" {
+ 5080
+ } else if v == "5081" {
+ 5081
+ } else if v == "5082" {
+ 5082
+ } else if v == "5083" {
+ 5083
+ } else if v == "5084" {
+ 5084
+ } else if v == "5085" {
+ 5085
+ } else if v == "5086" {
+ 5086
+ } else if v == "5087" {
+ 5087
+ } else if v == "5088" {
+ 5088
+ } else if v == "5089" {
+ 5089
+ } else if v == "5090" {
+ 5090
+ } else if v == "5091" {
+ 5091
+ } else if v == "5092" {
+ 5092
+ } else if v == "5093" {
+ 5093
+ } else if v == "5094" {
+ 5094
+ } else if v == "5095" {
+ 5095
+ } else if v == "5096" {
+ 5096
+ } else if v == "5097" {
+ 5097
+ } else if v == "5098" {
+ 5098
+ } else if v == "5099" {
+ 5099
+ } else if v == "5100" {
+ 5100
+ } else if v == "5101" {
+ 5101
+ } else if v == "5102" {
+ 5102
+ } else if v == "5103" {
+ 5103
+ } else if v == "5104" {
+ 5104
+ } else if v == "5105" {
+ 5105
+ } else if v == "5106" {
+ 5106
+ } else if v == "5107" {
+ 5107
+ } else if v == "5108" {
+ 5108
+ } else if v == "5109" {
+ 5109
+ } else if v == "5110" {
+ 5110
+ } else if v == "5111" {
+ 5111
+ } else if v == "5112" {
+ 5112
+ } else if v == "5113" {
+ 5113
+ } else if v == "5114" {
+ 5114
+ } else if v == "5115" {
+ 5115
+ } else if v == "5116" {
+ 5116
+ } else if v == "5117" {
+ 5117
+ } else if v == "5118" {
+ 5118
+ } else if v == "5119" {
+ 5119
+ } else if v == "5120" {
+ 5120
+ } else if v == "5121" {
+ 5121
+ } else if v == "5122" {
+ 5122
+ } else if v == "5123" {
+ 5123
+ } else if v == "5124" {
+ 5124
+ } else if v == "5125" {
+ 5125
+ } else if v == "5126" {
+ 5126
+ } else if v == "5127" {
+ 5127
+ } else if v == "5128" {
+ 5128
+ } else if v == "5129" {
+ 5129
+ } else if v == "5130" {
+ 5130
+ } else if v == "5131" {
+ 5131
+ } else if v == "5132" {
+ 5132
+ } else if v == "5133" {
+ 5133
+ } else if v == "5134" {
+ 5134
+ } else if v == "5135" {
+ 5135
+ } else if v == "5136" {
+ 5136
+ } else if v == "5137" {
+ 5137
+ } else if v == "5138" {
+ 5138
+ } else if v == "5139" {
+ 5139
+ } else if v == "5140" {
+ 5140
+ } else if v == "5141" {
+ 5141
+ } else if v == "5142" {
+ 5142
+ } else if v == "5143" {
+ 5143
+ } else if v == "5144" {
+ 5144
+ } else if v == "5145" {
+ 5145
+ } else if v == "5146" {
+ 5146
+ } else if v == "5147" {
+ 5147
+ } else if v == "5148" {
+ 5148
+ } else if v == "5149" {
+ 5149
+ } else if v == "5150" {
+ 5150
+ } else if v == "5151" {
+ 5151
+ } else if v == "5152" {
+ 5152
+ } else if v == "5153" {
+ 5153
+ } else if v == "5154" {
+ 5154
+ } else if v == "5155" {
+ 5155
+ } else if v == "5156" {
+ 5156
+ } else if v == "5157" {
+ 5157
+ } else if v == "5158" {
+ 5158
+ } else if v == "5159" {
+ 5159
+ } else if v == "5160" {
+ 5160
+ } else if v == "5161" {
+ 5161
+ } else if v == "5162" {
+ 5162
+ } else if v == "5163" {
+ 5163
+ } else if v == "5164" {
+ 5164
+ } else if v == "5165" {
+ 5165
+ } else if v == "5166" {
+ 5166
+ } else if v == "5167" {
+ 5167
+ } else if v == "5168" {
+ 5168
+ } else if v == "5169" {
+ 5169
+ } else if v == "5170" {
+ 5170
+ } else if v == "5171" {
+ 5171
+ } else if v == "5172" {
+ 5172
+ } else if v == "5173" {
+ 5173
+ } else if v == "5174" {
+ 5174
+ } else if v == "5175" {
+ 5175
+ } else if v == "5176" {
+ 5176
+ } else if v == "5177" {
+ 5177
+ } else if v == "5178" {
+ 5178
+ } else if v == "5179" {
+ 5179
+ } else if v == "5180" {
+ 5180
+ } else if v == "5181" {
+ 5181
+ } else if v == "5182" {
+ 5182
+ } else if v == "5183" {
+ 5183
+ } else if v == "5184" {
+ 5184
+ } else if v == "5185" {
+ 5185
+ } else if v == "5186" {
+ 5186
+ } else if v == "5187" {
+ 5187
+ } else if v == "5188" {
+ 5188
+ } else if v == "5189" {
+ 5189
+ } else if v == "5190" {
+ 5190
+ } else if v == "5191" {
+ 5191
+ } else if v == "5192" {
+ 5192
+ } else if v == "5193" {
+ 5193
+ } else if v == "5194" {
+ 5194
+ } else if v == "5195" {
+ 5195
+ } else if v == "5196" {
+ 5196
+ } else if v == "5197" {
+ 5197
+ } else if v == "5198" {
+ 5198
+ } else if v == "5199" {
+ 5199
+ } else if v == "5200" {
+ 5200
+ } else if v == "5201" {
+ 5201
+ } else if v == "5202" {
+ 5202
+ } else if v == "5203" {
+ 5203
+ } else if v == "5204" {
+ 5204
+ } else if v == "5205" {
+ 5205
+ } else {
+ 5206
+ }
+}
diff --git a/tests/ui/issues/issue-7519-match-unit-in-arg.rs b/tests/ui/issues/issue-7519-match-unit-in-arg.rs
new file mode 100644
index 000000000..7d838cbb0
--- /dev/null
+++ b/tests/ui/issues/issue-7519-match-unit-in-arg.rs
@@ -0,0 +1,12 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+/*
+#7519 ICE pattern matching unit in function argument
+*/
+
+fn foo(():()) { }
+
+pub fn main() {
+ foo(());
+}
diff --git a/tests/ui/issues/issue-75283.rs b/tests/ui/issues/issue-75283.rs
new file mode 100644
index 000000000..d556132e4
--- /dev/null
+++ b/tests/ui/issues/issue-75283.rs
@@ -0,0 +1,6 @@
+extern "C" {
+ fn lol() { //~ ERROR incorrect function inside `extern` block
+ println!("");
+ }
+}
+fn main() {}
diff --git a/tests/ui/issues/issue-75283.stderr b/tests/ui/issues/issue-75283.stderr
new file mode 100644
index 000000000..da3800aff
--- /dev/null
+++ b/tests/ui/issues/issue-75283.stderr
@@ -0,0 +1,18 @@
+error: incorrect function inside `extern` block
+ --> $DIR/issue-75283.rs:2:8
+ |
+LL | extern "C" {
+ | ---------- `extern` blocks define existing foreign functions and functions inside of them cannot have a body
+LL | fn lol() {
+ | ________^^^___-
+ | | |
+ | | cannot have a body
+LL | | println!("");
+LL | | }
+ | |_____- help: remove the invalid body: `;`
+ |
+ = help: you might have meant to write a function accessible through FFI, which can be done by writing `extern fn` outside of the `extern` block
+ = note: for more information, visit https://doc.rust-lang.org/std/keyword.extern.html
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-75307.rs b/tests/ui/issues/issue-75307.rs
new file mode 100644
index 000000000..cffa6bea8
--- /dev/null
+++ b/tests/ui/issues/issue-75307.rs
@@ -0,0 +1,3 @@
+fn main() {
+ format!(r"{}{}{}", named_arg=1); //~ ERROR 3 positional arguments in format string, but there is 1 argument
+}
diff --git a/tests/ui/issues/issue-75307.stderr b/tests/ui/issues/issue-75307.stderr
new file mode 100644
index 000000000..c5b0b11e7
--- /dev/null
+++ b/tests/ui/issues/issue-75307.stderr
@@ -0,0 +1,8 @@
+error: 3 positional arguments in format string, but there is 1 argument
+ --> $DIR/issue-75307.rs:2:15
+ |
+LL | format!(r"{}{}{}", named_arg=1);
+ | ^^^^^^ -
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-7563.rs b/tests/ui/issues/issue-7563.rs
new file mode 100644
index 000000000..c62405554
--- /dev/null
+++ b/tests/ui/issues/issue-7563.rs
@@ -0,0 +1,28 @@
+// run-pass
+#![allow(dead_code)]
+trait IDummy {
+ fn do_nothing(&self);
+}
+
+#[derive(Debug)]
+struct A { a: isize }
+#[derive(Debug)]
+struct B<'a> { b: isize, pa: &'a A }
+
+ impl IDummy for A {
+ fn do_nothing(&self) {
+ println!("A::do_nothing() is called");
+ }
+ }
+
+impl<'a> B<'a> {
+ fn get_pa(&self) -> &'a dyn IDummy { self.pa as &'a dyn IDummy }
+}
+
+pub fn main() {
+ let sa = A { a: 100 };
+ let sb = B { b: 200, pa: &sa };
+
+ println!("sa is {:?}", sa);
+ println!("sb is {:?}", sb);
+}
diff --git a/tests/ui/issues/issue-75704.rs b/tests/ui/issues/issue-75704.rs
new file mode 100644
index 000000000..aed7ddbcb
--- /dev/null
+++ b/tests/ui/issues/issue-75704.rs
@@ -0,0 +1,7 @@
+// Caused an infinite loop during SimlifyCfg MIR transform previously.
+//
+// build-pass
+
+fn main() {
+ loop { continue; }
+}
diff --git a/tests/ui/issues/issue-7575.rs b/tests/ui/issues/issue-7575.rs
new file mode 100644
index 000000000..ac69f2b1c
--- /dev/null
+++ b/tests/ui/issues/issue-7575.rs
@@ -0,0 +1,17 @@
+// run-pass
+
+trait Foo {
+ fn new() -> bool { false }
+ fn dummy(&self) { }
+}
+
+trait Bar {
+ fn new(&self) -> bool { true }
+}
+
+impl Bar for isize {}
+impl Foo for isize {}
+
+fn main() {
+ assert!(1.new());
+}
diff --git a/tests/ui/issues/issue-75777.rs b/tests/ui/issues/issue-75777.rs
new file mode 100644
index 000000000..a1e438bc6
--- /dev/null
+++ b/tests/ui/issues/issue-75777.rs
@@ -0,0 +1,15 @@
+// Regression test for #75777.
+// Checks that a boxed future can be properly constructed.
+
+use std::future::{self, Future};
+use std::pin::Pin;
+
+type BoxFuture<'a, T> = Pin<Box<dyn Future<Output = T> + 'a + Send>>;
+
+fn inject<'a, Env: 'a, A: 'a + Send>(v: A) -> Box<dyn FnOnce(&'a Env) -> BoxFuture<'a, A>> {
+ let fut: BoxFuture<'a, A> = Box::pin(future::ready(v));
+ Box::new(move |_| fut)
+ //~^ ERROR: lifetime may not live long enough
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-75777.stderr b/tests/ui/issues/issue-75777.stderr
new file mode 100644
index 000000000..370cd72fd
--- /dev/null
+++ b/tests/ui/issues/issue-75777.stderr
@@ -0,0 +1,11 @@
+error: lifetime may not live long enough
+ --> $DIR/issue-75777.rs:11:5
+ |
+LL | fn inject<'a, Env: 'a, A: 'a + Send>(v: A) -> Box<dyn FnOnce(&'a Env) -> BoxFuture<'a, A>> {
+ | -- lifetime `'a` defined here
+LL | let fut: BoxFuture<'a, A> = Box::pin(future::ready(v));
+LL | Box::new(move |_| fut)
+ | ^^^^^^^^^^^^^^^^^^^^^^ returning this value requires that `'a` must outlive `'static`
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-76042.rs b/tests/ui/issues/issue-76042.rs
new file mode 100644
index 000000000..34d529379
--- /dev/null
+++ b/tests/ui/issues/issue-76042.rs
@@ -0,0 +1,16 @@
+// run-pass
+// compile-flags: -Coverflow-checks=off -Ccodegen-units=1 -Copt-level=0
+
+fn foo(a: i128, b: i128, s: u32) -> (i128, i128) {
+ if s == 128 {
+ (0, 0)
+ } else {
+ (b >> s, a >> s)
+ }
+}
+fn main() {
+ let r = foo(0, 8, 1);
+ if r.0 != 4 {
+ panic!();
+ }
+}
diff --git a/tests/ui/issues/issue-7607-1.rs b/tests/ui/issues/issue-7607-1.rs
new file mode 100644
index 000000000..5221f2c52
--- /dev/null
+++ b/tests/ui/issues/issue-7607-1.rs
@@ -0,0 +1,9 @@
+struct Foo {
+ x: isize
+}
+
+impl Fo { //~ ERROR cannot find type `Fo` in this scope
+ fn foo() {}
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-7607-1.stderr b/tests/ui/issues/issue-7607-1.stderr
new file mode 100644
index 000000000..c98302699
--- /dev/null
+++ b/tests/ui/issues/issue-7607-1.stderr
@@ -0,0 +1,12 @@
+error[E0412]: cannot find type `Fo` in this scope
+ --> $DIR/issue-7607-1.rs:5:6
+ |
+LL | impl Fo {
+ | ^^ help: a trait with a similar name exists: `Fn`
+ --> $SRC_DIR/core/src/ops/function.rs:LL:COL
+ |
+ = note: similarly named trait `Fn` defined here
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0412`.
diff --git a/tests/ui/issues/issue-7607-2.rs b/tests/ui/issues/issue-7607-2.rs
new file mode 100644
index 000000000..420a0ffd3
--- /dev/null
+++ b/tests/ui/issues/issue-7607-2.rs
@@ -0,0 +1,16 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+pub mod a {
+ pub struct Foo { a: usize }
+}
+
+pub mod b {
+ use a::Foo;
+ impl Foo {
+ fn bar(&self) { }
+ }
+}
+
+pub fn main() { }
diff --git a/tests/ui/issues/issue-76077-1.fixed b/tests/ui/issues/issue-76077-1.fixed
new file mode 100644
index 000000000..8103a7ca4
--- /dev/null
+++ b/tests/ui/issues/issue-76077-1.fixed
@@ -0,0 +1,18 @@
+// run-rustfix
+#![allow(dead_code, unused_variables)]
+
+pub mod foo {
+ #[derive(Default)]
+ pub struct Foo { invisible: bool, }
+
+ #[derive(Default)]
+ pub struct Bar { pub visible: bool, invisible: bool, }
+}
+
+fn main() {
+ let foo::Foo { .. } = foo::Foo::default();
+ //~^ ERROR pattern requires `..` due to inaccessible fields
+
+ let foo::Bar { visible, .. } = foo::Bar::default();
+ //~^ ERROR pattern requires `..` due to inaccessible fields
+}
diff --git a/tests/ui/issues/issue-76077-1.rs b/tests/ui/issues/issue-76077-1.rs
new file mode 100644
index 000000000..730332853
--- /dev/null
+++ b/tests/ui/issues/issue-76077-1.rs
@@ -0,0 +1,18 @@
+// run-rustfix
+#![allow(dead_code, unused_variables)]
+
+pub mod foo {
+ #[derive(Default)]
+ pub struct Foo { invisible: bool, }
+
+ #[derive(Default)]
+ pub struct Bar { pub visible: bool, invisible: bool, }
+}
+
+fn main() {
+ let foo::Foo {} = foo::Foo::default();
+ //~^ ERROR pattern requires `..` due to inaccessible fields
+
+ let foo::Bar { visible } = foo::Bar::default();
+ //~^ ERROR pattern requires `..` due to inaccessible fields
+}
diff --git a/tests/ui/issues/issue-76077-1.stderr b/tests/ui/issues/issue-76077-1.stderr
new file mode 100644
index 000000000..8e77662b4
--- /dev/null
+++ b/tests/ui/issues/issue-76077-1.stderr
@@ -0,0 +1,24 @@
+error: pattern requires `..` due to inaccessible fields
+ --> $DIR/issue-76077-1.rs:13:9
+ |
+LL | let foo::Foo {} = foo::Foo::default();
+ | ^^^^^^^^^^^
+ |
+help: ignore the inaccessible and unused fields
+ |
+LL | let foo::Foo { .. } = foo::Foo::default();
+ | ~~~~~~
+
+error: pattern requires `..` due to inaccessible fields
+ --> $DIR/issue-76077-1.rs:16:9
+ |
+LL | let foo::Bar { visible } = foo::Bar::default();
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+help: ignore the inaccessible and unused fields
+ |
+LL | let foo::Bar { visible, .. } = foo::Bar::default();
+ | ++++
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/issues/issue-76077.rs b/tests/ui/issues/issue-76077.rs
new file mode 100644
index 000000000..2d29093b0
--- /dev/null
+++ b/tests/ui/issues/issue-76077.rs
@@ -0,0 +1,10 @@
+pub mod foo {
+ pub struct Foo {
+ you_cant_use_this_field: bool,
+ }
+}
+
+fn main() {
+ foo::Foo {};
+ //~^ ERROR cannot construct `Foo` with struct literal syntax due to private fields
+}
diff --git a/tests/ui/issues/issue-76077.stderr b/tests/ui/issues/issue-76077.stderr
new file mode 100644
index 000000000..197ca8d5a
--- /dev/null
+++ b/tests/ui/issues/issue-76077.stderr
@@ -0,0 +1,10 @@
+error: cannot construct `Foo` with struct literal syntax due to private fields
+ --> $DIR/issue-76077.rs:8:5
+ |
+LL | foo::Foo {};
+ | ^^^^^^^^
+ |
+ = note: ... and other private field `you_cant_use_this_field` that was not provided
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-76191.rs b/tests/ui/issues/issue-76191.rs
new file mode 100644
index 000000000..d9790d2b5
--- /dev/null
+++ b/tests/ui/issues/issue-76191.rs
@@ -0,0 +1,19 @@
+// Regression test for diagnostic issue #76191
+#![allow(non_snake_case)]
+
+use std::ops::RangeInclusive;
+
+const RANGE: RangeInclusive<i32> = 0..=255;
+
+const RANGE2: RangeInclusive<i32> = panic!();
+
+fn main() {
+ let n: i32 = 1;
+ match n {
+ RANGE => {}
+ //~^ ERROR mismatched types
+ RANGE2 => {}
+ //~^ ERROR mismatched types
+ _ => {}
+ }
+}
diff --git a/tests/ui/issues/issue-76191.stderr b/tests/ui/issues/issue-76191.stderr
new file mode 100644
index 000000000..137498047
--- /dev/null
+++ b/tests/ui/issues/issue-76191.stderr
@@ -0,0 +1,43 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-76191.rs:13:9
+ |
+LL | const RANGE: RangeInclusive<i32> = 0..=255;
+ | -------------------------------- constant defined here
+...
+LL | match n {
+ | - this expression has type `i32`
+LL | RANGE => {}
+ | ^^^^^
+ | |
+ | expected `i32`, found struct `RangeInclusive`
+ | `RANGE` is interpreted as a constant, not a new binding
+ |
+ = note: expected type `i32`
+ found struct `RangeInclusive<i32>`
+help: you may want to move the range into the match block
+ |
+LL | 0..=255 => {}
+ | ~~~~~~~
+
+error[E0308]: mismatched types
+ --> $DIR/issue-76191.rs:15:9
+ |
+LL | const RANGE2: RangeInclusive<i32> = panic!();
+ | --------------------------------- constant defined here
+...
+LL | match n {
+ | - this expression has type `i32`
+...
+LL | RANGE2 => {}
+ | ^^^^^^
+ | |
+ | expected `i32`, found struct `RangeInclusive`
+ | `RANGE2` is interpreted as a constant, not a new binding
+ |
+ = note: expected type `i32`
+ found struct `RangeInclusive<i32>`
+ = note: constants only support matching by type, if you meant to match against a range of values, consider using a range pattern like `min ..= max` in the match block
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-7660.rs b/tests/ui/issues/issue-7660.rs
new file mode 100644
index 000000000..ad0b8ecff
--- /dev/null
+++ b/tests/ui/issues/issue-7660.rs
@@ -0,0 +1,18 @@
+// run-pass
+#![allow(unused_variables)]
+// Regression test for issue 7660
+// rvalue lifetime too short when equivalent `match` works
+
+// pretty-expanded FIXME #23616
+
+use std::collections::HashMap;
+
+struct A(isize, isize);
+
+pub fn main() {
+ let mut m: HashMap<isize, A> = HashMap::new();
+ m.insert(1, A(0, 0));
+
+ let A(ref _a, ref _b) = m[&1];
+ let (a, b) = match m[&1] { A(ref _a, ref _b) => (_a, _b) };
+}
diff --git a/tests/ui/issues/issue-7663.rs b/tests/ui/issues/issue-7663.rs
new file mode 100644
index 000000000..b15e215db
--- /dev/null
+++ b/tests/ui/issues/issue-7663.rs
@@ -0,0 +1,32 @@
+// run-pass
+
+#![allow(unused_imports, dead_code)]
+
+mod test1 {
+
+ mod foo { pub fn p() -> isize { 1 } }
+ mod bar { pub fn p() -> isize { 2 } }
+
+ pub mod baz {
+ use test1::bar::p;
+
+ pub fn my_main() { assert_eq!(p(), 2); }
+ }
+}
+
+mod test2 {
+
+ mod foo { pub fn p() -> isize { 1 } }
+ mod bar { pub fn p() -> isize { 2 } }
+
+ pub mod baz {
+ use test2::bar::p;
+
+ pub fn my_main() { assert_eq!(p(), 2); }
+ }
+}
+
+fn main() {
+ test1::baz::my_main();
+ test2::baz::my_main();
+}
diff --git a/tests/ui/issues/issue-7673-cast-generically-implemented-trait.rs b/tests/ui/issues/issue-7673-cast-generically-implemented-trait.rs
new file mode 100644
index 000000000..c089c3308
--- /dev/null
+++ b/tests/ui/issues/issue-7673-cast-generically-implemented-trait.rs
@@ -0,0 +1,20 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+/*
+
+#7673 Polymorphically creating traits barely works
+
+*/
+
+pub fn main() {}
+
+trait A {
+ fn dummy(&self) { }
+}
+
+impl<T: 'static> A for T {}
+
+fn owned2<T: 'static>(a: Box<T>) { a as Box<dyn A>; }
+fn owned3<T: 'static>(a: Box<T>) { Box::new(a) as Box<dyn A>; }
diff --git a/tests/ui/issues/issue-77218/issue-77218-2.fixed b/tests/ui/issues/issue-77218/issue-77218-2.fixed
new file mode 100644
index 000000000..0e835d49c
--- /dev/null
+++ b/tests/ui/issues/issue-77218/issue-77218-2.fixed
@@ -0,0 +1,6 @@
+// run-rustfix
+fn main() {
+ let value = [7u8];
+ while let Some(0) = value.get(0) { //~ ERROR invalid left-hand side of assignment
+ }
+}
diff --git a/tests/ui/issues/issue-77218/issue-77218-2.rs b/tests/ui/issues/issue-77218/issue-77218-2.rs
new file mode 100644
index 000000000..01dca1ae1
--- /dev/null
+++ b/tests/ui/issues/issue-77218/issue-77218-2.rs
@@ -0,0 +1,6 @@
+// run-rustfix
+fn main() {
+ let value = [7u8];
+ while Some(0) = value.get(0) { //~ ERROR invalid left-hand side of assignment
+ }
+}
diff --git a/tests/ui/issues/issue-77218/issue-77218-2.stderr b/tests/ui/issues/issue-77218/issue-77218-2.stderr
new file mode 100644
index 000000000..58c1c18f9
--- /dev/null
+++ b/tests/ui/issues/issue-77218/issue-77218-2.stderr
@@ -0,0 +1,16 @@
+error[E0070]: invalid left-hand side of assignment
+ --> $DIR/issue-77218-2.rs:4:19
+ |
+LL | while Some(0) = value.get(0) {
+ | - ^
+ | |
+ | cannot assign to this expression
+ |
+help: you might have meant to use pattern destructuring
+ |
+LL | while let Some(0) = value.get(0) {
+ | +++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0070`.
diff --git a/tests/ui/issues/issue-77218/issue-77218.fixed b/tests/ui/issues/issue-77218/issue-77218.fixed
new file mode 100644
index 000000000..4907b43b9
--- /dev/null
+++ b/tests/ui/issues/issue-77218/issue-77218.fixed
@@ -0,0 +1,5 @@
+// run-rustfix
+fn main() {
+ let value = [7u8];
+ while let Some(0) = value.get(0) {} //~ ERROR invalid left-hand side of assignment
+}
diff --git a/tests/ui/issues/issue-77218/issue-77218.rs b/tests/ui/issues/issue-77218/issue-77218.rs
new file mode 100644
index 000000000..0ed154bf4
--- /dev/null
+++ b/tests/ui/issues/issue-77218/issue-77218.rs
@@ -0,0 +1,5 @@
+// run-rustfix
+fn main() {
+ let value = [7u8];
+ while Some(0) = value.get(0) {} //~ ERROR invalid left-hand side of assignment
+}
diff --git a/tests/ui/issues/issue-77218/issue-77218.stderr b/tests/ui/issues/issue-77218/issue-77218.stderr
new file mode 100644
index 000000000..eda635646
--- /dev/null
+++ b/tests/ui/issues/issue-77218/issue-77218.stderr
@@ -0,0 +1,16 @@
+error[E0070]: invalid left-hand side of assignment
+ --> $DIR/issue-77218.rs:4:19
+ |
+LL | while Some(0) = value.get(0) {}
+ | - ^
+ | |
+ | cannot assign to this expression
+ |
+help: you might have meant to use pattern destructuring
+ |
+LL | while let Some(0) = value.get(0) {}
+ | +++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0070`.
diff --git a/tests/ui/issues/issue-7784.rs b/tests/ui/issues/issue-7784.rs
new file mode 100644
index 000000000..b7323f09d
--- /dev/null
+++ b/tests/ui/issues/issue-7784.rs
@@ -0,0 +1,30 @@
+// run-pass
+
+use std::ops::Add;
+
+fn foo<T: Add<Output=T> + Clone>([x, y, z]: [T; 3]) -> (T, T, T) {
+ (x.clone(), x.clone() + y.clone(), x + y + z)
+}
+fn bar(a: &'static str, b: &'static str) -> [&'static str; 4] {
+ [a, b, b, a]
+}
+
+fn main() {
+ assert_eq!(foo([1, 2, 3]), (1, 3, 6));
+
+ let [a, b, c, d] = bar("foo", "bar");
+ assert_eq!(a, "foo");
+ assert_eq!(b, "bar");
+ assert_eq!(c, "bar");
+ assert_eq!(d, "foo");
+
+ let [a, _, _, d] = bar("baz", "foo");
+ assert_eq!(a, "baz");
+ assert_eq!(d, "baz");
+
+ let out = bar("baz", "foo");
+ let [a, xs @ .., d] = out;
+ assert_eq!(a, "baz");
+ assert_eq!(xs, ["foo", "foo"]);
+ assert_eq!(d, "baz");
+}
diff --git a/tests/ui/issues/issue-77919.rs b/tests/ui/issues/issue-77919.rs
new file mode 100644
index 000000000..966d76d14
--- /dev/null
+++ b/tests/ui/issues/issue-77919.rs
@@ -0,0 +1,13 @@
+fn main() {
+ [1; <Multiply<Five, Five>>::VAL];
+}
+trait TypeVal<T> {
+ const VAL: T;
+}
+struct Five;
+struct Multiply<N, M> {
+ _n: PhantomData, //~ ERROR cannot find type `PhantomData` in this scope
+}
+impl<N, M> TypeVal<usize> for Multiply<N, M> where N: TypeVal<VAL> {}
+//~^ ERROR cannot find type `VAL` in this scope
+//~| ERROR not all trait items implemented, missing: `VAL`
diff --git a/tests/ui/issues/issue-77919.stderr b/tests/ui/issues/issue-77919.stderr
new file mode 100644
index 000000000..d154bfe0c
--- /dev/null
+++ b/tests/ui/issues/issue-77919.stderr
@@ -0,0 +1,35 @@
+error[E0412]: cannot find type `PhantomData` in this scope
+ --> $DIR/issue-77919.rs:9:9
+ |
+LL | _n: PhantomData,
+ | ^^^^^^^^^^^ not found in this scope
+ |
+help: consider importing this struct
+ |
+LL | use std::marker::PhantomData;
+ |
+
+error[E0412]: cannot find type `VAL` in this scope
+ --> $DIR/issue-77919.rs:11:63
+ |
+LL | impl<N, M> TypeVal<usize> for Multiply<N, M> where N: TypeVal<VAL> {}
+ | ^^^ not found in this scope
+ |
+help: you might be missing a type parameter
+ |
+LL | impl<N, M, VAL> TypeVal<usize> for Multiply<N, M> where N: TypeVal<VAL> {}
+ | +++++
+
+error[E0046]: not all trait items implemented, missing: `VAL`
+ --> $DIR/issue-77919.rs:11:1
+ |
+LL | const VAL: T;
+ | ------------ `VAL` from trait
+...
+LL | impl<N, M> TypeVal<usize> for Multiply<N, M> where N: TypeVal<VAL> {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `VAL` in implementation
+
+error: aborting due to 3 previous errors
+
+Some errors have detailed explanations: E0046, E0412.
+For more information about an error, try `rustc --explain E0046`.
diff --git a/tests/ui/issues/issue-78115.rs b/tests/ui/issues/issue-78115.rs
new file mode 100644
index 000000000..ac18470c6
--- /dev/null
+++ b/tests/ui/issues/issue-78115.rs
@@ -0,0 +1,19 @@
+// Regression test for issue #78115: "ICE: variable should be placed in scope earlier"
+
+// check-pass
+// edition:2018
+
+#[allow(dead_code)]
+struct Foo {
+ a: ()
+}
+
+async fn _bar() {
+ let foo = Foo { a: () };
+ match foo {
+ Foo { a: _a } | Foo { a: _a } if true => {}
+ _ => {}
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-7813.rs b/tests/ui/issues/issue-7813.rs
new file mode 100644
index 000000000..ce549bde6
--- /dev/null
+++ b/tests/ui/issues/issue-7813.rs
@@ -0,0 +1,4 @@
+fn main() {
+ let v = &[]; //~ ERROR type annotations needed
+ let it = v.iter();
+}
diff --git a/tests/ui/issues/issue-7813.stderr b/tests/ui/issues/issue-7813.stderr
new file mode 100644
index 000000000..2a747f679
--- /dev/null
+++ b/tests/ui/issues/issue-7813.stderr
@@ -0,0 +1,14 @@
+error[E0282]: type annotations needed for `&[_; 0]`
+ --> $DIR/issue-7813.rs:2:9
+ |
+LL | let v = &[];
+ | ^ --- type must be known at this point
+ |
+help: consider giving `v` an explicit type, where the placeholders `_` are specified
+ |
+LL | let v: &[_; 0] = &[];
+ | +++++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-78192.rs b/tests/ui/issues/issue-78192.rs
new file mode 100644
index 000000000..b5c300159
--- /dev/null
+++ b/tests/ui/issues/issue-78192.rs
@@ -0,0 +1,17 @@
+// run-pass
+
+#![allow(unused_assignments)]
+
+fn main() {
+ let a = 1u32;
+ let b = 2u32;
+
+ let mut c: *const u32 = &a;
+ let d: &u32 = &b;
+
+ let x = unsafe { &*c };
+ c = d;
+ let z = *x;
+
+ assert_eq!(1, z);
+}
diff --git a/tests/ui/issues/issue-78622.rs b/tests/ui/issues/issue-78622.rs
new file mode 100644
index 000000000..c00fd2660
--- /dev/null
+++ b/tests/ui/issues/issue-78622.rs
@@ -0,0 +1,7 @@
+#![crate_type = "lib"]
+
+struct S;
+fn f() {
+ S::A::<f> {}
+ //~^ ERROR ambiguous associated type
+}
diff --git a/tests/ui/issues/issue-78622.stderr b/tests/ui/issues/issue-78622.stderr
new file mode 100644
index 000000000..70daf8a2f
--- /dev/null
+++ b/tests/ui/issues/issue-78622.stderr
@@ -0,0 +1,14 @@
+error[E0223]: ambiguous associated type
+ --> $DIR/issue-78622.rs:5:5
+ |
+LL | S::A::<f> {}
+ | ^^^^
+ |
+help: if there were a trait named `Example` with associated type `A` implemented for `S`, you could use the fully-qualified path
+ |
+LL | <S as Example>::A::<f> {}
+ | ~~~~~~~~~~~~~~~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0223`.
diff --git a/tests/ui/issues/issue-7867.rs b/tests/ui/issues/issue-7867.rs
new file mode 100644
index 000000000..3074052f1
--- /dev/null
+++ b/tests/ui/issues/issue-7867.rs
@@ -0,0 +1,14 @@
+enum A { B, C }
+
+mod foo { pub fn bar() {} }
+
+fn main() {
+ match (true, false) {
+ A::B => (),
+ //~^ ERROR mismatched types
+ //~| expected tuple, found enum `A`
+ //~| expected tuple `(bool, bool)`
+ //~| found enum `A`
+ _ => ()
+ }
+}
diff --git a/tests/ui/issues/issue-7867.stderr b/tests/ui/issues/issue-7867.stderr
new file mode 100644
index 000000000..0d3121d60
--- /dev/null
+++ b/tests/ui/issues/issue-7867.stderr
@@ -0,0 +1,17 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-7867.rs:7:9
+ |
+LL | enum A { B, C }
+ | - unit variant defined here
+...
+LL | match (true, false) {
+ | ------------- this expression has type `(bool, bool)`
+LL | A::B => (),
+ | ^^^^ expected tuple, found enum `A`
+ |
+ = note: expected tuple `(bool, bool)`
+ found enum `A`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-78957.rs b/tests/ui/issues/issue-78957.rs
new file mode 100644
index 000000000..567c59fd5
--- /dev/null
+++ b/tests/ui/issues/issue-78957.rs
@@ -0,0 +1,29 @@
+#![deny(unused_attributes)]
+
+use std::marker::PhantomData;
+
+pub struct Foo<#[inline] const N: usize>;
+//~^ ERROR attribute should be applied to function or closure
+pub struct Bar<#[cold] const N: usize>;
+//~^ ERROR attribute should be applied to a function
+//~| WARN this was previously accepted
+pub struct Baz<#[repr(C)] const N: usize>;
+//~^ ERROR attribute should be applied to a struct, enum, or union
+//
+pub struct Foo2<#[inline] 'a>(PhantomData<&'a ()>);
+//~^ ERROR attribute should be applied to function or closure
+pub struct Bar2<#[cold] 'a>(PhantomData<&'a ()>);
+//~^ ERROR attribute should be applied to a function
+//~| WARN this was previously accepted
+pub struct Baz2<#[repr(C)] 'a>(PhantomData<&'a ()>);
+//~^ ERROR attribute should be applied to a struct, enum, or union
+//
+pub struct Foo3<#[inline] T>(PhantomData<T>);
+//~^ ERROR attribute should be applied to function or closure
+pub struct Bar3<#[cold] T>(PhantomData<T>);
+//~^ ERROR attribute should be applied to a function
+//~| WARN this was previously accepted
+pub struct Baz3<#[repr(C)] T>(PhantomData<T>);
+//~^ ERROR attribute should be applied to a struct, enum, or union
+
+fn main() {}
diff --git a/tests/ui/issues/issue-78957.stderr b/tests/ui/issues/issue-78957.stderr
new file mode 100644
index 000000000..6de22d6bf
--- /dev/null
+++ b/tests/ui/issues/issue-78957.stderr
@@ -0,0 +1,69 @@
+error[E0518]: attribute should be applied to function or closure
+ --> $DIR/issue-78957.rs:5:16
+ |
+LL | pub struct Foo<#[inline] const N: usize>;
+ | ^^^^^^^^^ -------------- not a function or closure
+
+error: attribute should be applied to a function definition
+ --> $DIR/issue-78957.rs:7:16
+ |
+LL | pub struct Bar<#[cold] const N: usize>;
+ | ^^^^^^^ -------------- not a function definition
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+note: the lint level is defined here
+ --> $DIR/issue-78957.rs:1:9
+ |
+LL | #![deny(unused_attributes)]
+ | ^^^^^^^^^^^^^^^^^
+
+error[E0517]: attribute should be applied to a struct, enum, or union
+ --> $DIR/issue-78957.rs:10:23
+ |
+LL | pub struct Baz<#[repr(C)] const N: usize>;
+ | ^ -------------- not a struct, enum, or union
+
+error[E0518]: attribute should be applied to function or closure
+ --> $DIR/issue-78957.rs:13:17
+ |
+LL | pub struct Foo2<#[inline] 'a>(PhantomData<&'a ()>);
+ | ^^^^^^^^^ -- not a function or closure
+
+error: attribute should be applied to a function definition
+ --> $DIR/issue-78957.rs:15:17
+ |
+LL | pub struct Bar2<#[cold] 'a>(PhantomData<&'a ()>);
+ | ^^^^^^^ -- not a function definition
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+
+error[E0517]: attribute should be applied to a struct, enum, or union
+ --> $DIR/issue-78957.rs:18:24
+ |
+LL | pub struct Baz2<#[repr(C)] 'a>(PhantomData<&'a ()>);
+ | ^ -- not a struct, enum, or union
+
+error[E0518]: attribute should be applied to function or closure
+ --> $DIR/issue-78957.rs:21:17
+ |
+LL | pub struct Foo3<#[inline] T>(PhantomData<T>);
+ | ^^^^^^^^^ - not a function or closure
+
+error: attribute should be applied to a function definition
+ --> $DIR/issue-78957.rs:23:17
+ |
+LL | pub struct Bar3<#[cold] T>(PhantomData<T>);
+ | ^^^^^^^ - not a function definition
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+
+error[E0517]: attribute should be applied to a struct, enum, or union
+ --> $DIR/issue-78957.rs:26:24
+ |
+LL | pub struct Baz3<#[repr(C)] T>(PhantomData<T>);
+ | ^ - not a struct, enum, or union
+
+error: aborting due to 9 previous errors
+
+Some errors have detailed explanations: E0517, E0518.
+For more information about an error, try `rustc --explain E0517`.
diff --git a/tests/ui/issues/issue-7899.rs b/tests/ui/issues/issue-7899.rs
new file mode 100644
index 000000000..fb631f836
--- /dev/null
+++ b/tests/ui/issues/issue-7899.rs
@@ -0,0 +1,11 @@
+// run-pass
+#![allow(unused_variables)]
+// aux-build:issue-7899.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_7899 as testcrate;
+
+fn main() {
+ let f = testcrate::V2(1.0f32, 2.0f32);
+}
diff --git a/tests/ui/issues/issue-7911.rs b/tests/ui/issues/issue-7911.rs
new file mode 100644
index 000000000..f64887136
--- /dev/null
+++ b/tests/ui/issues/issue-7911.rs
@@ -0,0 +1,37 @@
+// run-pass
+// (Closes #7911) Test that we can use the same self expression
+// with different mutability in macro in two methods
+
+#![allow(unused_variables)] // unused foobar_immut + foobar_mut
+trait FooBar {
+ fn dummy(&self) { }
+}
+struct Bar(#[allow(unused_tuple_struct_fields)] i32);
+struct Foo { bar: Bar }
+
+impl FooBar for Bar {}
+
+trait Test {
+ fn get_immut(&self) -> &dyn FooBar;
+ fn get_mut(&mut self) -> &mut dyn FooBar;
+}
+
+macro_rules! generate_test { ($type_:path, $slf:ident, $field:expr) => (
+ impl Test for $type_ {
+ fn get_immut(&$slf) -> &dyn FooBar {
+ &$field as &dyn FooBar
+ }
+
+ fn get_mut(&mut $slf) -> &mut dyn FooBar {
+ &mut $field as &mut dyn FooBar
+ }
+ }
+)}
+
+generate_test!(Foo, self, self.bar);
+
+pub fn main() {
+ let mut foo: Foo = Foo { bar: Bar(42) };
+ { let foobar_immut = foo.get_immut(); }
+ { let foobar_mut = foo.get_mut(); }
+}
diff --git a/tests/ui/issues/issue-7950.rs b/tests/ui/issues/issue-7950.rs
new file mode 100644
index 000000000..d3dcb3380
--- /dev/null
+++ b/tests/ui/issues/issue-7950.rs
@@ -0,0 +1,8 @@
+// tests the good error message, not "missing module Foo" or something else unexpected
+
+struct Foo;
+
+fn main() {
+ Foo::bar();
+ //~^ ERROR no function or associated item named `bar` found for struct `Foo`
+}
diff --git a/tests/ui/issues/issue-7950.stderr b/tests/ui/issues/issue-7950.stderr
new file mode 100644
index 000000000..b8b0eb310
--- /dev/null
+++ b/tests/ui/issues/issue-7950.stderr
@@ -0,0 +1,12 @@
+error[E0599]: no function or associated item named `bar` found for struct `Foo` in the current scope
+ --> $DIR/issue-7950.rs:6:10
+ |
+LL | struct Foo;
+ | ---------- function or associated item `bar` not found for this struct
+...
+LL | Foo::bar();
+ | ^^^ function or associated item not found in `Foo`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/issues/issue-7970a.rs b/tests/ui/issues/issue-7970a.rs
new file mode 100644
index 000000000..dae906410
--- /dev/null
+++ b/tests/ui/issues/issue-7970a.rs
@@ -0,0 +1,8 @@
+macro_rules! one_arg_macro {
+ ($fmt:expr) => (print!(concat!($fmt, "\n")));
+}
+
+fn main() {
+ one_arg_macro!();
+ //~^ ERROR unexpected end of macro invocation
+}
diff --git a/tests/ui/issues/issue-7970a.stderr b/tests/ui/issues/issue-7970a.stderr
new file mode 100644
index 000000000..b04a0eef3
--- /dev/null
+++ b/tests/ui/issues/issue-7970a.stderr
@@ -0,0 +1,17 @@
+error: unexpected end of macro invocation
+ --> $DIR/issue-7970a.rs:6:5
+ |
+LL | macro_rules! one_arg_macro {
+ | -------------------------- when calling this macro
+...
+LL | one_arg_macro!();
+ | ^^^^^^^^^^^^^^^^ missing tokens in macro arguments
+ |
+note: while trying to match meta-variable `$fmt:expr`
+ --> $DIR/issue-7970a.rs:2:6
+ |
+LL | ($fmt:expr) => (print!(concat!($fmt, "\n")));
+ | ^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/issues/issue-8044.rs b/tests/ui/issues/issue-8044.rs
new file mode 100644
index 000000000..858f98b65
--- /dev/null
+++ b/tests/ui/issues/issue-8044.rs
@@ -0,0 +1,11 @@
+// run-pass
+// aux-build:issue-8044.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_8044 as minimal;
+use minimal::{BTree, leaf};
+
+pub fn main() {
+ BTree::<isize> { node: leaf(1) };
+}
diff --git a/tests/ui/issues/issue-80607.rs b/tests/ui/issues/issue-80607.rs
new file mode 100644
index 000000000..63f4df359
--- /dev/null
+++ b/tests/ui/issues/issue-80607.rs
@@ -0,0 +1,10 @@
+// This tests makes sure the diagnostics print the offending enum variant, not just the type.
+pub enum Enum {
+ V1(i32),
+}
+
+pub fn foo(x: i32) -> Enum {
+ Enum::V1 { x } //~ ERROR `Enum::V1` has no field named `x`
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-80607.stderr b/tests/ui/issues/issue-80607.stderr
new file mode 100644
index 000000000..38e46683b
--- /dev/null
+++ b/tests/ui/issues/issue-80607.stderr
@@ -0,0 +1,17 @@
+error[E0559]: variant `Enum::V1` has no field named `x`
+ --> $DIR/issue-80607.rs:7:16
+ |
+LL | V1(i32),
+ | -- `Enum::V1` defined here
+...
+LL | Enum::V1 { x }
+ | ^ field does not exist
+ |
+help: `Enum::V1` is a tuple variant, use the appropriate syntax
+ |
+LL | Enum::V1(/* fields */)
+ | ~~~~~~~~~~~~~~~~~~~~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0559`.
diff --git a/tests/ui/issues/issue-81584.fixed b/tests/ui/issues/issue-81584.fixed
new file mode 100644
index 000000000..1cad59f10
--- /dev/null
+++ b/tests/ui/issues/issue-81584.fixed
@@ -0,0 +1,8 @@
+// run-rustfix
+fn main() {
+ let _ = vec![vec![0, 1], vec![2]]
+ .into_iter()
+ .map(|y| y.iter().map(|x| x + 1).collect::<Vec<_>>())
+ //~^ ERROR cannot return value referencing function parameter `y`
+ .collect::<Vec<_>>();
+}
diff --git a/tests/ui/issues/issue-81584.rs b/tests/ui/issues/issue-81584.rs
new file mode 100644
index 000000000..452288db0
--- /dev/null
+++ b/tests/ui/issues/issue-81584.rs
@@ -0,0 +1,8 @@
+// run-rustfix
+fn main() {
+ let _ = vec![vec![0, 1], vec![2]]
+ .into_iter()
+ .map(|y| y.iter().map(|x| x + 1))
+ //~^ ERROR cannot return value referencing function parameter `y`
+ .collect::<Vec<_>>();
+}
diff --git a/tests/ui/issues/issue-81584.stderr b/tests/ui/issues/issue-81584.stderr
new file mode 100644
index 000000000..54973cfa3
--- /dev/null
+++ b/tests/ui/issues/issue-81584.stderr
@@ -0,0 +1,14 @@
+error[E0515]: cannot return value referencing function parameter `y`
+ --> $DIR/issue-81584.rs:5:22
+ |
+LL | .map(|y| y.iter().map(|x| x + 1))
+ | --------^^^^^^^^^^^^^^^
+ | |
+ | returns a value referencing data owned by the current function
+ | `y` is borrowed here
+ |
+ = help: use `.collect()` to allocate the iterator
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0515`.
diff --git a/tests/ui/issues/issue-8171-default-method-self-inherit-builtin-trait.rs b/tests/ui/issues/issue-8171-default-method-self-inherit-builtin-trait.rs
new file mode 100644
index 000000000..505e7b84b
--- /dev/null
+++ b/tests/ui/issues/issue-8171-default-method-self-inherit-builtin-trait.rs
@@ -0,0 +1,19 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+/*
+
+#8171 Self is not recognised as implementing kinds in default method implementations
+
+*/
+
+fn require_send<T: Send>(_: T){}
+
+trait TragicallySelfIsNotSend: Send + Sized {
+ fn x(self) {
+ require_send(self);
+ }
+}
+
+pub fn main(){}
diff --git a/tests/ui/issues/issue-81918.rs b/tests/ui/issues/issue-81918.rs
new file mode 100644
index 000000000..8938b8a6f
--- /dev/null
+++ b/tests/ui/issues/issue-81918.rs
@@ -0,0 +1,11 @@
+// check-pass
+// dont-check-compiler-stdout
+// compile-flags: -Z unpretty=mir-cfg
+
+// This checks that unpretty=mir-cfg does not panic. See #81918.
+
+const TAG: &'static str = "ABCD";
+
+fn main() {
+ if TAG == "" {}
+}
diff --git a/tests/ui/issues/issue-8248.rs b/tests/ui/issues/issue-8248.rs
new file mode 100644
index 000000000..31a305c31
--- /dev/null
+++ b/tests/ui/issues/issue-8248.rs
@@ -0,0 +1,15 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+trait A {
+ fn dummy(&self) { }
+}
+struct B;
+impl A for B {}
+
+fn foo(_: &mut dyn A) {}
+
+pub fn main() {
+ let mut b = B;
+ foo(&mut b as &mut dyn A);
+}
diff --git a/tests/ui/issues/issue-8249.rs b/tests/ui/issues/issue-8249.rs
new file mode 100644
index 000000000..d09dff3a6
--- /dev/null
+++ b/tests/ui/issues/issue-8249.rs
@@ -0,0 +1,20 @@
+// run-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+trait A {
+ fn dummy(&self) { }
+}
+struct B;
+impl A for B {}
+
+struct C<'a> {
+ foo: &'a mut (dyn A+'a),
+}
+
+fn foo(a: &mut dyn A) {
+ C{ foo: a };
+}
+
+pub fn main() {
+}
diff --git a/tests/ui/issues/issue-8259.rs b/tests/ui/issues/issue-8259.rs
new file mode 100644
index 000000000..2802bea7f
--- /dev/null
+++ b/tests/ui/issues/issue-8259.rs
@@ -0,0 +1,12 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(non_upper_case_globals)]
+
+// aux-build:issue-8259.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_8259 as other;
+static a: other::Foo<'static> = other::Foo::A;
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-82833-slice-miscompile.rs b/tests/ui/issues/issue-82833-slice-miscompile.rs
new file mode 100644
index 000000000..8cf6a3137
--- /dev/null
+++ b/tests/ui/issues/issue-82833-slice-miscompile.rs
@@ -0,0 +1,16 @@
+// run-pass
+// compile-flags: -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Copt-level=0 -Cdebuginfo=2
+
+// Make sure LLVM does not miscompile this.
+
+fn make_string(ch: char) -> String {
+ let mut bytes = [0u8; 4];
+ ch.encode_utf8(&mut bytes).into()
+}
+
+fn main() {
+ let ch = '😃';
+ dbg!(ch);
+ let string = make_string(ch);
+ dbg!(string);
+}
diff --git a/tests/ui/issues/issue-83048.rs b/tests/ui/issues/issue-83048.rs
new file mode 100644
index 000000000..8e4fb6eae
--- /dev/null
+++ b/tests/ui/issues/issue-83048.rs
@@ -0,0 +1,5 @@
+// compile-flags: -Z unpretty=thir-tree
+
+pub fn main() {
+ break; //~ ERROR: `break` outside of a loop or labeled block [E0268]
+}
diff --git a/tests/ui/issues/issue-83048.stderr b/tests/ui/issues/issue-83048.stderr
new file mode 100644
index 000000000..dade9e469
--- /dev/null
+++ b/tests/ui/issues/issue-83048.stderr
@@ -0,0 +1,9 @@
+error[E0268]: `break` outside of a loop or labeled block
+ --> $DIR/issue-83048.rs:4:5
+ |
+LL | break;
+ | ^^^^^ cannot `break` outside of a loop or labeled block
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0268`.
diff --git a/tests/ui/issues/issue-83190.rs b/tests/ui/issues/issue-83190.rs
new file mode 100644
index 000000000..da931c3ed
--- /dev/null
+++ b/tests/ui/issues/issue-83190.rs
@@ -0,0 +1,49 @@
+// check-pass
+
+// Regression test for issue #83190, triggering an ICE in borrowck.
+
+pub trait Any {}
+impl<T> Any for T {}
+
+pub trait StreamOnce {
+ type Range;
+}
+
+pub trait Parser<Input>: Sized {
+ type Output;
+ type PartialState;
+ fn map(self) -> Map<Self> {
+ todo!()
+ }
+}
+
+pub struct Map<P>(P);
+impl<I, P: Parser<I, Output = ()>> Parser<I> for Map<P> {
+ type Output = ();
+ type PartialState = P::PartialState;
+}
+
+struct TakeWhile1<Input>(Input);
+impl<I: StreamOnce> Parser<I> for TakeWhile1<I> {
+ type Output = I::Range;
+ type PartialState = ();
+}
+impl<I> TakeWhile1<I> {
+ fn new() -> Self {
+ todo!()
+ }
+}
+
+impl<I, A: Parser<I>> Parser<I> for (A,) {
+ type Output = ();
+ type PartialState = Map<A::Output>;
+}
+
+pub fn metric_stream_parser<'a, I>() -> impl Parser<I, Output = (), PartialState = impl Any + 'a>
+where
+ I: StreamOnce<Range = &'a [()]>,
+{
+ (TakeWhile1::new(),).map()
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-8391.rs b/tests/ui/issues/issue-8391.rs
new file mode 100644
index 000000000..1a9036965
--- /dev/null
+++ b/tests/ui/issues/issue-8391.rs
@@ -0,0 +1,9 @@
+// run-pass
+
+fn main() {
+ let x = match Some(1) {
+ ref _y @ Some(_) => 1,
+ None => 2,
+ };
+ assert_eq!(x, 1);
+}
diff --git a/tests/ui/issues/issue-83924.fixed b/tests/ui/issues/issue-83924.fixed
new file mode 100644
index 000000000..aa40da12b
--- /dev/null
+++ b/tests/ui/issues/issue-83924.fixed
@@ -0,0 +1,20 @@
+// run-rustfix
+
+fn main() {
+ let mut values = vec![10, 11, 12];
+ let v = &mut values;
+
+ let mut max = 0;
+
+ for n in &mut *v {
+ max = std::cmp::max(max, *n);
+ }
+
+ println!("max is {}", max);
+ println!("Converting to percentages of maximum value...");
+ for n in v {
+ //~^ ERROR: use of moved value: `v` [E0382]
+ *n = 100 * (*n) / max;
+ }
+ println!("values: {:#?}", values);
+}
diff --git a/tests/ui/issues/issue-83924.rs b/tests/ui/issues/issue-83924.rs
new file mode 100644
index 000000000..22b80fe2f
--- /dev/null
+++ b/tests/ui/issues/issue-83924.rs
@@ -0,0 +1,20 @@
+// run-rustfix
+
+fn main() {
+ let mut values = vec![10, 11, 12];
+ let v = &mut values;
+
+ let mut max = 0;
+
+ for n in v {
+ max = std::cmp::max(max, *n);
+ }
+
+ println!("max is {}", max);
+ println!("Converting to percentages of maximum value...");
+ for n in v {
+ //~^ ERROR: use of moved value: `v` [E0382]
+ *n = 100 * (*n) / max;
+ }
+ println!("values: {:#?}", values);
+}
diff --git a/tests/ui/issues/issue-83924.stderr b/tests/ui/issues/issue-83924.stderr
new file mode 100644
index 000000000..572414df2
--- /dev/null
+++ b/tests/ui/issues/issue-83924.stderr
@@ -0,0 +1,22 @@
+error[E0382]: use of moved value: `v`
+ --> $DIR/issue-83924.rs:15:14
+ |
+LL | let v = &mut values;
+ | - move occurs because `v` has type `&mut Vec<i32>`, which does not implement the `Copy` trait
+...
+LL | for n in v {
+ | - `v` moved due to this implicit call to `.into_iter()`
+...
+LL | for n in v {
+ | ^ value used here after move
+ |
+note: `into_iter` takes ownership of the receiver `self`, which moves `v`
+ --> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
+help: consider creating a fresh reborrow of `v` here
+ |
+LL | for n in &mut *v {
+ | ++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0382`.
diff --git a/tests/ui/issues/issue-8398.rs b/tests/ui/issues/issue-8398.rs
new file mode 100644
index 000000000..0ef39b6a6
--- /dev/null
+++ b/tests/ui/issues/issue-8398.rs
@@ -0,0 +1,13 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+pub trait Writer {
+ fn write(&mut self, b: &[u8]) -> Result<(), ()>;
+}
+
+fn foo(a: &mut dyn Writer) {
+ a.write(&[]).unwrap();
+}
+
+pub fn main(){}
diff --git a/tests/ui/issues/issue-8401.rs b/tests/ui/issues/issue-8401.rs
new file mode 100644
index 000000000..1257bab6c
--- /dev/null
+++ b/tests/ui/issues/issue-8401.rs
@@ -0,0 +1,8 @@
+// run-pass
+// aux-build:issue-8401.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_8401;
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-8498.rs b/tests/ui/issues/issue-8498.rs
new file mode 100644
index 000000000..e6241b761
--- /dev/null
+++ b/tests/ui/issues/issue-8498.rs
@@ -0,0 +1,27 @@
+// run-pass
+
+pub fn main() {
+ match &[(Box::new(5),Box::new(7))] {
+ ps => {
+ let (ref y, _) = ps[0];
+ assert_eq!(**y, 5);
+ }
+ }
+
+ match Some(&[(Box::new(5),)]) {
+ Some(ps) => {
+ let (ref y,) = ps[0];
+ assert_eq!(**y, 5);
+ }
+ None => ()
+ }
+
+ match Some(&[(Box::new(5),Box::new(7))]) {
+ Some(ps) => {
+ let (ref y, ref z) = ps[0];
+ assert_eq!(**y, 5);
+ assert_eq!(**z, 7);
+ }
+ None => ()
+ }
+}
diff --git a/tests/ui/issues/issue-8506.rs b/tests/ui/issues/issue-8506.rs
new file mode 100644
index 000000000..cc32b8923
--- /dev/null
+++ b/tests/ui/issues/issue-8506.rs
@@ -0,0 +1,14 @@
+// run-pass
+// pretty-expanded FIXME #23616
+#![allow(non_upper_case_globals)]
+
+#![allow(dead_code)]
+
+enum Either {
+ One,
+ Other(String,String)
+}
+
+static one : Either = Either::One;
+
+pub fn main () { }
diff --git a/tests/ui/issues/issue-8521.rs b/tests/ui/issues/issue-8521.rs
new file mode 100644
index 000000000..15fbd4465
--- /dev/null
+++ b/tests/ui/issues/issue-8521.rs
@@ -0,0 +1,25 @@
+// check-pass
+trait Foo1 {}
+
+trait A {}
+
+macro_rules! foo1(($t:path) => {
+ impl<T: $t> Foo1 for T {}
+});
+
+foo1!(A);
+
+trait Foo2 {}
+
+trait B<T> {}
+
+#[allow(unused)]
+struct C {}
+
+macro_rules! foo2(($t:path) => {
+ impl<T: $t> Foo2 for T {}
+});
+
+foo2!(B<C>);
+
+fn main() {}
diff --git a/tests/ui/issues/issue-85461.rs b/tests/ui/issues/issue-85461.rs
new file mode 100644
index 000000000..965510887
--- /dev/null
+++ b/tests/ui/issues/issue-85461.rs
@@ -0,0 +1,27 @@
+// compile-flags: -Cinstrument-coverage -Ccodegen-units=4 --crate-type dylib -Copt-level=0
+// build-pass
+// needs-profiler-support
+
+// Regression test for #85461 where MSVC sometimes fails to link instrument-coverage binaries
+// with dead code and #[inline(always)].
+
+#![allow(dead_code)]
+
+mod foo {
+ #[inline(always)]
+ pub fn called() { }
+
+ fn uncalled() { }
+}
+
+pub mod bar {
+ pub fn call_me() {
+ super::foo::called();
+ }
+}
+
+pub mod baz {
+ pub fn call_me() {
+ super::foo::called();
+ }
+}
diff --git a/tests/ui/issues/issue-8578.rs b/tests/ui/issues/issue-8578.rs
new file mode 100644
index 000000000..2346ef5a9
--- /dev/null
+++ b/tests/ui/issues/issue-8578.rs
@@ -0,0 +1,20 @@
+// check-pass
+#![allow(dead_code)]
+#![allow(non_camel_case_types)]
+#![allow(non_upper_case_globals)]
+// pretty-expanded FIXME #23616
+
+pub struct UninterpretedOption_NamePart {
+ name_part: Option<String>,
+}
+
+impl<'a> UninterpretedOption_NamePart {
+ pub fn default_instance() -> &'static UninterpretedOption_NamePart {
+ static instance: UninterpretedOption_NamePart = UninterpretedOption_NamePart {
+ name_part: None,
+ };
+ &instance
+ }
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-86756.rs b/tests/ui/issues/issue-86756.rs
new file mode 100644
index 000000000..7f864eb28
--- /dev/null
+++ b/tests/ui/issues/issue-86756.rs
@@ -0,0 +1,12 @@
+trait Foo<T, T = T> {}
+//~^ ERROR the name `T` is already used for a generic parameter in this item's generic parameters
+
+fn eq<A, B>() {
+ eq::<dyn, Foo>
+ //~^ ERROR cannot find type `dyn` in this scope
+ //~| ERROR missing generics for trait `Foo`
+ //~| WARN trait objects without an explicit `dyn` are deprecated
+ //~| WARN this is accepted in the current edition
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-86756.stderr b/tests/ui/issues/issue-86756.stderr
new file mode 100644
index 000000000..bfa7459ab
--- /dev/null
+++ b/tests/ui/issues/issue-86756.stderr
@@ -0,0 +1,48 @@
+error[E0403]: the name `T` is already used for a generic parameter in this item's generic parameters
+ --> $DIR/issue-86756.rs:1:14
+ |
+LL | trait Foo<T, T = T> {}
+ | - ^ already used
+ | |
+ | first use of `T`
+
+error[E0412]: cannot find type `dyn` in this scope
+ --> $DIR/issue-86756.rs:5:10
+ |
+LL | eq::<dyn, Foo>
+ | ^^^ not found in this scope
+
+warning: trait objects without an explicit `dyn` are deprecated
+ --> $DIR/issue-86756.rs:5:15
+ |
+LL | eq::<dyn, Foo>
+ | ^^^
+ |
+ = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
+ = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
+ = note: `#[warn(bare_trait_objects)]` on by default
+help: use `dyn`
+ |
+LL | eq::<dyn, dyn Foo>
+ | +++
+
+error[E0107]: missing generics for trait `Foo`
+ --> $DIR/issue-86756.rs:5:15
+ |
+LL | eq::<dyn, Foo>
+ | ^^^ expected at least 1 generic argument
+ |
+note: trait defined here, with at least 1 generic parameter: `T`
+ --> $DIR/issue-86756.rs:1:7
+ |
+LL | trait Foo<T, T = T> {}
+ | ^^^ -
+help: add missing generic argument
+ |
+LL | eq::<dyn, Foo<T>>
+ | +++
+
+error: aborting due to 3 previous errors; 1 warning emitted
+
+Some errors have detailed explanations: E0107, E0403, E0412.
+For more information about an error, try `rustc --explain E0107`.
diff --git a/tests/ui/issues/issue-868.rs b/tests/ui/issues/issue-868.rs
new file mode 100644
index 000000000..ce0a3c7ca
--- /dev/null
+++ b/tests/ui/issues/issue-868.rs
@@ -0,0 +1,18 @@
+// run-pass
+#![allow(unused_parens)]
+// pretty-expanded FIXME #23616
+
+fn f<T, F>(g: F) -> T where F: FnOnce() -> T { g() }
+
+pub fn main() {
+ let _x = f( | | { 10 });
+ // used to be: cannot determine a type for this expression
+ f(| | { });
+ // ditto
+ f( | | { ()});
+ // always worked
+ let _: () = f(| | { });
+ // empty block with no type info should compile too
+ let _ = f(||{});
+ let _ = (||{});
+}
diff --git a/tests/ui/issues/issue-87199.rs b/tests/ui/issues/issue-87199.rs
new file mode 100644
index 000000000..a80a64a2f
--- /dev/null
+++ b/tests/ui/issues/issue-87199.rs
@@ -0,0 +1,20 @@
+// Regression test for issue #87199, where attempting to relax a bound
+// other than the only supported `?Sized` would still cause the compiler
+// to assume that the `Sized` bound was relaxed.
+
+// check-fail
+
+// Check that these function definitions only emit warnings, not errors
+fn arg<T: ?Send>(_: T) {}
+//~^ warning: default bound relaxed for a type parameter, but this does nothing
+fn ref_arg<T: ?Send>(_: &T) {}
+//~^ warning: default bound relaxed for a type parameter, but this does nothing
+fn ret() -> impl Iterator<Item = ()> + ?Send { std::iter::empty() }
+//~^ warning: default bound relaxed for a type parameter, but this does nothing
+
+// Check that there's no `?Sized` relaxation!
+fn main() {
+ ref_arg::<i32>(&5);
+ ref_arg::<[i32]>(&[5]);
+ //~^ the size for values of type `[i32]` cannot be known
+}
diff --git a/tests/ui/issues/issue-87199.stderr b/tests/ui/issues/issue-87199.stderr
new file mode 100644
index 000000000..0ec5e73f3
--- /dev/null
+++ b/tests/ui/issues/issue-87199.stderr
@@ -0,0 +1,40 @@
+warning: default bound relaxed for a type parameter, but this does nothing because the given bound is not a default; only `?Sized` is supported
+ --> $DIR/issue-87199.rs:8:8
+ |
+LL | fn arg<T: ?Send>(_: T) {}
+ | ^
+
+warning: default bound relaxed for a type parameter, but this does nothing because the given bound is not a default; only `?Sized` is supported
+ --> $DIR/issue-87199.rs:10:12
+ |
+LL | fn ref_arg<T: ?Send>(_: &T) {}
+ | ^
+
+warning: default bound relaxed for a type parameter, but this does nothing because the given bound is not a default; only `?Sized` is supported
+ --> $DIR/issue-87199.rs:12:13
+ |
+LL | fn ret() -> impl Iterator<Item = ()> + ?Send { std::iter::empty() }
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0277]: the size for values of type `[i32]` cannot be known at compilation time
+ --> $DIR/issue-87199.rs:18:22
+ |
+LL | ref_arg::<[i32]>(&[5]);
+ | ---------------- ^^^^ doesn't have a size known at compile-time
+ | |
+ | required by a bound introduced by this call
+ |
+ = help: the trait `Sized` is not implemented for `[i32]`
+note: required by a bound in `ref_arg`
+ --> $DIR/issue-87199.rs:10:12
+ |
+LL | fn ref_arg<T: ?Send>(_: &T) {}
+ | ^ required by this bound in `ref_arg`
+help: consider relaxing the implicit `Sized` restriction
+ |
+LL | fn ref_arg<T: ?Send + ?Sized>(_: &T) {}
+ | ++++++++
+
+error: aborting due to previous error; 3 warnings emitted
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-8727.polonius.stderr b/tests/ui/issues/issue-8727.polonius.stderr
new file mode 100644
index 000000000..283c01b6b
--- /dev/null
+++ b/tests/ui/issues/issue-8727.polonius.stderr
@@ -0,0 +1,26 @@
+warning: function cannot return without recursing
+ --> $DIR/issue-8727.rs:7:1
+ |
+LL | fn generic<T>() {
+ | ^^^^^^^^^^^^^^^ cannot return without recursing
+LL | generic::<Option<T>>();
+ | ---------------------- recursive call site
+ |
+ = note: `#[warn(unconditional_recursion)]` on by default
+ = help: a `loop` may express intention better if this is on purpose
+
+error: reached the recursion limit while instantiating `generic::<Option<Option<Option<O...>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
+ --> $DIR/issue-8727.rs:8:5
+ |
+LL | generic::<Option<T>>();
+ | ^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: `generic` defined here
+ --> $DIR/issue-8727.rs:7:1
+ |
+LL | fn generic<T>() {
+ | ^^^^^^^^^^^^^^^
+ = note: the full type name has been written to '$TEST_BUILD_DIR/issues/issue-8727.polonius/issue-8727.long-type.txt'
+
+error: aborting due to previous error; 1 warning emitted
+
diff --git a/tests/ui/issues/issue-8727.rs b/tests/ui/issues/issue-8727.rs
new file mode 100644
index 000000000..a9b812661
--- /dev/null
+++ b/tests/ui/issues/issue-8727.rs
@@ -0,0 +1,16 @@
+// Verify the compiler fails with an error on infinite function
+// recursions.
+
+// build-fail
+// normalize-stderr-test: ".nll/" -> "/"
+
+fn generic<T>() { //~ WARN function cannot return without recursing
+ generic::<Option<T>>();
+}
+//~^^ ERROR reached the recursion limit while instantiating `generic::<Option<
+
+
+fn main () {
+ // Use generic<T> at least once to trigger instantiation.
+ generic::<i32>();
+}
diff --git a/tests/ui/issues/issue-8727.stderr b/tests/ui/issues/issue-8727.stderr
new file mode 100644
index 000000000..22332b357
--- /dev/null
+++ b/tests/ui/issues/issue-8727.stderr
@@ -0,0 +1,26 @@
+warning: function cannot return without recursing
+ --> $DIR/issue-8727.rs:7:1
+ |
+LL | fn generic<T>() {
+ | ^^^^^^^^^^^^^^^ cannot return without recursing
+LL | generic::<Option<T>>();
+ | ---------------------- recursive call site
+ |
+ = help: a `loop` may express intention better if this is on purpose
+ = note: `#[warn(unconditional_recursion)]` on by default
+
+error: reached the recursion limit while instantiating `generic::<Option<Option<Option<Option<Option<...>>>>>>`
+ --> $DIR/issue-8727.rs:8:5
+ |
+LL | generic::<Option<T>>();
+ | ^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: `generic` defined here
+ --> $DIR/issue-8727.rs:7:1
+ |
+LL | fn generic<T>() {
+ | ^^^^^^^^^^^^^^^
+ = note: the full type name has been written to '$TEST_BUILD_DIR/issues/issue-8727/issue-8727.long-type.txt'
+
+error: aborting due to previous error; 1 warning emitted
+
diff --git a/tests/ui/issues/issue-87490.rs b/tests/ui/issues/issue-87490.rs
new file mode 100644
index 000000000..998f61a6b
--- /dev/null
+++ b/tests/ui/issues/issue-87490.rs
@@ -0,0 +1,10 @@
+fn main() {}
+trait StreamOnce {
+ type Position;
+}
+impl StreamOnce for &str {
+ type Position = usize;
+}
+fn follow(_: &str) -> <&str as StreamOnce>::Position {
+ String::new //~ ERROR mismatched types
+}
diff --git a/tests/ui/issues/issue-87490.stderr b/tests/ui/issues/issue-87490.stderr
new file mode 100644
index 000000000..f359dd638
--- /dev/null
+++ b/tests/ui/issues/issue-87490.stderr
@@ -0,0 +1,14 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-87490.rs:9:5
+ |
+LL | fn follow(_: &str) -> <&str as StreamOnce>::Position {
+ | ------------------------------ expected `usize` because of return type
+LL | String::new
+ | ^^^^^^^^^^^ expected `usize`, found fn item
+ |
+ = note: expected type `usize`
+ found fn item `fn() -> String {String::new}`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-8761.rs b/tests/ui/issues/issue-8761.rs
new file mode 100644
index 000000000..1453c3d75
--- /dev/null
+++ b/tests/ui/issues/issue-8761.rs
@@ -0,0 +1,10 @@
+enum Foo {
+ A = 1i64,
+ //~^ ERROR mismatched types
+ //~| expected `isize`, found `i64`
+ B = 2u8
+ //~^ ERROR mismatched types
+ //~| expected `isize`, found `u8`
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-8761.stderr b/tests/ui/issues/issue-8761.stderr
new file mode 100644
index 000000000..c70093baf
--- /dev/null
+++ b/tests/ui/issues/issue-8761.stderr
@@ -0,0 +1,25 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-8761.rs:2:9
+ |
+LL | A = 1i64,
+ | ^^^^ expected `isize`, found `i64`
+ |
+help: change the type of the numeric literal from `i64` to `isize`
+ |
+LL | A = 1isize,
+ | ~~~~~
+
+error[E0308]: mismatched types
+ --> $DIR/issue-8761.rs:5:9
+ |
+LL | B = 2u8
+ | ^^^ expected `isize`, found `u8`
+ |
+help: change the type of the numeric literal from `u8` to `isize`
+ |
+LL | B = 2isize
+ | ~~~~~
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-8767.rs b/tests/ui/issues/issue-8767.rs
new file mode 100644
index 000000000..972101a0b
--- /dev/null
+++ b/tests/ui/issues/issue-8767.rs
@@ -0,0 +1,5 @@
+impl B { //~ ERROR cannot find type `B` in this scope
+}
+
+fn main() {
+}
diff --git a/tests/ui/issues/issue-8767.stderr b/tests/ui/issues/issue-8767.stderr
new file mode 100644
index 000000000..91d99f393
--- /dev/null
+++ b/tests/ui/issues/issue-8767.stderr
@@ -0,0 +1,9 @@
+error[E0412]: cannot find type `B` in this scope
+ --> $DIR/issue-8767.rs:1:6
+ |
+LL | impl B {
+ | ^ not found in this scope
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0412`.
diff --git a/tests/ui/issues/issue-87707.rs b/tests/ui/issues/issue-87707.rs
new file mode 100644
index 000000000..c14e52dfe
--- /dev/null
+++ b/tests/ui/issues/issue-87707.rs
@@ -0,0 +1,17 @@
+// test for #87707
+// edition:2018
+// run-fail
+// exec-env:RUST_BACKTRACE=0
+// check-run-results
+// needs-unwind uses catch_unwind
+
+use std::sync::Once;
+use std::panic;
+
+fn main() {
+ let o = Once::new();
+ let _ = panic::catch_unwind(|| {
+ o.call_once(|| panic!("Here Once instance is poisoned."));
+ });
+ o.call_once(|| {});
+}
diff --git a/tests/ui/issues/issue-87707.run.stderr b/tests/ui/issues/issue-87707.run.stderr
new file mode 100644
index 000000000..527c78ba8
--- /dev/null
+++ b/tests/ui/issues/issue-87707.run.stderr
@@ -0,0 +1,3 @@
+thread 'main' panicked at 'Here Once instance is poisoned.', $DIR/issue-87707.rs:14:24
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+thread 'main' panicked at 'Once instance has previously been poisoned', $DIR/issue-87707.rs:16:7
diff --git a/tests/ui/issues/issue-8783.rs b/tests/ui/issues/issue-8783.rs
new file mode 100644
index 000000000..4eb49c821
--- /dev/null
+++ b/tests/ui/issues/issue-8783.rs
@@ -0,0 +1,24 @@
+// run-pass
+#![allow(unused_variables)]
+// pretty-expanded FIXME #23616
+
+use std::default::Default;
+
+struct X { pub x: usize }
+impl Default for X {
+ fn default() -> X {
+ X { x: 42 }
+ }
+}
+
+struct Y<T> { pub y: T }
+impl<T: Default> Default for Y<T> {
+ fn default() -> Y<T> {
+ Y { y: Default::default() }
+ }
+}
+
+fn main() {
+ let X { x: _ } = Default::default();
+ let Y { y: X { x } } = Default::default();
+}
diff --git a/tests/ui/issues/issue-88150.rs b/tests/ui/issues/issue-88150.rs
new file mode 100644
index 000000000..555a38637
--- /dev/null
+++ b/tests/ui/issues/issue-88150.rs
@@ -0,0 +1,21 @@
+// run-pass
+// compile-flags:-C debuginfo=2
+// edition:2018
+
+use core::marker::PhantomData;
+
+pub struct Foo<T: ?Sized, A>(
+ PhantomData<(A, T)>,
+);
+
+enum Never {}
+
+impl<T: ?Sized> Foo<T, Never> {
+ fn new_foo() -> Foo<T, Never> {
+ Foo(PhantomData)
+ }
+}
+
+fn main() {
+ let _ = Foo::<[()], Never>::new_foo();
+}
diff --git a/tests/ui/issues/issue-8860.rs b/tests/ui/issues/issue-8860.rs
new file mode 100644
index 000000000..b89a80c13
--- /dev/null
+++ b/tests/ui/issues/issue-8860.rs
@@ -0,0 +1,49 @@
+// run-pass
+#![allow(dead_code)]
+
+static mut DROP: isize = 0;
+static mut DROP_S: isize = 0;
+static mut DROP_T: isize = 0;
+
+struct S;
+impl Drop for S {
+ fn drop(&mut self) {
+ unsafe {
+ DROP_S += 1;
+ DROP += 1;
+ }
+ }
+}
+fn f(ref _s: S) {}
+
+struct T { i: isize }
+impl Drop for T {
+ fn drop(&mut self) {
+ unsafe {
+ DROP_T += 1;
+ DROP += 1;
+ }
+ }
+}
+fn g(ref _t: T) {}
+
+fn do_test() {
+ let s = S;
+ f(s);
+ unsafe {
+ assert_eq!(1, DROP);
+ assert_eq!(1, DROP_S);
+ }
+ let t = T { i: 1 };
+ g(t);
+ unsafe { assert_eq!(1, DROP_T); }
+}
+
+fn main() {
+ do_test();
+ unsafe {
+ assert_eq!(2, DROP);
+ assert_eq!(1, DROP_S);
+ assert_eq!(1, DROP_T);
+ }
+}
diff --git a/tests/ui/issues/issue-8898.rs b/tests/ui/issues/issue-8898.rs
new file mode 100644
index 000000000..31d5ff86e
--- /dev/null
+++ b/tests/ui/issues/issue-8898.rs
@@ -0,0 +1,18 @@
+// run-pass
+
+fn assert_repr_eq<T: std::fmt::Debug>(obj : T, expected : String) {
+ assert_eq!(expected, format!("{:?}", obj));
+}
+
+pub fn main() {
+ let abc = [1, 2, 3];
+ let tf = [true, false];
+ let x = [(), ()];
+ let slice = &x[..1];
+
+ assert_repr_eq(&abc[..], "[1, 2, 3]".to_string());
+ assert_repr_eq(&tf[..], "[true, false]".to_string());
+ assert_repr_eq(&x[..], "[(), ()]".to_string());
+ assert_repr_eq(slice, "[()]".to_string());
+ assert_repr_eq(&x[..], "[(), ()]".to_string());
+}
diff --git a/tests/ui/issues/issue-9047.rs b/tests/ui/issues/issue-9047.rs
new file mode 100644
index 000000000..fa8d75aec
--- /dev/null
+++ b/tests/ui/issues/issue-9047.rs
@@ -0,0 +1,14 @@
+// run-pass
+#![allow(unused_mut)]
+#![allow(unused_variables)]
+fn decode() -> String {
+ 'outer: loop {
+ let mut ch_start: usize;
+ break 'outer;
+ }
+ "".to_string()
+}
+
+pub fn main() {
+ println!("{}", decode());
+}
diff --git a/tests/ui/issues/issue-9110.rs b/tests/ui/issues/issue-9110.rs
new file mode 100644
index 000000000..cbf3c92d0
--- /dev/null
+++ b/tests/ui/issues/issue-9110.rs
@@ -0,0 +1,17 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+#![allow(non_snake_case)]
+
+macro_rules! silly_macro {
+ () => (
+ pub mod Qux {
+ pub struct Foo { x : u8 }
+ pub fn bar(_foo : Foo) {}
+ }
+ );
+}
+
+silly_macro!();
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-9123.rs b/tests/ui/issues/issue-9123.rs
new file mode 100644
index 000000000..8c21d06c4
--- /dev/null
+++ b/tests/ui/issues/issue-9123.rs
@@ -0,0 +1,8 @@
+// run-pass
+// aux-build:issue-9123.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_9123;
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-9129.rs b/tests/ui/issues/issue-9129.rs
new file mode 100644
index 000000000..04110b3ae
--- /dev/null
+++ b/tests/ui/issues/issue-9129.rs
@@ -0,0 +1,32 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(non_camel_case_types)]
+#![allow(non_snake_case)]
+// ignore-pretty unreported
+
+pub trait bomb { fn boom(&self, _: Ident); }
+pub struct S;
+impl bomb for S { fn boom(&self, _: Ident) { } }
+
+pub struct Ident { name: usize }
+
+macro_rules! int3 { () => ( { } ) }
+
+fn Ident_new() -> Ident {
+ int3!();
+ Ident {name: 0x6789ABCD }
+}
+
+pub fn light_fuse(fld: Box<dyn bomb>) {
+ int3!();
+ let f = || {
+ int3!();
+ fld.boom(Ident_new()); // *** 1
+ };
+ f();
+}
+
+pub fn main() {
+ let b = Box::new(S) as Box<dyn bomb>;
+ light_fuse(b);
+}
diff --git a/tests/ui/issues/issue-91489.rs b/tests/ui/issues/issue-91489.rs
new file mode 100644
index 000000000..f028a4a3c
--- /dev/null
+++ b/tests/ui/issues/issue-91489.rs
@@ -0,0 +1,40 @@
+// check-pass
+
+// regression test for #91489
+
+use std::borrow::Borrow;
+use std::borrow::Cow;
+
+pub struct VariantType {}
+pub struct VariantTy {}
+
+impl Borrow<VariantTy> for VariantType {
+ fn borrow(&self) -> &VariantTy {
+ unimplemented!()
+ }
+}
+
+impl ToOwned for VariantTy {
+ type Owned = VariantType;
+ fn to_owned(&self) -> VariantType {
+ unimplemented!()
+ }
+}
+
+impl VariantTy {
+ pub fn as_str(&self) -> () {}
+}
+
+// the presence of this was causing all attempts to call `as_str` on
+// `Cow<'_, VariantTy>, including in itself, to not find the method
+static _TYP: () = {
+ let _ = || {
+ // should be found
+ Cow::Borrowed(&VariantTy {}).as_str();
+ };
+};
+
+fn main() {
+ // should be found
+ Cow::Borrowed(&VariantTy {}).as_str()
+}
diff --git a/tests/ui/issues/issue-9155.rs b/tests/ui/issues/issue-9155.rs
new file mode 100644
index 000000000..4b5c451e8
--- /dev/null
+++ b/tests/ui/issues/issue-9155.rs
@@ -0,0 +1,12 @@
+// run-pass
+// aux-build:issue-9155.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_9155;
+
+struct Baz;
+
+pub fn main() {
+ issue_9155::Foo::new(Baz);
+}
diff --git a/tests/ui/issues/issue-9188.rs b/tests/ui/issues/issue-9188.rs
new file mode 100644
index 000000000..34e61fdf6
--- /dev/null
+++ b/tests/ui/issues/issue-9188.rs
@@ -0,0 +1,11 @@
+// run-pass
+// aux-build:issue-9188.rs
+
+
+extern crate issue_9188;
+
+pub fn main() {
+ let a = issue_9188::bar();
+ let b = issue_9188::foo::<isize>();
+ assert_eq!(*a, *b);
+}
diff --git a/tests/ui/issues/issue-9243.rs b/tests/ui/issues/issue-9243.rs
new file mode 100644
index 000000000..59fdb4662
--- /dev/null
+++ b/tests/ui/issues/issue-9243.rs
@@ -0,0 +1,16 @@
+// build-pass
+#![allow(dead_code)]
+// Regression test for issue 9243
+#![allow(non_upper_case_globals)]
+
+pub struct Test {
+ mem: isize,
+}
+
+pub static g_test: Test = Test {mem: 0};
+
+impl Drop for Test {
+ fn drop(&mut self) {}
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-9249.rs b/tests/ui/issues/issue-9249.rs
new file mode 100644
index 000000000..caaba668a
--- /dev/null
+++ b/tests/ui/issues/issue-9249.rs
@@ -0,0 +1,6 @@
+// check-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+static DATA:&'static [&'static str] = &["my string"];
+fn main() { }
diff --git a/tests/ui/issues/issue-9259.rs b/tests/ui/issues/issue-9259.rs
new file mode 100644
index 000000000..d838edbdd
--- /dev/null
+++ b/tests/ui/issues/issue-9259.rs
@@ -0,0 +1,16 @@
+// run-pass
+#![allow(dead_code)]
+
+struct A<'a> {
+ a: &'a [String],
+ b: Option<&'a [String]>,
+}
+
+pub fn main() {
+ let b: &[String] = &["foo".to_string()];
+ let a = A {
+ a: &["test".to_string()],
+ b: Some(b),
+ };
+ assert_eq!(a.b.as_ref().unwrap()[0], "foo");
+}
diff --git a/tests/ui/issues/issue-9382.rs b/tests/ui/issues/issue-9382.rs
new file mode 100644
index 000000000..65718343f
--- /dev/null
+++ b/tests/ui/issues/issue-9382.rs
@@ -0,0 +1,40 @@
+// pretty-expanded FIXME #23616
+
+
+// run-pass
+#![allow(dead_code)]
+
+// Tests for a previous bug that occurred due to an interaction
+// between struct field initialization and the auto-coercion
+// from a vector to a slice. The drop glue was being invoked on
+// the temporary slice with a wrong type, triggering an LLVM assert.
+
+
+struct Thing1<'a> {
+ baz: &'a [Box<isize>],
+ bar: Box<u64>,
+}
+
+struct Thing2<'a> {
+ baz: &'a [Box<isize>],
+ bar: u64,
+}
+
+pub fn main() {
+ let _t1_fixed = Thing1 {
+ baz: &[],
+ bar: Box::new(32),
+ };
+ Thing1 {
+ baz: &Vec::new(),
+ bar: Box::new(32),
+ };
+ let _t2_fixed = Thing2 {
+ baz: &[],
+ bar: 32,
+ };
+ Thing2 {
+ baz: &Vec::new(),
+ bar: 32,
+ };
+}
diff --git a/tests/ui/issues/issue-9446.rs b/tests/ui/issues/issue-9446.rs
new file mode 100644
index 000000000..e200840d2
--- /dev/null
+++ b/tests/ui/issues/issue-9446.rs
@@ -0,0 +1,30 @@
+// run-pass
+struct Wrapper(String);
+
+impl Wrapper {
+ pub fn new(wrapped: String) -> Wrapper {
+ Wrapper(wrapped)
+ }
+
+ pub fn say_hi(&self) {
+ let Wrapper(ref s) = *self;
+ println!("hello {}", *s);
+ }
+}
+
+impl Drop for Wrapper {
+ fn drop(&mut self) {}
+}
+
+pub fn main() {
+ {
+ // This runs without complaint.
+ let x = Wrapper::new("Bob".to_string());
+ x.say_hi();
+ }
+ {
+ // This fails to compile, circa 0.8-89-gc635fba.
+ // error: internal compiler error: drop_ty_immediate: non-box ty
+ Wrapper::new("Bob".to_string()).say_hi();
+ }
+}
diff --git a/tests/ui/issues/issue-948.rs b/tests/ui/issues/issue-948.rs
new file mode 100644
index 000000000..b9bbeb395
--- /dev/null
+++ b/tests/ui/issues/issue-948.rs
@@ -0,0 +1,15 @@
+// run-fail
+// error-pattern:beep boop
+// ignore-emscripten no processes
+
+#![allow(unused_variables)]
+
+struct Point {
+ x: isize,
+ y: isize,
+}
+
+fn main() {
+ let origin = Point { x: 0, y: 0 };
+ let f: Point = Point { x: (panic!("beep boop")), ..origin };
+}
diff --git a/tests/ui/issues/issue-9575.rs b/tests/ui/issues/issue-9575.rs
new file mode 100644
index 000000000..06b252990
--- /dev/null
+++ b/tests/ui/issues/issue-9575.rs
@@ -0,0 +1,7 @@
+#![feature(start)]
+
+#[start]
+fn start(argc: isize, argv: *const *const u8, crate_map: *const u8) -> isize {
+ //~^ `#[start]` function has wrong type
+ 0
+}
diff --git a/tests/ui/issues/issue-9575.stderr b/tests/ui/issues/issue-9575.stderr
new file mode 100644
index 000000000..5b8ce84a0
--- /dev/null
+++ b/tests/ui/issues/issue-9575.stderr
@@ -0,0 +1,12 @@
+error[E0308]: `#[start]` function has wrong type
+ --> $DIR/issue-9575.rs:4:1
+ |
+LL | fn start(argc: isize, argv: *const *const u8, crate_map: *const u8) -> isize {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ incorrect number of function parameters
+ |
+ = note: expected fn pointer `fn(isize, *const *const u8) -> _`
+ found fn pointer `fn(isize, *const *const u8, *const u8) -> _`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-9719.rs b/tests/ui/issues/issue-9719.rs
new file mode 100644
index 000000000..e8c3c9c19
--- /dev/null
+++ b/tests/ui/issues/issue-9719.rs
@@ -0,0 +1,41 @@
+// build-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+mod a {
+ pub enum Enum<T> {
+ A(T),
+ }
+
+ pub trait X {
+ fn dummy(&self) { }
+ }
+ impl X for isize {}
+
+ pub struct Z<'a>(Enum<&'a (dyn X + 'a)>);
+ fn foo() { let x: isize = 42; let z = Z(Enum::A(&x as &dyn X)); let _ = z; }
+}
+
+mod b {
+ trait X {
+ fn dummy(&self) { }
+ }
+ impl X for isize {}
+ struct Y<'a>{
+ x:Option<&'a (dyn X + 'a)>,
+ }
+
+ fn bar() {
+ let x: isize = 42;
+ let _y = Y { x: Some(&x as &dyn X) };
+ }
+}
+
+mod c {
+ pub trait X { fn f(&self); }
+ impl X for isize { fn f(&self) {} }
+ pub struct Z<'a>(Option<&'a (dyn X + 'a)>);
+ fn main() { let x: isize = 42; let z = Z(Some(&x as &dyn X)); let _ = z; }
+}
+
+pub fn main() {}
diff --git a/tests/ui/issues/issue-9725.rs b/tests/ui/issues/issue-9725.rs
new file mode 100644
index 000000000..360effbd1
--- /dev/null
+++ b/tests/ui/issues/issue-9725.rs
@@ -0,0 +1,7 @@
+struct A { foo: isize }
+
+fn main() {
+ let A { foo, foo } = A { foo: 3 };
+ //~^ ERROR: identifier `foo` is bound more than once in the same pattern
+ //~^^ ERROR: field `foo` bound multiple times
+}
diff --git a/tests/ui/issues/issue-9725.stderr b/tests/ui/issues/issue-9725.stderr
new file mode 100644
index 000000000..687e0cc0f
--- /dev/null
+++ b/tests/ui/issues/issue-9725.stderr
@@ -0,0 +1,18 @@
+error[E0416]: identifier `foo` is bound more than once in the same pattern
+ --> $DIR/issue-9725.rs:4:18
+ |
+LL | let A { foo, foo } = A { foo: 3 };
+ | ^^^ used in a pattern more than once
+
+error[E0025]: field `foo` bound multiple times in the pattern
+ --> $DIR/issue-9725.rs:4:18
+ |
+LL | let A { foo, foo } = A { foo: 3 };
+ | --- ^^^ multiple uses of `foo` in pattern
+ | |
+ | first use of `foo`
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0025, E0416.
+For more information about an error, try `rustc --explain E0025`.
diff --git a/tests/ui/issues/issue-9737.rs b/tests/ui/issues/issue-9737.rs
new file mode 100644
index 000000000..7d3e05678
--- /dev/null
+++ b/tests/ui/issues/issue-9737.rs
@@ -0,0 +1,10 @@
+// run-pass
+#![allow(unused_variables)]
+macro_rules! f {
+ (v: $x:expr) => ( println!("{}", $x) )
+}
+
+fn main () {
+ let v = 5;
+ f!(v: 3);
+}
diff --git a/tests/ui/issues/issue-979.rs b/tests/ui/issues/issue-979.rs
new file mode 100644
index 000000000..57a99b325
--- /dev/null
+++ b/tests/ui/issues/issue-979.rs
@@ -0,0 +1,29 @@
+// run-pass
+#![allow(non_camel_case_types)]
+
+use std::cell::Cell;
+
+struct r<'a> {
+ b: &'a Cell<isize>,
+}
+
+impl<'a> Drop for r<'a> {
+ fn drop(&mut self) {
+ self.b.set(self.b.get() + 1);
+ }
+}
+
+fn r(b: &Cell<isize>) -> r {
+ r {
+ b: b
+ }
+}
+
+pub fn main() {
+ let b = &Cell::new(0);
+ {
+ let _p = Some(r(b));
+ }
+
+ assert_eq!(b.get(), 1);
+}
diff --git a/tests/ui/issues/issue-9814.rs b/tests/ui/issues/issue-9814.rs
new file mode 100644
index 000000000..a87478e22
--- /dev/null
+++ b/tests/ui/issues/issue-9814.rs
@@ -0,0 +1,8 @@
+// Verify that single-variant enums can't be de-referenced
+// Regression test for issue #9814
+
+enum Foo { Bar(isize) }
+
+fn main() {
+ let _ = *Foo::Bar(2); //~ ERROR type `Foo` cannot be dereferenced
+}
diff --git a/tests/ui/issues/issue-9814.stderr b/tests/ui/issues/issue-9814.stderr
new file mode 100644
index 000000000..bd9e7df49
--- /dev/null
+++ b/tests/ui/issues/issue-9814.stderr
@@ -0,0 +1,9 @@
+error[E0614]: type `Foo` cannot be dereferenced
+ --> $DIR/issue-9814.rs:7:13
+ |
+LL | let _ = *Foo::Bar(2);
+ | ^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0614`.
diff --git a/tests/ui/issues/issue-98299.rs b/tests/ui/issues/issue-98299.rs
new file mode 100644
index 000000000..63c058f91
--- /dev/null
+++ b/tests/ui/issues/issue-98299.rs
@@ -0,0 +1,18 @@
+use std::convert::TryFrom;
+
+pub fn test_usage(p: ()) {
+ SmallCString::try_from(p).map(|cstr| cstr);
+ //~^ ERROR: type annotations needed
+}
+
+pub struct SmallCString<const N: usize> {}
+
+impl<const N: usize> TryFrom<()> for SmallCString<N> {
+ type Error = ();
+
+ fn try_from(path: ()) -> Result<Self, Self::Error> {
+ unimplemented!();
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/issues/issue-98299.stderr b/tests/ui/issues/issue-98299.stderr
new file mode 100644
index 000000000..fd905392a
--- /dev/null
+++ b/tests/ui/issues/issue-98299.stderr
@@ -0,0 +1,14 @@
+error[E0282]: type annotations needed for `SmallCString<N>`
+ --> $DIR/issue-98299.rs:4:36
+ |
+LL | SmallCString::try_from(p).map(|cstr| cstr);
+ | ^^^^
+ |
+help: consider giving this closure parameter an explicit type, where the the value of const parameter `N` is specified
+ |
+LL | SmallCString::try_from(p).map(|cstr: SmallCString<N>| cstr);
+ | +++++++++++++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/issues/issue-9837.rs b/tests/ui/issues/issue-9837.rs
new file mode 100644
index 000000000..5d2c822a5
--- /dev/null
+++ b/tests/ui/issues/issue-9837.rs
@@ -0,0 +1,11 @@
+// run-pass
+const C1: i32 = 0x12345678;
+const C2: isize = C1 as i16 as isize;
+
+enum E {
+ V = C2
+}
+
+fn main() {
+ assert_eq!(C2 as u64, E::V as u64);
+}
diff --git a/tests/ui/issues/issue-9906.rs b/tests/ui/issues/issue-9906.rs
new file mode 100644
index 000000000..a2870cf0f
--- /dev/null
+++ b/tests/ui/issues/issue-9906.rs
@@ -0,0 +1,11 @@
+// run-pass
+// aux-build:issue-9906.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_9906 as testmod;
+
+pub fn main() {
+ testmod::foo();
+ testmod::FooBar::new(1);
+}
diff --git a/tests/ui/issues/issue-9918.rs b/tests/ui/issues/issue-9918.rs
new file mode 100644
index 000000000..63ad7040d
--- /dev/null
+++ b/tests/ui/issues/issue-9918.rs
@@ -0,0 +1,5 @@
+// run-pass
+
+pub fn main() {
+ assert_eq!((0 + 0u8) as char, '\0');
+}
diff --git a/tests/ui/issues/issue-9942.rs b/tests/ui/issues/issue-9942.rs
new file mode 100644
index 000000000..f48804465
--- /dev/null
+++ b/tests/ui/issues/issue-9942.rs
@@ -0,0 +1,6 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+pub fn main() {
+ const S: usize = 23 as usize; [0; S]; ()
+}
diff --git a/tests/ui/issues/issue-9951.rs b/tests/ui/issues/issue-9951.rs
new file mode 100644
index 000000000..2698a3b17
--- /dev/null
+++ b/tests/ui/issues/issue-9951.rs
@@ -0,0 +1,21 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+#![allow(unused_variables)]
+
+trait Bar {
+ fn noop(&self);
+}
+impl Bar for u8 {
+ fn noop(&self) {}
+}
+
+fn main() {
+ let (a, b) = (&5u8 as &dyn Bar, &9u8 as &dyn Bar);
+ let (c, d): (&dyn Bar, &dyn Bar) = (a, b);
+
+ let (a, b) = (Box::new(5u8) as Box<dyn Bar>, Box::new(9u8) as Box<dyn Bar>);
+ let (c, d): (&dyn Bar, &dyn Bar) = (&*a, &*b);
+
+ let (c, d): (&dyn Bar, &dyn Bar) = (&5, &9);
+}
diff --git a/tests/ui/issues/issue-9968.rs b/tests/ui/issues/issue-9968.rs
new file mode 100644
index 000000000..3ab90d99a
--- /dev/null
+++ b/tests/ui/issues/issue-9968.rs
@@ -0,0 +1,13 @@
+// run-pass
+// aux-build:issue-9968.rs
+
+// pretty-expanded FIXME #23616
+
+extern crate issue_9968 as lib;
+
+use lib::{Trait, Struct};
+
+pub fn main()
+{
+ Struct::init().test();
+}
diff --git a/tests/ui/issues/issue-99838.rs b/tests/ui/issues/issue-99838.rs
new file mode 100644
index 000000000..2e81d5e82
--- /dev/null
+++ b/tests/ui/issues/issue-99838.rs
@@ -0,0 +1,40 @@
+// run-pass
+
+use std::hint;
+
+struct U16(u16);
+
+impl Drop for U16 {
+ fn drop(&mut self) {
+ // Prevent LLVM from optimizing away our alignment check.
+ assert!(hint::black_box(self as *mut U16 as usize) % 2 == 0);
+ }
+}
+
+struct HasDrop;
+
+impl Drop for HasDrop {
+ fn drop(&mut self) {}
+}
+
+struct Wrapper {
+ _a: U16,
+ b: HasDrop,
+}
+
+#[repr(packed)]
+struct Misalign(u8, Wrapper);
+
+fn main() {
+ let m = Misalign(
+ 0,
+ Wrapper {
+ _a: U16(10),
+ b: HasDrop,
+ },
+ );
+ // Put it somewhere definitely even (so the `a` field is definitely at an odd address).
+ let m: ([u16; 0], Misalign) = ([], m);
+ // Move out one field, so we run custom per-field drop logic below.
+ let _x = m.1.1.b;
+}
diff --git a/tests/ui/issues/issue-pr29383.rs b/tests/ui/issues/issue-pr29383.rs
new file mode 100644
index 000000000..2bcc0aa27
--- /dev/null
+++ b/tests/ui/issues/issue-pr29383.rs
@@ -0,0 +1,14 @@
+enum E {
+ A,
+ B,
+}
+
+fn main() {
+ match None {
+ None => {}
+ Some(E::A(..)) => {}
+ //~^ ERROR expected tuple struct or tuple variant, found unit variant `E::A`
+ Some(E::B(..)) => {}
+ //~^ ERROR expected tuple struct or tuple variant, found unit variant `E::B`
+ }
+}
diff --git a/tests/ui/issues/issue-pr29383.stderr b/tests/ui/issues/issue-pr29383.stderr
new file mode 100644
index 000000000..57783d75b
--- /dev/null
+++ b/tests/ui/issues/issue-pr29383.stderr
@@ -0,0 +1,21 @@
+error[E0532]: expected tuple struct or tuple variant, found unit variant `E::A`
+ --> $DIR/issue-pr29383.rs:9:14
+ |
+LL | A,
+ | - `E::A` defined here
+...
+LL | Some(E::A(..)) => {}
+ | ^^^^^^^^ help: use this syntax instead: `E::A`
+
+error[E0532]: expected tuple struct or tuple variant, found unit variant `E::B`
+ --> $DIR/issue-pr29383.rs:11:14
+ |
+LL | B,
+ | - `E::B` defined here
+...
+LL | Some(E::B(..)) => {}
+ | ^^^^^^^^ help: use this syntax instead: `E::B`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0532`.