diff options
-rw-r--r-- | main/gcc/APKBUILD | 14 | ||||
-rw-r--r-- | main/gcc/gcc-6-20160721.patch | 54444 |
2 files changed, 5 insertions, 54453 deletions
diff --git a/main/gcc/APKBUILD b/main/gcc/APKBUILD index 45b5df06a6..b7799c88b0 100644 --- a/main/gcc/APKBUILD +++ b/main/gcc/APKBUILD @@ -1,7 +1,7 @@ # Maintainer: Natanael Copa <ncopa@alpinelinux.org> pkgname=gcc -pkgver=6.1.1 -_pkgbase=6.1.0 +pkgver=6.2.0 +_pkgbase=6.2.0 _cross="" [ "$BOOTSTRAP" = "noheaders" ] && pkgname="gcc-pass1" [ "$BOOTSTRAP" = "nolibc" ] && pkgname="gcc-pass2" @@ -145,7 +145,6 @@ fi source="ftp://gcc.gnu.org/pub/gcc/releases/gcc-${_pkgbase:-$pkgver}/gcc-${_pkgbase:-$pkgver}.tar.bz2 ftp://sourceware.org/pub/java/ecj-4.9.jar - gcc-6-20160721.patch 001_all_default-ssp-strong.patch 002_all_default-relro.patch @@ -590,9 +589,8 @@ gnat() { mv "$pkgdir"/usr/bin/*gnat* "$subpkgdir"/usr/bin/ || return 1 } -md5sums="8fb6cb98b8459f5863328380fbf06bd1 gcc-6.1.0.tar.bz2 +md5sums="9768625159663b300ae4de2f4745fcc4 gcc-6.2.0.tar.bz2 7339f199ba11c941890031fd9981d7be ecj-4.9.jar -7b942873ee7e0df5dfdd8abe4eacff04 gcc-6-20160721.patch 3634a8f58065805809273b105071c1f3 001_all_default-ssp-strong.patch 28ca9eac639e88869ac975d593ff7a89 002_all_default-relro.patch b7235f279097e28295b6bbaa0804302f 003_all_default-fortify-source.patch @@ -625,9 +623,8 @@ e17bbb0fe802974e20645b4182b4c410 fix-gcj-iconv-musl.patch d00d7e4b0c00cb7448576af9cd7fcea8 ada-fixes.patch 20e2731c02ce50739ebdead2795f9c41 ada-shared.patch bd2f71f7559e0aa38745ee62e5799601 ada-musl.patch" -sha256sums="09c4c85cabebb971b1de732a0219609f93fc0af5f86f6e437fd8d7f832f1a351 gcc-6.1.0.tar.bz2 +sha256sums="9944589fc722d3e66308c0ce5257788ebd7872982a718aa2516123940671b7c5 gcc-6.2.0.tar.bz2 9506e75b862f782213df61af67338eb7a23c35ff425d328affc65585477d34cd ecj-4.9.jar -3e2c8350a354b54d8f2ffb3db17d103adf7e45dd4bbe94620b25b3c63d839b28 gcc-6-20160721.patch deb22792f37e107d0afff5f4ea6b2a9fc9de4f48e1c7133bf658b6e0d057b1d6 001_all_default-ssp-strong.patch 2c7fcbc3879cce0775e37306441110dc63e7f457e2e5ad890f6b0800eb520ef6 002_all_default-relro.patch 611d3d101351c134d3c03f6d8265a90268cef71c682bf72e02a6cd2d99315ef8 003_all_default-fortify-source.patch @@ -660,9 +657,8 @@ a395ba4cf047c48cac56985726fddf0948f4425c9f1a0c9ddba1812b2b3d8300 fix-cxxflags-p d2a67a7ae0304cd10532883df19923b98dbc9b7a24957b619d4a6e04f19c5507 ada-fixes.patch d6c7fc1820a4fa285297c299c255fe2f19ce1695486f20edd098252a97545e6a ada-shared.patch f7f5aa37d27644292a90ab31afdf4be93b116507bfc39f4d9f6af047311b7d87 ada-musl.patch" -sha512sums="eeed3e2018b8c012aabce419e8d718fde701e5c3c179b4486c61ba46e5736eecc8fccdd18b01fcd973a42c6ad3116dbbe2ee247fe3757d622d373f93ebaf8d2e gcc-6.1.0.tar.bz2 +sha512sums="1e8b826a3d44b9d5899309894e20c03abeb352bf3d273b8ad63af814c0ee2911f1a83ce1cd4cdd2d1cb0b3e3c34e9b7ae1b2ab83dfc649ee817ab05247c76198 gcc-6.2.0.tar.bz2 28f8c6fdbcb19e950b1d0bafb3bcc7a8cba87bc673aa6027cece116599cdee80f0cf5e95a1440544890239f5c754e8a93ab46d9daedd937faef445d7ea33b226 ecj-4.9.jar -435ac5e2ec041c70c2508242dbdc3a56da9633bf0549fa9cd8c4e3aa4dfc9a02539bd4d81fba4f5c72eeda4f4c25c5b4998ae2f84ce5f64b4edf574833160b68 gcc-6-20160721.patch a1335adc2fbee98e36c4437ff2587771b98ed4180726779020f65039498235626a411cdb0100dbd20cd19d12f0d94f9a21af179ff624676c28cead9d60598b5d 001_all_default-ssp-strong.patch e36e95b81489163abd6fe9d58f7867bdca43e61143afacbfb17f4698c0b16ec5fd0061d8fab7b2ae615540bebd721c2e2227f80401b4e7fc253da9da62e6b513 002_all_default-relro.patch f86466c62b8291fac46f9c250c7ad8fa5ab7b1cce2504442fd07ddc4543665b317ae28951f244e39aba29aeaf3fff252ec4f6a147aa16adb2b7aed747dd89188 003_all_default-fortify-source.patch diff --git a/main/gcc/gcc-6-20160721.patch b/main/gcc/gcc-6-20160721.patch deleted file mode 100644 index 423a1e363e..0000000000 --- a/main/gcc/gcc-6-20160721.patch +++ /dev/null @@ -1,54444 +0,0 @@ -diff -ru --unidirectional-new-file --exclude "po" gcc-6.1.0 gcc-6-20160721 - -Only in gcc-6.1.0/INSTALL: binaries.html -Only in gcc-6.1.0/INSTALL: build.html -Only in gcc-6.1.0/INSTALL: configure.html -Only in gcc-6.1.0/INSTALL: download.html -Only in gcc-6.1.0/INSTALL: finalinstall.html -Only in gcc-6.1.0/INSTALL: gfdl.html -Only in gcc-6.1.0/INSTALL: index.html -Only in gcc-6.1.0/INSTALL: old.html -Only in gcc-6.1.0/INSTALL: prerequisites.html -Only in gcc-6.1.0/INSTALL: specific.html -Only in gcc-6.1.0/INSTALL: test.html -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/LAST_UPDATED gcc-6-20160721/LAST_UPDATED ---- gcc-6.1.0/LAST_UPDATED 2016-04-27 08:22:13.000000000 +0000 -+++ gcc-6-20160721/LAST_UPDATED 2016-07-21 22:33:07.000000000 +0000 -@@ -1 +1 @@ --Obtained from SVN: tags/gcc_6_1_0_release revision 235474 -+Obtained from SVN: branches/gcc-6-branch revision 238612 -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/MD5SUMS gcc-6-20160721/MD5SUMS ---- gcc-6.1.0/MD5SUMS 2016-04-27 10:13:12.000000000 +0000 -+++ gcc-6-20160721/MD5SUMS 2016-07-21 22:33:11.000000000 +0000 -@@ -1,5 +1,5 @@ - # This file contains the MD5 checksums of the files in the --# gcc-6.1.0.tar.bz2 tarball. -+# gcc-6-20160721.tar.bz2 tarball. - # - # Besides verifying that all files in the tarball were correctly expanded, - # it also can be used to determine if any files have changed since the -@@ -20,23 +20,11 @@ - fd4ecdf5d672efe2b0e409aca9cf9446 ChangeLog.jit - 09538b708302f1735f6fa05b622ecf5e ChangeLog.tree-ssa - 24ab760126489e69436a43185dc3d202 INSTALL/README --faeedc4aa0a33b139dba3e37dfcc32e9 INSTALL/binaries.html --2ae07dc670badfddd880d0829f494717 INSTALL/build.html --e2df733daff96626c742335bf4a3068f INSTALL/configure.html --ea288f7e1bc7954c3de3261254314248 INSTALL/download.html --4ba2f0041409f363c2f2eb4f0dd77dff INSTALL/finalinstall.html --b19e611b013e13cf467d87dd2d5eba0d INSTALL/gfdl.html --f266c60ec900704e2125c1f55ef979fe INSTALL/index.html --d87c01263eb292cc6be0c98de9ba224f INSTALL/old.html --9fa79492a4fbc527f20e7c1d7f83880f INSTALL/prerequisites.html --897b84fa1251ef3d0db6d781c8bebe01 INSTALL/specific.html --85828d67c1ef58065b4271ab44018590 INSTALL/test.html --3ec6c77feebb68d73c98f35e6eecd408 LAST_UPDATED -+2019f60ae2fe0b2cc56e605eedd16555 LAST_UPDATED - b101e24e658738320c6f7460345cd30e MAINTAINERS - ac51a3b92098155704bd0e6f3e27e70f Makefile.def - 7fa740cb7ac3a6e647702770bb023340 Makefile.in - 5658e4a049df2f77bee1189b6603aa77 Makefile.tpl --a4e0e310ef9f1d033f44a34667d1bc42 NEWS - 80d26bc3b1ad4f6969a96a24c9181bf5 README - b510a5285eb05298b5f3d9f5ae920588 boehm-gc/AmigaOS.c - 2caafacabf758bb76a9dfce1fc544b97 boehm-gc/BCC_MAKEFILE -@@ -441,7 +429,7 @@ - d25174fd04b32bbeab5f3cc783277ec1 contrib/vimrc - 7cb42cbdf8becd280d1e16191416fb62 contrib/warn_summary - 8b59f0d0a2dcdced14765c514fbad719 depcomp --7fa381dd5b3470740f26874e57453fc7 fixincludes/ChangeLog -+03b936340a4cbe370fe25452c5eefabd fixincludes/ChangeLog - c23ba4c4f4ca4dfcdd9b4155e4626da7 fixincludes/Makefile.in - b6e3f4950abc6e254b467063381f6473 fixincludes/README - 455903ad4ff71fa5c5340ef7ae41a0e6 fixincludes/README-fixinc -@@ -454,13 +442,13 @@ - 497da58c4b47627a33f754b61f6eb051 fixincludes/fixinc.in - 9662d8ad173553c438e3ad3fc9db8352 fixincludes/fixincl.c - e1cd70e73f3c2d2319fd9d210ad6a5ff fixincludes/fixincl.tpl --2bc45da2368f2edd0afe13a68f13c8c6 fixincludes/fixincl.x -+189a30a5c8c04ee6145097e01dec36b9 fixincludes/fixincl.x - 47da6e634225e1667c26a71bcf234bfa fixincludes/fixlib.c - d8aac376a7311e465eb0a98d341103a1 fixincludes/fixlib.h - 5b2c1fd3ef9d44fb6beb1a0d45ddd533 fixincludes/fixopts.c - ed1415e9dbc8f421fd9288bde0d90ad1 fixincludes/fixtests.c - 6df145c7cea1e2099cf97a0d83564aca fixincludes/genfixes --052121f87ed1928d7b0b7be1850ce33b fixincludes/inclhack.def -+bafa3cf7b936fb735091aba9b601ed87 fixincludes/inclhack.def - 73354a5ccc669d3a585be10f1f7e7cb7 fixincludes/mkfixinc.sh - 5f9960cfe65b2e6bef658f770e52dfef fixincludes/mkheaders.in - 3aa0563cd682ee61ecd9eb6eea0b0bce fixincludes/procopen.c -@@ -541,7 +529,7 @@ - 1ee4e2b61ae5781d35271f3181927037 fixincludes/tests/base/stdint.h - bd72848710b6f098f5e44218bfe3202e fixincludes/tests/base/stdio.h - 1887d8bc1711dae9922852cda6027877 fixincludes/tests/base/stdio_tag.h --a35ebd909f0105b249e3af1c1b5826ab fixincludes/tests/base/stdlib.h -+6b842aa18e09c73db745cbffa3cb34cf fixincludes/tests/base/stdlib.h - 42a7de17fb8f2ac74bc30c7029199637 fixincludes/tests/base/string.h - 6931e261dc1cecb7983279cf909bd784 fixincludes/tests/base/strings.h - 127183621f8b29d6912c683be6102135 fixincludes/tests/base/sundev/vuid_event.h -@@ -572,12 +560,12 @@ - 955462b555900ecd3934223c64e21fa7 fixincludes/tests/base/types/vxTypesBase.h - c78e762f2c91f2af991feda7d3d7f4b2 fixincludes/tests/base/unistd.h - a2fe1dc808019c9134bca8a4a9a8eec2 gcc/ABOUT-GCC-NLS --06d0293a224884f2cc467d67f3b39573 gcc/BASE-VER -+401718b61199e799c9879210e445d03d gcc/BASE-VER - 59530bdf33659b29e73d4adb9f9f6552 gcc/COPYING - a916467b91076e631dd8edb7424769c7 gcc/COPYING.LIB - d32239bcb673463ab874e80d47fae504 gcc/COPYING3 - 6a6a8e020838b23406c81b19c1d46df6 gcc/COPYING3.LIB --b3fff8c199e988a05ee713f0d584c272 gcc/ChangeLog -+47013cb6b7e3a068a8089357cc00568b gcc/ChangeLog - a3b63c675afa7a655cc2bfa8a907af79 gcc/ChangeLog-1997 - d9a88529352a010253c2e8fb1ed6023b gcc/ChangeLog-1998 - 240f08f81cb4699e8b49347db38233db gcc/ChangeLog-1999 -@@ -605,7 +593,7 @@ - 3eb07e0b2e542409bf73d359f7f65609 gcc/ChangeLog.ptr - e13638e26743ba41e6011b76cc00d9a9 gcc/ChangeLog.tree-ssa - 739ab47f6425bcea1d05e4fc0542de54 gcc/ChangeLog.tuples --e8a6574a8534695f6f50d0345ddbcc52 gcc/DATESTAMP -+281e1cfb96402ae5f5610228d48687b7 gcc/DATESTAMP - d41d8cd98f00b204e9800998ecf8427e gcc/DEV-PHASE - eb92e1ff5e982ca07e173e0eb286d243 gcc/FSFChangeLog - 30e1e33411566388b3164558482dc5e6 gcc/FSFChangeLog.10 -@@ -617,7 +605,7 @@ - e71640635091e22ac2f09f2573aee53d gcc/acinclude.m4 - 9545fe83576dc99e441c64e268711730 gcc/aclocal.m4 - 9063d23e571fcde20283b9f34d5e3422 gcc/ada/9drpc.adb --790bd4173abc2b4c3a18bb0d780ecbd2 gcc/ada/ChangeLog -+4cdae618932d452c197dc7aa6ae96df1 gcc/ada/ChangeLog - 683be0b07dc4f64f118fd5e8ae9cb30d gcc/ada/ChangeLog-2001 - 7aff25efb203be4136b8776cdc812956 gcc/ada/ChangeLog-2002 - cd2379152000f40157d349018fb9364d gcc/ada/ChangeLog-2003 -@@ -1076,7 +1064,7 @@ - 281fc9a014bf9c5a3677f1dd38cc9d5d gcc/ada/a-taster.ads - 09e5467697bae79fd39e9e40a68afbab gcc/ada/a-teioed.adb - 4eb0094120306451664ed73cdafe1d74 gcc/ada/a-teioed.ads --2cf591e4878f55a978c94162e95e7267 gcc/ada/a-textio.adb -+7bbc8ad89fb1f29d8db561dc1e32fa14 gcc/ada/a-textio.adb - 8f8b52b35860a106600945520fa91ee6 gcc/ada/a-textio.ads - c74a673b222c3d0037a22fb766c67488 gcc/ada/a-tgdico.ads - e52f158e88867c99b27268762d9506b4 gcc/ada/a-tiboio.adb -@@ -1456,7 +1444,7 @@ - ffd0bc766345dd140e2b58fd781d013f gcc/ada/g-cgicoo.ads - 8f1d7bbecdcc4526e6981f20b2c6aa3c gcc/ada/g-cgideb.adb - 774b86530311360b01e1e5f5919cbbf2 gcc/ada/g-cgideb.ads --755d5b83deaada0e6ba24a69420a9998 gcc/ada/g-comlin.adb -+bacfa2f3967417c2ef2a1a22e0e1191d gcc/ada/g-comlin.adb - 5a463e3ab85c8c7a3123e5d216cfbd55 gcc/ada/g-comlin.ads - 810166883e82bd21c4358dc3983518f0 gcc/ada/g-comver.adb - ca3c61abdfe3cd9da8902dc86e3f6ee5 gcc/ada/g-comver.ads -@@ -1632,22 +1620,22 @@ - b45654446bc74bb68ae4adef78906e9b gcc/ada/g-zspche.ads - c97edf7ce39a908dcaec55eb49d0abee gcc/ada/g-zstspl.ads - 09160006db0a2d8dd0c3ce7884147582 gcc/ada/gcc-interface/Make-lang.in --fd793f79cc63bedd8ab6318c59159b4a gcc/ada/gcc-interface/Makefile.in -+c52ceda5eb7e9dea74d930a4ea1ea2a2 gcc/ada/gcc-interface/Makefile.in - 055be3d11fa6ccb53ffe7f8970a005ce gcc/ada/gcc-interface/ada-tree.def - 71ae48a6622bd120e6be917ab8d64bf6 gcc/ada/gcc-interface/ada-tree.h - 51c95420b5900990141d2e5705582197 gcc/ada/gcc-interface/ada.h - 4cbfd794461da0feb1b8661ec623b6c6 gcc/ada/gcc-interface/config-lang.in - 9779c4debc13c6f1cfa1e4e6a6e6c638 gcc/ada/gcc-interface/cuintp.c --b43bc9913a43c58f6b412f15b39d8b78 gcc/ada/gcc-interface/decl.c -+cb827270652e7128b12212e14a40dba0 gcc/ada/gcc-interface/decl.c - c413d4d50e9563859f4d751a4404b705 gcc/ada/gcc-interface/gadaint.h - 610fd259aa8c7f70adaecc1a439ee311 gcc/ada/gcc-interface/gigi.h - f2528ece7aa7e2ed8123de8fe434252a gcc/ada/gcc-interface/lang-specs.h - e3a177357a504878ee8863c5dddf3b44 gcc/ada/gcc-interface/lang.opt --ef866c2969fb8b3f13f2d3688bc695fe gcc/ada/gcc-interface/misc.c -+4c27c8d2e30202eac1e7d1e9bfffd989 gcc/ada/gcc-interface/misc.c - 7bd3630f35c5ac7b5c6cfaf8b16e5723 gcc/ada/gcc-interface/targtyps.c --5d1a57ddd9d57b180b4cd4a4be8576a9 gcc/ada/gcc-interface/trans.c --a02b6f4ab87fccca6fd7e17d5894186a gcc/ada/gcc-interface/utils.c --7a553c9da3a213884ffa3510657b2072 gcc/ada/gcc-interface/utils2.c -+c24acd0193cc38c43ad22911992a55b9 gcc/ada/gcc-interface/trans.c -+66f1fb7584990a73bddbcd0364e75218 gcc/ada/gcc-interface/utils.c -+453dbe7efe389a1246363b89d3072a77 gcc/ada/gcc-interface/utils2.c - 68b13816c95338a03ea3b161c2099ea1 gcc/ada/get_scos.adb - baa8fdaf8d693eb6c5a7e42944887584 gcc/ada/get_scos.ads - e867a4cc97f01b66441a6798d90d4453 gcc/ada/get_spark_xrefs.adb -@@ -2111,16 +2099,16 @@ - c444097cce82db9effcdd4c9c5a96b4a gcc/ada/s-osinte-freebsd.adb - e9bd5d8bc9bd1a613082cb3fdf78d0d4 gcc/ada/s-osinte-freebsd.ads - 94d967aaee13bf49e5e0e154e579871c gcc/ada/s-osinte-gnu.adb --7527080a292de10894550135dbed8017 gcc/ada/s-osinte-gnu.ads -+d92a6b091106c7dc15302b2da5f8f385 gcc/ada/s-osinte-gnu.ads - 7f1f83f2b78279e17d374e171c1da3b2 gcc/ada/s-osinte-hpux-dce.adb - e0c8077ba5d78f82edb8990863741a5e gcc/ada/s-osinte-hpux-dce.ads - 1b3ed31d0914d80bf259b7ee627bd948 gcc/ada/s-osinte-hpux.ads --7db31ded89ea5e94817f0e46cdcc32d4 gcc/ada/s-osinte-kfreebsd-gnu.ads -+335bc179fd59062a542c5d745fe2a8b5 gcc/ada/s-osinte-kfreebsd-gnu.ads - c42f30185875a0d4eb697a00df8d28d5 gcc/ada/s-osinte-linux.ads - f147ed363aba7bfd5210a6c9bad98d22 gcc/ada/s-osinte-mingw.ads - e0ccc12265d7031072307fee72e66441 gcc/ada/s-osinte-posix.adb - 95d33f38d09b64c6ddbdf6ca9013a19a gcc/ada/s-osinte-rtems.adb --fe47c19713c37f489761c788b554d4f0 gcc/ada/s-osinte-rtems.ads -+28b7f5c1fb0f8b5082fc0c24d6cd865e gcc/ada/s-osinte-rtems.ads - 8e43cb0ee20789269fc8a03e909f1a98 gcc/ada/s-osinte-solaris-posix.ads - 4b79cc58a1b73b941681456c8abba9f5 gcc/ada/s-osinte-solaris.adb - 5d8bb4d19a51168c31b3c222912bdd69 gcc/ada/s-osinte-solaris.ads -@@ -2537,7 +2525,7 @@ - 8e252740bca9edecd024787ce30f649d gcc/ada/sem_ch4.ads - 624244945a590748325c5c5c0a41223e gcc/ada/sem_ch5.adb - 701ea5362b9e04194e2db15e956540f0 gcc/ada/sem_ch5.ads --9e8a2c2a55cc006edca1ce8c49e4245e gcc/ada/sem_ch6.adb -+f4d25ba1c40eafec289a52f211f48aff gcc/ada/sem_ch6.adb - 28a7dfff005e523e7d01745dc51c5883 gcc/ada/sem_ch6.ads - 037bdc170487cf7dc07b15149dcf7465 gcc/ada/sem_ch7.adb - 56d3e6547a0912dd936ec7f605b2d8d1 gcc/ada/sem_ch7.ads -@@ -2634,7 +2622,7 @@ - e140d98af57d16903584d7d0bef3a524 gcc/ada/system-aix.ads - 17f25a90ee740067374ebd1d1c5a4b0c gcc/ada/system-aix64.ads - 30226a4fd428b16322030393cc04e28b gcc/ada/system-darwin-ppc.ads --e339f32e04ed66ca7791e54e5fe756c3 gcc/ada/system-darwin-ppc64.ads -+86a5b65c04f1712867b8fbdffa540f94 gcc/ada/system-darwin-ppc64.ads - e88ee6c9ecd12a0d06a8c427ce611528 gcc/ada/system-darwin-x86.ads - 2485a3790c11c9b2750ffd1aaf26da7b gcc/ada/system-darwin-x86_64.ads - f3529cf7e308b1c2f88769fece799df1 gcc/ada/system-dragonfly-x86_64.ads -@@ -2643,25 +2631,25 @@ - 25f3a3fee1b2a561ea63182dd634426c gcc/ada/system-hpux-ia64.ads - 47f63cb03002da080bd48f7efbb405e9 gcc/ada/system-hpux.ads - 0bd33a30d9268cd6f90606e6ce520649 gcc/ada/system-linux-alpha.ads --520bb2081f96d3ca2d165ecf2134b1e3 gcc/ada/system-linux-armeb.ads -+c6af2dc10c193c22c08348b38fa3b6ab gcc/ada/system-linux-armeb.ads - 01b0500080a147f99972b2d982e4125e gcc/ada/system-linux-armel.ads - 364fdafcdcb2a229ca3ca47224421c2a gcc/ada/system-linux-hppa.ads - 0e122414da38ed660e3eaa9c9be8dafb gcc/ada/system-linux-ia64.ads --68ff02dae1328e9f398e3c73dd4802df gcc/ada/system-linux-mips.ads --bc023c717df920237fbef95edbd226d3 gcc/ada/system-linux-mips64el.ads --d12178a6a0ba9ea4b121700cac935ad0 gcc/ada/system-linux-mipsel.ads -+ddf03d7b2a8cba5bab9193239c70e7b6 gcc/ada/system-linux-mips.ads -+fcc26e239c1a24371a4a78954ba317d3 gcc/ada/system-linux-mips64el.ads -+0b3bc0eb1bf2a000598beb1598f47fcb gcc/ada/system-linux-mipsel.ads - 9ade05d741bb6b9f44a182816caee26a gcc/ada/system-linux-ppc.ads --b6eae833e6fe2137efe0aa740315727c gcc/ada/system-linux-ppc64.ads -+7a62b37f000906c2a6a7443112ce3261 gcc/ada/system-linux-ppc64.ads - 5b5c779ee5bcde3977781e097b91c1a1 gcc/ada/system-linux-s390.ads - 8da865876fdebc15a9fab07fa62fd877 gcc/ada/system-linux-s390x.ads - 43432b26bef17aa65b2fd34e29a2f014 gcc/ada/system-linux-sh4.ads - ab6d2ca73fb5888b79fe9901adfb8a98 gcc/ada/system-linux-sparc.ads --746c66c11e22c3197cb994389e56e816 gcc/ada/system-linux-sparcv9.ads -+406a7e49e6e80be0426793c59092b568 gcc/ada/system-linux-sparcv9.ads - a9e779541250ed8a6f4806893a2f2ee8 gcc/ada/system-linux-x86.ads - 53f0201149b3a77de1cd4a7748ba2ddb gcc/ada/system-linux-x86_64.ads - 34b18e606f0f307a08fa56858c19d945 gcc/ada/system-mingw-x86_64.ads - 009f003dea0dd424ccad8aa6d022320c gcc/ada/system-mingw.ads --f88c313eaecc8e40a2484a6e48107810 gcc/ada/system-rtems.ads -+7f460166af9cc30048191b5fdb8d1f18 gcc/ada/system-rtems.ads - 82baebc8db3e7bfae7183b08fe31c2c3 gcc/ada/system-solaris-sparc.ads - 83f4ccb8086c6fee3b90a682436c1a6e gcc/ada/system-solaris-sparcv9.ads - 056b449ee14d58e8119219b0720b9287 gcc/ada/system-solaris-x86.ads -@@ -2736,11 +2724,11 @@ - 0493a7ed666c4b102be665a8e328be35 gcc/ada/xutil.adb - 2c8b2f1975e4e064d3803db6dbd516cb gcc/ada/xutil.ads - 50ccfa68b3ffc2cea9079d312bab3902 gcc/addresses.h --8b315dd0ca3dfd85ed4138a94f0226ba gcc/alias.c -+1ea67a8bdfe6758c1407490f0a8686b6 gcc/alias.c - 3f435b1cc17bbef3b90835cfda49b4eb gcc/alias.h - 2129a033ed56d38308ca40e1424337c0 gcc/alloc-pool.c - f9d22e8738cd46b8cd0075ae0e4bd5e1 gcc/alloc-pool.h --e6e8f06d2d315d03b3a5239d3f11d83c gcc/asan.c -+71922db6042ca44d9217d21a73c6b0be gcc/asan.c - f24bb3e6f685b695e4763d26c6d5f82e gcc/asan.h - f015e12bb7fc520fda759e96f1a39311 gcc/attribs.c - 01d94dd275ab10965e144d0b9fa042f9 gcc/attribs.h -@@ -2759,7 +2747,7 @@ - 998cc73d2ebc13688ba0738f7db6d87c gcc/builtins.c - d9b3f84012b6195bbd548885fa07798e gcc/builtins.def - 70361ef7d2d5ef5ab078cc31686c0bde gcc/builtins.h --d7427e86dbf8fbabd4a42de303b749b0 gcc/c-family/ChangeLog -+732f68d952d2dcaa1881fe602dba3d64 gcc/c-family/ChangeLog - ea3fa1f4d7390a105fa3caab4f79aaf7 gcc/c-family/ChangeLog.gimple-classes - a2097d99f50de5a2a2e9b9f45acca9af gcc/c-family/array-notation-common.c - d268d78fdd0da46755bad2715380ca60 gcc/c-family/c-ada-spec.c -@@ -2767,17 +2755,17 @@ - d1049a363c1ecd0f98eee1aeb9ff6bd1 gcc/c-family/c-cilkplus.c - 307acace620255e11a0a4278376f80e5 gcc/c-family/c-common.c - 2ace27db32acd08f6b79a83ac2586e45 gcc/c-family/c-common.def --61356ffa6a8522c2ff784912b59a3dfa gcc/c-family/c-common.h --285e5395a1948ee8a02d84a5c026bca0 gcc/c-family/c-cppbuiltin.c -+9f20703bcd296e28b53330fdacbaa6c4 gcc/c-family/c-common.h -+2726890948ddd8a7c99836847c4c465b gcc/c-family/c-cppbuiltin.c - 3b48128f9d0659eb1ac831b7d0309053 gcc/c-family/c-dump.c - dc79c0465bd1d84f8a2a1c8665086010 gcc/c-family/c-format.c - a722f61259b29e7519af2ea01a4cfbde gcc/c-family/c-format.h --46424f0d93a4f1c2958225b7a9635981 gcc/c-family/c-gimplify.c -+889f2fce374ebce16f1c541fafc3b2e6 gcc/c-family/c-gimplify.c - 070d0560fe68e0d18e80f7ea464773ae gcc/c-family/c-indentation.c - c40da6434275aba5adccc92809e6e2d6 gcc/c-family/c-indentation.h - 969f5257abd1441eb2e44ec57beac8a3 gcc/c-family/c-lex.c - f9fc887cc07ce21721909e6cc63fe030 gcc/c-family/c-objc.h --a9f7cdede5781cfd42fb0bf6a0cc4cc2 gcc/c-family/c-omp.c -+f10a78fbf89addf947056a7351a1eaad gcc/c-family/c-omp.c - 39020d7f69c32d241015c39dff40d502 gcc/c-family/c-opts.c - b243e9180d094b7539387b07231deb33 gcc/c-family/c-pch.c - 25b59b2fa2b392ea34e1eafa54f0641a gcc/c-family/c-ppoutput.c -@@ -2791,11 +2779,11 @@ - 84c72ad7037868dfe6b3ea01496d2b74 gcc/c-family/c-target.h - c332b723ec991da5fb10d4b3b450baf6 gcc/c-family/c-ubsan.c - 392b541b5038adb62676d41a74001649 gcc/c-family/c-ubsan.h --a3b0076967d29252976ba4145fa1867c gcc/c-family/c.opt -+cff22aa92cff7c3a722057eb507d5297 gcc/c-family/c.opt - 087e1ce4fd7400b0b286e3c2c7bd9aa4 gcc/c-family/cilk.c - 7deafa20602c6826937fab0a455cc8ed gcc/c-family/cppspec.c - dad64a3c28e8bbc124ca8c2f3a7a9f69 gcc/c-family/stub-objc.c --a575bf8a7604ea59dc92a649577f9ea6 gcc/c/ChangeLog -+8e4f5b6a681941881b61133b3accf1c9 gcc/c/ChangeLog - 9cdf859ec7692fe84b67ba9109e3995e gcc/c/Make-lang.in - 5bb4a410264b7f7ac0da9ddcffd92210 gcc/c/c-array-notation.c - 6d3e1a369a7f78b2f8b9d9f0f6f8aff7 gcc/c/c-aux-info.c -@@ -2807,13 +2795,13 @@ - 88a01d3181a5b0369e3febd6acfe9520 gcc/c/c-lang.h - 8cac2a5e96973c846bd33bb75d3f651d gcc/c/c-objc-common.c - 1092d3b7a8d0bc846e6d7f7433692208 gcc/c/c-objc-common.h --658fd55e81e04dbb9fdb65e25d4d41ee gcc/c/c-parser.c --e68d1d94dab107ca752ec21c2fd10485 gcc/c/c-tree.h --ebcf7804fa978c86de277f2cf45ac5b7 gcc/c/c-typeck.c -+99f360f887deb4bc4197d0ec6f6d6105 gcc/c/c-parser.c -+9b1855479c2c36717fefaba6896f2f8d gcc/c/c-tree.h -+b5ac8b88fc750cd755936cc794748d3f gcc/c/c-typeck.c - 3747bb41e8fd6a5de51dd6e7a7a47970 gcc/c/config-lang.in - 48ad75424472d7bdc1b734bf90e32a67 gcc/c/gccspec.c - 82c12673c34f23c306e289a9143864bc gcc/caller-save.c --ce68401b13ebe1bbabc9cea9313eaa28 gcc/calls.c -+9e1a94e39fbf3c650570aa64ccd735ad gcc/calls.c - f7110748a1375215f4469bde141b3432 gcc/calls.h - 0d087c05ff5dd25db84dedfbaf568d4b gcc/ccmp.c - d3d5b380ad6f749bd8db65a92d79e3ee gcc/ccmp.h -@@ -2826,7 +2814,7 @@ - 745b7c812796bf46765ebc99d5ad4566 gcc/cfgbuild.h - a6ae55469bb1b6ad19931eb0ce91c962 gcc/cfgcleanup.c - 3bc167b2db649ed6cbd7ce505e48d35d gcc/cfgcleanup.h --a30d4252b545009dd4ec82aabefc6904 gcc/cfgexpand.c -+3d4be9fe9feb4248e7822dbf2561140c gcc/cfgexpand.c - 020afc9cbf1b8f3e6768a0ce6a7e9b55 gcc/cfgexpand.h - 9d7a00e997730c1e512a0c8f318e1715 gcc/cfghooks.c - 86822fd705361191ce501823f4c84cf8 gcc/cfghooks.h -@@ -2835,9 +2823,9 @@ - e40d94d671641c4d2a68835c259d8098 gcc/cfgloopanal.c - 224984ea290493db3870a0ac1fcec23c gcc/cfgloopmanip.c - 6b8000ec10e5f8d86a76268393bcb5a2 gcc/cfgloopmanip.h --0b6b42e81311c9c0b90f384542f84a9b gcc/cfgrtl.c -+0e5a7f5771e6f0aeb4ab18b86f9b38ee gcc/cfgrtl.c - c5f49aa0380336a2a865262bdb6edf72 gcc/cfgrtl.h --71ded72dde0902e617fa2d55cbbb90e2 gcc/cgraph.c -+555e4220f0d3ea4b83dd17af16a2384d gcc/cgraph.c - 7605193302a08a7aa5813a2007e874ef gcc/cgraph.h - 6db406b55343fb518e9a72363f82202e gcc/cgraphbuild.c - 0dd454c4df9ab62c991b406f6ab4bf4f gcc/cgraphclones.c -@@ -2911,9 +2899,9 @@ - 833a4f3b8d4bd41edd9548e426fd27b3 gcc/compare-elim.c - 5d296c1586f1d268a85c2aa0a3b4d64a gcc/conditions.h - 9f336f22045efcaa67e235fba1bc08d6 gcc/config.build --0e141afdcf55ff62734835a38532e63f gcc/config.gcc -+ade5335c97576ae1c1ae6677f9cf4f6f gcc/config.gcc - 75d9643d9dc2c2d16c12cdcb12dd361a gcc/config.host --f4624f449d40e68419ea99e171e6360d gcc/config.in -+ab7e07d11b6403781c1f8e477b2a80ec gcc/config.in - 8e697813dc96ca90f5d0f4c196efe2cc gcc/config/README - b94306d00c5458b99b6b45830bf1eae6 gcc/config/aarch64/aarch64-arches.def - d70c159b70cc03592ac9fad295f8aff9 gcc/config/aarch64/aarch64-builtins.c -@@ -2930,8 +2918,8 @@ - 3f9b7aaf2703c560457dadd6e0c9148b gcc/config/aarch64/aarch64-opts.h - 5e44cc5092927352daf58d5d06792e96 gcc/config/aarch64/aarch64-protos.h - 34b37d5443fa4b7761945c006d214aff gcc/config/aarch64/aarch64-simd-builtin-types.def --52242be4568fcea119d6074ceb257d63 gcc/config/aarch64/aarch64-simd-builtins.def --e1fadf5e5e4d054343fce675c7613146 gcc/config/aarch64/aarch64-simd.md -+2900ce100d2c396ab04379ddcaebb97d gcc/config/aarch64/aarch64-simd-builtins.def -+d9316f824c3e2ed2fe92b3216a75a60f gcc/config/aarch64/aarch64-simd.md - e71203d59ad9d88352c651bf54967d4e gcc/config/aarch64/aarch64-tune.md - 56e698ddd35d4d45d1b27f04173c27cc gcc/config/aarch64/aarch64-tuning-flags.def - 28e8b35a70cddb3b2ecc24f45c6b1425 gcc/config/aarch64/aarch64.c -@@ -2939,7 +2927,7 @@ - 3283c054473233f66729a33663aba76a gcc/config/aarch64/aarch64.md - 8186400b6ebc5890fb03c1c392946923 gcc/config/aarch64/aarch64.opt - ffcb2d86bab40fbb01226fcbac5f8afb gcc/config/aarch64/arm_acle.h --3fa2d68117b6c049d2f042ef47cfaec0 gcc/config/aarch64/arm_neon.h -+2307be37347862696a1710a987cb4f58 gcc/config/aarch64/arm_neon.h - a775d873b993526c6094ca1b28d8e074 gcc/config/aarch64/atomics.md - aab77a9141d7d8e0d399251a034b05ae gcc/config/aarch64/biarchilp32.h - f9fb82867abfae70f536c437cabbe0ec gcc/config/aarch64/biarchlp64.h -@@ -2960,7 +2948,7 @@ - b0a8914a24f787dbee5e200ee917f621 gcc/config/alpha/alpha-protos.h - 07b69b4d54e4a57bf76dea6f05e45340 gcc/config/alpha/alpha.c - 0a25a7cfc4a2956d79c165776297f982 gcc/config/alpha/alpha.h --38517a12f3265291c74853b269c5cf0b gcc/config/alpha/alpha.md -+d248ba9c7788eb583ed7b179cc5029d8 gcc/config/alpha/alpha.md - a26177734159dae5679e9276b982ace6 gcc/config/alpha/alpha.opt - 4061b6fbc59a1083452389c88c59dc42 gcc/config/alpha/constraints.md - d6ffc31b378eda081971d2c468da4e2f gcc/config/alpha/driver-alpha.c -@@ -3007,7 +2995,7 @@ - 74de244fd60b2d76a3787960d782373f gcc/config/arm/aarch-cost-tables.h - f2b572d07746e403fd525bf9691ee2a5 gcc/config/arm/aout.h - 62fcdf218b75986907eca422e13aabd4 gcc/config/arm/arm-arches.def --9a616434ff1b3cb0ebf9fa48bab40ce3 gcc/config/arm/arm-builtins.c -+e4a314e21e266db6c5d485e913a6885c gcc/config/arm/arm-builtins.c - 1e0456dd3a7822f2fa3e26f77e2c2d26 gcc/config/arm/arm-c.c - 65b5dc7fa9360d10a9ca86119c20ba77 gcc/config/arm/arm-cores.def - b63afb8e425edc52c016b6c15066845e gcc/config/arm/arm-fixed.md -@@ -3020,7 +3008,7 @@ - b1cbf9ca4f296f2f39987d24e0af2530 gcc/config/arm/arm-simd-builtin-types.def - c103dfefc6fcb9ebb20a29729bfecb69 gcc/config/arm/arm-tables.opt - 3f73ffc85b17a98310aef5b53adc5d98 gcc/config/arm/arm-tune.md --cc2c987327ef9a3356a045e607ef2aec gcc/config/arm/arm.c -+ea7cd77a1db03fa7b565ffbde84298d3 gcc/config/arm/arm.c - 23e54a7c9fe7e1c62983bdd39f19951d gcc/config/arm/arm.h - 55f1f86069e992742e1b89abcc6ec7c4 gcc/config/arm/arm.md - 2d7e7f27748045f2d77a7377fda31d5e gcc/config/arm/arm.opt -@@ -3060,7 +3048,7 @@ - 3c4127440c24e5b23dce8d0f7cb8619b gcc/config/arm/fa626te.md - 2e52ace39749711dc3787f62948b77ec gcc/config/arm/fa726te.md - 197df6dea714a30f83e9b80aae52e81a gcc/config/arm/fmp626.md --4b74ce4cb188d764b7914f35639c2116 gcc/config/arm/freebsd.h -+0ecf27dc3b0558645025fe3aaa600593 gcc/config/arm/freebsd.h - 870d22c2f986f799ebc3522dace502f8 gcc/config/arm/genopt.sh - c8550f4949927e5334c212129185e2bb gcc/config/arm/gentune.sh - 05e346aff9b27762033d2fd03753ea06 gcc/config/arm/iterators.md -@@ -3116,16 +3104,16 @@ - 4c3c46eb845e3505658b81b8eaa14288 gcc/config/avr/avr-modes.def - 0fffc0f61c26f4c9de873ad542b094ed gcc/config/avr/avr-protos.h - 41b9882721bdec25585513f697848b5d gcc/config/avr/avr-stdint.h --88ca6ca8ed203bb11f9d74491a225841 gcc/config/avr/avr.c -+b38d57af8ead4be8ee87d298ed78c01e gcc/config/avr/avr.c - aea75b0a042f09c4610dfd149483ed2d gcc/config/avr/avr.h --66d5356d423c0d037897ef09cd81bc6d gcc/config/avr/avr.md -+eff9328f7a8233598fb881c52e6518cd gcc/config/avr/avr.md - 97ae0e97c66153cd01ba33e6dd23a191 gcc/config/avr/avr.opt - 6eea869c9b52b117753eab2b0bb544ab gcc/config/avr/avrlibc.h - 272063927d64ca768006dc1e703a4a4c gcc/config/avr/builtins.def - fe325d127710d93f8c73b9ebfdd07ef4 gcc/config/avr/constraints.md - 04cce33bd7b1254e4ef5acfd097d1e55 gcc/config/avr/driver-avr.c - 7ad86a6961289da9a41d477a7d06632f gcc/config/avr/elf.h --ccb997e1a0a2c184e23e1d255ddbd5d8 gcc/config/avr/gen-avr-mmcu-specs.c -+ea6ae4085ca32c92536855c96966835b gcc/config/avr/gen-avr-mmcu-specs.c - ba3b75183e01f578520c7f5ad4822d65 gcc/config/avr/gen-avr-mmcu-texi.c - a9056b0b6e3fde442dc545459462b61e gcc/config/avr/genmultilib.awk - 5ee74356b8bc2a97c70d2b19e9547ad4 gcc/config/avr/predicates.md -@@ -3209,7 +3197,7 @@ - 9a96119bd809f334545f28e92af4d7da gcc/config/darwin-protos.h - 158992b1d82c85cd69b4d3a96fa964ba gcc/config/darwin-sections.def - 56de9a396d23dd931c1f0dfd326f7fae gcc/config/darwin.c --1988031d70e01f816930f126da6a4f87 gcc/config/darwin.h -+217b6049deb67093ce6ace2e85e26144 gcc/config/darwin.h - b463a7c4d27e349e9f2cd0e00a61487f gcc/config/darwin.opt - f2c8f6f89fa8ec74c30f6d9bc2d0d4e8 gcc/config/darwin10.h - 3544d912bd14b11ecd2f3a94d712c1b9 gcc/config/darwin12.h -@@ -3332,7 +3320,7 @@ - fe17ca5109af0e6e93b74bae231d1a55 gcc/config/i386/clflushoptintrin.h - 8db337d30ef627209263315869a56a98 gcc/config/i386/clwbintrin.h - 876790e99f6c0bb421e1492c7ea46ff0 gcc/config/i386/clzerointrin.h --90532cc9b95026c43a798885aa570e2f gcc/config/i386/constraints.md -+a6979d6ddcc5bb8ecf2a26f5ea34c71c gcc/config/i386/constraints.md - 71baed36fc56f65d8c91aaefd5758aa1 gcc/config/i386/core2.md - 869e4b210e6f821bb16ac1e41fe7c5b7 gcc/config/i386/cpuid.h - 7fee26d8fedd334aa6fcd4bdc08cffb3 gcc/config/i386/cross-stdarg.h -@@ -3350,7 +3338,7 @@ - 8f07bf469832ed4bd2cf349351a4be27 gcc/config/i386/djgpp.h - c8e620657991f87382f5e2868a3a49e4 gcc/config/i386/djgpp.opt - bf04c6bfb2855901059ede3c90d91a0e gcc/config/i386/dragonfly.h --1d476bca8c104bac65750c75940c3f2f gcc/config/i386/driver-i386.c -+86578484e605e5669e9fa482de9ac349 gcc/config/i386/driver-i386.c - 0f5e3cbf6fc57e8c96539b55c3c5d03a gcc/config/i386/emmintrin.h - 4d39e44657c94313f49309df7592ed83 gcc/config/i386/f16cintrin.h - 0123c9ade82b62efeff1e8b33c49a4a9 gcc/config/i386/fma4intrin.h -@@ -3371,15 +3359,15 @@ - 7207180c0653cb9c7507f26a9a814675 gcc/config/i386/host-i386-darwin.c - b80037f63f5fd458518208bbd7dbaa4f gcc/config/i386/host-mingw32.c - 47ac29c21a60ee2ca29d54ea4a345deb gcc/config/i386/i386-builtin-types.awk --304099577fa33b6bf5bf012bfb1257d8 gcc/config/i386/i386-builtin-types.def -+b3837bf5c922be13974120be24db78c3 gcc/config/i386/i386-builtin-types.def - bbfe1f7b817a5b3321bdc8c5ca0d6b32 gcc/config/i386/i386-c.c - c29497fe4c1e5389895075d220252ca8 gcc/config/i386/i386-interix.h - 1c71860a666631f1a174dea14c52dbff gcc/config/i386/i386-modes.def - ac0b4653ef3d1e8200e8efbf73c5d8f0 gcc/config/i386/i386-opts.h - d3f3a1198cf0be4e2a3b9b10e0f761cc gcc/config/i386/i386-protos.h --8558c1ec5c184c6d477b1b353e12f1cc gcc/config/i386/i386.c --8d0d0d6956f44b2dd70e2ccc5677fdc0 gcc/config/i386/i386.h --ea9cb826551f214701f0ec1e3c12d742 gcc/config/i386/i386.md -+5dcd9d24f02d8cf92de3e00a69a09d94 gcc/config/i386/i386.c -+39295430120b7691bd2d787705eabfb1 gcc/config/i386/i386.h -+077d661cd9ce686cb9b40a9cb77c5c87 gcc/config/i386/i386.md - e16f0e58cf07c96d0511136d7c28611a gcc/config/i386/i386.opt - be209c39783d5218055012112fe03242 gcc/config/i386/i386elf.h - a56c5de1cde5aaa7a3753ce09e0be661 gcc/config/i386/ia32intrin.h -@@ -3425,7 +3413,7 @@ - 5aa912e76dac257cfe5012440f7ad90a gcc/config/i386/pmmintrin.h - 7810065fc76773a3b740126a476af54d gcc/config/i386/popcntintrin.h - 4dcd1cf3c734c77f06e840e1fbd678f8 gcc/config/i386/ppro.md --d0e6526febb471bb3acfeb59218f2847 gcc/config/i386/predicates.md -+50884030e7b9ddc82422cf705f6659d7 gcc/config/i386/predicates.md - a0f562fc0aef289f6cdef5b931f5e39f gcc/config/i386/prfchwintrin.h - 7feefb44b5c73254b20e5b7820e45ba1 gcc/config/i386/rdos.h - d57b23dfe66e6405fed787f9047ce355 gcc/config/i386/rdos64.h -@@ -3437,7 +3425,7 @@ - 6d7b4d52cdc2a6db01f9c20c45be0795 gcc/config/i386/slm.md - d1a02c4509457e48895953880e756b4a gcc/config/i386/smmintrin.h - 0a7e726af98f6a39952052f361cdfbee gcc/config/i386/sol2.h --9f55c5a60dd162d1ae5fb93d69b7a4a3 gcc/config/i386/sse.md -+30d0c0c8fd58d4ffee139d715d1e1b66 gcc/config/i386/sse.md - 91d7c7f7b9b34e3ae4e87882a355bf2b gcc/config/i386/ssemath.h - be9c2b7e2ff5d3a32ab3d902b56762ac gcc/config/i386/stringop.def - 96f9e071c5c165d0cc21e51cfebe5b92 gcc/config/i386/stringop.opt -@@ -3662,7 +3650,7 @@ - f298ec31e1348e797caa9f7a1a7ea94d gcc/config/microblaze/microblaze.md - 4dec1d8cba0ae9e95e0ae11ad82575dd gcc/config/microblaze/microblaze.opt - a16c7f39b0b2862c81dd0f0a4b232307 gcc/config/microblaze/predicates.md --f986ab14af6b81f50248b55de266dfbb gcc/config/microblaze/rtems.h -+c560707d4508d14056eaacb33c6b00bf gcc/config/microblaze/rtems.h - ca8367ac97d24747376a746a1a3806c2 gcc/config/microblaze/sync.md - 17818a25ae3112098cd91d698e37f0f7 gcc/config/microblaze/t-microblaze - 63ccba4e7f745d36609d7c129bac6288 gcc/config/microblaze/t-microblaze-linux -@@ -3851,7 +3839,7 @@ - d835d08884a2846e70bef505767bd3f1 gcc/config/nios2/t-rtems - c2be83b7f197d233a6ce04c2245a312a gcc/config/nvptx/mkoffload.c - 71182308acd7b24f983c5c3836f21e97 gcc/config/nvptx/nvptx-protos.h --656dbc77c4631baba2d2fc786dbfd286 gcc/config/nvptx/nvptx.c -+d16914348f2acdb5a72c4e8cd5c348d9 gcc/config/nvptx/nvptx.c - ee26c09dc69c862b8465425e61efb50d gcc/config/nvptx/nvptx.h - b6d00d17aa4debe5cbfb686a317af311 gcc/config/nvptx/nvptx.md - f20baafe92ab83b58eced858f6668a59 gcc/config/nvptx/nvptx.opt -@@ -3881,9 +3869,9 @@ - e1c6685604f681faea2ce89975cb7fb0 gcc/config/pa/pa-openbsd.h - 7fe7a5966510922de22aeefc35c8e010 gcc/config/pa/pa-opts.h - b1fa12eef4f2d69520c8e33ff00ea833 gcc/config/pa/pa-protos.h --8db4f36dd448d091f4e3942edf612201 gcc/config/pa/pa.c -+9a436df6ba10cb315e4759c263bb20f7 gcc/config/pa/pa.c - 0cb5f8b8230c90bd6580010bb9088794 gcc/config/pa/pa.h --85cf1e3de4bb1b1e4842fc2d8277c179 gcc/config/pa/pa.md -+870d0b3ff5e10512bbebb34482e95aa9 gcc/config/pa/pa.md - 2a55715c21637c72f4c2306798f28715 gcc/config/pa/pa.opt - 2c84ac4128fba0f0ec7a3a85f7724f7f gcc/config/pa/pa32-linux.h - 3eb3ff97a411ccda47b603da5c8cc95f gcc/config/pa/pa32-openbsd.h -@@ -3921,19 +3909,19 @@ - dbafb0fbae9820ebfe82de65a3b83f68 gcc/config/rl78/rl78.opt - 013aededeacbccea80fe3b6306066322 gcc/config/rl78/t-rl78 - ad241b2a8851ae9d5b6641c7b7b479cb gcc/config/rpath.opt --a3432c56bcb7fc05fd6b64099e48f679 gcc/config/rs6000/40x.md --8fc4d37e67deb5fe12ee814274162f79 gcc/config/rs6000/440.md -+be34836d1ba31c631716d5010c1fe037 gcc/config/rs6000/40x.md -+e2c353cd79f9a4399a0dc40fe79e035c gcc/config/rs6000/440.md - cfc1fff1a1e39dd4fd2f1e047c1b010d gcc/config/rs6000/476.h --615d3d843859a69803593326d4b04616 gcc/config/rs6000/476.md -+76c22ba4be588931c8b58aff695d1d6f gcc/config/rs6000/476.md - 1da0524d2d6d22f5cb7d53d9fe1c611b gcc/config/rs6000/476.opt --6c88c644d7df100d13787b316e121593 gcc/config/rs6000/601.md --a6556ad3f85c0f4b0b1e84217fa9e114 gcc/config/rs6000/603.md --d37c6f2ae8b08b04cff356c70860d541 gcc/config/rs6000/6xx.md --fe7aaac8aa1b8059c3116b73e397f690 gcc/config/rs6000/7450.md -+7c0fa5cb3b835130227458f0f69f813b gcc/config/rs6000/601.md -+ecbb83eea3d6a47a6af5584c6be12ca9 gcc/config/rs6000/603.md -+481cf4bf7f0be523a61462b9fb81de69 gcc/config/rs6000/6xx.md -+0fe53917723a9db222e730f098ace1fa gcc/config/rs6000/7450.md - 03b5a697e67b56138a872018df4c3bab gcc/config/rs6000/750cl.h --010f2f4c822c612437243e649ec4c102 gcc/config/rs6000/7xx.md --c8e123f1b622c43a3745ff2b5f799035 gcc/config/rs6000/8540.md --cc8a63fb23e95bd165f77f99193198fc gcc/config/rs6000/a2.md -+6eae8bf4ae5936dd0db712c9458f6901 gcc/config/rs6000/7xx.md -+02e47ab90dd56329510ee3801d6d700f gcc/config/rs6000/8540.md -+f27e2df971a7f7e80091bf85b9be16dc gcc/config/rs6000/a2.md - 215c8a4ac1298c2f899cb270f784122e gcc/config/rs6000/aix-stdint.h - d4d5391a097711b67df3082070de4c3a gcc/config/rs6000/aix.h - e580ffd868554681a147b5173478fb59 gcc/config/rs6000/aix43.h -@@ -3943,12 +3931,12 @@ - 02a3d453ca7e43f4bf70187e1c3cf346 gcc/config/rs6000/aix61.h - 21c1c24d19668403ff77dc915a743342 gcc/config/rs6000/aix64.opt - 1088dba38de5967f615c2c010164ec48 gcc/config/rs6000/aix71.h --4b64a4bbfc491cdb49ae51bf4dbdbbb8 gcc/config/rs6000/altivec.h --890c898bb424f6b9a14e77361e11c737 gcc/config/rs6000/altivec.md -+72b7be964acfdeb0ca6642e9bb019ee4 gcc/config/rs6000/altivec.h -+1ae5cce9f95be1f33759897a0e901575 gcc/config/rs6000/altivec.md - ebb5e6bcfc1093c0aff7c41cd9353433 gcc/config/rs6000/biarch64.h --eb88cb402ce0ae76bea0e2669d29faf1 gcc/config/rs6000/cell.md --ab77897337ed0bcc94d911de0a9b84d9 gcc/config/rs6000/constraints.md --74ed46696e6d8336ffbaf386d75e54cf gcc/config/rs6000/crypto.md -+936aede56563f66921091a90d3d1d56a gcc/config/rs6000/cell.md -+2697e3b9700fedaea4ff0e78242d1382 gcc/config/rs6000/constraints.md -+3989f0e14500049f924ab6bf76471a93 gcc/config/rs6000/crypto.md - c85b3bacf772d069c8a138ff0cf48400 gcc/config/rs6000/darwin.h - cd92ef7ed3430ad83c27c94fc7c97de4 gcc/config/rs6000/darwin.md - e8e5a87925f97e07063bc36de5dc3b22 gcc/config/rs6000/darwin.opt -@@ -3956,14 +3944,14 @@ - 78939b2279a4d082aea92f53a289d711 gcc/config/rs6000/darwin7.h - ac431f1a0b8ae0c72fc7cab9bc9e2f1d gcc/config/rs6000/darwin8.h - a77da74ccfb88c7b6bcd77d4a5f98c90 gcc/config/rs6000/default64.h --522858d4ee17f4b8129dc2ff6eac0b08 gcc/config/rs6000/dfp.md -+1a96a05c3098cba8dcad9a84f4da9c74 gcc/config/rs6000/dfp.md - b9490f963c3648aa2f0de7bc1cd5af58 gcc/config/rs6000/driver-rs6000.c --d7a141c5235cb379dfa386c990ea731b gcc/config/rs6000/e300c2c3.md -+d949390c82f3443dbfb82eef160fa0c7 gcc/config/rs6000/e300c2c3.md - 85e4c2a561d394919589b92fdf2a6da3 gcc/config/rs6000/e500.h - 8bb8b4dc450a6089b1cfca551026bfce gcc/config/rs6000/e500mc.md - 3a8a9616dd1a37f5c41ea0eebe2b140b gcc/config/rs6000/e500mc64.md - 0474b71c5e8814f8a2c2929068ebd209 gcc/config/rs6000/e5500.md --91ac3cc581488d8d5149cbb4bfb5925d gcc/config/rs6000/e6500.md -+fe4ae385f84f18458badf29e377e0771 gcc/config/rs6000/e6500.md - a737c12b8f7510a91988a05012db3ccf gcc/config/rs6000/eabi.h - cbd3019152cc1036fd011d0059012250 gcc/config/rs6000/eabialtivec.h - cb63806e3e70caa314033e967b7d4bb5 gcc/config/rs6000/eabisim.h -@@ -3973,7 +3961,7 @@ - 8eabfc237f6f5d69a39b97c2a170287b gcc/config/rs6000/genopt.sh - 386c32703bb134082430ae71c03664c9 gcc/config/rs6000/host-darwin.c - ff786276df16ab764e024e79f389d1f0 gcc/config/rs6000/host-ppc64-darwin.c --e8f836ba652ea98cf75c38a9a51571f2 gcc/config/rs6000/htm.md -+2299a6244b44c4fa0b0180101f4c9284 gcc/config/rs6000/htm.md - 4902896bbb0c8507f0cef5391b46f052 gcc/config/rs6000/htmintrin.h - f8855608896ff92f191cd0ec0e8debce gcc/config/rs6000/htmxlintrin.h - c6a61039cfb5b76277bcccaa262e3ee0 gcc/config/rs6000/linux.h -@@ -3983,33 +3971,34 @@ - a0078bcc38f4ed35217a24ccfae5c528 gcc/config/rs6000/linuxspe.h - 27fed5a1c278b05b79d11ceb2b575b91 gcc/config/rs6000/lynx.h - 0cc3c5f9101501b8253ce3176c3ffce4 gcc/config/rs6000/milli.exp --c624579cdc2079804105ce3d1189c52b gcc/config/rs6000/mpc.md -+2fa8dcb8bc43d9ba7fffddb47770b257 gcc/config/rs6000/mpc.md - c2fd14dbafe257185d6e8d9378100414 gcc/config/rs6000/netbsd.h - dbc5748d385f0a366a69b70e5f4b5200 gcc/config/rs6000/option-defaults.h - 41f286ebbc56d4aa7ccf8cab2e90cfc5 gcc/config/rs6000/paired.h - 55af659a3619ef1966eece3320f3c9dd gcc/config/rs6000/paired.md --02aa07ccdebf9ed3f0df6f5d31a4dace gcc/config/rs6000/power4.md --3cb4b79927603a40dcc7f54b0a07948c gcc/config/rs6000/power5.md --253d89e0957e9e5492d8dcf15d208fc5 gcc/config/rs6000/power6.md --83bc851e7693aeadfdf97ba3f11aec17 gcc/config/rs6000/power7.md --9ad7a77314079c9e0cd64370c950c42b gcc/config/rs6000/power8.md -+31242fa4ed8abafeba3b82a860474603 gcc/config/rs6000/power4.md -+44d38db73ba888118ad2e68d58f463c5 gcc/config/rs6000/power5.md -+9c803622bb5146608fe9539f2af34f36 gcc/config/rs6000/power6.md -+392d61b850052a84dca819f18d09ec44 gcc/config/rs6000/power7.md -+d8b143420c8e25c7b2a8df221ae27589 gcc/config/rs6000/power8.md -+4c6843f36ebb8e0c06de737adda165b0 gcc/config/rs6000/power9.md - c335f4f65801de1318cd4db8b62934ba gcc/config/rs6000/ppc-asm.h - ea4871edf7de554404015404bafd83e6 gcc/config/rs6000/ppc-auxv.h - 30884ec5924e409646acd1aa99423fc5 gcc/config/rs6000/ppu_intrinsics.h --6d9c1ca23d345218b3077b98e639e07b gcc/config/rs6000/predicates.md --a68302ec6a66487c8ecec6e28ef0e043 gcc/config/rs6000/rs6000-builtin.def --596338f547ae69967d84ba7f4f847693 gcc/config/rs6000/rs6000-c.c --7c301066108088876ee2e09362770be1 gcc/config/rs6000/rs6000-cpus.def -+195cd4f51261ae5a6bab57f4be102730 gcc/config/rs6000/predicates.md -+fed7519f3fb7d3f6e3b9e82dd640d7c0 gcc/config/rs6000/rs6000-builtin.def -+7baaf3b9a76f29c14d1e20e921eef7da gcc/config/rs6000/rs6000-c.c -+3e5ef6c30730e4575563890ec3cfe76b gcc/config/rs6000/rs6000-cpus.def - 2f0d36a3bf95d74249364237cf04e29c gcc/config/rs6000/rs6000-linux.c - 192ddf2c1b6fd7fe7e53b1acadaee645 gcc/config/rs6000/rs6000-modes.def - 14f48bec5cd76d2a5aada931fb1fedf4 gcc/config/rs6000/rs6000-opts.h --be801487c27166d61655a5ee6fb17163 gcc/config/rs6000/rs6000-protos.h -+7389795c236e28309f4187cce6e2dc55 gcc/config/rs6000/rs6000-protos.h - b43d18bcb08f2293531b3302947868a2 gcc/config/rs6000/rs6000-tables.opt --157543f273b999d4aa0589bd9ec62145 gcc/config/rs6000/rs6000.c --b3d76f8a9e6c3f285875d109152cac89 gcc/config/rs6000/rs6000.h --79d11c1b7f5b67bf5e7dc1b88beb3be9 gcc/config/rs6000/rs6000.md --334e5a36e5ba56cf459f5d29dc275a86 gcc/config/rs6000/rs6000.opt --bc7c7fd50f8133954bd162f41163a526 gcc/config/rs6000/rs64.md -+71c5cdb7a1b42c30338eb5001a658ae1 gcc/config/rs6000/rs6000.c -+219d2a37391d11dee8e606c70d31fa65 gcc/config/rs6000/rs6000.h -+b555f8e178f9b8bd13235a2c7ed5ac40 gcc/config/rs6000/rs6000.md -+ca447d624d64bde7352a3632cff4e012 gcc/config/rs6000/rs6000.opt -+23eae5c1992970cba9db6c157ab8c4f6 gcc/config/rs6000/rs64.md - 089f55bc6e1565ba82f6d496569d3280 gcc/config/rs6000/rtems.h - 510ae383bcc5df111af9d4407a82b6cb gcc/config/rs6000/secureplt.h - 0377ddd2fcdd6253e75cfe7f6a9aee18 gcc/config/rs6000/si2vmx.h -@@ -4018,7 +4007,7 @@ - 4916c7683b7e0a7036c40eb6d7ee92f0 gcc/config/rs6000/spe.md - 70e488f99d30586ce36bfe7b9dc08fec gcc/config/rs6000/spu2vmx.h - 89082edb09e5818e9e5f9f05685cadcd gcc/config/rs6000/sync.md --975824c5c614d1480831eb06f3b18f10 gcc/config/rs6000/sysv4.h -+056da47aa9e7eb07f8dea417fb567401 gcc/config/rs6000/sysv4.h - 2913dacd00e26860f7ad46828646ca14 gcc/config/rs6000/sysv4.opt - 72d0179bc61a6d4aa963be895a0d6e5b gcc/config/rs6000/sysv4le.h - 93056159fe947e9f851f95a932a97bfe gcc/config/rs6000/t-aix43 -@@ -4038,17 +4027,17 @@ - 7116c0a8cdb50f6a880f3e39b38fbee9 gcc/config/rs6000/t-ppcendian - 7f0dbbdf1e014933add4051db875bfae gcc/config/rs6000/t-ppcgas - 1b8aba690a39464c4ea9c647d73d6983 gcc/config/rs6000/t-ppcos --7389d8d00e632c8845d538dc99e5c6b7 gcc/config/rs6000/t-rs6000 -+98cf7ab5ad50cd5fa7d1d38921be79a1 gcc/config/rs6000/t-rs6000 - ae9fccfa6dbce7c4de5e57cb98ea316e gcc/config/rs6000/t-rtems - 3139a8aaf8df8e678d1895cd6e6cdbc5 gcc/config/rs6000/t-spe - 0bd38a9da8637b9ca3a43b70bcd7f6ad gcc/config/rs6000/t-vxworks - f11925c88524d2fd457bf77944da1302 gcc/config/rs6000/t-vxworksae - 3f0601a68de7a0aee8264b538228d943 gcc/config/rs6000/t-vxworksmils - bb61df2b42a69a90853a503710200de1 gcc/config/rs6000/t-xilinx --90d8139c477dc9d8ff1374f594342cd1 gcc/config/rs6000/titan.md -+cc22792d76d22d8203dc7c3680c1dbc7 gcc/config/rs6000/titan.md - 7369115a6bfe8259388f41e912c060f2 gcc/config/rs6000/vec_types.h --3895f5086b0451178d2cab3a8edc0df6 gcc/config/rs6000/vector.md --64991c6a25d1e8270725d50368b8fb85 gcc/config/rs6000/vsx.md -+ed5c9b710457da108e718e8517f71c08 gcc/config/rs6000/vector.md -+444b4ec5dd2806e425c1e3138284f3d2 gcc/config/rs6000/vsx.md - 4d14358837cff46d3efb3a12dfa4fb39 gcc/config/rs6000/vxworks.h - 724f6bc5a165006b67c0526f1bd7477f gcc/config/rs6000/vxworksae.h - d0482b801e0a94640973282cfb41b1a4 gcc/config/rs6000/vxworksmils.h -@@ -4059,10 +4048,10 @@ - 1aff8cb3714b63b6c3367f552dae743f gcc/config/rs6000/x-rs6000 - e5e773649ecdb110972c35e49c42b3e5 gcc/config/rs6000/xcoff.h - 14b84186ff830f20eb02a0e254ead887 gcc/config/rs6000/xfpu.h --36a1d4af1d8697adca6a1af98b7b0cf4 gcc/config/rs6000/xfpu.md -+1c69fd8a6a2d3aa89f111d94a29c74a8 gcc/config/rs6000/xfpu.md - 750508def567aebb2fcd9b027515ce60 gcc/config/rs6000/xilinx.h - 1701cee04ec5d0023ee2f2ceb0ff7490 gcc/config/rs6000/xilinx.opt --3735d6fa9e1f7a056f86652bf630d59e gcc/config/rtems.h -+c259e167d92ed9ea65d4529c9ac58029 gcc/config/rtems.h - 29973834f5994d1d1eb068d452b4912b gcc/config/rtems.opt - 7ade2acf000a30e0e591946c40cc5802 gcc/config/rx/constraints.md - e6126d96e89716a341e26fa279f84be1 gcc/config/rx/predicates.md -@@ -4093,9 +4082,9 @@ - df9ea5d53147f236d75784dfea931042 gcc/config/s390/s390-modes.def - 9fbc56cdaa1a0bfa0e8af1c738f747cb gcc/config/s390/s390-opts.h - ec6ce661c7b87984fbda470242973d68 gcc/config/s390/s390-protos.h --286c274799f9c837c69299a3d92749cd gcc/config/s390/s390.c -+cf2b018db73bc2242c43e8fd064460b9 gcc/config/s390/s390.c - 6128183534b6460c3504e49da918f124 gcc/config/s390/s390.h --aef50f68871f4a43a28df1fa615b7353 gcc/config/s390/s390.md -+3d0ed16a636ca7198d07e174a4bb3ec1 gcc/config/s390/s390.md - 93ff0c316888e0ae1e6e5fcbb89614ea gcc/config/s390/s390.opt - b92144af9dcab9d6a6bd0a619e8bd90a gcc/config/s390/s390intrin.h - 7182f5655f81cbe30f04b3209bb50a8c gcc/config/s390/s390x.h -@@ -4166,32 +4155,33 @@ - cce52944785c3c1036a7380adda38c22 gcc/config/sparc/constraints.md - 4899a6b24fe9d952cbb0a117c5014933 gcc/config/sparc/cypress.md - a6f5c02cb556d4484b510b1b080970f1 gcc/config/sparc/default-64.h --8861dca695ebec27403ede9cba2e83aa gcc/config/sparc/driver-sparc.c -+999b81b4a3d65c9f3913d9c5ac50116e gcc/config/sparc/driver-sparc.c - 24b6ddb0c85a7d35c6bef23e162f238d gcc/config/sparc/freebsd.h - e3873b9f7262fe2e5e1c1ff303fd07f1 gcc/config/sparc/hypersparc.md - ceb5379ddc5c41b514ec37a1902d2f2e gcc/config/sparc/leon.md - bce3eb1a406fa181a3518aeca8a5f851 gcc/config/sparc/linux.h --4d0b279be0d03ade9a7a03dea9aab8c6 gcc/config/sparc/linux64.h -+e90fb5dab384ef61b70412869846e81a gcc/config/sparc/linux64.h - 44524f5016f24f5db03ad91912a30fa7 gcc/config/sparc/long-double-switch.opt - d14affc9d9a7c6d706ac72f92b369f54 gcc/config/sparc/netbsd-elf.h - 08f60d645b2128365c08c0f6c6e221ff gcc/config/sparc/niagara.md - 16b7243175105a0d257eb4421bedc2ec gcc/config/sparc/niagara2.md --e597ae6bcd05bbe47a86aea7463c12ae gcc/config/sparc/niagara4.md -+78dfd78b0f3609e0494bbaf344d70695 gcc/config/sparc/niagara4.md -+60463e86a2bfe089ae54632abf1cd938 gcc/config/sparc/niagara7.md - 3f126aec8253ea73daa2fbaafc3f7153 gcc/config/sparc/openbsd1-64.h - df546d4092fe20ba80bd5a3954f0bd35 gcc/config/sparc/openbsd64.h - fdf6ab88ad0b4e36a3b8ebf25cfdd547 gcc/config/sparc/predicates.md - 2042472acbe05e3e6c55253f1b308604 gcc/config/sparc/rtemself.h --e105faae60a663602a2c212e0d82be55 gcc/config/sparc/sol2.h -+ea486cef33954ec2c7cd6b2bcd57b5c1 gcc/config/sparc/sol2.h - 027897262736bac521955a4e91403e9d gcc/config/sparc/sp-elf.h - 16197cb93f1fda192e849bde60b989d3 gcc/config/sparc/sp64-elf.h --b16df431afbd3ad37c03599441a6a068 gcc/config/sparc/sparc-c.c -+24821a14bcdbe2e146ed8e020c06d35c gcc/config/sparc/sparc-c.c - 6e05fd82c65a1c0b69f52820e4e2c82a gcc/config/sparc/sparc-modes.def --e7e72eec1accf85bc1badbb0941af4f6 gcc/config/sparc/sparc-opts.h -+76ec8424fd03e5e3660223b5ca3cf59a gcc/config/sparc/sparc-opts.h - 3b12f88afd2307417ea049e4a24a9bb8 gcc/config/sparc/sparc-protos.h --9266b115b2f0af3232f05cf0c525c3e3 gcc/config/sparc/sparc.c --28bbdfc6758c9c5ab027f2c08ef7a013 gcc/config/sparc/sparc.h --1e404c290eca635c799aa01eb4d8d355 gcc/config/sparc/sparc.md --48c9d42cb9fd0422c5cf112826aa7ffa gcc/config/sparc/sparc.opt -+c45d5a341822603b1d2e3234df6c4200 gcc/config/sparc/sparc.c -+da3c18895492fa52031c534e5825b3fe gcc/config/sparc/sparc.h -+1f89fb1ea3b02cbe8c12395bdcef59a6 gcc/config/sparc/sparc.md -+18fcbfcaaf4ebb852311426ae9f8571d gcc/config/sparc/sparc.opt - 9cb87fbe1c20a8991a89a8c2215a7c07 gcc/config/sparc/sparclet.md - 8fa2a5576a24f640750e744d90353334 gcc/config/sparc/supersparc.md - 12aaadc74ad00986b0b584b5670f83a2 gcc/config/sparc/sync.md -@@ -4210,7 +4200,7 @@ - 410423780343a1431e1c0dc5bf60dba8 gcc/config/sparc/tso.h - b6612a314463771600938ccbd967e4c1 gcc/config/sparc/ultra1_2.md - 664dc34c9e8a2da763a8d607cdd40c28 gcc/config/sparc/ultra3.md --172bd3dd1afbcc416192c4348f242e3b gcc/config/sparc/visintrin.h -+6dd43af528bb6984a85f9b73d6cf430b gcc/config/sparc/visintrin.h - bf27cffd7002ed10c819216944e1fc8d gcc/config/sparc/vxworks.h - 9b2ddc345afcea4f415dd0c8bc2d2ed3 gcc/config/sparc/x-sparc - ec6f83b17b1625fed43638a36dc76ae5 gcc/config/spu/constraints.md -@@ -4327,10 +4317,10 @@ - 905539c10b01b14270085b2ff8a8e401 gcc/config/visium/t-visium - 5970b7b34f57ccb9e61f7e6ca0b0990b gcc/config/visium/visium-modes.def - bcbe3f2a16b7c074ac5b3f63ddaa9fe2 gcc/config/visium/visium-opts.h --8b4eaf75ea504e522ec4e6f7e5d0a800 gcc/config/visium/visium-protos.h --4a68104ef84d725cd7c9b18678dc889a gcc/config/visium/visium.c -+f179b316529c1e1aef8dd4a708a79edf gcc/config/visium/visium-protos.h -+f211ad99efeaa709f4eed4515950528d gcc/config/visium/visium.c - 13491427224304bc418ddad214bd2666 gcc/config/visium/visium.h --5301760e9c5059d01ad49e4a4d27b512 gcc/config/visium/visium.md -+49f063ffb6ecc0eb5d9533b269661a66 gcc/config/visium/visium.md - 809a10680b60475e5abe66769cac59e5 gcc/config/visium/visium.opt - 883b3e153a9672ad32f1c8cb18cbea9d gcc/config/vms/make-crtlmap.awk - 9b09f55f7820a1189c8b3dd933aca2ea gcc/config/vms/t-vms -@@ -4374,8 +4364,8 @@ - bb1965ec2a1e0ce5e60d527c23ca610b gcc/config/xtensa/xtensa.h - d3ed3f2851a6ee9f647a0fe488ad1639 gcc/config/xtensa/xtensa.md - 6bc76a8cf807646d45ffd30b5ca7d2b2 gcc/config/xtensa/xtensa.opt --a46aba5ea3ed52179bc15d322a73bab7 gcc/configure --75eefe68ea80541c25dd77c91182eefa gcc/configure.ac -+ebf9ee0b037a06c3e8bd155c4eedc1eb gcc/configure -+19074c8f1663edb2fd70e9230c4b2bfd gcc/configure.ac - 0ec5b41e50536d76b12ce8977926b0df gcc/context.c - 26da2cb861339f31f80bd959e0d59598 gcc/context.h - cccacb2ac29511a68f30d50c4f2a9655 gcc/convert.c -@@ -4383,7 +4373,7 @@ - d80857164629763d35964508054ddcda gcc/coretypes.h - c1d9055612e35b11f4c86de664f8e1a7 gcc/coverage.c - 653580fc0a70e3ade04c5b00362b0daa gcc/coverage.h --588dd1bd87a8445d4a2ce8e3c9bf6dc5 gcc/cp/ChangeLog -+07a267d95fe6b59a9cdf0b9c83620aa5 gcc/cp/ChangeLog - d271e3663538ba1f3281cab3838e92cd gcc/cp/ChangeLog-1993 - f5a44adbc05521162350ca409d1d95ce gcc/cp/ChangeLog-1994 - ac55db48d964cb5469ff03c1cd3ee04d gcc/cp/ChangeLog-1995 -@@ -4411,57 +4401,57 @@ - 9aa3cd9f75c785de9f51446e3f295515 gcc/cp/ChangeLog.tree-ssa - 40c026d4c25f7d1b05e9209c1db5fce9 gcc/cp/Make-lang.in - 9bc6241e715c32f1a0f6e1b8028cb853 gcc/cp/NEWS --659647be28973c09cf89af9df4953b6d gcc/cp/call.c -+bd82179542d443d90a79880b14342022 gcc/cp/call.c - afb9bd2c59a27b9a4e01674e6ef4c2d2 gcc/cp/cfns.gperf - 4dc84f7aecf8adaa3133cffb6b7a9ca6 gcc/cp/cfns.h - 650800f32b775564604880eaff2b3561 gcc/cp/class.c - 739c569e48a7b41b606f425cbc9123d2 gcc/cp/config-lang.in --fa7d60199ae182f298f4f68808ace2c0 gcc/cp/constexpr.c --98f8a059d857e8d87b37bf2bfbdbd4cf gcc/cp/constraint.cc -+fb0b6d2fe3954f87dc683f9bdc764d67 gcc/cp/constexpr.c -+c683759a418cb72958ad21fa84df0a0e gcc/cp/constraint.cc - 3ba51b5d6be105c2076c7c57590c4ef3 gcc/cp/cp-array-notation.c - 186d27a5d5d478e09c882e0110153c3e gcc/cp/cp-cilkplus.c --3691807d913946b1b8f0532b509b32df gcc/cp/cp-gimplify.c -+0baa9bffcd0cdbf12af9016cc861530a gcc/cp/cp-gimplify.c - bb99af59da6436bd29f57f3f050c526f gcc/cp/cp-lang.c - f3d5c0a13bc26cb7c946210741aa3848 gcc/cp/cp-objcp-common.c - f21d1769c40e5fb7e0b4bb740c877732 gcc/cp/cp-objcp-common.h --3c6dca654babce1444b010ecc13ce3a4 gcc/cp/cp-tree.def --65470cc5483576513deae6ce5062ffac gcc/cp/cp-tree.h -+d21831b373779814d66d82151827a70a gcc/cp/cp-tree.def -+7bb799426f6eedb92c6eca4182368c66 gcc/cp/cp-tree.h - 1369f5ca78bd37e84d0985faff35f429 gcc/cp/cp-ubsan.c - 9f77a7a0c8d02ceef78c0f1cc355cca6 gcc/cp/cvt.c --788228fb10c82f2c976b6a846bbabdb0 gcc/cp/cxx-pretty-print.c -+4fb925f8c277dfd445a3480f29c7ab2a gcc/cp/cxx-pretty-print.c - eb1c2da742513f6f21d3de7d3d531d78 gcc/cp/cxx-pretty-print.h --f1c55a4f73e8b4520a611dcc1b78359e gcc/cp/decl.c -+678407e0e9072d19a0290980484e5bdb gcc/cp/decl.c - f43394b8806c96193cee8cfd4a55336b gcc/cp/decl.h --212843cd9766a8b772323ee342b0a165 gcc/cp/decl2.c -+fdc369a0b616bd3345804d936c8247ec gcc/cp/decl2.c - 7ae2c1642094de5138fbb999f0ba1dd7 gcc/cp/dump.c --f0f9894e1405b5c87b3b4ce0cc7e52a0 gcc/cp/error.c -+aa416944f27c2d2b0973de74aa86cf45 gcc/cp/error.c - 55f92fe617bd4f1e45207eb0c41885fa gcc/cp/except.c - e68580c70d9bfd1c150485b9fca85280 gcc/cp/expr.c - 7fd276d735538ed700d62bbcceed734c gcc/cp/friend.c - 953a6283c57f96c8e1146ea75f4e288b gcc/cp/g++spec.c --1442133c15bbf554bb5469f74b8e5f65 gcc/cp/init.c --b9700c4afbc31914aa5aee27ae6f88c0 gcc/cp/lambda.c -+4bba39f4a689ecbc74bf127fd4263f02 gcc/cp/init.c -+3d2180f996851dedb628a5e874ec66a6 gcc/cp/lambda.c - dd9fc96e1760180eadcc31d884bd5258 gcc/cp/lang-specs.h - e978132617f114d81875d7e4a46eb0e9 gcc/cp/lex.c --d87143518404a056fce1d858724c78d4 gcc/cp/logic.cc --6334c1ba17789914f5b23f4a1a3f69d2 gcc/cp/mangle.c --c5a1c61dd0126d95c56b54d9296a34e6 gcc/cp/method.c --f81d03ee229696edc6da94e176422028 gcc/cp/name-lookup.c --c30a346c475398a513900a6416b9a66f gcc/cp/name-lookup.h --deb968fc50478455c08d96ee047fe9dd gcc/cp/operators.def -+bd372ca4699c268d003b88bba0920d87 gcc/cp/logic.cc -+baa9e5359a2757db5e2b361df4a146c5 gcc/cp/mangle.c -+326b441b0bc0067d256b4b72cd6b73a0 gcc/cp/method.c -+447088dbb1483cd82cfd32ddd03aaeb5 gcc/cp/name-lookup.c -+70b3b6f7199163918e5d2a0c1452b772 gcc/cp/name-lookup.h -+764366090f3163fb5ccd85cb19a94cff gcc/cp/operators.def - 1cad434894b0845fc0a6f03de2d39180 gcc/cp/optimize.c --511ff1c2f521689cce1705bdde1fdb9b gcc/cp/parser.c -+d361550a9a144223bd187d146b434eeb gcc/cp/parser.c - b5da26fff61760a30cbda1f01a4c4808 gcc/cp/parser.h --2efcaf76971f5ba20b51e40b1af73f3a gcc/cp/pt.c --d27b06455de42b40c3aa59809ce8e5d0 gcc/cp/ptree.c -+b90b86ba7f3a492099acfd67ab97cbff gcc/cp/pt.c -+e61259963d803da8e625c96134d4f5a6 gcc/cp/ptree.c - f06807decf6ff4b02873679e35ef5865 gcc/cp/repo.c - fc320188ae1e308c62b750b92ce39885 gcc/cp/rtti.c --9a7cb8e4675ba96266c69dde701fa938 gcc/cp/search.c --166191d8843b08d730837b3af2dce517 gcc/cp/semantics.c --2f7b6936624a3d96e86609871f84abc6 gcc/cp/tree.c -+f0b16ecd9783b80773d4b1b34c7cca79 gcc/cp/search.c -+63057d814cda7d68459be27649fd4772 gcc/cp/semantics.c -+79d814f96502c3b714d31e97796e9d17 gcc/cp/tree.c - 4ac4dcdc19063fd7ea7055b2064b4d37 gcc/cp/type-utils.h --ff2ed2489e1b5c86c141aa685a39105f gcc/cp/typeck.c --1f202024e77b011bfd17bef5ce12de4e gcc/cp/typeck2.c -+c8be854d952188928c591e6f91ccea64 gcc/cp/typeck.c -+0270a989f06efe3bd572525956fe0cb4 gcc/cp/typeck2.c - 8b2699a100775446f1d3379bfb10c109 gcc/cp/vtable-class-hierarchy.c - bd835b9ee78a94f4ae3f8adee63f9a51 gcc/cppbuiltin.c - a8b7256c689701d5c714e06099ce8503 gcc/cppbuiltin.h -@@ -4489,7 +4479,7 @@ - d91a67e4d82e6bdeaf9fffd22877f0c6 gcc/debug.h - a2f5dd98d48b024b1d8e92d344a4b25c gcc/defaults.h - 1668c0a4a49475062d63b5e7e79dc0bd gcc/df-core.c --d9d3dfc948e383e99d89b9bf94d0270d gcc/df-problems.c -+b7719ad67f0aeddd22383a71f99829dc gcc/df-problems.c - 8b863d46f0db1d704fb337492860e696 gcc/df-scan.c - 2c97a89f9d8933b777cbcc4c48cf4a89 gcc/df.h - cbe294220fc2c2e1131c4aa645acf01e gcc/dfp.c -@@ -4501,7 +4491,6 @@ - 6bb8763d2cd82acf9315292a011edb6a gcc/diagnostic.c - cc2592797ca4befcbb1163c1a7a00f80 gcc/diagnostic.def - b5b5c842e04bed80ee2680523e412d59 gcc/diagnostic.h --5fc479a26716b39889254afe283c3601 gcc/doc/aot-compile.1 - 4b0e646c5de4431c5d6bbfe40f0cd073 gcc/doc/avr-mmcu.texi - 67be61d4feeb4a05b9c19af733aa05ae gcc/doc/bugreport.texi - 0615182a653a9840fd7ae8745219a5be gcc/doc/cfg.texi -@@ -4511,40 +4500,20 @@ - 240a91046efda88ae96dd3386f6e431c gcc/doc/configterms.texi - de72fb12d4dca40f7a8d5b4429df7991 gcc/doc/contrib.texi - c498cc82ef6af94189c770012a2a18e9 gcc/doc/contribute.texi --cef4aa06bdc96ae8433d4ef6eb0d9e17 gcc/doc/cpp.1 --e33796d8f10e03971c17c727c0ed98ac gcc/doc/cpp.info - 0f2a72efa57326c8f726620c490228a1 gcc/doc/cpp.texi - c558a3f6cb1b068e5bdc0406d2ed7217 gcc/doc/cppenv.texi --ae059b34b3ba2259010d90020291b4f1 gcc/doc/cppinternals.info - 5e146b7ee23d2aecc854dcc8ab494552 gcc/doc/cppinternals.texi - 594e4c25acf69b6587158d05dd033b24 gcc/doc/cppopts.texi --b932543840194c4e96437fd2ceecac4b gcc/doc/extend.texi -+7dad3edc6db5ea68a12718e08cc14d81 gcc/doc/extend.texi - 95f852d1ef912c794a713c43da587f55 gcc/doc/fragments.texi - 6f0ea8cb29b8222c190965f0c877a2fa gcc/doc/frontends.texi --d9402bb24605de2195da4ff24876e5a4 gcc/doc/fsf-funding.7 --0991a56b1679183382c28bcbb676992f gcc/doc/g++.1 --173801a593681cce80cead8f82d17bb5 gcc/doc/gc-analyze.1 --0991a56b1679183382c28bcbb676992f gcc/doc/gcc.1 --a59de0b25ac96403053a8406e13e0413 gcc/doc/gcc.info - 88763fd4a2ca7b1f84637c92258f12c3 gcc/doc/gcc.texi --6aeca8a702bc8b889395d5d5cff7e7ea gcc/doc/gccinstall.info --c57b5c8adcbc824265f2af1eac66db5f gcc/doc/gccint.info - a1072c7fe384b26d4053192ee158b54a gcc/doc/gccint.texi --2e55b10f3b9f54aea645919f7503c4d0 gcc/doc/gcj-dbtool.1 --c27b0341270205e4019a6ea6664bac87 gcc/doc/gcj.1 --61cc329dd6acc1b861a08867a5436ef9 gcc/doc/gcj.info --50ffacc2debe4799d45cb09ad3f79cf4 gcc/doc/gcov-tool.1 - 600e5ec8739c8b59da149866fceeb218 gcc/doc/gcov-tool.texi --0078d98bb3433a8e24cba1b419527449 gcc/doc/gcov.1 - 72bbc01b16e62773dff9dfa7a60f2e01 gcc/doc/gcov.texi - ccdbce7ea9c6edf013744bebd58a7236 gcc/doc/generic.texi --7f263eee8bc8903e68cc203013fa1f53 gcc/doc/gfdl.7 --32e298859d6afe21751a0a14eb789580 gcc/doc/gfortran.1 --5599bfd4bc2ba8a372d0ecbe55f61166 gcc/doc/gij.1 - 5d1606771c73c06954506e0770209ad6 gcc/doc/gimple.texi - 290370669f02bef1502ada9273e5261f gcc/doc/gnu.texi --d61436fe79b7893fb9c4c4e4f3e30f87 gcc/doc/gpl.7 --cdd2c1f4af54045dde46712d1a27a02a gcc/doc/grmic.1 - 07064b30149463ca48cad1274d117022 gcc/doc/gty.texi - ffbbf9909dbcbd3ce420b273106fe852 gcc/doc/headerdirs.texi - 5ddad8e0920359df62f566823c25331e gcc/doc/hostconfig.texi -@@ -4556,26 +4525,23 @@ - 5f5adc2c6c4ebdcf03cc0125250f5995 gcc/doc/include/gpl_v3.texi - 73819b3930a3d4be5d6234070d02386a gcc/doc/include/texinfo.tex - a57e0b900d0ae5846091a1e5f722fcf7 gcc/doc/install-old.texi --908618ce1dc5bb94c6d123dd8d74971f gcc/doc/install.texi -+b0727164f0afe4cdc4f1d83d19d4029d gcc/doc/install.texi - 9e425a943a46a878a1f546f928d14b04 gcc/doc/install.texi2html - a869466cbfcd212e8988279541bdda16 gcc/doc/interface.texi --9370b86f1acf47dd44addb607f8a18fa gcc/doc/invoke.texi --157e4d0432e64fcdedb1c96345c820bb gcc/doc/jcf-dump.1 --e63f6f4d2f72b8b7a2b1ec6bdf7db68d gcc/doc/jv-convert.1 -+8acd73b8868d165bb592a2448c7f9df7 gcc/doc/invoke.texi - a0e7c077817653eddca3b287b2ec1499 gcc/doc/languages.texi - ab4011897f2095293d3a4d9443678fb5 gcc/doc/libgcc.texi - b0981441c4f9daaa09818d68a36bd67f gcc/doc/loop.texi - fc3fd4aafdd4ab47930dcb216ffe03cc gcc/doc/lto.texi - 5c2acf2b3a4a6b50ab9b1544cc49e81f gcc/doc/makefile.texi - ab9503a1420248f03274f60100f0648a gcc/doc/match-and-simplify.texi --c94a6e10ecd4c7f73a44d5488d883968 gcc/doc/md.texi -+27523cb487a4388cb994819a94202ec0 gcc/doc/md.texi - 1f5569ca70207eb8ded92ebefd130c2e gcc/doc/objc.texi - 83bbf74c59b8849c2b8d083a134672c7 gcc/doc/optinfo.texi - e2a974acfc3260f2407c7fe05a990bce gcc/doc/options.texi - 6cd361bc13e8ff0fd0523b24175f2317 gcc/doc/passes.texi - a989acbeb85b23b1813e7e65a54c288f gcc/doc/plugins.texi - 6f4f5f396ee46b12e48520f7305e57d9 gcc/doc/portability.texi --03b5d223de456bb73f15d0b1a5a84f63 gcc/doc/rebuild-gcj-db.1 - bb856e2cc8413005478956f3edee2c25 gcc/doc/rtl.texi - 29e91cae40a54cd373834ec123131f3d gcc/doc/service.texi - 43460cd9078a9e21d9ac0d9315448c43 gcc/doc/sourcebuild.texi -@@ -4598,7 +4564,7 @@ - 3f5963da7e097503d222ddfc4cdf7f81 gcc/dwarf2asm.c - 73944fce2a805f3b1672e5ed81f76558 gcc/dwarf2asm.h - 8b34c3660aa997b685d65ad9a84e597b gcc/dwarf2cfi.c --51d0612220d98685eda04b28b7ea03da gcc/dwarf2out.c -+f7421d7c819ea7001d975537283f1a8c gcc/dwarf2out.c - f2cf5c1bba29ec5e6a5fe0e97d33704b gcc/dwarf2out.h - 07467e53d8d2dd27f0b59fe696a8fcdf gcc/emit-rtl.c - abbd65c7d3f556b7463e8840d7f9d930 gcc/emit-rtl.h -@@ -4625,9 +4591,9 @@ - 9666a2458f11468dd9979a7cfca842e3 gcc/flags.h - b34c1b95a54e16d433363b08e57e7f85 gcc/fold-const-call.c - f4d19b0528d646f769792430919be6ff gcc/fold-const-call.h --1bf1b7a47740199e5e017d0f600ea220 gcc/fold-const.c -+ab9e31d4b5b605eaefc60186362e2cc6 gcc/fold-const.c - b6b5bb4a4f17604d5bcfb47ecba0768c gcc/fold-const.h --ed25f9d2614579b109469f8baa000ba2 gcc/fortran/ChangeLog -+b725b15824f1c7b81c7c09cd56e1047e gcc/fortran/ChangeLog - 3330102ad3a0217cba963be6b5eefd58 gcc/fortran/ChangeLog-2002 - d000ab985b1eeb1ad5749f98b8fef99f gcc/fortran/ChangeLog-2003 - bf42f94f0c51dcc7d8051cc7fda1efdc gcc/fortran/ChangeLog-2004 -@@ -4648,8 +4614,8 @@ - 7c9d0f5b639be38a283363657ac1f70c gcc/fortran/arith.h - 47059c016e7595b3af1c42922178dc19 gcc/fortran/array.c - c9fae371f8d0a027b1391ff1d82faaa8 gcc/fortran/bbt.c --f59852c5908a5588db5020c4a01cbee9 gcc/fortran/check.c --f7730bc6ae7c77ead5b22c3f2b5461a3 gcc/fortran/class.c -+b82a728d2bb98adde289da10985ecbf6 gcc/fortran/check.c -+a54bd3b33cbf5c815eca096b74430780 gcc/fortran/class.c - 4819f6163cdda697542442ead8d1edb9 gcc/fortran/config-lang.in - 1564600ca4ee09dae677a32e9632817c gcc/fortran/constructor.c - 03ded9e724f957a8caca8c58de189bf9 gcc/fortran/constructor.h -@@ -4658,71 +4624,70 @@ - 83041f3879c600754744a8da84761bc9 gcc/fortran/cpp.h - 112c4ba412ed2704834031ec9a0838fa gcc/fortran/data.c - 167ea51b39af01ee143176fe03d80fb1 gcc/fortran/data.h --3d4d10f9c3e0c5d35981b319a48df113 gcc/fortran/decl.c -+041660eff35c68c150d0c59550bcdc63 gcc/fortran/decl.c - 76e1e7c9f910f76e4134669998e6f5ac gcc/fortran/dependency.c - 272c4deffabcf4caf71d639c1c58c42d gcc/fortran/dependency.h --56d1d5b261cad142e3fc2bcfa6a69537 gcc/fortran/dump-parse-tree.c -+749e2d991f54b00758f19992599df58f gcc/fortran/dump-parse-tree.c - 726b63587675a95a5baa3c5ecd44fdea gcc/fortran/error.c --53ea5a6a4cfd9e58dc9d21a5fdf3a66b gcc/fortran/expr.c --03994a1d9a0e1e568a7e80de80cadd76 gcc/fortran/f95-lang.c --5d5cd20adfebef574904cf848b554c25 gcc/fortran/frontend-passes.c -+91f1586393e9f6eb09a1561d84979855 gcc/fortran/expr.c -+8183028b3162dfef1b367f187a615b42 gcc/fortran/f95-lang.c -+91fd2dbe4eb9796193093e1bcaa31c35 gcc/fortran/frontend-passes.c - 9295becaf3bc8598cfdf49e3a4dd9f9b gcc/fortran/gfc-diagnostic.def - 23d6c9cd5c12c7f2aca8fd69d8420b43 gcc/fortran/gfc-internals.texi --a91b46a5fa5e96eb13e61cc2659add8a gcc/fortran/gfortran.h --69a791c44c97de4c0fa19fc541a917b3 gcc/fortran/gfortran.info --5cf4acb87001e9c73595e36b73c568b8 gcc/fortran/gfortran.texi -+d27235635f3a8da5058b24e0f055bf7d gcc/fortran/gfortran.h -+80c16dc56896ccc10c0dc114ac976580 gcc/fortran/gfortran.texi - f3790a90748e52fe5ebfcdc7a009181c gcc/fortran/gfortranspec.c --636f2f2ff53625bc7cbe85f8bcdddec7 gcc/fortran/interface.c -+6cde23691b96f6c87e0d76a0dcd7e1c5 gcc/fortran/interface.c - 5ca2460ab8e955aa2f34d6add206ff50 gcc/fortran/intrinsic.c - abc87572b30804f606b83e64ad5d40b1 gcc/fortran/intrinsic.h - 142af973fab400802b42296914efd857 gcc/fortran/intrinsic.texi --8b7f5aaf3c22e50130731d0800d89704 gcc/fortran/invoke.texi --8acca318648ff2c56c871a498daca0e2 gcc/fortran/io.c -+e8e86258dcee5ce75ba45253468ca0db gcc/fortran/invoke.texi -+df84ac32a26404cf85547111270da776 gcc/fortran/io.c - 16ad8502e6ce930b9b973c52995c76cb gcc/fortran/ioparm.def - 459cab99c8502733fbd738cabfbdd329 gcc/fortran/iresolve.c - c0cd4b25b09215a792a381b8685eaabb gcc/fortran/iso-c-binding.def - 5ca7449ebd20d33390a2d51e103db236 gcc/fortran/iso-fortran-env.def - 278f6140c8d0ffbc2aa9d5f5fe6915f5 gcc/fortran/lang-specs.h --e3f67bf5957e58cc1a3b62ea7bfcd9b1 gcc/fortran/lang.opt --911edc7f24a9b8ac6bf223d3fcd525cc gcc/fortran/libgfortran.h --25ef827d548f8cb705a38ba62f6db89c gcc/fortran/match.c --7b8b9983bd8ed1ce9c04851260d8eb27 gcc/fortran/match.h -+c3e9aefddeb997bc391f60d52a473432 gcc/fortran/lang.opt -+c1444c8a9c2ed90afc8ea627a0d94f85 gcc/fortran/libgfortran.h -+cec7003f1a53e551725030fefc65eae1 gcc/fortran/match.c -+65f0f415082a41f7976f30657958fc69 gcc/fortran/match.h - 8cd46cabc2dfb1a7496801a089b86445 gcc/fortran/matchexp.c - e91ec831c84ed9fa96a1533122ba5461 gcc/fortran/mathbuiltins.def --4a5bd735a771c8b0245b0bf5c972216a gcc/fortran/misc.c --100ade2e21fec64ad80d084582a5f622 gcc/fortran/module.c --5b1a6971820f53e62c69d0455d6d93b4 gcc/fortran/openmp.c --32b64c520ae2d457708ccafb56bdb398 gcc/fortran/options.c --e4982905a015e74a947f5cba2fd5bf8e gcc/fortran/parse.c --5163fc3c6029dd5a8197395b4377afa0 gcc/fortran/parse.h --061decb36333beede21dd5b1e6397fe8 gcc/fortran/primary.c --5905d4d8099abc01becd40e015f04536 gcc/fortran/resolve.c --9ed23a8532184ec8065a2896d8638c3c gcc/fortran/scanner.c -+0b73aa1351022bc9b69b35d237f97d12 gcc/fortran/misc.c -+90de8ceb7bf48f35b7e7bc456635ccb5 gcc/fortran/module.c -+e023aea3b853e2aac54c491b0c7dceaa gcc/fortran/openmp.c -+f8b10b2e5c40bc25b4d9eef7295880fc gcc/fortran/options.c -+025d3494f9ed075d99b64b4a7781543b gcc/fortran/parse.c -+043cf75f229c25d3de2bb79cc984c69d gcc/fortran/parse.h -+4e0e2fd36510d98c289456edbed2c292 gcc/fortran/primary.c -+be434b3f3d88d0010cc278c8d17d84f6 gcc/fortran/resolve.c -+99540dc62dd0f048881facab0517a129 gcc/fortran/scanner.c - 075cca4c5736634c587f4ed50ddc9f93 gcc/fortran/scanner.h - 4b5ab4f68e70934e8adea730a3fa4149 gcc/fortran/simplify.c - 75d50e5ade35f92e65fab4fe0b20630b gcc/fortran/st.c --80b966958d6948acbf1c4c33cbe28c3b gcc/fortran/symbol.c -+f8bbffd124aabc78dbead99719f3d071 gcc/fortran/symbol.c - 186ec08e98303bc7e25afdb9f5e9aab9 gcc/fortran/target-memory.c - 2e5ed3113ab460b7be0e63a724f9f45d gcc/fortran/target-memory.h --0295dbb04ca0ac845ba36122f250b6e6 gcc/fortran/trans-array.c -+adab4b79e93efc39a98d2bde342814f8 gcc/fortran/trans-array.c - 4e46ac05c6b8e884925b4b58c7d78a30 gcc/fortran/trans-array.h - e9814dc5252693185f3e60d55d55a701 gcc/fortran/trans-common.c - 7ca10244eca4229e1c832b3c393d9a24 gcc/fortran/trans-const.c - d23a0f8bcd86907559306d74723ffdbd gcc/fortran/trans-const.h --9ed6a0a514291d5e841dd6379125ab8e gcc/fortran/trans-decl.c --341c6bcf2a7d37d50cb6d5c0ed1affb6 gcc/fortran/trans-expr.c -+36a4681903f12b16f44566186a2691b9 gcc/fortran/trans-decl.c -+a146a0181d77d0294e107bf0c9ce93f6 gcc/fortran/trans-expr.c - 55c2dd391599f5dc06e34c6058f48ee4 gcc/fortran/trans-intrinsic.c --6388c76555cc1e06e93cbe1e40796c0f gcc/fortran/trans-io.c --109c58b7d897545dbe960eef88f09a06 gcc/fortran/trans-openmp.c --12c15965589066ffdc046103e74eb21e gcc/fortran/trans-stmt.c -+988afa7187f8648d73cbbdd53cf6155b gcc/fortran/trans-io.c -+2f638266866f5af39a561ef341e82662 gcc/fortran/trans-openmp.c -+368d4cd52e8634e9fc5c1072a5640e29 gcc/fortran/trans-stmt.c - bd26fd364f82b04b35ca797f1500c5cd gcc/fortran/trans-stmt.h --2dc8f56209eae7fbe3d3ad38d2c6fca0 gcc/fortran/trans-types.c -+3a0a015557497b74675a5808c440f290 gcc/fortran/trans-types.c - 82b8673b874f75d8200f4128222beeee gcc/fortran/trans-types.h - adca0f1898c7b04c8e1d9aee387964bd gcc/fortran/trans.c - 584e7bad1d3257b528944c0a88ac18e9 gcc/fortran/trans.h - ce4ba327ea19d94b982917bf5b2884d4 gcc/fortran/types.def - e02967179fdfb529c8aff94baaf469c2 gcc/fp-test.c --59bd42fe759500cea34d37618a023b2e gcc/function.c -+b61f1a62642aad6032bd3875e55d56ac gcc/function.c - 047cfc91e18845f3b5cf442dbbdd1ee7 gcc/function.h - 497184e6dc781c16b3012d224ab58dd0 gcc/fwprop.c - 51d4643fae226ae5cb6c726118db12a3 gcc/gcc-ar.c -@@ -4731,7 +4696,7 @@ - 22091c79c390a71cf211f90328383954 gcc/gcc-rich-location.c - 6ab0670ac8edcc1a6f5cd76e7e47a982 gcc/gcc-rich-location.h - 3ec648b31caf0bcc6b2062384510367b gcc/gcc-symtab.h --c8beb6d15ada1f869e8a126ba1fe0944 gcc/gcc.c -+1c6a4afc775cce3b78a2d8cedde32118 gcc/gcc.c - 8a5a93ab3252c5ded6be74e451700891 gcc/gcc.h - 1bf3695cc620fbe4091e454d41be48a5 gcc/gcov-counter.def - 46c61075acf42b3a7891409b607f0d19 gcc/gcov-dump.c -@@ -4766,7 +4731,6 @@ - 25b1b08c7f2e15a61f67137a395f2be5 gcc/genextract.c - 282f3c7433a024d985ddccc10c82d417 gcc/genflags.c - d44b194500c23b5c542dbac2c46abcec gcc/gengenrtl.c --48ade094be628d6e2f9bf4c0255ab482 gcc/gengtype-lex.c - 5a1368b972210328f48b0ea87a7191c1 gcc/gengtype-lex.l - ff52666a6b0aebb48f2a4f746fe39b50 gcc/gengtype-parse.c - 0151a4b7715cf1cb836ee33cf7bfdf27 gcc/gengtype-state.c -@@ -4776,7 +4740,7 @@ - 3be5935abab096a672b81c80b559ef1b gcc/genmatch.c - 07b0962a5b0ac2a5f29d44d710ce1ea7 gcc/genmddeps.c - 43130364faec8aac159d938938a22fad gcc/genmddump.c --7ecbd5f6591a89cdfd2fa1fff7b6db01 gcc/genmodes.c -+7c6aaaace1e7de1494b16ba3c1abbdb0 gcc/genmodes.c - ed5f5653c43e59c6b9281e0950f9666d gcc/genmultilib - 5dc9ce1d95f7efc01f7131e05df3e506 gcc/genopinit.c - 6b491dad9092e779224522d123ead72d gcc/genoutput.c -@@ -4795,7 +4759,7 @@ - 18fb4705ad51bdf06734fbcfc8e39d64 gcc/gimple-builder.h - f4acee1cf4c45a5b6db4d0ce9806d3cd gcc/gimple-expr.c - c17954a852b3ab19a3008cca3b24c128 gcc/gimple-expr.h --b0cdbb6b0843346f1808c16e699dcbee gcc/gimple-fold.c -+a86905e31e7631aeec47b8745ae228f1 gcc/gimple-fold.c - 8951c8587158bdc60d4e7d612c6f838c gcc/gimple-fold.h - a14e519ebabb942d1e8a48a4403acab5 gcc/gimple-iterator.c - efd0e45c5f633c150550050337d54cd2 gcc/gimple-iterator.h -@@ -4818,12 +4782,12 @@ - 8c571fcc3b1ac0c3989e3a4973246484 gcc/gimple-streamer.h - 5b4269de0e90ff1a0e228f16c36acf15 gcc/gimple-walk.c - ad1356d1aee1bfaba3647e9dd12fb0bc gcc/gimple-walk.h --e38c521db81137fc28162233d6a5c618 gcc/gimple.c -+b174a67cf43b8c8919274680e0b3ed21 gcc/gimple.c - 65f6f08852f115424e8495c343dcba61 gcc/gimple.def - 641cc4b975ba19a5b0e628733901c0cd gcc/gimple.h - e679c1b4ca7b2361262d0c6fa84805d2 gcc/gimplify-me.c - 16af853ca2f3e873e723eb5ff29a8168 gcc/gimplify-me.h --965c6bde778d881723e3447c823a254f gcc/gimplify.c -+c685b720121fa09a6b261d5e5056561b gcc/gimplify.c - 89047a7045c4653b6016516742695593 gcc/gimplify.h - f8d3ba18b33f417a9767d330d93c0783 gcc/ginclude/float.h - 619900a9f2191899ea818da9819f1182 gcc/ginclude/iso646.h -@@ -4901,10 +4865,10 @@ - 02e7e8c97cb2d8864b2f8a3135ed0011 gcc/graphds.c - 43af169612c4e4d04e00673de385a56b gcc/graphds.h - 800359328b63c4c5c0ef9d59bad00fca gcc/graphite-dependences.c --1527a741b446889615bccc68cd40c1ed gcc/graphite-isl-ast-to-gimple.c -+b3037189d263bf2518bd3521a8652edb gcc/graphite-isl-ast-to-gimple.c - d7586bd35c3d11933ceb61445987b1be gcc/graphite-optimize-isl.c - 44fa75ae4f5cb0ac377521ea75ea1739 gcc/graphite-poly.c --a6fb22307a3a995855f46e2bb900025b gcc/graphite-scop-detection.c -+24cb5670390b40885b9f7e8cbc9e8f2d gcc/graphite-scop-detection.c - 2145e44f71f0e71c5d7525d412b11dc6 gcc/graphite-sese-to-poly.c - 5b53b1f39257a74d35d74267a10667d2 gcc/graphite.c - e2a89ed2d54d88eb79e9c45ac760ba2d gcc/graphite.h -@@ -4930,7 +4894,7 @@ - 3b0d55aa66be65dbe57933c94fa21773 gcc/hsa-brig-format.h - 68951ed27601fde925296e7050c19b08 gcc/hsa-brig.c - 3b45b6386324afbef0330d9d8cdbc09d gcc/hsa-dump.c --78fc9f283cc1eabaf8bd8d95e6461dfe gcc/hsa-gen.c -+cbd0b5366af70ed50a5aa9583995daed gcc/hsa-gen.c - 74ffebc0a61f0ac8bd7a90c8454cdc14 gcc/hsa-regalloc.c - ca9a2dd3e189ffb7385e163641e91f95 gcc/hsa.c - e13e5df371956a53173b7fb59f95b1d5 gcc/hsa.h -@@ -4954,7 +4918,7 @@ - f6eb1829b56b52c1a98e463764f15bb2 gcc/internal-fn.h - fdde96aa99d01f4a2e122427c73416e1 gcc/intl.c - 364233341b4f1261da8627eb826e6269 gcc/intl.h --8a05f2b124212ea048784639ae1805fc gcc/ipa-chkp.c -+26faa305263ec4b39061a74359f92d08 gcc/ipa-chkp.c - 0c2184ed06610d2b6afe4b6f4d417dbe gcc/ipa-chkp.h - f3a24a98107ccc8ad76113ede465029e gcc/ipa-comdats.c - 0da86e2392b6146c88d243312dd82027 gcc/ipa-cp.c -@@ -4962,15 +4926,15 @@ - 09da3707dcc58023f746ab4e5fabd815 gcc/ipa-hsa.c - 8cbeebf152275e9611ce91064d1006f3 gcc/ipa-icf-gimple.c - 455a02b19595e17d311284b20cd9946f gcc/ipa-icf-gimple.h --a46784b0082b24c3723a6bd34efd2056 gcc/ipa-icf.c -+a42f3827f0d168e29f65c96a9e41e40a gcc/ipa-icf.c - 5021b0bbc0eb5fdd57764d9440bc112c gcc/ipa-icf.h --937ec1ea45a11c5be2f5a51a4835000a gcc/ipa-inline-analysis.c --55c5111a5231b83f1b37edd7c28362a2 gcc/ipa-inline-transform.c -+a218a778bd374b99f367df36983a2e05 gcc/ipa-inline-analysis.c -+02dbb68319cd1e4e8561bbcdc37e0b9d gcc/ipa-inline-transform.c - 6ffb5637e26835334d307237572a86d3 gcc/ipa-inline.c --1ede16ebb03f841de4dd96f559a4147b gcc/ipa-inline.h -+5b9e28f57d5dcf8db033236d6d5ff9d7 gcc/ipa-inline.h - 6229fae545ec5dfe5099feff68acbc25 gcc/ipa-polymorphic-call.c - dd94f55f59c59919fcfe73719b53804c gcc/ipa-profile.c --449b3b4152d0852cd2ec595c89f56dda gcc/ipa-prop.c -+6ece3a1963d838aa977b891f381ccc7f gcc/ipa-prop.c - 7a7386b290a6a93fcfde58bd22cfb1f2 gcc/ipa-prop.h - 74d1b10d200d7553ee6f2ca92c0887df gcc/ipa-pure-const.c - ef575b78ba6545da9a738bb6492ffaea gcc/ipa-ref.c -@@ -4982,7 +4946,7 @@ - d01eb784d4a63008ba2460c3b47972b2 gcc/ipa-utils.h - 380724728441c80c569b8ee31d8ab4f1 gcc/ipa-visibility.c - f5194dfc342426fb120aa6ef0dac2984 gcc/ipa.c --bb05e32e874641496c916e3bbe6bd1d5 gcc/ira-build.c -+d40b36379402518db3bf0d60d97b5b55 gcc/ira-build.c - 964fe62f78d9da617c7eb903c20eb3da gcc/ira-color.c - e983cefc45ef903cf9ff61d0968b3bab gcc/ira-conflicts.c - 4a40c778a56feadfe0bd42965dbe084b gcc/ira-costs.c -@@ -4992,7 +4956,7 @@ - 048a61ff1463a425c9c13312cc4f2b77 gcc/ira.c - 74580aa160542aa4992d6a08ca5bc8f2 gcc/ira.h - 31f4d25e8f125875a26ac35cbc927cb8 gcc/is-a.h --ffc43ab034b5486bf1b22c4e25652589 gcc/java/ChangeLog -+ceee6770040d5c58de02381d5a65fb30 gcc/java/ChangeLog - 507793f7d137759eaebce11bb6904781 gcc/java/ChangeLog.gimple-classes - c52fb3faa0748d26588a8c62e7a032e3 gcc/java/ChangeLog.jit - 3becfaac793f49e1f52cd74e78172b48 gcc/java/ChangeLog.ptr -@@ -5003,7 +4967,7 @@ - dd4e349eb537ed7cee7033421af1777f gcc/java/class.c - 08aee25cbbca0291809291e30cdd28e9 gcc/java/config-lang.in - 597e80cf93fe17c733b3325596a87089 gcc/java/constants.c --62abdb3fb4dda2d1403f2255fcf02e67 gcc/java/decl.c -+4357af4636c74da6a36170ca55e3d8da gcc/java/decl.c - 87a5f387a742a553449af36a17f3d81f gcc/java/except.c - 193d30afff097161bfcd483e0fbf9389 gcc/java/expr.c - 6ca90df13b6db79a291d03502b2d026a gcc/java/gcj.texi -@@ -5157,7 +5121,7 @@ - 0e62588ade895bd5b41e9a9f468db224 gcc/lto-streamer-in.c - b93b516820b533bd1682f7a148299c10 gcc/lto-streamer-out.c - bdae986759b0d2c19d10cd95a3469cd6 gcc/lto-streamer.c --239c64daad087416ff10a8a4cee81b36 gcc/lto-streamer.h -+cbc225f3a9d78c6fa301299f140baa3b gcc/lto-streamer.h - fdd4f9b1c13609e47f794ce0d6f0e8da gcc/lto-wrapper.c - 1ecfbd8094590b170282d2a351b69028 gcc/lto/ChangeLog - bdc9ad4ddf80ce5b1548924f27f8df54 gcc/lto/Make-lang.in -@@ -5176,9 +5140,9 @@ - 7055ad53a5a9d81672428d858bc0affe gcc/lto/lto.c - ccfecfc6344c571f12776c61c50b98e1 gcc/lto/lto.h - 1ad92c4f2096f1f11a9d722298472ee5 gcc/machmode.def --2c8fae29dd077ed25751d1dd04ca361f gcc/machmode.h -+89fb633ceadc86168379eec86b822225 gcc/machmode.h - cf42eb61030c258fdda933a353c46798 gcc/main.c --cd34301f756f23f585a735b5e74be501 gcc/match.pd -+541198a830d7864394eae8377a18b824 gcc/match.pd - b4586a3a75b5dc7b5d62ccb834ea81ef gcc/mcf.c - 2befd16012fa1d3dc246e33d405b79f8 gcc/mem-stats-traits.h - 3e4b7d3dfbb311377553673371f9561e gcc/mem-stats.h -@@ -5216,7 +5180,7 @@ - 7d680f67db0eb1b8ff1b353ceb2caa2c gcc/objcp/objcp-decl.h - 8cfb48ffee764ccd1ab5dbf70f0234e0 gcc/objcp/objcp-lang.c - 742609336d1f57839866345f3fe16a98 gcc/omp-builtins.def --4933dc01313d0d9f8a01f52eee41e354 gcc/omp-low.c -+264284b664c34974388708ea2973fc49 gcc/omp-low.c - 17f7f9a5279dd46aca82fdd23c6ed175 gcc/omp-low.h - 56f009a0f93f52fc6e4bec4b17949a48 gcc/omp-simd-clone.c - f773f4ea009b64414353473ab70fc22d gcc/opt-functions.awk -@@ -5235,11 +5199,11 @@ - 5d7c8672928d8e9cb91ef0f415fdbedc gcc/optc-gen.awk - c4436c027680fe15e299195629d8d8ab gcc/optc-save-gen.awk - 0d8d3a459ed81fd2fa69cc19981521a8 gcc/opth-gen.awk --ff58d1ec1d48045472754120b193b85c gcc/opts-common.c -+99b50659a43b24a13195fa23816dcca5 gcc/opts-common.c - 52240b1476d05158d2811656568e12f0 gcc/opts-diagnostic.h - 2f24b289e6b216a31c7775b6bcbe41e4 gcc/opts-global.c - b2e8f32205053e2c288e98224914182a gcc/opts.c --6af4347f770893f6a8f33ce0d86e55da gcc/opts.h -+8bd47fc4db78292cef3e264347c4e0d3 gcc/opts.h - f7daf01f2540429baa36f933638dd34d gcc/output.h - ffc82aaffe672d77f230f006908b6fd0 gcc/params-enum.h - 6d350f6a56aff3c29a7b7ca665bc7c77 gcc/params-list.h -@@ -5252,48 +5216,29 @@ - c35d166939d6fdbd9bb5853c96bb673b gcc/plugin.c - 03231f119da6e6638a69e3c5111324f8 gcc/plugin.def - eb08b5caab095677d912ce793705caf7 gcc/plugin.h --c896550ea8a704b726f70ca8cbe9f083 gcc/po/ChangeLog -+ba8a67e2a742b229f49c824c74fdb505 gcc/po/ChangeLog - b2d1566753aedf7900d55d33f985138c gcc/po/EXCLUDES --73f5a360156bb96df0876f8ae49ee539 gcc/po/be.gmo --858a8db5418c9d759b39a4a7da86584a gcc/po/be.po --34603ebce82e592915a19c8e7c06f46b gcc/po/da.gmo --f2678a98410da89c6ec8aa2b1908d0c6 gcc/po/da.po --fa35eedf6605508229d033bc58e2a1f0 gcc/po/de.gmo --1b41215282905586b826b85e24c8d1a3 gcc/po/de.po --7e7ab58b8fc61fe93e33decf96ef8c73 gcc/po/el.gmo --6b015487bd35c40a3fb5996908172cda gcc/po/el.po --053a5568dc887cbbc880dfc566074b43 gcc/po/es.gmo --d7b7435f6bfba7bcf40b5414a1358ea3 gcc/po/es.po -+da41f20602b08cf3060fdc3573e8bcf3 gcc/po/be.po -+94220484b47be9ea5471835c19a32a5b gcc/po/da.po -+739379c3b5456e6649601d0c629fd327 gcc/po/de.po -+6db04b03851e69d9513b958b788474a7 gcc/po/el.po -+cddbc322a1b9f50ba1b2de6c0235a2da gcc/po/es.po - f9ca050e999d59313ea3c78909a9f041 gcc/po/exgettext --0e57143fe61f4f6ee0257ca229d161ad gcc/po/fi.gmo --75abf91d71cecb1c755024e40d93ab22 gcc/po/fi.po --b62f58644438cf2aaaae0f59982e73f8 gcc/po/fr.gmo --b55a5d1e9f16c3a3aa2a44cfe4efec60 gcc/po/fr.po -+288d71e5a20c49fd49706768856b698f gcc/po/fi.po -+34a30c8ec15ddbd58918aa29b49d7faa gcc/po/fr.po - 7b979b2fb5ee1d4b22999b6b9f35f0d3 gcc/po/gcc.pot --c2a77d92023af97b968c73b45528e1b0 gcc/po/hr.gmo --e17454f620b1863396f3f2683af797ae gcc/po/hr.po --f15aba6d908d5270942778e0ccbfb6cc gcc/po/id.gmo --dd277eb29469e63bfe00ae4782905714 gcc/po/id.po --77592ad1824b3f39700fe7b1894b1349 gcc/po/ja.gmo --3fdef1cfc12a664bf8d23dde1e55244d gcc/po/ja.po --2b1aa89972f54a139e091dbbeb7aa326 gcc/po/nl.gmo --4605a46fbbc2dc43cf1ce2801b22d368 gcc/po/nl.po --4a8ad42adb20bb31f9221cdbaa8f0d56 gcc/po/ru.gmo --c15f983cd43fd56b2e0eed90ca85a5fe gcc/po/ru.po --cd4395a161628525beb444f240c2307d gcc/po/sr.gmo --fc88c9385f4e2e71082a6abd49bc898f gcc/po/sr.po --ce69b0580d1817b86e13fd6c4428f476 gcc/po/sv.gmo --e0a608252df131356ec65d17a9061c8b gcc/po/sv.po --ff242c916dea333c8e317ec48003d4d1 gcc/po/tr.gmo --45707ffef56abe9faf5b143a3bd3fdab gcc/po/tr.po --4334a12890be23c351f96df0fffe489b gcc/po/uk.gmo --baa5ef734ce0408426feb6b807ce880f gcc/po/uk.po --29fda96b949730c3b7a8b4189bccabca gcc/po/vi.gmo --f3ba9df1249e315a2d10d2cb75d5e357 gcc/po/vi.po --6659d133d2a567dc01c9940413a53a17 gcc/po/zh_CN.gmo --d8948f3a5f1de605509a5eb57b822e59 gcc/po/zh_CN.po --c51a9eefbe0b85753a8853ac8eeb2caa gcc/po/zh_TW.gmo --e0670c5e297590bdd0c77686fc15685a gcc/po/zh_TW.po -+abb2afd8fe7053a42cdea743592af384 gcc/po/hr.po -+ba1393a5c416098225a3f67e87525864 gcc/po/id.po -+26448d201f1c6a7c98d3da75046f49fb gcc/po/ja.po -+ea4a08bfee865ce879b44946bacb60eb gcc/po/nl.po -+71622d38892673e00a8acb1e9e495835 gcc/po/ru.po -+3d67f8989dd67ea4d0e1f94afa44e6e2 gcc/po/sr.po -+b6679504541e91960333afe4e78cf341 gcc/po/sv.po -+a986ac0aa1813678d4f968df72abdf9d gcc/po/tr.po -+289dcc1d2584b6c8ae1700abf19b1501 gcc/po/uk.po -+9a88bed7d4b0cfa06a9710a236f1dd37 gcc/po/vi.po -+6a15d527f4bb660ac2ebc11b87810e21 gcc/po/zh_CN.po -+14871a1a198c4b42159769507328fab2 gcc/po/zh_TW.po - 69cb8c2cd669d2ccb4d80d86bafa9b03 gcc/postreload-gcse.c - 136c02b2e1e680f2f1222e7b27b7719a gcc/postreload.c - 02aac36ac6c8089e57cdd45796f95237 gcc/predict.c -@@ -5353,7 +5298,7 @@ - a65b0839331cc74338b9a698a8c6516e gcc/sanopt.c - b765a177a40fac9fa436794081ec1a30 gcc/sbitmap.c - baf1028052c2a830de61b24d81ee5da7 gcc/sbitmap.h --0aab6489f94f24f5fe2eafe5261de2dd gcc/sched-deps.c -+75438eaf5eff450c06d49e939f97fc11 gcc/sched-deps.c - d30bdfafacf75a59010d260990ec7582 gcc/sched-ebb.c - b3011146b1ff654e200cdd1c84fec4f0 gcc/sched-int.h - 39622a83269e62f7612fe8d39aea6bce gcc/sched-rgn.c -@@ -5386,8 +5331,8 @@ - 704b277d6624cf0434ceb4413e457e58 gcc/statistics.h - 7b179dec806446f7af9f32ba1fa83b4e gcc/stmt.c - db0a871bfd07020c451cf0485edc8552 gcc/stmt.h --49f0ea4833afb345b5e18ca1f285b75c gcc/stor-layout.c --e6d4593c48e3361d44b0e1053250fd6c gcc/stor-layout.h -+7e2228b71f5d90edc613ec0c4848cdac gcc/stor-layout.c -+364b3f58d3ac50134a8eefb5f91fa0ad gcc/stor-layout.h - 8e3a2b656051f3ce59d1cde56e90e8ff gcc/store-motion.c - f5f79d3f7f15413b9096d592037d0446 gcc/streamer-hooks.c - 1a4f5f53317ad7289c572457c76a8610 gcc/streamer-hooks.h -@@ -5406,7 +5351,7 @@ - 43bc671be91bb4d94848b3e7f27a2930 gcc/target.h - 390fdb346018f2dac89921ab740e4205 gcc/targhooks.c - 4e44e54a960fb8713cc9c2975d7d27f9 gcc/targhooks.h --5787a5d3f70d58542e3517734f0ad8f1 gcc/testsuite/ChangeLog -+71f38c7eec649ccf0aa40be00b8367a6 gcc/testsuite/ChangeLog - 862f04afbd87da2cc6bc432c3f28430f gcc/testsuite/ChangeLog-1993-2007 - 029a5d8dacd25eb5d4711452ac448e5b gcc/testsuite/ChangeLog-2008 - 13ac28c41d51b66b4ec40dba6bd50f39 gcc/testsuite/ChangeLog-2009 -@@ -8145,6 +8090,7 @@ - 0a221c339accacadef51e91e2f07b9ba gcc/testsuite/c-c++-common/asan/pr63888.c - 2a794af8b446f3413fe5b973ea309b7b gcc/testsuite/c-c++-common/asan/pr64820.c - 430079f735bd0792e25216b9c0862dae gcc/testsuite/c-c++-common/asan/pr70541.c -+dee6718aa031ca364c15580524cba02b gcc/testsuite/c-c++-common/asan/pr70712.c - 53382ff9da47e361b5e5dc525d26e518 gcc/testsuite/c-c++-common/asan/red-align-1.c - 40dc4b3092482d9427dfbc9415f0b0a8 gcc/testsuite/c-c++-common/asan/red-align-2.c - 8940936501084c6e4d7f6d110ba612d8 gcc/testsuite/c-c++-common/asan/rlimit-mmap-test-1.c -@@ -8428,11 +8374,13 @@ - 25018148b12e7e9ba0bb52c882a3c39b gcc/testsuite/c-c++-common/goacc-gomp/nesting-fail-1.c - 318406ae2dc40af036abc40c46d96836 gcc/testsuite/c-c++-common/goacc/Wparentheses-1.c - a784e64918008022358c8ee789eb6150 gcc/testsuite/c-c++-common/goacc/asyncwait-1.c --8c9f8683e5b47206924e6f5b01d98e86 gcc/testsuite/c-c++-common/goacc/cache-1.c -+f2b008762a25069d1c4d34ad85325ccc gcc/testsuite/c-c++-common/goacc/cache-1.c -+23d462264295eb148c028e9cc0c451ea gcc/testsuite/c-c++-common/goacc/cache-2.c - ed0df84115a0f8b333602804bdee2a95 gcc/testsuite/c-c++-common/goacc/clauses-fail.c - 8bfd01f209498815723e71000488572c gcc/testsuite/c-c++-common/goacc/collapse-1.c - ca2517a3cc3cd3ae7a63df0a68ad4598 gcc/testsuite/c-c++-common/goacc/combined-directives-2.c --6a3920d3728f9ade384ff4fd7f3a5d2c gcc/testsuite/c-c++-common/goacc/combined-directives.c -+4b20350010ccaafbe6720c0beec63fb9 gcc/testsuite/c-c++-common/goacc/combined-directives.c -+c68fccfb3ff8b00b01d51396677c6d59 gcc/testsuite/c-c++-common/goacc/combined-reduction.c - 6ff2b7486e948a4634adb071ea7906c0 gcc/testsuite/c-c++-common/goacc/data-1.c - c6b67854e61db0e6384c49c9402e9939 gcc/testsuite/c-c++-common/goacc/data-2.c - b0b60bf50600ebe553878a82dfa99c8d gcc/testsuite/c-c++-common/goacc/data-clause-duplicate-1.c -@@ -8531,7 +8479,7 @@ - 99033a31ad0844a80bb561d39f21bc2c gcc/testsuite/c-c++-common/gomp/atomic-8.c - a6583e4cf6c5bb3b1a46172a0635d197 gcc/testsuite/c-c++-common/gomp/atomic-9.c - 6eec1bac67576f5cb167599634a153cb gcc/testsuite/c-c++-common/gomp/cancel-1.c --443946b78808c77b5280fbe5ad4c87ff gcc/testsuite/c-c++-common/gomp/clauses-1.c -+4643decfdedb2843b4b2903c5f686d54 gcc/testsuite/c-c++-common/gomp/clauses-1.c - aeca3a50d934c2d4e5e18c86aa8ec65c gcc/testsuite/c-c++-common/gomp/clauses-2.c - 657094047e2432f3bc3c5cafde1eafcd gcc/testsuite/c-c++-common/gomp/clauses-3.c - 8d9ef02ce9840a58a8c64026e4df30b2 gcc/testsuite/c-c++-common/gomp/clauses-4.c -@@ -8592,6 +8540,8 @@ - f230f09eac11df86e31192d6bf15c8d3 gcc/testsuite/c-c++-common/gomp/pr67521.c - befbc361d92f725fefa0029d54d3c22b gcc/testsuite/c-c++-common/gomp/pr70550-1.c - 4c7e38cbcd8c76fb43d8ce5a9a036711 gcc/testsuite/c-c++-common/gomp/pr70550-2.c -+9c6ccd1b697ca4b2f7de134bafdfda56 gcc/testsuite/c-c++-common/gomp/pr71371.c -+8d4187a1bda8777b2ff9ff3a8693ac86 gcc/testsuite/c-c++-common/gomp/pr71758.c - 5d522e2f1f7455bc45f6c1f230d5a5b0 gcc/testsuite/c-c++-common/gomp/priority-1.c - 1dc7bbbafb91e179ac43fa3959ab125f gcc/testsuite/c-c++-common/gomp/reduction-1.c - a73d7c3b3886856e6621c6e5854c3333 gcc/testsuite/c-c++-common/gomp/schedule-modifiers-1.c -@@ -8714,7 +8664,7 @@ - cbe3fc815940c07168eae35940a68240 gcc/testsuite/c-c++-common/pr69558-3.c - 021fff0470a2865e5a38b50712393164 gcc/testsuite/c-c++-common/pr69558-4.c - 11a73961cd31ec2471c0e9cc3200e966 gcc/testsuite/c-c++-common/pr69558.c --31a4c6dc3751ea2efa2efa81ce54fc52 gcc/testsuite/c-c++-common/pr69669.c -+388b963ce0a6d74b387fe44e74666652 gcc/testsuite/c-c++-common/pr69669.c - dc7d9d40dac973e012fc8b7b6f54d784 gcc/testsuite/c-c++-common/pr69764.c - f4386df5fa5c32d56388c75bdf15c9d4 gcc/testsuite/c-c++-common/pr69797.c - 65bc4d5f65c8acc789b20b18a397a09c gcc/testsuite/c-c++-common/pr70144-1.c -@@ -8723,6 +8673,7 @@ - 25c6ea4844eb15010d49a3780fb6bb37 gcc/testsuite/c-c++-common/pr70297.c - ccc164356d4817396e516749bf924ce8 gcc/testsuite/c-c++-common/pr70336.c - ddcfc64c63208f870fb7e0fe0276319d gcc/testsuite/c-c++-common/pr70651.c -+ab8ceba35b76e5122ef1d15e5a6d31ba gcc/testsuite/c-c++-common/pr71372.c - b0ba836310044e7b419ef679f0b48d6f gcc/testsuite/c-c++-common/raw-string-1.c - 554e7071d2525351de28445762633866 gcc/testsuite/c-c++-common/raw-string-10.c - fc54e7227094f307fa566b3a8cd0ba9a gcc/testsuite/c-c++-common/raw-string-11.c -@@ -8901,6 +8852,7 @@ - f7ac21b5467fdafd31e4d63c13bba697 gcc/testsuite/c-c++-common/ubsan/bounds-10.c - 8a79b5ac2324b237d4b97f40d8caef20 gcc/testsuite/c-c++-common/ubsan/bounds-11.c - c0cea811b60785fdbeb5a8c17cbfe97d gcc/testsuite/c-c++-common/ubsan/bounds-12.c -+e41a9c9640280bfabdc970ff41f1e444 gcc/testsuite/c-c++-common/ubsan/bounds-13.c - 5ce7dbfd4301c9cde8b861eef45a151b gcc/testsuite/c-c++-common/ubsan/bounds-2.c - e7f60e0642d24587e57ad55271053c36 gcc/testsuite/c-c++-common/ubsan/bounds-3.c - 55d21c141077691618a0992441b77856 gcc/testsuite/c-c++-common/ubsan/bounds-4.c -@@ -9522,9 +9474,9 @@ - 0f37e29f62414944ff8ae0b75a77f2c0 gcc/testsuite/g++.dg/concepts/constrained-parm.C - b5e01f926b642aa30736fa60d24db29a gcc/testsuite/g++.dg/concepts/decl-diagnose.C - 391bcf94c298040bce05a2bc3c1fe6a6 gcc/testsuite/g++.dg/concepts/deduction-constraint1.C --61025db31db6fc9bd377f8dbcc5b997c gcc/testsuite/g++.dg/concepts/diagnostic1.C -+ef831b23357717a1194aabd267da39eb gcc/testsuite/g++.dg/concepts/diagnostic1.C - d8f521f37e4f01ddd0581d00a83a9be0 gcc/testsuite/g++.dg/concepts/disjunction1.C --d9435abbf2c120b3e86351722c471f92 gcc/testsuite/g++.dg/concepts/dr1430.C -+eca2e51caee3cfce80ec8e3714c464f4 gcc/testsuite/g++.dg/concepts/dr1430.C - 5088c07f3bb6eeb91fa790bf5e35ac12 gcc/testsuite/g++.dg/concepts/equiv.C - 8d8c066843ef43dad83d062249b81c9e gcc/testsuite/g++.dg/concepts/equiv2.C - 1952696facfb66a6315b0d4f4705c4ee gcc/testsuite/g++.dg/concepts/explicit-inst1.C -@@ -9538,7 +9490,7 @@ - 501c4dfeab8ff32a18f46ad605b6546d gcc/testsuite/g++.dg/concepts/explicit-spec5.C - 8119a7faeb5616c44ff49d2bd334eac9 gcc/testsuite/g++.dg/concepts/explicit-spec6.C - 96104c437a91a0fb547269950a1e36f4 gcc/testsuite/g++.dg/concepts/expression.C --52f0561a49ff6a8c9b047023f5157daf gcc/testsuite/g++.dg/concepts/expression2.C -+9cd0bdf0163dc59d13bb259276c6ae5e gcc/testsuite/g++.dg/concepts/expression2.C - 87c2debb21e393a5ad7cace00e6e3ebc gcc/testsuite/g++.dg/concepts/expression3.C - 1014808baa24324e788c7dd8365e1ce3 gcc/testsuite/g++.dg/concepts/feature-macro.C - b7abb47c2caa2a79fd16fab511bb2732 gcc/testsuite/g++.dg/concepts/fn-concept1.C -@@ -9608,11 +9560,13 @@ - 027f2c7c0ad7e093a74f28f9d0d7d647 gcc/testsuite/g++.dg/concepts/req16.C - 561f41b46177b2306d20376cbf26d558 gcc/testsuite/g++.dg/concepts/req17.C - 8af4e2969556c6e997e15e5f597d1321 gcc/testsuite/g++.dg/concepts/req18.C -+9ffd899c33f7220af9323a4c2742bd97 gcc/testsuite/g++.dg/concepts/req19.C - fc37b1d1ffeb8646c92ec29e5dedb414 gcc/testsuite/g++.dg/concepts/req2.C -+0ca7d0d8ad43bd2d06816711d6448be1 gcc/testsuite/g++.dg/concepts/req20.C - 9240432b308eb3d01848b9219bf54574 gcc/testsuite/g++.dg/concepts/req3.C --789edfd6a18eb7aefdb70de5ee2d7fc0 gcc/testsuite/g++.dg/concepts/req4.C --e6fadc6e6565a21c82b671cf83db5509 gcc/testsuite/g++.dg/concepts/req5.C --a837c9f121398c34d9d464990ba30ef4 gcc/testsuite/g++.dg/concepts/req6.C -+1bdb8c23a97fc02dc59b0fca6be8514d gcc/testsuite/g++.dg/concepts/req4.C -+a847d33fd2714f5bc1c7bf82c0176102 gcc/testsuite/g++.dg/concepts/req5.C -+9553bc47ec33281c4ec07de996a4989b gcc/testsuite/g++.dg/concepts/req6.C - cf1a1cf4f90160b4b86afb8e6484459d gcc/testsuite/g++.dg/concepts/req7.C - 16d982b507ffee80be5a1bc873fff0ea gcc/testsuite/g++.dg/concepts/req8.C - 8280cb973b01ac7880086901d73a394e gcc/testsuite/g++.dg/concepts/req9.C -@@ -9637,16 +9591,17 @@ - 28cce2ca57d1f29a0d0eade359d3c202 gcc/testsuite/g++.dg/concepts/var-concept4.C - 014df05bdbdfd4aef2968bb90ad28e65 gcc/testsuite/g++.dg/concepts/var-concept5.C - c0a0dd84a577ada307b7869dc3ea7612 gcc/testsuite/g++.dg/concepts/var-concept6.C --b6115b5e4ac7a76ce3c27db80d14c531 gcc/testsuite/g++.dg/concepts/var-templ1.C -+d686009ae0430347493849435d065149 gcc/testsuite/g++.dg/concepts/var-templ1.C - e943848fb59fdc24e521fa408a8d7684 gcc/testsuite/g++.dg/concepts/var-templ2.C - 55d37ce4725b2bb2562b6bf081fb2d6e gcc/testsuite/g++.dg/concepts/variadic1.C --1c6ba3dc03a4aac6e93ecddc77820621 gcc/testsuite/g++.dg/concepts/variadic2.C -+49188af171efd3fc7a4910e5f4c2ed79 gcc/testsuite/g++.dg/concepts/variadic2.C - b090b7633124e41a8ed5f692e4b2bdef gcc/testsuite/g++.dg/concepts/variadic3.C - 47d50ea9841dfff2e1add4fe21d8cdd8 gcc/testsuite/g++.dg/conflict-markers-1.C - f25f03bef75b49b3242b2b981a26687a gcc/testsuite/g++.dg/constexpr-null1.C - f0aed431ce3357281e21fdd3e10a7644 gcc/testsuite/g++.dg/conversion/access1.C - cae83e7bca15183b3b346f9a00467f2c gcc/testsuite/g++.dg/conversion/ambig1.C - 65bec450f1ba3239f73319431b72958b gcc/testsuite/g++.dg/conversion/ambig2.C -+722f350c4414b8268cd41e6ba6e87739 gcc/testsuite/g++.dg/conversion/ambig3.C - 692916f43054879ce077252221b118a2 gcc/testsuite/g++.dg/conversion/base1.C - f1b5334044ded17fb9949549b0502764 gcc/testsuite/g++.dg/conversion/bitfield1.C - 38f6bad87ae88f3b5e8814eb2a0cb3cd gcc/testsuite/g++.dg/conversion/bitfield10.C -@@ -9747,6 +9702,7 @@ - 74bb2cd707774dcc79b45b939b21d2a8 gcc/testsuite/g++.dg/cpp0x/Wnarrowing3.C - 98f5997ac53fff61b85f99bfe358a506 gcc/testsuite/g++.dg/cpp0x/Wnarrowing4.C - 6ae3451e0c7b222e73c985a0c76a4253 gcc/testsuite/g++.dg/cpp0x/Wunused-parm.C -+c9c65f2ce729014de1f8d5a02bf08a2a gcc/testsuite/g++.dg/cpp0x/Wunused-variable-1.C - 948a776d6405969529e65e69911b6f98 gcc/testsuite/g++.dg/cpp0x/Wzero-as-null-pointer-constant-1.C - 1821a76c969bbe9fe98225106370d360 gcc/testsuite/g++.dg/cpp0x/Wzero-as-null-pointer-constant-2.C - 1388db9b52c8fb258faed2c95049bb99 gcc/testsuite/g++.dg/cpp0x/__func__.C -@@ -9804,6 +9760,7 @@ - 8202db24e0fe65d1f9e1618bd0be1554 gcc/testsuite/g++.dg/cpp0x/alias-decl-50.C - 72736d15450a5e2c6eff6d212a1c62ea gcc/testsuite/g++.dg/cpp0x/alias-decl-51.C - ff3cdd35e9b74954a4247257ac643335 gcc/testsuite/g++.dg/cpp0x/alias-decl-52.C -+aeae7dcc61eb495ebb095caa00a5f429 gcc/testsuite/g++.dg/cpp0x/alias-decl-55.C - a16b0e12dce894e9bc097e3fbad8787d gcc/testsuite/g++.dg/cpp0x/alias-decl-6.C - 816dbf372a71890f9515376534ec312b gcc/testsuite/g++.dg/cpp0x/alias-decl-7.C - 77aa48fcd9f9b9ffab08fa7ebc5d52e2 gcc/testsuite/g++.dg/cpp0x/alias-decl-8.C -@@ -9820,6 +9777,7 @@ - f441b8f61e57b375afffc578a0ab410b gcc/testsuite/g++.dg/cpp0x/alignas3.C - 842d4bc39d9ce4591190d72ce324a6a8 gcc/testsuite/g++.dg/cpp0x/alignas4.C - 2490568ef637fae72e27c31a035040f2 gcc/testsuite/g++.dg/cpp0x/alignas5.C -+6cd5b5dc6ccc7b589a806bdced15c4db gcc/testsuite/g++.dg/cpp0x/alignas7.C - dad14da1d0b01a33c9cdabaaf609eb0a gcc/testsuite/g++.dg/cpp0x/alignof.C - f6ed96119608d817c8a36a47de91e2bc gcc/testsuite/g++.dg/cpp0x/alignof2.C - a341935f38f4b4581206e23c9027c975 gcc/testsuite/g++.dg/cpp0x/alignof3.C -@@ -9866,6 +9824,7 @@ - d9b716e1c070d979f6ba213732af91c4 gcc/testsuite/g++.dg/cpp0x/auto45.C - 19479e39ea80e3649e4b4b41c4c2abeb gcc/testsuite/g++.dg/cpp0x/auto46.C - 44db23ed368948ddb9b1a48f48c7bdaa gcc/testsuite/g++.dg/cpp0x/auto47.C -+a9475f77c4033a39fd7cae71ded2db91 gcc/testsuite/g++.dg/cpp0x/auto48.C - 7abd7f6467fdec05adaab6e23e984bfb gcc/testsuite/g++.dg/cpp0x/auto5.C - a2ff527dcef7e9b2af2703655b2eda60 gcc/testsuite/g++.dg/cpp0x/auto7.C - e90d2ff3c84b5ead3e920a1d12881e02 gcc/testsuite/g++.dg/cpp0x/auto9.C -@@ -9928,6 +9887,7 @@ - 6d2a7bdbddfaf87d584b814bf1961f04 gcc/testsuite/g++.dg/cpp0x/constexpr-70204b.C - 4b441a48b11747fe319801157a36c4a6 gcc/testsuite/g++.dg/cpp0x/constexpr-70323.C - afb210848d078a6555666048b75692fb gcc/testsuite/g++.dg/cpp0x/constexpr-70323a.C -+34638f51d99af855474a3feb1f02e5d7 gcc/testsuite/g++.dg/cpp0x/constexpr-71828.C - de3d6255780c29f63df3f8d96932bd39 gcc/testsuite/g++.dg/cpp0x/constexpr-98.C - 1bc1c995533b047ed8df6f6f24905cd1 gcc/testsuite/g++.dg/cpp0x/constexpr-99.C - 3ccc1912e7827aae6b55936a3bf3bb24 gcc/testsuite/g++.dg/cpp0x/constexpr-__func__.C -@@ -9955,6 +9915,8 @@ - c674590e5f0bbd6aa35938ccaa364818 gcc/testsuite/g++.dg/cpp0x/constexpr-array13.C - a3fe89999694d5e28c05f50283b43674 gcc/testsuite/g++.dg/cpp0x/constexpr-array14.C - 9a2ca70ccd537baf9a32359fd8f4b890 gcc/testsuite/g++.dg/cpp0x/constexpr-array15.C -+0d357130ee7bed073a309d7d917b8baa gcc/testsuite/g++.dg/cpp0x/constexpr-array16.C -+b67bdded4c1fdae8a63fc397fa97f855 gcc/testsuite/g++.dg/cpp0x/constexpr-array17.C - 687c6e77d4af3cd918c0ff421773a66c gcc/testsuite/g++.dg/cpp0x/constexpr-array2.C - 8b7c8e7c1b64cfa0626f7f2311c9fef5 gcc/testsuite/g++.dg/cpp0x/constexpr-array3.C - 6451aa5bb5fa736dda3ebad1dc2e8336 gcc/testsuite/g++.dg/cpp0x/constexpr-array4.C -@@ -10123,10 +10085,11 @@ - 4d49e9b974a931e39b282bff1452e17a gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem3.C - 3123b806108a774709cd5a02856fa2a3 gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem4.C - 207019aa55e1983b45122db974bd0948 gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem5.C -+bdbdee9b8211644ca4eaf7ef1be48857 gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem6.C - 32da508b62d5ba45ac51680a9a5638a4 gcc/testsuite/g++.dg/cpp0x/constexpr-ptrsub.C - c893e2388f9acef593b874b1e6b02071 gcc/testsuite/g++.dg/cpp0x/constexpr-pure.C - 3d462eb6b34feb0c1cf9349c9e6e976c gcc/testsuite/g++.dg/cpp0x/constexpr-recursion.C --e928dbbe606fe0e66600ffb39f8ec1ac gcc/testsuite/g++.dg/cpp0x/constexpr-recursion2.C -+d0613cd67d583f80a028bb4816e6c9e8 gcc/testsuite/g++.dg/cpp0x/constexpr-recursion2.C - 5e160a188aef7805034f272bd43d2ab7 gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration1.C - dc7a7eb622691a6363e90822f0e39072 gcc/testsuite/g++.dg/cpp0x/constexpr-ref1.C - d1d1aecd66ba1c7f2b50e13b37172d43 gcc/testsuite/g++.dg/cpp0x/constexpr-ref2.C -@@ -10204,7 +10167,7 @@ - 58e380f5c0bc16e86009e605e19acb07 gcc/testsuite/g++.dg/cpp0x/constexpr-volatile.C - 7bca20d6ac21d6cb78ab16d5c52b7e64 gcc/testsuite/g++.dg/cpp0x/constexpr-wstring1.C - 1bd363de99cf0f80a7a4045242fee01f gcc/testsuite/g++.dg/cpp0x/constexpr-wstring2.C --dd5a416dd6cf70c8d633073c2bdfd8b3 gcc/testsuite/g++.dg/cpp0x/conv-tmpl1.C -+70dc080523c40a07cec30261f6f7007a gcc/testsuite/g++.dg/cpp0x/conv-tmpl1.C - 38cf671e2c9af718ef5149c2d09c8383 gcc/testsuite/g++.dg/cpp0x/cplusplus.C - 61947bc3307a11bf874ab41c139e4d41 gcc/testsuite/g++.dg/cpp0x/cplusplus_0x.C - 785a499e3417eea504fae30dbd16a77f gcc/testsuite/g++.dg/cpp0x/dc1.C -@@ -10287,6 +10250,7 @@ - 052b7eec67bbc39fded7404fdeff4428 gcc/testsuite/g++.dg/cpp0x/decltype61.C - b7d187347381223b6effdb89e05e85df gcc/testsuite/g++.dg/cpp0x/decltype62.C - e0815b98196aea0739acd0b3e2b6b78f gcc/testsuite/g++.dg/cpp0x/decltype63.C -+d2625dbb2a029ee93a5c64304e4db88e gcc/testsuite/g++.dg/cpp0x/decltype65.C - c3626f3b26fbb53bd234a4e39649b63f gcc/testsuite/g++.dg/cpp0x/decltype7.C - bbdff105c665351973aaa6a25eaa0940 gcc/testsuite/g++.dg/cpp0x/decltype8.C - 4b13c00f57a3a7cb225369c29f8fd6f6 gcc/testsuite/g++.dg/cpp0x/decltype9.C -@@ -10534,6 +10498,8 @@ - d3df2168b01c7df3891e31a076616e58 gcc/testsuite/g++.dg/cpp0x/inh-ctor18.C - 798dc3612d523e6b99b6a497b1f8ae60 gcc/testsuite/g++.dg/cpp0x/inh-ctor19.C - 69ee4b066e7054d7163a882761fcc7c7 gcc/testsuite/g++.dg/cpp0x/inh-ctor2.C -+1e245cab6f0228068139bd22ddc79d66 gcc/testsuite/g++.dg/cpp0x/inh-ctor20.C -+ae53be78261501cbb9b25c7630f78cb5 gcc/testsuite/g++.dg/cpp0x/inh-ctor21.C - 6a7a4b5897b83f2f6ebdd08eb567d152 gcc/testsuite/g++.dg/cpp0x/inh-ctor3.C - 071eafda7f7d2d4bff42921fbd048a45 gcc/testsuite/g++.dg/cpp0x/inh-ctor4.C - fda4f7d4f4b57c79d7734d634ae9041f gcc/testsuite/g++.dg/cpp0x/inh-ctor5.C -@@ -10558,6 +10524,7 @@ - e3ec7ab89d20e6ccf50aa92954896f07 gcc/testsuite/g++.dg/cpp0x/initlist-postfix-open-square.C - 1b5c7e432be89c3edcbfaad424a2e353 gcc/testsuite/g++.dg/cpp0x/initlist-protected.C - fd02e573e3be3d0a146192cd840840a1 gcc/testsuite/g++.dg/cpp0x/initlist-pure.C -+b981bb775821a5230961a162ba38ff43 gcc/testsuite/g++.dg/cpp0x/initlist-template1.C - 742c772ced8eedc3c0511b94b8410082 gcc/testsuite/g++.dg/cpp0x/initlist-value.C - fab23eb9efdcf1b8c0f8393aa5ad7913 gcc/testsuite/g++.dg/cpp0x/initlist-value2.C - 93763afe3eb7edb5553f76daf0ed0de3 gcc/testsuite/g++.dg/cpp0x/initlist-vect.C -@@ -10690,6 +10657,7 @@ - fc87adf1aa8763a35e80b1067faf9948 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const5.C - 25265bcafc26c3a0ab3727a9ff348916 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv.C - 862ed5b4e67a8a0e32b42b5792ae7fff gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv10.C -+522c3e9a3e7905c1f6e87fc6ce263930 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv11.C - 299fbfde279f22ba6cf7e79d7e17f49b gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv2.C - 13859d1112ce3900c792dcdc2e8ae085 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv3.C - b91c55a7472ec7a8d2f35a01f04cc387 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv4.C -@@ -10737,6 +10705,7 @@ - c4dbb33289335abfc0e81ecec97d4f05 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice13.C - dc3a51c8d29b09710666fc488cca027c gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice14.C - 1042a4840f48bd0952ae8bb7b25b0885 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice15.C -+37dfc8c9afae1533f73b7fca269e891d gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice16.C - f7f1dbbd136c0efa4e64ac7431acecd4 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice2.C - 32e4ddab4dbbba84634a9be94759430d gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice3.C - 47226bea0ac5dc3c286fd8fe05473a80 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice4.C -@@ -11095,6 +11064,9 @@ - ab186fe632aff8530f69060d5961b489 gcc/testsuite/g++.dg/cpp0x/pr68726.C - d584417478a609ab589447aa7e173812 gcc/testsuite/g++.dg/cpp0x/pr69056.C - 4ca96cbe7b69845eba2cf016007957a4 gcc/testsuite/g++.dg/cpp0x/pr70528.C -+cf9cf154014255688dedeb39cfe8e73b gcc/testsuite/g++.dg/cpp0x/pr70869.C -+c69896dc2fac3243e492d5e8acf8d0b8 gcc/testsuite/g++.dg/cpp0x/pr71054.C -+bf28b34cff6af29465046bf24b9bff82 gcc/testsuite/g++.dg/cpp0x/pr71739.C - 53428f69a6d0153074c9b06ee9fbe9e7 gcc/testsuite/g++.dg/cpp0x/ptrmem-cst-arg1.C - 6e8e648c26d9bf237cc152180e88c2c2 gcc/testsuite/g++.dg/cpp0x/range-for1.C - 5c7a98d8ca2f0f427c081bf6902aa831 gcc/testsuite/g++.dg/cpp0x/range-for10.C -@@ -11120,11 +11092,12 @@ - 64c77a507ebcd58347cb4a538ae16807 gcc/testsuite/g++.dg/cpp0x/range-for29.C - ba9e5975a5058b94945c4d18bb19b344 gcc/testsuite/g++.dg/cpp0x/range-for3.C - 4b0681c49d2c294d37da68e8ae679248 gcc/testsuite/g++.dg/cpp0x/range-for30.C -+2e0b59cf549f3ada1e2c24f0828fd564 gcc/testsuite/g++.dg/cpp0x/range-for31.C - cf3faabae812bd6f8ade13f3c1d36871 gcc/testsuite/g++.dg/cpp0x/range-for4.C - 9d70da20463079b62be580867a3e6601 gcc/testsuite/g++.dg/cpp0x/range-for5.C - bf09a13cfe61445a898ea383c44bc795 gcc/testsuite/g++.dg/cpp0x/range-for6.C - cf6c66c2c1f26f78f53b3a006d996662 gcc/testsuite/g++.dg/cpp0x/range-for7.C --52e4fd10daa41fb157218e52014c09f1 gcc/testsuite/g++.dg/cpp0x/range-for8.C -+b111f953ff16a99ffc3ad09a151f0958 gcc/testsuite/g++.dg/cpp0x/range-for8.C - 68a9925bd047631ad89890587ebf286d gcc/testsuite/g++.dg/cpp0x/range-for9.C - 87cba3bd81389f956a4ab8405ad5dc46 gcc/testsuite/g++.dg/cpp0x/ref-qual-mangle1.C - af4673410b97bcc5393dd82a2599c2d1 gcc/testsuite/g++.dg/cpp0x/ref-qual-multi-neg.C -@@ -11251,6 +11224,7 @@ - 6cdcb8a895c4b3868012fd320d412513 gcc/testsuite/g++.dg/cpp0x/sfinae54.C - 1e0939ee9e6841aacffde1ae4c5d3023 gcc/testsuite/g++.dg/cpp0x/sfinae55.C - c0fee994e880e6032fe6c1fa1a6efa69 gcc/testsuite/g++.dg/cpp0x/sfinae56.C -+2628399b955cc58affa3be676427e085 gcc/testsuite/g++.dg/cpp0x/sfinae57.C - 7d2a515d9dca41b0e82b2e6ea54bd2d3 gcc/testsuite/g++.dg/cpp0x/sfinae6.C - ec1a51ea3fd41e6e61c8f425bde1fd0b gcc/testsuite/g++.dg/cpp0x/sfinae7.C - 547894832b1452d5f513938e0cb8a166 gcc/testsuite/g++.dg/cpp0x/sfinae8.C -@@ -11385,6 +11359,10 @@ - aaa90c1c2261698f9319415498163db1 gcc/testsuite/g++.dg/cpp0x/variadic-function.C - fb23a824547af5cbc2d6ee6a52d5e3c0 gcc/testsuite/g++.dg/cpp0x/variadic-init.C - f64443a27f946984ec474714387b99a8 gcc/testsuite/g++.dg/cpp0x/variadic-lambda.C -+61d159a494882dad368e53517bf8df8d gcc/testsuite/g++.dg/cpp0x/variadic-mangle1a.C -+7727443a155c2eed9930c6bc3f808465 gcc/testsuite/g++.dg/cpp0x/variadic-mangle2a.C -+8dd845093d366e371bdaf222fda42413 gcc/testsuite/g++.dg/cpp0x/variadic-mangle3.C -+efdeb5b65b79fc6ff926b12f711edcb1 gcc/testsuite/g++.dg/cpp0x/variadic-mangle3a.C - 6c67e276177a53a05508b5e974504d12 gcc/testsuite/g++.dg/cpp0x/variadic-mem_fn.C - 7d2b8191fa109fd1786f979fbfa18b4e gcc/testsuite/g++.dg/cpp0x/variadic-new.C - 5ad1db01bdd9d87f2a8276b08cff8db7 gcc/testsuite/g++.dg/cpp0x/variadic-new2.C -@@ -11646,6 +11624,8 @@ - c62290c3433fd946afe248d80f2f0e63 gcc/testsuite/g++.dg/cpp1y/auto-fn29.C - c4e86a95bc6b38f69a4a30b1b1cf1e4e gcc/testsuite/g++.dg/cpp1y/auto-fn3.C - 51f8ba9d1f0f20256658a6298e611261 gcc/testsuite/g++.dg/cpp1y/auto-fn30.C -+2166d3092f2a511f64d91ad91795c1ac gcc/testsuite/g++.dg/cpp1y/auto-fn31.C -+f475a3e97ef5d08fb361f8070d183611 gcc/testsuite/g++.dg/cpp1y/auto-fn32.C - a87641c12e6bf65af1e8d592973cba76 gcc/testsuite/g++.dg/cpp1y/auto-fn4.C - eaab8c47716923537d6580ede6fbe3ae gcc/testsuite/g++.dg/cpp1y/auto-fn5.C - 3861eed28323480e4913eea3d9c0ec00 gcc/testsuite/g++.dg/cpp1y/auto-fn6.C -@@ -11702,28 +11682,34 @@ - 695cc86426b24103c2a80eda00cf2189 gcc/testsuite/g++.dg/cpp1y/digit-sep-neg.C - 2ccf049767734b973a90dea30576d8a8 gcc/testsuite/g++.dg/cpp1y/digit-sep.C - 7f7fdf0f184e22144c0d2d80c0827581 gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C --c254f2d5cb21443479f2bf917857354d gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C -+f7b649949cc8d31bf746a3565f161066 gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C - a3ed2dff5176ed6eef5ae2d57cf13c3c gcc/testsuite/g++.dg/cpp1y/feat-cxx14-neg.C --abea85deb4cd6b8a3a2d8a806b4779a7 gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C --3aa0ecb004b47e939728528453a77d12 gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C -+593fb77a3a5089f92e2c81898ae570ff gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C -+d8f10984fce17881f14be647e37c6342 gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C - d9680a99825535ba499a795339ce02c2 gcc/testsuite/g++.dg/cpp1y/feat-cxx98.C - 01260d1a223a8398c967796299932d12 gcc/testsuite/g++.dg/cpp1y/feat-neg.C - 018149928d964ce66689bf4960400c07 gcc/testsuite/g++.dg/cpp1y/feat-sized-dealloc-neg.C - b7edad357bb503949f49802295729019 gcc/testsuite/g++.dg/cpp1y/feat-sized-dealloc.C - fc5875e8af08d0f9488344e80bf6f764 gcc/testsuite/g++.dg/cpp1y/feat-vla.C - f4be44f045dc9cb6f8b7acd5e3193c1d gcc/testsuite/g++.dg/cpp1y/fn-generic-member-ool.C -+2cf8b2b7a7dc5ba828766c37a54e2315 gcc/testsuite/g++.dg/cpp1y/lambda-conv1.C -+4734b77212418e40ce4f8965c6017a39 gcc/testsuite/g++.dg/cpp1y/lambda-conv2.C - 5f112fcc57ff57c8e803342bde4e9c25 gcc/testsuite/g++.dg/cpp1y/lambda-deduce-mult-neg.C - a5fcad1d0708a6218c6fe69c1871df02 gcc/testsuite/g++.dg/cpp1y/lambda-deduce-mult.C - 18a2431f49a5d003b8c4af0ee1ee26fb gcc/testsuite/g++.dg/cpp1y/lambda-generic-cfun.C - 043e19917f87f2b2acd754fc6d7db469 gcc/testsuite/g++.dg/cpp1y/lambda-generic-const1.C - 565bd59fb2dca8cbcfbfa5b7e1e94368 gcc/testsuite/g++.dg/cpp1y/lambda-generic-const2.C - 2e80b291e01a2cfa45ff49e595eefeb5 gcc/testsuite/g++.dg/cpp1y/lambda-generic-conv1.C -+4826d92e5c4d99fa506ff2e846ff01a4 gcc/testsuite/g++.dg/cpp1y/lambda-generic-conv2.C -+78cdb2dc3c8d671d96c375fa61f96dc5 gcc/testsuite/g++.dg/cpp1y/lambda-generic-conv3.C - 254c0618a7c86ead274dccfd78d8434f gcc/testsuite/g++.dg/cpp1y/lambda-generic-dep.C - 82fea772a2540cf9ab702c17cc2cdb54 gcc/testsuite/g++.dg/cpp1y/lambda-generic-ice1.C - 767d5be8b02f5e7228313580ecdc27bf gcc/testsuite/g++.dg/cpp1y/lambda-generic-ice2.C - fd449c2760b279bd0767e28da8a563bf gcc/testsuite/g++.dg/cpp1y/lambda-generic-ice3.C - 2d18bbc76edb8b7a9ae068d833d222fb gcc/testsuite/g++.dg/cpp1y/lambda-generic-ice4.C - 3982e2c97cd56293f3566844b67df18c gcc/testsuite/g++.dg/cpp1y/lambda-generic-mixed.C -+db3760d317d0220aeddc9a1ce4072105 gcc/testsuite/g++.dg/cpp1y/lambda-generic-static1.C -+c6cfff44332b8bfb7c52ace4e1af76c5 gcc/testsuite/g++.dg/cpp1y/lambda-generic-static2.C - 06ba6684e3759115ec5098f38667687b gcc/testsuite/g++.dg/cpp1y/lambda-generic-trailing1.C - c175c183205acb7386648c9340cb5b77 gcc/testsuite/g++.dg/cpp1y/lambda-generic-udt.C - 7515a5372d247dd5a94ef0626c25c2ae gcc/testsuite/g++.dg/cpp1y/lambda-generic-uneval1.C -@@ -11766,6 +11752,7 @@ - 7d97ba4392709fc8da484e897e085d27 gcc/testsuite/g++.dg/cpp1y/paren1.C - b37062a8a2160ab7a8f6b2faf63a7687 gcc/testsuite/g++.dg/cpp1y/paren2.C - e8c6da7fb812f06074a9399c95d62136 gcc/testsuite/g++.dg/cpp1y/paren3.C -+86a0b848e4db7d7f6ee1c78dcc897448 gcc/testsuite/g++.dg/cpp1y/paren4.C - a59e5fd28eae5235838080483b6939a6 gcc/testsuite/g++.dg/cpp1y/phoobhar.h - 7d18afb36bcaa55af2030c6546d5df38 gcc/testsuite/g++.dg/cpp1y/pr57640.C - c4165eafc91468f7acbe5ba99603b2e7 gcc/testsuite/g++.dg/cpp1y/pr57644.C -@@ -11863,7 +11850,8 @@ - 1d11dd14feca38229a393d32dcdfc3d2 gcc/testsuite/g++.dg/cpp1y/var-templ36.C - 69d95f597d98b91cb3856be43d3c5546 gcc/testsuite/g++.dg/cpp1y/var-templ37.C - 8794fe86c499aa19549c780c79aa368a gcc/testsuite/g++.dg/cpp1y/var-templ38.C --f050d11349ddbf7b7819f451dc9afd8d gcc/testsuite/g++.dg/cpp1y/var-templ39.C -+8d67f45e619e5e401002587bef8da3a5 gcc/testsuite/g++.dg/cpp1y/var-templ39.C -+8fbb09c96293e0ad0adec02f8c333330 gcc/testsuite/g++.dg/cpp1y/var-templ39a.C - a82697cf228f6c067aa7a0fdefbfe94c gcc/testsuite/g++.dg/cpp1y/var-templ4.C - bb4283f25d1a9ee27311f1ab54256222 gcc/testsuite/g++.dg/cpp1y/var-templ40.C - da28be896a54e4517281f1dced095bee gcc/testsuite/g++.dg/cpp1y/var-templ42.C -@@ -11876,6 +11864,8 @@ - 6795aca168270525552bd48975a98225 gcc/testsuite/g++.dg/cpp1y/var-templ49.C - 34e14d27e3c00f201eeb1fb1d4d286c1 gcc/testsuite/g++.dg/cpp1y/var-templ5.C - 5160d45ceedf6faed4671f12ca9eae37 gcc/testsuite/g++.dg/cpp1y/var-templ50.C -+868d0756ba26f1a2a91e775d64bad123 gcc/testsuite/g++.dg/cpp1y/var-templ51.C -+145d4d5f8a5e4afaf223d9a444d14037 gcc/testsuite/g++.dg/cpp1y/var-templ52.C - 46f96806c3f041172407dd6ff7943dc8 gcc/testsuite/g++.dg/cpp1y/var-templ6.C - 3c670164f1a7f8f91ef1db2f80526182 gcc/testsuite/g++.dg/cpp1y/var-templ7.C - 7490ba7f2bf9511118a48f52e8c4ceed gcc/testsuite/g++.dg/cpp1y/var-templ8.C -@@ -11894,8 +11884,9 @@ - 68f716938002307e7dcda9d5dc357f14 gcc/testsuite/g++.dg/cpp1z/attributes-enum-1.C - c0f76eabaeee19f702ca129c32355700 gcc/testsuite/g++.dg/cpp1z/attributes-enum-1a.C - 98b1106ed209b91da77baabfe32a0221 gcc/testsuite/g++.dg/cpp1z/cplusplus.C --90ef12e7060fa023a9c65acb99fbd917 gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C -+b78ef62cdf62c62127e6ef6b082f3bbf gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C - f6bf72fc22cf2e0b2625b0da029798a4 gcc/testsuite/g++.dg/cpp1z/fold-ice1.C -+89cd455176ece385a64d1d1b18aa7468 gcc/testsuite/g++.dg/cpp1z/fold-mangle.C - 31887e84574fe8c28417b43ab6292361 gcc/testsuite/g++.dg/cpp1z/fold1.C - ec8f049d9f6e3cc6a0a94adeaf70a315 gcc/testsuite/g++.dg/cpp1z/fold2.C - 402016faa295175165f8ebd8f741b826 gcc/testsuite/g++.dg/cpp1z/fold3.C -@@ -12078,6 +12069,7 @@ - 5c1e2db64783ad9531a0a03f6e23da46 gcc/testsuite/g++.dg/debug/pr56819.C - 41269ba367aaa19e5abac5932fdc247c gcc/testsuite/g++.dg/debug/pr65678.C - ccda43f2f659360264083e64ebc66d22 gcc/testsuite/g++.dg/debug/pr70271.C -+441b2b85c00e5fb81636a85d6732eb55 gcc/testsuite/g++.dg/debug/pr71057.C - a5e8d546d53a780cc3eb41574ea9f263 gcc/testsuite/g++.dg/debug/ra1.C - c3f392076ad11f8768ef0321b89abd5f gcc/testsuite/g++.dg/debug/static1.C - 7e13d86d33b17cfb7cdf61b7b8cca961 gcc/testsuite/g++.dg/debug/template1.C -@@ -12630,6 +12622,7 @@ - 53628223a07c6bbfb1cd7aef3f2b93cf gcc/testsuite/g++.dg/ext/flexary13.C - c4a658a25ef8a25aeef375a3ce711fa2 gcc/testsuite/g++.dg/ext/flexary14.C - aaba8fe44d3e6fec2f01feeb83885ba8 gcc/testsuite/g++.dg/ext/flexary15.C -+858ff0064f04a2ffe669c5f8458aa820 gcc/testsuite/g++.dg/ext/flexary16.C - fa0fdbfe242e37c8962c867f656e7e36 gcc/testsuite/g++.dg/ext/flexary2.C - 21926590c31816347bbb7ba438127f63 gcc/testsuite/g++.dg/ext/flexary3.C - c59d230f31793ac10c850433a29a2a25 gcc/testsuite/g++.dg/ext/flexary4.C -@@ -12946,6 +12939,7 @@ - 586098ef0e0e0ff1300efeabda4cf0fa gcc/testsuite/g++.dg/ext/vector29.C - 06e44a4208434952189cfd9cd55ae2d8 gcc/testsuite/g++.dg/ext/vector3.C - 6ca255361ad69ad75b523ad0b133b0fb gcc/testsuite/g++.dg/ext/vector30.C -+c3b38049951f0b2eddec58e423441ed3 gcc/testsuite/g++.dg/ext/vector31.C - 1d6b45dce331a414b31b64c5104ab383 gcc/testsuite/g++.dg/ext/vector4.C - 3231264b4b96091ab8a2351e76707e8d gcc/testsuite/g++.dg/ext/vector5.C - 9dca9632e59d179ee1b85a181a34cae7 gcc/testsuite/g++.dg/ext/vector6.C -@@ -13102,6 +13096,7 @@ - aba75e24bfe044cbb1a628f1d1daccc3 gcc/testsuite/g++.dg/gomp/declare-simd-3.C - 7cee1de25d2f28d3760c1bdfb7d95411 gcc/testsuite/g++.dg/gomp/declare-simd-4.C - d66c2d955608b28091f45938dce39989 gcc/testsuite/g++.dg/gomp/declare-simd-5.C -+5a587ac99f134c07ba81955351d61058 gcc/testsuite/g++.dg/gomp/declare-simd-6.C - 634bd3d929883e4c691a682ea0817a3e gcc/testsuite/g++.dg/gomp/declare-target-1.C - c75b0d654d83deb86c542efca3d79c2b gcc/testsuite/g++.dg/gomp/depend-1.C - cdd29f4ee662c46448400d10d8f0535c gcc/testsuite/g++.dg/gomp/depend-2.C -@@ -13243,6 +13238,7 @@ - 69587a534832b53372f1e04087c04986 gcc/testsuite/g++.dg/gomp/pr67514.C - 55299f8d5853e349499aeed5c702a80a gcc/testsuite/g++.dg/gomp/pr67522.C - 1c935120e3c1e7d165ea068f57519a6e gcc/testsuite/g++.dg/gomp/pr67523.C -+79e222486ea33d87026b4ecac4bb3593 gcc/testsuite/g++.dg/gomp/pr71941.C - d2c2484d4d1236326efc32a01fddaa03 gcc/testsuite/g++.dg/gomp/predetermined-1.C - edac71d2b358ecd6e646fece69c5426d gcc/testsuite/g++.dg/gomp/private-1.C - d447246d410ae61ed9f733998e77b958 gcc/testsuite/g++.dg/gomp/reference-1.C -@@ -13635,6 +13631,7 @@ - a5a0c6bb188e4c01d4db2d84a5014752 gcc/testsuite/g++.dg/init/pr66857.C - 788ed5b002d14f945d06c72d6b7c78bc gcc/testsuite/g++.dg/init/pr69658.C - 154196e0320831a54c0ed5e880a704cd gcc/testsuite/g++.dg/init/pr70501.C -+effadbfc637d03ffccebf5ad6b37c6c0 gcc/testsuite/g++.dg/init/pr71516.C - 697d82f637fb8839d98efadd58ededf5 gcc/testsuite/g++.dg/init/ptrfn1.C - c3eaccdcf8e35f944dee4d4b3d720336 gcc/testsuite/g++.dg/init/ptrfn2.C - 111716aa5bd4c456321772f776bd97d1 gcc/testsuite/g++.dg/init/ptrfn3.C -@@ -13781,6 +13778,7 @@ - 890af13d278e4e0706986dbc2c5a1884 gcc/testsuite/g++.dg/ipa/ipa-icf-5.C - 97e97070da1c97a8b6352ba2dbe100c3 gcc/testsuite/g++.dg/ipa/ipa-icf-6.C - baa7a26fbd7f93011660ae486b2d5a03 gcc/testsuite/g++.dg/ipa/ipa-pta-1.C -+10ce8060f456afad572b21a436f24c5c gcc/testsuite/g++.dg/ipa/ipa-pta-2.C - dce8034edae4f3ebb13a737d288cc800 gcc/testsuite/g++.dg/ipa/ivinline-1.C - 394623fa3c8fc8afefe76c7e05bcd23d gcc/testsuite/g++.dg/ipa/ivinline-2.C - 4ade5754b9cadd69737394051664462b gcc/testsuite/g++.dg/ipa/ivinline-3.C -@@ -14018,6 +14016,7 @@ - bcba89d3ec64e8fc005f26cebc29ef75 gcc/testsuite/g++.dg/lookup/redecl1.C - a0c29cb4b5f7577e6f70badabcf54df5 gcc/testsuite/g++.dg/lookup/scope-operator1.C - ac54cbb864f44961ac42e88050c9ad49 gcc/testsuite/g++.dg/lookup/scoped1.C -+bf3eaff26a33ccd4611b5f6e55765a4d gcc/testsuite/g++.dg/lookup/scoped10.C - b7a658adf99cb82ba017f02f1f2411c6 gcc/testsuite/g++.dg/lookup/scoped2.C - fd5b1d6b45ff24d721908d389585b869 gcc/testsuite/g++.dg/lookup/scoped3.C - aa72bf12de95e37fe79a3293544473d4 gcc/testsuite/g++.dg/lookup/scoped4.C -@@ -14025,6 +14024,7 @@ - d0e63df38adea95bde4f29a4a8adbd7a gcc/testsuite/g++.dg/lookup/scoped6.C - 36c8df686ba39d71b24a97d15b78bcba gcc/testsuite/g++.dg/lookup/scoped7.C - 26af3964407b493bd173a74dadeb7ffb gcc/testsuite/g++.dg/lookup/scoped8.C -+6369d16eb28b1bd2774c54434aaec082 gcc/testsuite/g++.dg/lookup/scoped9.C - 2b1b09d91910d20eece0379cd7533859 gcc/testsuite/g++.dg/lookup/strong-using-1.C - 9cf5f616cd7d12356a4b60ef67aaf1e1 gcc/testsuite/g++.dg/lookup/strong-using-2.C - 7da1d317c0e74ab901f17a10189784da gcc/testsuite/g++.dg/lookup/strong-using-3.C -@@ -14592,6 +14592,12 @@ - 3cc6fd0213a86e9af54303b476324b4f gcc/testsuite/g++.dg/opt/pr70245.C - 3ca6d038cb6338c3f99ac2cf4bb8b829 gcc/testsuite/g++.dg/opt/pr70245.h - 4c279781e65c3062bc3ebe4f9a883ad8 gcc/testsuite/g++.dg/opt/pr70641.C -+1248cf51218287e0763e9bafddb6e95e gcc/testsuite/g++.dg/opt/pr70847.C -+b4565019d3f57b4cde7d76aea63e2b00 gcc/testsuite/g++.dg/opt/pr71100.C -+2683b031136335ebc445306bbda40ed6 gcc/testsuite/g++.dg/opt/pr71210-1.C -+e8fd45f660a33add25be711bbf9a8aed gcc/testsuite/g++.dg/opt/pr71210-2.C -+ea8361ea831bc7d6110a725ab74d2721 gcc/testsuite/g++.dg/opt/pr71387.C -+a380c45913d5ec3d5feed82fd2ba5c78 gcc/testsuite/g++.dg/opt/pr71528.C - 90bdbfd9313461944756a9e9f01ce788 gcc/testsuite/g++.dg/opt/pr7503-1.C - 1451eba24eea82cbd0c1ab87885c0f77 gcc/testsuite/g++.dg/opt/preinc1.C - 0841088f825be785d32663d712ecf675 gcc/testsuite/g++.dg/opt/ptrintsum1.C -@@ -14803,6 +14809,7 @@ - 88d3ce293bea84b74d7f26a42a8538fb gcc/testsuite/g++.dg/other/gc4.C - 47195a1b7ad4c24c5ccc7cbf50e26bb0 gcc/testsuite/g++.dg/other/gc5.C - 3ca5017faf45f39326ff4e30a1ec1ba8 gcc/testsuite/g++.dg/other/i386-1.C -+9913a24914ce11f6a0606c70ed58cb96 gcc/testsuite/g++.dg/other/i386-10.C - 76d10b67eca4193b848abdfb0dbf492a gcc/testsuite/g++.dg/other/i386-2.C - ad4545acd2416049630459a66f6c3f86 gcc/testsuite/g++.dg/other/i386-3.C - a4ad4c2cb3c1448496351241a77aedb7 gcc/testsuite/g++.dg/other/i386-4.C -@@ -14897,6 +14904,7 @@ - 3634dbc3147618af0685ced6e33189ea gcc/testsuite/g++.dg/other/pr63815.C - edba4dc64424b99c4e6984f1aa7e9507 gcc/testsuite/g++.dg/other/pr66130.C - 335c58f031e8af025ac6bd25a8f5e0ed gcc/testsuite/g++.dg/other/pr67065.C -+3c357334529bfcf67faa2a847f3c9290 gcc/testsuite/g++.dg/other/pr71728.C - 2b96e0cda3aaa703c284fca6a0dd72c9 gcc/testsuite/g++.dg/other/pragma-re-1.C - bdec0c9208af6ee3a9ab1f2c07d3ba19 gcc/testsuite/g++.dg/other/pragma-re-2.C - f804e6064a0c7cd94d73f58ba8f6e5e0 gcc/testsuite/g++.dg/other/profile1.C -@@ -15422,6 +15430,7 @@ - 5cf1aa6b471b7c8c4120c7b9642955c6 gcc/testsuite/g++.dg/parse/pr68722.C - af9e56882c04892fe78e6734f13353e2 gcc/testsuite/g++.dg/parse/pr69628.C - 1e79347577849ae03e3a20e2fc6247ff gcc/testsuite/g++.dg/parse/pr70635.C -+5eb3f5d17e121a7a8f7884b589a7a7ce gcc/testsuite/g++.dg/parse/pr71909.C - 5a9d33aff7826f90760a0154af35d9f0 gcc/testsuite/g++.dg/parse/pragma1.C - b8553036b01aadac9e932e75221336ae gcc/testsuite/g++.dg/parse/pragma2.C - d516a5d017b9be02cd665abb61b0fbaf gcc/testsuite/g++.dg/parse/pragma3.C -@@ -15669,9 +15678,12 @@ - 29300174b10233fd47c932d1ffd4c3bf gcc/testsuite/g++.dg/pr69123.C - 07ceb93faa4d6543359b7c47e9a5e94a gcc/testsuite/g++.dg/pr69379.C - e77af829a8368cadb2874c601ccda7ee gcc/testsuite/g++.dg/pr69667.C --514f19a372e6da2045ad3ac8a01eff0a gcc/testsuite/g++.dg/pr70098.C -+6574022bacba25e4efad4b7c4931c69a gcc/testsuite/g++.dg/pr70098.C - b6486240b7f881b41363b5c5aed08fef gcc/testsuite/g++.dg/pr70590-2.C - 78887d1698e74e4fca9c756431fc9a37 gcc/testsuite/g++.dg/pr70590.C -+0b728dae13a5f48195e47018a83c4f35 gcc/testsuite/g++.dg/pr71184.C -+dd5b895f9e8e377b3fc861eecf9bdbf7 gcc/testsuite/g++.dg/pr71389.C -+bb847cc20ee8eeae077a40b58e2964fc gcc/testsuite/g++.dg/pr71624.C - d038107e5b87bb2651ccfef7fa33748a gcc/testsuite/g++.dg/predict-loop-exit-1.C - b091c5510d946f61175720e0e6a70c8e gcc/testsuite/g++.dg/predict-loop-exit-2.C - 89ad4872e69c75752e361c89ce72b02b gcc/testsuite/g++.dg/predict-loop-exit-3.C -@@ -16066,6 +16078,7 @@ - c2f7a35b429490ab54f2fba257ca0dd9 gcc/testsuite/g++.dg/template/defarg19.C - 21ce3e77355010aaab1b59936da8bfbb gcc/testsuite/g++.dg/template/defarg2.C - 307285b77c17f229ecbeb4c647090190 gcc/testsuite/g++.dg/template/defarg20.C -+c96940bb22962f4c0c4140417e941221 gcc/testsuite/g++.dg/template/defarg21.C - e55baeaf118c452b9f707b8236ee86b1 gcc/testsuite/g++.dg/template/defarg3.C - 64d2588370b2c020d9d5828deadfc7dc gcc/testsuite/g++.dg/template/defarg4.C - 84d085b3ed907df1747cc523efd8d714 gcc/testsuite/g++.dg/template/defarg5.C -@@ -16259,6 +16272,7 @@ - fa72543a9a7163dc659966b7f85022ea gcc/testsuite/g++.dg/template/friend61.C - eee225d465c763fca3009704a441430f gcc/testsuite/g++.dg/template/friend61a.C - c83fbbe1bf313e9ff650368a049b6600 gcc/testsuite/g++.dg/template/friend61b.C -+0546ae6263680a8b8e42b5726f432e63 gcc/testsuite/g++.dg/template/friend62.C - 1d4f923241bfe8578940f39c34f80d7c gcc/testsuite/g++.dg/template/friend7.C - ceb858e95982ac0af2e9168f31aea229 gcc/testsuite/g++.dg/template/friend8.C - 59b5bf61b7f6210d3cf3b9b45692794a gcc/testsuite/g++.dg/template/friend9.C -@@ -16543,6 +16557,8 @@ - af6d997be6d23572000a1f53fb362c54 gcc/testsuite/g++.dg/template/pr69091.C - 74c16422bfee14becfdab59426868fb7 gcc/testsuite/g++.dg/template/pr69961a.C - 2bb8ec1b3640d593c78682666bf1f95a gcc/testsuite/g++.dg/template/pr69961b.C -+fd9d0d596049d0cdf35f01b62e86ae81 gcc/testsuite/g++.dg/template/pr70466-1.C -+a351a9dbecc556fb14937111d4035d00 gcc/testsuite/g++.dg/template/pr70466-2.C - 18029bea1be37e44787c856e7688884a gcc/testsuite/g++.dg/template/pr70610-2.C - a02fabd2632ab8c07600d017af625b9d gcc/testsuite/g++.dg/template/pr70610-3.C - f85232cc2d2ce2406ad9221174563c83 gcc/testsuite/g++.dg/template/pr70610-4.C -@@ -17052,6 +17068,7 @@ - 2023e08d493ba5b9b6b027ead9dbcdfb gcc/testsuite/g++.dg/tm/pr58635-2.C - c9e5bbfe98ec7fbaa16a15a1f925bb18 gcc/testsuite/g++.dg/tm/pr60004.C - 106a3fd65d1feeb38d0f2a3224a6087b gcc/testsuite/g++.dg/tm/pr67811.C -+f20200faa0befb0bfc51cc6eb591119c gcc/testsuite/g++.dg/tm/pr71909.C - 3081869c37283a01aeadd31d8c3a912d gcc/testsuite/g++.dg/tm/pretty-print1.C - 247e972c9babb265ea63db256a00ff3e gcc/testsuite/g++.dg/tm/static_cast1.C - ce59808ad2521265d21615e9fd232ebd gcc/testsuite/g++.dg/tm/sync1.C -@@ -17386,6 +17403,11 @@ - 3e80469d72e0d17bb9473080988a1256 gcc/testsuite/g++.dg/torture/pr70251.C - a8995237f42d84212dd09e432dd3f071 gcc/testsuite/g++.dg/torture/pr70499.C - 742e71bf561b5af56ed84fc963a0fe07 gcc/testsuite/g++.dg/torture/pr70526.C -+256b51401f6858dc5a0cad2e0da871b1 gcc/testsuite/g++.dg/torture/pr71002.C -+561facc41670baebfb84a4231ec62bca gcc/testsuite/g++.dg/torture/pr71405.C -+874216a8c65d270dcf488d29a8847247 gcc/testsuite/g++.dg/torture/pr71448.C -+411a467861248626a89023d9cd86be57 gcc/testsuite/g++.dg/torture/pr71452.C -+6d87997ae70f613b7ae47faba21523d9 gcc/testsuite/g++.dg/torture/pr71874.C - 389892c1f2e87d69449479d1b053c70c gcc/testsuite/g++.dg/torture/predcom-1.C - d28910105d9c9253d94d70eacd5e19d4 gcc/testsuite/g++.dg/torture/pushpop_macro.C - a1b47b9c3e69d79d1895ebc4fd11032b gcc/testsuite/g++.dg/torture/stackalign/check.h -@@ -17638,6 +17660,7 @@ - f4706f41ca654ceb8586f65654dc9bed gcc/testsuite/g++.dg/ubsan/null-4.C - e33cd115b2a5b1796134963715ca2601 gcc/testsuite/g++.dg/ubsan/null-5.C - ebc4dd8d7b9c346d612ab748d0d8bda0 gcc/testsuite/g++.dg/ubsan/null-6.C -+9a6263b0a0fc24a8d910d2b11d215637 gcc/testsuite/g++.dg/ubsan/null-7.C - cefd426836ca36a8554ac0ad41946a30 gcc/testsuite/g++.dg/ubsan/object-size-1.C - a654df71119821a4303cc9fe0501191b gcc/testsuite/g++.dg/ubsan/pr59250.C - 420a6623146bb014dc1310134356d81f gcc/testsuite/g++.dg/ubsan/pr59306.C -@@ -17666,6 +17689,8 @@ - ce9a3608f9ea7f32723d27471f56a902 gcc/testsuite/g++.dg/ubsan/pr70135.C - 56810c4012d688f214e18664f2974426 gcc/testsuite/g++.dg/ubsan/pr70147-1.C - af8fe8f8c142ba4099bf3fd97c7fb5f4 gcc/testsuite/g++.dg/ubsan/pr70147-2.C -+1248cf51218287e0763e9bafddb6e95e gcc/testsuite/g++.dg/ubsan/pr70847.C -+3ad68deac55fd26921bbcc306e06b206 gcc/testsuite/g++.dg/ubsan/pr71393.C - 23b03c04f7b3df05a2e3c261dbfbc91d gcc/testsuite/g++.dg/ubsan/return-1.C - c729687b59770dc8f9e0991370cb1879 gcc/testsuite/g++.dg/ubsan/return-2.C - 40257a16173db28137a5538f88bfea0e gcc/testsuite/g++.dg/ubsan/return-3.C -@@ -17740,6 +17765,7 @@ - 98d320060b90cb4d7efb2ca7dd9ca6a7 gcc/testsuite/g++.dg/vect/simd-clone-4.cc - 4147d578711be9e486c8907900862fdd gcc/testsuite/g++.dg/vect/simd-clone-4.h - c3079a303a422fbdcc1f72b0e2a98a47 gcc/testsuite/g++.dg/vect/simd-clone-5.cc -+b8fb5b23ece050421d669915c600780b gcc/testsuite/g++.dg/vect/simd-clone-6.cc - 3bc95c24ca829b61efcb7f80670d3ab5 gcc/testsuite/g++.dg/vect/simd-mask-store-bool.cc - 3c7b50dc56c581720a466e94943ccdae gcc/testsuite/g++.dg/vect/slp-pr50413.cc - ba398e1bec8514d144840b9f8de00b90 gcc/testsuite/g++.dg/vect/slp-pr50819.cc -@@ -17814,6 +17840,7 @@ - d3017d025f43f9093bf016847e418a34 gcc/testsuite/g++.dg/warn/Wmissing-declarations-1.C - 050c0fd9eb9dcd48940d99ba2041761b gcc/testsuite/g++.dg/warn/Wmissing-field-initializers-1.C - 13048d07bf8630f21562df0b77b67343 gcc/testsuite/g++.dg/warn/Wno-div-by-zero.C -+7c3ea8d27e4d862f83fc6998269f6f42 gcc/testsuite/g++.dg/warn/Wno-narrowing1.C - 26f056d6de0144f7aed85c81b3e4f583 gcc/testsuite/g++.dg/warn/Wno-return-local-addr.C - e3b6729ae62aef0d9d8acd63677ef06e gcc/testsuite/g++.dg/warn/Wnonnull-compare-1.C - 79a3c427fc105036228222b1a6ea9772 gcc/testsuite/g++.dg/warn/Wnonnull-compare-2.C -@@ -17867,6 +17894,7 @@ - 6ac2e35b5e4a2de47ad29a14a6dbe103 gcc/testsuite/g++.dg/warn/Wparentheses-9.C - 18e91a351f8fd1aae42cc8fbbe2dcbc5 gcc/testsuite/g++.dg/warn/Wplacement-new-size-1.C - 6b2c96f7011ece11947155ec8924a6f8 gcc/testsuite/g++.dg/warn/Wplacement-new-size-2.C -+d384bb1bb46e31c69b6a5c612b417019 gcc/testsuite/g++.dg/warn/Wplacement-new-size-3.C - d61eea5f0486bf652aaee2370544ea0e gcc/testsuite/g++.dg/warn/Wplacement-new-size.C - 10ae80ca102a17979ad4df9d03d42f13 gcc/testsuite/g++.dg/warn/Wpointer-arith-1.C - bc5f141d5ba64d906981c425b810d3ed gcc/testsuite/g++.dg/warn/Wredundant-decls-spec.C -@@ -23012,6 +23040,9 @@ - 1906f2e6e6b20628e9f16d77bc066d28 gcc/testsuite/gcc.c-torture/compile/pr70263-1.c - d47f5879509ae9dfb39ea1ee1063230e gcc/testsuite/gcc.c-torture/compile/pr70355.c - 86500b6aaf9f75325f0cad332855ed1b gcc/testsuite/gcc.c-torture/compile/pr70633.c -+6aa2a7d0fe94be24238130841efe702b gcc/testsuite/gcc.c-torture/compile/pr70916.c -+97df20a3b66d4cb718ca2f94a7c64ec5 gcc/testsuite/gcc.c-torture/compile/pr71693.c -+6893a5c3e89b00abc6ffaaadabf19bbb gcc/testsuite/gcc.c-torture/compile/pr71916.c - 9611ffa8936d9c80d0a9ccde8dd093b2 gcc/testsuite/gcc.c-torture/compile/pret-arg.c - b9e6ce52b90320c1c3803c25113844c5 gcc/testsuite/gcc.c-torture/compile/pta-1.c - ed716c1d1727fc2c748162e0cbc4ee47 gcc/testsuite/gcc.c-torture/compile/ptr-conv-1.c -@@ -24656,6 +24687,10 @@ - 58bb262f9c1fe471c7bd11fc8440aac8 gcc/testsuite/gcc.c-torture/execute/pr70566.c - 7356d2dac86027ec545537d18ff109d1 gcc/testsuite/gcc.c-torture/execute/pr70586.c - a1122f266904033a972f83a856de97b9 gcc/testsuite/gcc.c-torture/execute/pr70602.c -+0a9fc76972569359d91049d017cdf51e gcc/testsuite/gcc.c-torture/execute/pr71494.c -+94c81d0c20f6b48a221fefb5a7c9f0f7 gcc/testsuite/gcc.c-torture/execute/pr71554.c -+1f4a197e0d6f4357f1917d680858eacb gcc/testsuite/gcc.c-torture/execute/pr71626-1.c -+2b843741017aa652b5af0855cf7945c3 gcc/testsuite/gcc.c-torture/execute/pr71626-2.c - 3a2dbae8c6dae23b46868ca068ba47d6 gcc/testsuite/gcc.c-torture/execute/pr7284-1.c - 85441b3599a9d20a4ede0f10c54a4e6b gcc/testsuite/gcc.c-torture/execute/printf-1.c - 54f80bf321bfe46d44040493d9821a03 gcc/testsuite/gcc.c-torture/execute/printf-chk-1.c -@@ -25250,6 +25285,7 @@ - ab3955f55aa596a98faf0528f22b1d0c gcc/testsuite/gcc.dg/alias-9.c - b87d726d798335bcf014c51ea61e9a4c gcc/testsuite/gcc.dg/align-1.c - ecaba7c928af85c280e63fa96b9b5e1b gcc/testsuite/gcc.dg/align-2.c -+6583b4f8147fde31faab62b525508999 gcc/testsuite/gcc.dg/align-3.c - b3869c9bd68bb9659f230f48bf56f83c gcc/testsuite/gcc.dg/always_inline.c - 5ad6d0d750af2e3c8488e96cfa1aa195 gcc/testsuite/gcc.dg/always_inline2.c - 99fe8a4ba9676a42a20bb593c81371e0 gcc/testsuite/gcc.dg/always_inline3.c -@@ -26232,8 +26268,8 @@ - 1e77dbdb1a2f17c79ae5421293c320fd gcc/testsuite/gcc.dg/const-1.c - 6ccf395fc674b370645bdd0d50fb25b8 gcc/testsuite/gcc.dg/const-elim-1.c - 8aeed4136d64b28976407e1f80bce896 gcc/testsuite/gcc.dg/const-elim-2.c --b73512af2bf6823cc97da864bfc84920 gcc/testsuite/gcc.dg/const-float128-ped.c --737e99e3ec08db1f5521d0ecc2431cc8 gcc/testsuite/gcc.dg/const-float128.c -+40322523d50e8ca68ce1454542758211 gcc/testsuite/gcc.dg/const-float128-ped.c -+88bbf89357957ad93147bfe868e6a9e3 gcc/testsuite/gcc.dg/const-float128.c - e3f3945c878b9cf4fa5b3f0074bd6302 gcc/testsuite/gcc.dg/const-float80-ped.c - e781844c1655d36c9b6e04d59aad8996 gcc/testsuite/gcc.dg/const-float80.c - d6841b339bfbaf4ab219c4c497889936 gcc/testsuite/gcc.dg/const-uniq-1.c -@@ -26921,6 +26957,7 @@ - 94f8101679e6cc4b9fabcf3f776ded40 gcc/testsuite/gcc.dg/debug/dwarf2/pr51410.c - 01ec5869a59f91af2fdeee3396a4b76f gcc/testsuite/gcc.dg/debug/dwarf2/pr53948.c - eb3e8d32cc98a65b9bf903f485425719 gcc/testsuite/gcc.dg/debug/dwarf2/pr66482.c -+3aefd6c464c0631839d12e370ea3b504 gcc/testsuite/gcc.dg/debug/dwarf2/pr71855.c - 8c1766fffa68df425fe8305ed4ddb614 gcc/testsuite/gcc.dg/debug/dwarf2/prod-options.c - 84c94e8435cec0cb1a4a8e83a9c3633d gcc/testsuite/gcc.dg/debug/dwarf2/short-circuit.c - fd5753c0c85e2e3c862b46c2f851ad80 gcc/testsuite/gcc.dg/debug/dwarf2/sso.c -@@ -27508,8 +27545,11 @@ - b0c5cb8db5ab29eb4607edcfaf632c3c gcc/testsuite/gcc.dg/goacc-gomp/goacc-gomp.exp - e301304e13590c1ce7f775ce00ef95b0 gcc/testsuite/gcc.dg/goacc/acc_on_device-1.c - e16a173a45eff735a99e16e66cc01685 gcc/testsuite/gcc.dg/goacc/goacc.exp -+9e00e7a94f979942198724398d213cee gcc/testsuite/gcc.dg/goacc/nested-function-1.c -+d28df196e898f3e95d6f476710c89624 gcc/testsuite/gcc.dg/goacc/nested-function-2.c - acdc22584322b69f4483834bf48a45e9 gcc/testsuite/gcc.dg/goacc/nvptx-merged-loop.c - 73513698286ba33d0b064ff8b57e6775 gcc/testsuite/gcc.dg/goacc/nvptx-sese-1.c -+75dd052bd164a3a9070c1d0861bc0e3c gcc/testsuite/gcc.dg/goacc/pr71373.c - 2f3333af08b8042445e79536694a34b4 gcc/testsuite/gcc.dg/gomp/appendix-a/a.1.1.c - 885f61f4895f1224def50fcf707b2f2e gcc/testsuite/gcc.dg/gomp/appendix-a/a.10.1.c - c8cf5f6a748356f3bcea8e2dbb2e4196 gcc/testsuite/gcc.dg/gomp/appendix-a/a.12.1.c -@@ -27907,8 +27947,11 @@ - f8f3d098512d881d68138c6f1e3a363f gcc/testsuite/gcc.dg/graphite/pr68809.c - bdbd7edf45b97574c83d3755df22a28b gcc/testsuite/gcc.dg/graphite/pr68953.c - d0f22c16c5fac5ae8f190b3564aba97d gcc/testsuite/gcc.dg/graphite/pr68976.c -+cbc1d72a5a486c20f3b581d86ceb6480 gcc/testsuite/gcc.dg/graphite/pr69067.c -+47d652714c7a00602400f743b5e3c11c gcc/testsuite/gcc.dg/graphite/pr69068.c - 4e7f8240209ca1b787c57a784dd3ab73 gcc/testsuite/gcc.dg/graphite/pr69292.c - 469d8e302d82650a54a8f0b48adb251a gcc/testsuite/gcc.dg/graphite/pr70045.c -+187adff90265612446489b184d1ca625 gcc/testsuite/gcc.dg/graphite/pr70956.c - 16574d3df752f79e2361bed11b712e31 gcc/testsuite/gcc.dg/graphite/run-id-1.c - 69c11dc302a921c92977db519167bec1 gcc/testsuite/gcc.dg/graphite/run-id-2.c - 84a75a861553ce658d85018a3ced0a6b gcc/testsuite/gcc.dg/graphite/run-id-3.c -@@ -27976,6 +28019,7 @@ - bc96d3d7a369ee1d75a9841b80312226 gcc/testsuite/gcc.dg/guality/param-2.c - 4f7560385c9b3bd900cc1de342ed58bc gcc/testsuite/gcc.dg/guality/param-3.c - 523107373abe1115fc7567ad1914508b gcc/testsuite/gcc.dg/guality/param-4.c -+f932e4faa7d538859c699e070447bc01 gcc/testsuite/gcc.dg/guality/param-5.c - 19bacc1e91869a8697eb548fb674e517 gcc/testsuite/gcc.dg/guality/pr36728-1.c - 15b728fbd163d9aa4e4d3a41ff5d237c gcc/testsuite/gcc.dg/guality/pr36728-2.c - 3a0a4f52233f47c7abff4081856aa824 gcc/testsuite/gcc.dg/guality/pr36728-3.c -@@ -28288,6 +28332,7 @@ - 3fa23bf649fb3d873b131ed5fb5ed9fe gcc/testsuite/gcc.dg/ipa/pr68035.c - 6391743d2f9ed0c57ef00442b79ff9fa gcc/testsuite/gcc.dg/ipa/pr68790.c - 47f323ada98e8576e87b3d61e280cf39 gcc/testsuite/gcc.dg/ipa/pr70306.c -+9e20144eec96000223a2e983ffcba9fa gcc/testsuite/gcc.dg/ipa/pr70646.c - 923d1086789aa370483859e89c2a5e1e gcc/testsuite/gcc.dg/ipa/propalign-1.c - c42a02d7f371ea4de7e4bb2088296655 gcc/testsuite/gcc.dg/ipa/propalign-2.c - b9df72c49860f187596351812c6e05be gcc/testsuite/gcc.dg/ipa/propalign-3.c -@@ -30227,6 +30272,13 @@ - ac328b834a1ea6428569ff38945772b0 gcc/testsuite/gcc.dg/pr70442.c - 36a35251047803a79950fef784d13ae4 gcc/testsuite/gcc.dg/pr70725.c - 99ff30c22aa2b72409036bea8bda66da gcc/testsuite/gcc.dg/pr70747.c -+0c7a5fc07d2ac3fe95b4a3f606e9fddc gcc/testsuite/gcc.dg/pr71006.c -+b2932869d7ba5888238dbb86f20e94de gcc/testsuite/gcc.dg/pr71071.c -+dc3c7225f47bd3f37227cbbb8d77804b gcc/testsuite/gcc.dg/pr71279.c -+9e22a8b7163e8cdad2514a0bcaaf73e3 gcc/testsuite/gcc.dg/pr71518.c -+79f760cb1168bdcad7ceef62cd0034c3 gcc/testsuite/gcc.dg/pr71558.c -+2d57cd18f3b5a4ce14ac9f867103994d gcc/testsuite/gcc.dg/pr71581.c -+0b5d052704c3f9b22ab6c09c3a2c44d1 gcc/testsuite/gcc.dg/pr71685.c - 8b7d73da2d5d78000716492365a85d5a gcc/testsuite/gcc.dg/pr8715.c - 3d08410b2dd57259aa63f0e1c64b376e gcc/testsuite/gcc.dg/pr8788-1.c - be04382a35ebb1cfae1b2168f1693a94 gcc/testsuite/gcc.dg/pr8835-1.c -@@ -30411,6 +30463,7 @@ - cc4ae3ffffb03645629e69a469281efb gcc/testsuite/gcc.dg/spellcheck-fields.c - ad32dc4c817caee29dda724b10b45399 gcc/testsuite/gcc.dg/spellcheck-options-1.c - 2d679bf081885df2fd43ceb67d70169a gcc/testsuite/gcc.dg/spellcheck-options-10.c -+44c49d832fbefb746e48d86f5808c52f gcc/testsuite/gcc.dg/spellcheck-options-12.c - 59ceb721847c724a4d56bf8a0d6c13d6 gcc/testsuite/gcc.dg/spellcheck-options-2.c - a2aa8beaba2a63cd762df20a0ff259f9 gcc/testsuite/gcc.dg/spellcheck-options-3.c - 533ff9109ecb7635d6ee9e965bed64d5 gcc/testsuite/gcc.dg/spellcheck-options-4.c -@@ -30797,10 +30850,10 @@ - 4db0a33ee448d1a3cb855abe7fd5dd87 gcc/testsuite/gcc.dg/torture/cris-volatile-1.c - 8e9f5b7c091bd1c8d9aad12b2fe2c7e8 gcc/testsuite/gcc.dg/torture/darwin-cfstring-3.c - 537c85296c73ca5b8d5644f2db0f4333 gcc/testsuite/gcc.dg/torture/dg-torture.exp --d0e69d6fa9e82fcd758b481dd8566f35 gcc/testsuite/gcc.dg/torture/float128-cmp-invalid.c --5347ab8c7c39b162eae4e5405881495f gcc/testsuite/gcc.dg/torture/float128-div-underflow.c -+58373efe3ee21c51efa41c133c58b857 gcc/testsuite/gcc.dg/torture/float128-cmp-invalid.c -+f866a0ec75af63274fded6d6e704572a gcc/testsuite/gcc.dg/torture/float128-div-underflow.c - 4c582f75a6506b2d756ac4784481eef0 gcc/testsuite/gcc.dg/torture/float128-exact-underflow.c --2fa501d06d2488d2bb44859676922e40 gcc/testsuite/gcc.dg/torture/float128-extend-nan.c -+7439f4476ac9bb24498a6a5c7da023c4 gcc/testsuite/gcc.dg/torture/float128-extend-nan.c - 9e1eb456af728c416f591eacdc4d7fb7 gcc/testsuite/gcc.dg/torture/float128-extendxf-underflow.c - 1d581b89a6131cdc2bd3dc2b34fc7fa9 gcc/testsuite/gcc.dg/torture/float128-mul-underflow.c - a0352637f21fc07fa0443b4c4e043743 gcc/testsuite/gcc.dg/torture/float128-truncdf-underflow.c -@@ -30809,9 +30862,9 @@ - 4a1efbe908d1984e5c7866446e422e72 gcc/testsuite/gcc.dg/torture/fp-int-convert-2.c - c7193c3a55681849a60a8019763547be gcc/testsuite/gcc.dg/torture/fp-int-convert-double.c - 740b8077c12192879798984879fe4c76 gcc/testsuite/gcc.dg/torture/fp-int-convert-float.c --f13160e874231fbfd5ad487b1a65a359 gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode-2.c --0e198766e1144ee6a29b4e083231ef2b gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode-3.c --48cf228cef8e597a9a40466b1f579f1f gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode.c -+6faf10cae6549a32de0e939a1032515b gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode-2.c -+4290c9342edd63f5948e29a0e4e61fbe gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode-3.c -+0fc40435832160baeff38f387f5ab974 gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode.c - bc0467f96f8340a44838f93689215df9 gcc/testsuite/gcc.dg/torture/fp-int-convert-float128.c - 80a27657c85bbe07fc57a74624f9f20a gcc/testsuite/gcc.dg/torture/fp-int-convert-float80-timode.c - 55b7dc542b219e0ef16ee001197d2ce4 gcc/testsuite/gcc.dg/torture/fp-int-convert-float80.c -@@ -31472,6 +31525,12 @@ - da4037959e336e19cb95c25f91f8eb52 gcc/testsuite/gcc.dg/torture/pr70628.c - 4bf720800970b360938f42a250aa3e59 gcc/testsuite/gcc.dg/torture/pr70724.c - 058fe139380690d2ec38aa882c1f7908 gcc/testsuite/gcc.dg/torture/pr70780.c -+e8b6639bf1f3ed2ec4f89afdb36f44f9 gcc/testsuite/gcc.dg/torture/pr70935.c -+b6bb0c63d9e968f4f16f282365518a50 gcc/testsuite/gcc.dg/torture/pr70941.c -+08b15e14c6c9f4cc6291f19fc8ba963b gcc/testsuite/gcc.dg/torture/pr71423.c -+0c398d952cf20fc83aec050f85d8a44b gcc/testsuite/gcc.dg/torture/pr71452.c -+d7822d9246b54abacbdc7d6230ab041d gcc/testsuite/gcc.dg/torture/pr71522.c -+b0020481b01ba2fea155b7e666817dc3 gcc/testsuite/gcc.dg/torture/pr71606.c - 62b28db4200d0c4e51bde8d1e5693886 gcc/testsuite/gcc.dg/torture/pr8081.c - d086c3946230ba05df33a45be4862730 gcc/testsuite/gcc.dg/torture/pta-callused-1.c - 39620328710fd9ff170741766805e426 gcc/testsuite/gcc.dg/torture/pta-escape-1.c -@@ -32331,6 +32390,7 @@ - 885c1be5e32bb9fbd61002b21649165d gcc/testsuite/gcc.dg/tree-ssa/pr69845-2.c - 6e6845a9fd535b1e4161176393d5993c gcc/testsuite/gcc.dg/tree-ssa/pr70232.c - f1ac7f1c1aea72571d0586fcaa61bef4 gcc/testsuite/gcc.dg/tree-ssa/pr70372.c -+f25359056dca264e17755adacd92210b gcc/testsuite/gcc.dg/tree-ssa/pr70919.c - 183e9199984b76de9f1701381d4f612d gcc/testsuite/gcc.dg/tree-ssa/predcom-1.c - e1366016e9a4c05dbd1cdb3f152b83dc gcc/testsuite/gcc.dg/tree-ssa/predcom-2.c - 49817baec76470758acdd34458c9fb91 gcc/testsuite/gcc.dg/tree-ssa/predcom-3.c -@@ -32759,6 +32819,8 @@ - b18ed34db76e8a818f24ae5532580fdb gcc/testsuite/gcc.dg/tree-ssa/vrp08.c - 00af09eb12b671fc3835354fe975d76f gcc/testsuite/gcc.dg/tree-ssa/vrp09.c - 8c9b46ae3e96ee0bd4ea529a368c310d gcc/testsuite/gcc.dg/tree-ssa/vrp10.c -+35a86d5c3d5d6dfdbf910fd80c544328 gcc/testsuite/gcc.dg/tree-ssa/vrp100.c -+43b49a2dc407364da07b46e140893140 gcc/testsuite/gcc.dg/tree-ssa/vrp101.c - 02186bb95ddef36513b909863c8d3ed8 gcc/testsuite/gcc.dg/tree-ssa/vrp11.c - 419ced6aac18d78614ce2296a1a6b660 gcc/testsuite/gcc.dg/tree-ssa/vrp12.c - 5c02e78e0a19d3b4ab362211af9c057d gcc/testsuite/gcc.dg/tree-ssa/vrp13.c -@@ -32874,6 +32936,7 @@ - 38f4467be27d0432adea9abcaf9cc366 gcc/testsuite/gcc.dg/typespec-1.c - b9d67dbc50419a82b76d70029936f329 gcc/testsuite/gcc.dg/ubsan/bounds-1.c - 8ef707e5f4c734c1b8be85269cd93d06 gcc/testsuite/gcc.dg/ubsan/bounds-2.c -+804ebe3c0a2fc929bc12b7e5c7c4098f gcc/testsuite/gcc.dg/ubsan/bounds-3.c - 7740693c7bb19d8fc6ab727a6ffbb65c gcc/testsuite/gcc.dg/ubsan/c-shift-1.c - 577cc36a854722ee2c73da1a6a6e2322 gcc/testsuite/gcc.dg/ubsan/c-shift-2.c - 2dbfddf9f012a91eb07b3c83841941a1 gcc/testsuite/gcc.dg/ubsan/c99-shift-1.c -@@ -33468,7 +33531,7 @@ - 909245027a67eed899841d65ca788c26 gcc/testsuite/gcc.dg/vect/pr66142.c - 94ba2ffa702e68550138d2586c87e9d7 gcc/testsuite/gcc.dg/vect/pr66251.c - fe55b7b3a0180146eb06495eed9f01a0 gcc/testsuite/gcc.dg/vect/pr66253.c --013ee9e98fd328680fc3f320b6adc0f3 gcc/testsuite/gcc.dg/vect/pr66636.c -+31de59c90b606bb80ee8c60486379cc0 gcc/testsuite/gcc.dg/vect/pr66636.c - 86169de4aac395fc7dd49fd713661f87 gcc/testsuite/gcc.dg/vect/pr66677.c - f4505aa6c41d3aa5d36144edc00b927e gcc/testsuite/gcc.dg/vect/pr66951.c - b0c728b20c3631680ab365d1bc5a0fd8 gcc/testsuite/gcc.dg/vect/pr67790.c -@@ -33489,6 +33552,9 @@ - 78b19e684925d21a4076e909bc9096cf gcc/testsuite/gcc.dg/vect/pr70138-2.c - 0918022cdf657101e47743d5c80133f3 gcc/testsuite/gcc.dg/vect/pr70354-1.c - 72d0484eead5cc2ea42d3951a7cd63f2 gcc/testsuite/gcc.dg/vect/pr70354-2.c -+05e2c1c28c7f8e8f0887ba6298c0b0cb gcc/testsuite/gcc.dg/vect/pr71259.c -+c03f1f02e7f7d30e17a072dbbe18a16b gcc/testsuite/gcc.dg/vect/pr71264.c -+bfbd314e67532ca23e292ce54b72762f gcc/testsuite/gcc.dg/vect/pr71823.c - 32d06c886c85516fbdce4ca1bd516496 gcc/testsuite/gcc.dg/vect/section-anchors-pr27770.c - 00b8b4e778221f5bedb59cfc69f6c9d7 gcc/testsuite/gcc.dg/vect/section-anchors-vect-69.c - 218f2e2bcfb33c838c80a2ae8c302759 gcc/testsuite/gcc.dg/vect/slp-1.c -@@ -33581,7 +33647,7 @@ - b1336a4a12ea0ec587c41f16332879bc gcc/testsuite/gcc.dg/vect/slp-widen-mult-s16.c - 31669e2cb35c18913f0b7f913f2a0f63 gcc/testsuite/gcc.dg/vect/slp-widen-mult-u8.c - 613196aaada7504743f2f4d92488772b gcc/testsuite/gcc.dg/vect/trapv-vect-reduc-4.c --5f4c323565e9614879f28bd4f7091c96 gcc/testsuite/gcc.dg/vect/tree-vect.h -+402f466a32d7175024ee9b8ec5e02d1b gcc/testsuite/gcc.dg/vect/tree-vect.h - 908fa625b55d7d283163e9dfb4e3cb97 gcc/testsuite/gcc.dg/vect/unswitch-loops-pr26969.c - 6520c3dd9e657028a89c31328634d22a gcc/testsuite/gcc.dg/vect/vec-scal-opt.c - 9b5d0a9d2e1a81f9454f0082b9f240b7 gcc/testsuite/gcc.dg/vect/vec-scal-opt1.c -@@ -34977,7 +35043,7 @@ - a8bddbe3eece3831dd80ac4cdf09f85e gcc/testsuite/gcc.target/aarch64/nofp_1.c - 16f10ec9128105b137b7139eec150171 gcc/testsuite/gcc.target/aarch64/noplt_1.c - a08d94353bf55af1d22441a406d830ca gcc/testsuite/gcc.target/aarch64/noplt_2.c --766dade6022566e9d591b71777427f70 gcc/testsuite/gcc.target/aarch64/noplt_3.c -+5adbb32c5ec104efca72061e09229b8f gcc/testsuite/gcc.target/aarch64/noplt_3.c - 03797fef944cc43885e1c80c25f368e4 gcc/testsuite/gcc.target/aarch64/pic-constantpool1.c - 8084b7f8a23ba9dc5bb389d20d29ec1b gcc/testsuite/gcc.target/aarch64/pic-small.c - dca6942a94e55d4ebfd32c380eb279ff gcc/testsuite/gcc.target/aarch64/pic-symrefplus.c -@@ -35013,6 +35079,7 @@ - 0eb5fd232a04413cc6f2bd5fd4c3c47d gcc/testsuite/gcc.target/aarch64/pr70120-2.c - 61ea50a51a3ed94b38acd7cd026cd077 gcc/testsuite/gcc.target/aarch64/pr70120-3.c - eb748e6de8945b3aa35ce6b22a073829 gcc/testsuite/gcc.target/aarch64/pr70398.c -+e7efe396ef16dbc7526785247ead6d84 gcc/testsuite/gcc.target/aarch64/pr70809_1.c - d3e6defa85b5cd4bb506306377e59a53 gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_1.c - 1f95766b4ed5bfb5f2cf1f168a607a8d gcc/testsuite/gcc.target/aarch64/predefine_large.c - d38e476730748c653068e7cb2d8d6ca6 gcc/testsuite/gcc.target/aarch64/predefine_small.c -@@ -35125,6 +35192,7 @@ - a675084fb22386c9d27ff4bd900947af gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u32_indices_1.c - 83cf956b7cb17956c744f7db38fe3416 gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u64_indices_1.c - 099bad0585432f164e86079dbf03595e gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u8_indices_1.c -+163cc0d113c2aef5ebd776e9553efbf1 gcc/testsuite/gcc.target/aarch64/simd/vminmaxnm_1.c - d3471e819805085e851c6ef99b412fc9 gcc/testsuite/gcc.target/aarch64/simd/vmla_f64.c - 76bd294b136cfc9375488944eb7f3ba0 gcc/testsuite/gcc.target/aarch64/simd/vmls_f64.c - f4f3b7ca3433b577e0c8b5a94bd6c11a gcc/testsuite/gcc.target/aarch64/simd/vmul_f64_1.c -@@ -35466,7 +35534,7 @@ - f87f898044cd78f2ebf530577d3cf7bb gcc/testsuite/gcc.target/aarch64/sync-op-release.c - 95f377cbd6e6173deb76efafbc90634f gcc/testsuite/gcc.target/aarch64/sync-op-release.x - 0168137c2b608147cb69283541a282f1 gcc/testsuite/gcc.target/aarch64/table-intrinsics.c --d5d082ded76a499c259ef0099673369a gcc/testsuite/gcc.target/aarch64/tail_indirect_call_1.c -+e259ba8323c6ae474eebb9f1a89e0a1d gcc/testsuite/gcc.target/aarch64/tail_indirect_call_1.c - 84204d959d96933bbdeb4d6f2a41264c gcc/testsuite/gcc.target/aarch64/target_attr_1.c - fa7117ece82474e6ad64b002ff16f391 gcc/testsuite/gcc.target/aarch64/target_attr_10.c - 495425b7459f1a259607e93ad71f13c5 gcc/testsuite/gcc.target/aarch64/target_attr_11.c -@@ -35940,8 +36008,8 @@ - 4b9f02224346043bca551bf81124f90b gcc/testsuite/gcc.target/arm/headmerge-2.c - b7fc1639bee153568add250d53ea751f gcc/testsuite/gcc.target/arm/identical-invariants.c - 6b37d9e567d7851e4e037dc6ffb87d9c gcc/testsuite/gcc.target/arm/ifcvt-size-check.c --5a6755f195973a69d09c58dc46caa013 gcc/testsuite/gcc.target/arm/interrupt-1.c --fc9965e47a9641a2b14bf7461100be94 gcc/testsuite/gcc.target/arm/interrupt-2.c -+b8c039847c1a73baf76ec3ceb27b1a11 gcc/testsuite/gcc.target/arm/interrupt-1.c -+80759aaae06958909d3fcc2edf843783 gcc/testsuite/gcc.target/arm/interrupt-2.c - 5fb126c6d9486e40aebcb4051dcefd2a gcc/testsuite/gcc.target/arm/iordi3-opt.c - 942d9efedfb779e0de45df976f1585de gcc/testsuite/gcc.target/arm/iordi_notdi-1.c - 88f7d27029fb631e0a53d287d5f7f83c gcc/testsuite/gcc.target/arm/its.c -@@ -38203,6 +38271,8 @@ - 32fee62df6d98765a5508d0d96c9eb65 gcc/testsuite/gcc.target/arm/pr69904.c - 1099addf5e35417ab2cda454cb2ec7f0 gcc/testsuite/gcc.target/arm/pr70278.c - 7b0dff48f8c89cbeb037deb0439e2888 gcc/testsuite/gcc.target/arm/pr70496.c -+48ed10e4b1714bfea3579dda3447be58 gcc/testsuite/gcc.target/arm/pr70830.c -+dc5c76ff01c564582222b3a2ea1fc21c gcc/testsuite/gcc.target/arm/pr71056.c - 321232597c3b16471c510b972ad557b4 gcc/testsuite/gcc.target/arm/pragma_attribute.c - cdf14fd079c2cd544c152c39ceb8ac66 gcc/testsuite/gcc.target/arm/pragma_cpp_fma.c - 639f9aee9e13df807ade02e6ee96c2d3 gcc/testsuite/gcc.target/arm/reg_equal_test.c -@@ -38490,11 +38560,13 @@ - 2028ceccf9f97e5e84e9adf6beb7597e gcc/testsuite/gcc.target/avr/exit-abort.h - 2931177f4aeff49d531d5474224448f6 gcc/testsuite/gcc.target/avr/pr46779-1.c - 572dc228e08385a1db0fcbab66dbaa4e gcc/testsuite/gcc.target/avr/pr46779-2.c -+d92831f37e30237d1dc568f585e4c2c9 gcc/testsuite/gcc.target/avr/pr50739.c - fc917fcfe7cfe97b5f27265d5960f0e6 gcc/testsuite/gcc.target/avr/pr52472.c - 421d2b9b36fa2496dce05d129d2c352b gcc/testsuite/gcc.target/avr/pr58545.c - 9e82df166e8b559cb56d2c4f48cbaf30 gcc/testsuite/gcc.target/avr/pr60991.c - 94f026369213dad7565383028ef6afcf gcc/testsuite/gcc.target/avr/pr65210.c - efe0a9fdac4e9b6140f4228816b9db64 gcc/testsuite/gcc.target/avr/pr67839.c -+292bf2dc33b5cfededd107fe1c0ebc88 gcc/testsuite/gcc.target/avr/pr71103.c - 881cb1836ddfc3105e0aacacc481aa09 gcc/testsuite/gcc.target/avr/progmem-error-1.c - 2eb3f167ae58b534e25afc1b94617746 gcc/testsuite/gcc.target/avr/progmem-error-1.cpp - 56de611fd29076ce9da389a853476819 gcc/testsuite/gcc.target/avr/progmem-warning-1.c -@@ -38532,6 +38604,7 @@ - 7f56c1b750dfe8d7e4128f15aa3eaffe gcc/testsuite/gcc.target/avr/torture/pr63633-ice-mult.c - 44584f49cd0975073be7b86102774077 gcc/testsuite/gcc.target/avr/torture/pr64331.c - dcabffeb42e88a442661b9e47e43a9c1 gcc/testsuite/gcc.target/avr/torture/pr64452.c -+ab53af0eb6dbfe2791a8ac1bbaf0c11f gcc/testsuite/gcc.target/avr/torture/pr71103-2.c - 21a45d34960ba9567b9f2483d22c843f gcc/testsuite/gcc.target/avr/torture/progmem-1.c - 564c71a894aff68e98d5c4a6db2b47ae gcc/testsuite/gcc.target/avr/torture/progmem-1.cpp - e3e1c41865f5287c9ff7e200745758fd gcc/testsuite/gcc.target/avr/torture/sat-hr-plus-minus.c -@@ -39055,6 +39128,7 @@ - b6e744a5c521873cc8be2dbb5f25790d gcc/testsuite/gcc.target/i386/avx-pr57233.c - ab15d222e706bd85c87c037d1e9b6f51 gcc/testsuite/gcc.target/i386/avx-pr63594-1.c - 7e490de1d2a70d21844cdc70c1546f49 gcc/testsuite/gcc.target/i386/avx-pr63594-2.c -+52efc199588007563ddb240d620c0f01 gcc/testsuite/gcc.target/i386/avx-pr71559.c - 4e3d37bb04b99394790fa9e8caddf790 gcc/testsuite/gcc.target/i386/avx-recip-vec.c - 02ae18a66bd7b76f7a651b896f066b70 gcc/testsuite/gcc.target/i386/avx-reduc-1.c - 772f703b19bb27d5947d136a2f72221e gcc/testsuite/gcc.target/i386/avx-rint-sfix-2-vec.c -@@ -40324,10 +40398,22 @@ - c88d598d6edb7c0c743c1dc16a2cc16d gcc/testsuite/gcc.target/i386/avx512f-broadcast-gpr-2.c - 499c39d2a4857a6b8d1b83ff9a57f0ff gcc/testsuite/gcc.target/i386/avx512f-ceil-sfix-vec-1.c - 043ca358343e3cd8084b52ddd77fc44b gcc/testsuite/gcc.target/i386/avx512f-ceil-sfix-vec-2.c -+0d4151fb05d050a11cf92664e9209d3a gcc/testsuite/gcc.target/i386/avx512f-ceil-vec-1.c -+e37893c9abd7382a7def7fd7274dcd64 gcc/testsuite/gcc.target/i386/avx512f-ceil-vec-2.c -+576df336a9d07a5da958ad681902765b gcc/testsuite/gcc.target/i386/avx512f-ceilf-sfix-vec-1.c -+8a2399e65f2d83ffe127b069db603b09 gcc/testsuite/gcc.target/i386/avx512f-ceilf-sfix-vec-2.c -+5b2ffd909879a410f6b4a26c1a8e5676 gcc/testsuite/gcc.target/i386/avx512f-ceilf-vec-1.c -+a4b256bf9501d70dd2182eab7f624689 gcc/testsuite/gcc.target/i386/avx512f-ceilf-vec-2.c - b40bff9ed49ef04a7cc3b22ed64e6ebb gcc/testsuite/gcc.target/i386/avx512f-check.h - 9db780c1e1f36c905bedd1fd077c44bc gcc/testsuite/gcc.target/i386/avx512f-dummy.c - 0de473631153a37da362d01bb42a56bd gcc/testsuite/gcc.target/i386/avx512f-floor-sfix-vec-1.c - f449e800780313dbf245bac9b4df7ed5 gcc/testsuite/gcc.target/i386/avx512f-floor-sfix-vec-2.c -+147745798007b9631a908f9e78411336 gcc/testsuite/gcc.target/i386/avx512f-floor-vec-1.c -+ae10c62470cea283261617eaed4fb4bd gcc/testsuite/gcc.target/i386/avx512f-floor-vec-2.c -+f3f3241adb2a57e08f624dd5dee7bde2 gcc/testsuite/gcc.target/i386/avx512f-floorf-sfix-vec-1.c -+36f5b8ecaa1309fea47c6565009b0e43 gcc/testsuite/gcc.target/i386/avx512f-floorf-sfix-vec-2.c -+2ab0eec1590b189f1c4f7fe79a454db5 gcc/testsuite/gcc.target/i386/avx512f-floorf-vec-1.c -+0e2a8a11b7939edbb836489d6d1ae8cb gcc/testsuite/gcc.target/i386/avx512f-floorf-vec-2.c - 093d097bdccce35c0df38597a7980d22 gcc/testsuite/gcc.target/i386/avx512f-gather-1.c - c8ce7ffcdf3dead2fa41448cdfd421d8 gcc/testsuite/gcc.target/i386/avx512f-gather-2.c - fba9972cad8dda541a5aa6eec12675fc gcc/testsuite/gcc.target/i386/avx512f-gather-3.c -@@ -40386,6 +40472,15 @@ - 381f53de01f1e9893e6903d9fac40b87 gcc/testsuite/gcc.target/i386/avx512f-pr63594-2.c - e97c0c19cafc88b7e3701f64c4ee5e2f gcc/testsuite/gcc.target/i386/avx512f-pr70059.c - d3690c9abdc1f96ff5183a85ab642fc8 gcc/testsuite/gcc.target/i386/avx512f-pr70421.c -+2bec208bfec85d6675be24e134318011 gcc/testsuite/gcc.target/i386/avx512f-pr71559.c -+ada32523be27898684e961dc8a530319 gcc/testsuite/gcc.target/i386/avx512f-rint-sfix-vec-1.c -+cf72f487882aa5cbbf2a730ccced5372 gcc/testsuite/gcc.target/i386/avx512f-rint-sfix-vec-2.c -+afd1c2340191f1da5c9f296da3642106 gcc/testsuite/gcc.target/i386/avx512f-rintf-sfix-vec-1.c -+3e831baba699ee173a9b5a01e94803d7 gcc/testsuite/gcc.target/i386/avx512f-rintf-sfix-vec-2.c -+e6b938f5b671843917a112a53a8a7860 gcc/testsuite/gcc.target/i386/avx512f-round-sfix-vec-1.c -+8ec0c6ee2d9b777f1da5706d825590f4 gcc/testsuite/gcc.target/i386/avx512f-round-sfix-vec-2.c -+7b55ada214bda7b0ec5755ad95771081 gcc/testsuite/gcc.target/i386/avx512f-roundf-sfix-vec-1.c -+8b538e860606539734b2c832df5c63eb gcc/testsuite/gcc.target/i386/avx512f-roundf-sfix-vec-2.c - 5158ac78802e368957a44c0f68b3b5d8 gcc/testsuite/gcc.target/i386/avx512f-rounding.c - 8eb7f0638fb7f71388916d2f90f89f93 gcc/testsuite/gcc.target/i386/avx512f-scatter-1.c - a705c702fd9fc8889d25e23e48746f5b gcc/testsuite/gcc.target/i386/avx512f-scatter-2.c -@@ -40413,6 +40508,10 @@ - 5e82ba7d6ba2bc9eb1ce979813f8d396 gcc/testsuite/gcc.target/i386/avx512f-setzero-pd-1.c - 47fee7cb6c90c9ac41c16bb5604a8121 gcc/testsuite/gcc.target/i386/avx512f-setzero-ps-1.c - 45e69165f83009060e6547672824081d gcc/testsuite/gcc.target/i386/avx512f-setzero-si512-1.c -+9f1be97318b9c5fe371f3dc949de070d gcc/testsuite/gcc.target/i386/avx512f-trunc-vec-1.c -+b74179ff996ee056241e1c5238385936 gcc/testsuite/gcc.target/i386/avx512f-trunc-vec-2.c -+22ac9712c0faaf3a282e62daa525a8a2 gcc/testsuite/gcc.target/i386/avx512f-truncf-vec-1.c -+75f99d519bd7e5ff40d6b2db26925c32 gcc/testsuite/gcc.target/i386/avx512f-truncf-vec-2.c - 06c531d6ffd8e2dc9c35db5a25f946d2 gcc/testsuite/gcc.target/i386/avx512f-typecast-1.c - 4ebc7b200a5160aa639c1a2a5b13a59f gcc/testsuite/gcc.target/i386/avx512f-vaddpd-1.c - 9c96dcbb2e757b7198aeba742c29a128 gcc/testsuite/gcc.target/i386/avx512f-vaddpd-2.c -@@ -41870,6 +41969,7 @@ - 9fa05574c82a870139a2524c4a9ea84c gcc/testsuite/gcc.target/i386/extract-6.c - b9e834d41c948e584d3f1cd39c3a5959 gcc/testsuite/gcc.target/i386/extract-insert-combining.c - 4ea9a85bc3f40b1ebeb0581bd96620de gcc/testsuite/gcc.target/i386/f16c-check.h -+019f466ae9c955f33a105efa418493cf gcc/testsuite/gcc.target/i386/fabsneg-1.c - c8661d46af4e71184c4904ae6ab3be9b gcc/testsuite/gcc.target/i386/fastcall-1.c - dbf3cc9b53b5e2d78a16330cbb9137e5 gcc/testsuite/gcc.target/i386/fastcall-sseregparm.c - ba226e9b8c6e56794bbc8f0d614ee8c6 gcc/testsuite/gcc.target/i386/fentry-override.c -@@ -42002,7 +42102,7 @@ - 7aef940035776cbf7ecabc540f63e33e gcc/testsuite/gcc.target/i386/hle-xor-rel-1.c - 27f333984dddefbecb9e2c639d7c3066 gcc/testsuite/gcc.target/i386/i386.exp - 7272fad8a3b85477e1b6954e2c36656d gcc/testsuite/gcc.target/i386/iamcu/abi-iamcu.exp --a75b4ffb604aa8a4ae22652bfd0455d0 gcc/testsuite/gcc.target/i386/iamcu/args.h -+824179ec90e1e4fdb872aed133f8d523 gcc/testsuite/gcc.target/i386/iamcu/args.h - 75e691882a781a986cbf2b848eacc017 gcc/testsuite/gcc.target/i386/iamcu/asm-support.S - a77c8e89ec538edb98eb4ac96da0db61 gcc/testsuite/gcc.target/i386/iamcu/defines.h - ced3e7fc25757fe027f4eacc904e6881 gcc/testsuite/gcc.target/i386/iamcu/macros.h -@@ -43246,6 +43346,7 @@ - 939cb1764c085054007c93662975586c gcc/testsuite/gcc.target/i386/pr68497.c - e783cba59986d894ea86576ba3dba9de gcc/testsuite/gcc.target/i386/pr68633.c - 86970bbb2e352887837e71a47d7d1b1b gcc/testsuite/gcc.target/i386/pr68647.c -+ef3f1636440165ca1e8cb1ff5a7fd262 gcc/testsuite/gcc.target/i386/pr68657.c - ed977b2e07a2b51f6a0171f6ad454c88 gcc/testsuite/gcc.target/i386/pr68674.c - 37cbc35061a580832dbc0ce4a1604d83 gcc/testsuite/gcc.target/i386/pr68680.c - 82889ba70f826af56789c8d9456aea07 gcc/testsuite/gcc.target/i386/pr68691.c -@@ -43319,6 +43420,14 @@ - 4fbcd5b3350355ed9b86fc2f9efebbcf gcc/testsuite/gcc.target/i386/pr70593.c - c4dd0a4466890153a50da4018a6840e3 gcc/testsuite/gcc.target/i386/pr70596.c - 63614f4a8e03a5baed97479f04e87900 gcc/testsuite/gcc.target/i386/pr70662.c -+b98041baad19fb37bd266fc10bd5bc38 gcc/testsuite/gcc.target/i386/pr70728.c -+0adbcabe255b36ad14e5fced66fe8a7c gcc/testsuite/gcc.target/i386/pr70750-1.c -+683fe4353ec025a523da5da93c42a89a gcc/testsuite/gcc.target/i386/pr70750-2.c -+1003b2af30448864252327bd08ddb57b gcc/testsuite/gcc.target/i386/pr70858.c -+c4f6a31f14b030cd9290db1df9495760 gcc/testsuite/gcc.target/i386/pr70876.c -+960f365b62f7bf57c12061d19e6822e3 gcc/testsuite/gcc.target/i386/pr70877.c -+61d0b6b6f6714737a9330dc7fae9ed11 gcc/testsuite/gcc.target/i386/pr71529.C -+a9c6395b5501af8f7e41af6ddea5ede0 gcc/testsuite/gcc.target/i386/pr71647.c - 849234c7a569c1e86023244bc5561263 gcc/testsuite/gcc.target/i386/pr9771-1.c - 24ceb6d5f3f5cde4b9d852839bdb98ae gcc/testsuite/gcc.target/i386/prefetchw-1.c - f11f4731c396f099373c033ab016a64f gcc/testsuite/gcc.target/i386/prefetchwt1-1.c -@@ -43594,6 +43703,7 @@ - bdbcd892d3f88fe1d7a07a2122cb928d gcc/testsuite/gcc.target/i386/sse2-pr57233.c - ab93046758268c8e3106f1bed7d4e8a5 gcc/testsuite/gcc.target/i386/sse2-pr63594-1.c - ae0d76797c5135e83ce818bce0003cfa gcc/testsuite/gcc.target/i386/sse2-pr63594-2.c -+f83e050eb6a6a72950d4ead5f0340a6a gcc/testsuite/gcc.target/i386/sse2-pr71559.c - 306e316bf36fd1022168fa5560198f41 gcc/testsuite/gcc.target/i386/sse2-psadbw-1.c - 31949c673c69db630bfaf04449d2677f gcc/testsuite/gcc.target/i386/sse2-pshufd-1.c - 2890c692e114956ac819984c965d389e gcc/testsuite/gcc.target/i386/sse2-pshufhw-1.c -@@ -44861,6 +44971,7 @@ - 59520e2fbc082b0ec9e051f4e7c804f9 gcc/testsuite/gcc.target/powerpc/440-nmaclhw-1.c - 1740cc665d8423adf426eedd3a8276eb gcc/testsuite/gcc.target/powerpc/440-nmaclhw-2.c - 5931e32eea29c20bbd53794357f5ebad gcc/testsuite/gcc.target/powerpc/980827-1.c -+3836ca1b6787ffdabd915481b096bf59 gcc/testsuite/gcc.target/powerpc/abs128-1.c - c441836462a082b52b8df4f3644b8ee1 gcc/testsuite/gcc.target/powerpc/altivec-1.c - 7594d13b6afbb5788fd3ff108fa1798d gcc/testsuite/gcc.target/powerpc/altivec-10.c - 87921f986b2e966c18eb11c96891c323 gcc/testsuite/gcc.target/powerpc/altivec-11.c -@@ -44962,12 +45073,18 @@ - 76368ec7aa2b631ffe91a52dbe0c7e7a gcc/testsuite/gcc.target/powerpc/compress-float-ppc-pic.c - caf3aba39c0565b4369f2e0263b16af5 gcc/testsuite/gcc.target/powerpc/compress-float-ppc.c - 6419d1aaea22c0476688f484ac4f0f43 gcc/testsuite/gcc.target/powerpc/const-compare.c -+1f7277471f008809ee3572d95097e11a gcc/testsuite/gcc.target/powerpc/copysign128-1.c - 4b60a8662648a73cedee85dd08e278eb gcc/testsuite/gcc.target/powerpc/cprophard.c - 4c8d1f97ae959775777a07679512e4b5 gcc/testsuite/gcc.target/powerpc/cpu-builtin-1.c - 1fb2215d04b688ce2fdb0faccd58b012 gcc/testsuite/gcc.target/powerpc/crypto-builtin-1.c - 14fe4a3bc84df2b97d9440c94d7c8339 gcc/testsuite/gcc.target/powerpc/crypto-builtin-2.c - 4e3992362b37b544083ac6eaeaa1acca gcc/testsuite/gcc.target/powerpc/ctz-1.c - 9266181f224f779baa6b98a2f3b171e8 gcc/testsuite/gcc.target/powerpc/ctz-2.c -+dcd67b030ac5a36c48772f45c9311a7a gcc/testsuite/gcc.target/powerpc/ctz-3.c -+531f016ec3779129874335e4d662190c gcc/testsuite/gcc.target/powerpc/ctz-4.c -+dff00811bdc4a0d32afb132f16084b8c gcc/testsuite/gcc.target/powerpc/darn-0.c -+a3b7e0d3cc77ae3e0b0aea94e91b58e5 gcc/testsuite/gcc.target/powerpc/darn-1.c -+3a484a34727d320db4da25fdd45adeeb gcc/testsuite/gcc.target/powerpc/darn-2.c - 965986b227062a2b8c664c916a71ad45 gcc/testsuite/gcc.target/powerpc/darwin-abi-1.c - 9a0e4836781f28669ddca26eb214c2b2 gcc/testsuite/gcc.target/powerpc/darwin-abi-10.c - 66e5cfd1b7491e37c0ef258d09b6634d gcc/testsuite/gcc.target/powerpc/darwin-abi-11.c -@@ -44990,8 +45107,9 @@ - a034d7a8bf265623a75800f01113e836 gcc/testsuite/gcc.target/powerpc/darwin-split-ld-stret.c - 548fc585bcbf766f23bef7319f0b0a18 gcc/testsuite/gcc.target/powerpc/darwin64-abi.c - 48cfcb8d91718cca2ec942edea2af044 gcc/testsuite/gcc.target/powerpc/dfmode_off.c --37c328fb120fbf675f6e47f6e2626f1f gcc/testsuite/gcc.target/powerpc/dform-1.c --062afe6d6e8128fc20cdfb56900ba68d gcc/testsuite/gcc.target/powerpc/dform-2.c -+f6511eaddea2d2d6dbb6428c8e9f5822 gcc/testsuite/gcc.target/powerpc/dform-1.c -+bf3533458cbe01184881116cdb4e822c gcc/testsuite/gcc.target/powerpc/dform-2.c -+571072f2c83195496efb8b6a3d7921a1 gcc/testsuite/gcc.target/powerpc/dform-3.c - f2e8694ab86e1d671840cc1b4d010431 gcc/testsuite/gcc.target/powerpc/dfp-builtin-1.c - 70b901aef4fec169c6e0277e173417fe gcc/testsuite/gcc.target/powerpc/dfp-builtin-2.c - edc590c61b2a5fd6c1f8da5e10b52099 gcc/testsuite/gcc.target/powerpc/dfp-dd-2.c -@@ -44999,6 +45117,87 @@ - 918f43d2707c381ec6a3c8f95d06ba7a gcc/testsuite/gcc.target/powerpc/dfp-td-2.c - d29a538f7ef7ada44a91b35380ca809c gcc/testsuite/gcc.target/powerpc/dfp-td-3.c - f99e26532b9bfe0b24631290281df325 gcc/testsuite/gcc.target/powerpc/dfp-td.c -+cc553c1019d680b116be75246855e5d0 gcc/testsuite/gcc.target/powerpc/dfp/dfp.exp -+03cc7e47a4479ec2055b9af5a2055522 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-0.c -+6959ef5cd0438cde997e2af826ef2d8d gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-1.c -+8f82047dd5d13bd7808101a6cae2f96a gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-10.c -+758f013931d8cc97a719f89662e5f559 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c -+3b8212a7bdbfd7228a56f2142a77082d gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-12.c -+65380dd3577ee9e0a9b22cad78b2565c gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-13.c -+80d4ddd21f937e7f5cc6b1f54d5d3777 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-14.c -+f2469b3c94f1f566011419ed3f6c54c3 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-15.c -+9a597227f69d2f2ce0f06ce5d68e7e46 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c -+98c6e4c9b297b48f787a19ea13166fee gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-17.c -+6278ed0a2ff858f774d06e4fa6833c07 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-18.c -+b50bd5c52b5f27cf4b0eee6c78eef867 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-19.c -+68c7553b8028a8c430aa1c40c8f624da gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-2.c -+70da3a0ca0e2c3a4e51d3fbbbcd51313 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-20.c -+fa0668a907811b58e0a0c4f409996798 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-21.c -+abe6816951e1b9e949e8b911a3b180cd gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-22.c -+2c31ee89174617e3ba574448053a4776 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-23.c -+3e0335739986a16a45163048e08ed006 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-24.c -+a22bc1b3d29bb75f9e9f4da82ccf7000 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-25.c -+f3a402fb571a70912ac64e7756e95960 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-26.c -+48fd4c4f5b16ff2839d5091efc51bc1c gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-27.c -+0c90090dac2694d64341be49176ef464 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-28.c -+d6c16f057f007ccdd7d443182f2f58ed gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-29.c -+36c01ff92130550706fac5b98007820d gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-3.c -+8e75374fe860fe454da6f1a680c53093 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-30.c -+03f7f40b1ee77245c4ed1db91842709e gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c -+134a1c8226d793ac94d0652e4b65ae51 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-32.c -+67f1fa247cbccff554d48bb98247665d gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-33.c -+4edb941d627fbc374887b9f23e0f17e3 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-34.c -+e5cc2dfa10fd84ddaad3943264a4ad7f gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-35.c -+418c5a05711f0f9acd8020fe4b275a27 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c -+df4d094eb16f0b1be12e3e39058baccf gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-37.c -+91d74d67304699dcaa0bcc5fea885968 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-38.c -+99ba4e76415ae84299cdbd2e35e691be gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-39.c -+955c200f2a3a98a7dc3ce9fbf4a5d301 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-4.c -+39dac34ae8d1af68556468f7c696b8aa gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-40.c -+a1cf710e376403fc2fa6bc0a774cd55a gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-41.c -+239e077c75c03ada560d0ef45ba111ed gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-42.c -+6a91cd2b45b92620b9b44d1e1d6c8a1d gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-43.c -+4c0f2cfece2b5a5e87eaa33c36b3b3c7 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-44.c -+ff7d194ce3581accd4fd84661a45b7e5 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-45.c -+b6c2800bdfb9e964c574e9f6647766b7 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-46.c -+a384e1a8d2656a2eded5ddbbbb85944d gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-47.c -+1af4396cdb9e44ea23e581e3bc867f1a gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-48.c -+3a822bc78662a47bca3c325640886000 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-49.c -+42702dc12a998715cd502e0f58c1a084 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-5.c -+59131225f967e9974e4056c8724eb44d gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-50.c -+ca1730fffd35b4df6944a51eb8e6ecd0 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c -+6f290c19a8e109a3d2386b1bf4ec52fb gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-52.c -+e0c0eb7cd795a9e89a8d3bb2a7dae3c1 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-53.c -+d17666a7a3f1f4012dea704edcb358c1 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-54.c -+bc14720a9dc1307f25839ed1e2ea1df8 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-55.c -+5f29e6111a8c4445a3d2e82737ed852c gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c -+4ecd75bfc45420b8fe41eb1a6f75d1a6 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-57.c -+0b3e0dd4599b91e7eb77033764ef84f4 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-58.c -+1898d182bb390c8c6491b7c435026a9e gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-59.c -+a348525fc964f3f41e12f8381fd4bcf0 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-6.c -+8fe72a2d44a5dbae21dedb5009bd7060 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-60.c -+1b1a3ecb85d752278437daf2eea0e6eb gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-61.c -+52a091925e77ba1144deef4224d6f9ca gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-62.c -+f26a1170d2c83041d7a069b94343a9d7 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-63.c -+7f10d8beb44cbeb34704f04daf38dca2 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-64.c -+1243afa79ef71c09ca472c7ad6965e54 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-65.c -+54e131b3227f901fd2e26be9a409249d gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-66.c -+e771d4d8a905e5bf787121a83f8fb1bd gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-67.c -+231bcc25e02275bc7eba589b808e66c4 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-68.c -+f72240bd263e9d2959d34419b48ec7a1 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-69.c -+e5c6066babd8f328700bb917a676f848 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-7.c -+7f5d4d6487570d1848a67d1deb2569de gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-70.c -+11baa718d3b7a09edcd806f460dbbc25 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c -+b8a10e75320b7331731319d76c48b973 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-72.c -+af92c107465b701524293f2e133ca47b gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-73.c -+630a7ec679fff8883a406b022cf38aff gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-74.c -+c1e8ae021e1d249573f6608e39e8d86e gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-75.c -+b33ec26b8a79deea82491f02092ff7eb gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c -+9f6e7688c4fef262f7ed52de311ab068 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-77.c -+2b710812d98f7baa361e357f4e747316 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-78.c -+2652ccf7999779ff5319bf65f0b659c1 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-79.c -+341058672752eae6a423c51813b90e2c gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-8.c -+e8ac5024db4f3ad13af9c932702e4b7f gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-9.c - e1dbd1140383b4dbafeb6bc38684cf93 gcc/testsuite/gcc.target/powerpc/dimode_off.c - c6886ac188c6209f2a35a8c394fabfa1 gcc/testsuite/gcc.target/powerpc/direct-move-double1.c - bdc2a6ba20c8709781a896620fe1326b gcc/testsuite/gcc.target/powerpc/direct-move-double2.c -@@ -45010,6 +45209,7 @@ - 8d289ff49f69a167c01f4b6855e110ac gcc/testsuite/gcc.target/powerpc/direct-move-vint1.c - c08abaae6dddb0af0b1430cc189c6040 gcc/testsuite/gcc.target/powerpc/direct-move-vint2.c - 6aa10299b67de4618abcf699cb851ce8 gcc/testsuite/gcc.target/powerpc/direct-move.h -+be7ab318182d2d9e0f83da284efdde33 gcc/testsuite/gcc.target/powerpc/divkc3-1.c - 8f2229fba1c4dc16358c52a26e62a35e gcc/testsuite/gcc.target/powerpc/doloop-1.c - 1e28ad29e43de3bf402fb713b7540c32 gcc/testsuite/gcc.target/powerpc/e500-1.c - 6b480fbd59c1e52ed8af5509486a3432 gcc/testsuite/gcc.target/powerpc/e500-ord-1.c -@@ -45025,6 +45225,8 @@ - 44257db5dbf13763224f09982671b766 gcc/testsuite/gcc.target/powerpc/float128-1.c - 8431c27a8973acc6b663c3e4190c2f2e gcc/testsuite/gcc.target/powerpc/float128-2.c - 9e6f60ec112f9373cd63307f592ff5a7 gcc/testsuite/gcc.target/powerpc/float128-call.c -+da43f175c7dca2bbe0139db71bea74f9 gcc/testsuite/gcc.target/powerpc/float128-complex-1.c -+ba0af867a51a0f317dfaf5694d966c85 gcc/testsuite/gcc.target/powerpc/float128-complex-2.c - 278c3bcb22b5f3322ae25ff38796870a gcc/testsuite/gcc.target/powerpc/float128-hw.c - e930a70de9d4456cf3f5cae8c611ac1c gcc/testsuite/gcc.target/powerpc/float128-mix.c - 437cac345cf3e7c88a4c1c8b8480547f gcc/testsuite/gcc.target/powerpc/fusion.c -@@ -45037,6 +45239,7 @@ - 238571a7588bf04ee725a409029ddaf1 gcc/testsuite/gcc.target/powerpc/htm-ttest.c - bd2f03394b7690c22ce1aab465adb75f gcc/testsuite/gcc.target/powerpc/htm-xl-intrin-1.c - 8d634b2a7d443f1e5b4b69716e57ac00 gcc/testsuite/gcc.target/powerpc/indexed-addr.c -+1cc843325d44861ca12b01f8232baced gcc/testsuite/gcc.target/powerpc/inf128-1.c - de6c3cf42bacd45ce2c483d586831396 gcc/testsuite/gcc.target/powerpc/le-altivec-consts.c - 7893fdf7b4681a84cb4d049bea9ffc10 gcc/testsuite/gcc.target/powerpc/leaf.c - 1853e044fc4484c52b41a7d64cfddd8c gcc/testsuite/gcc.target/powerpc/lhs-1.c -@@ -45052,6 +45255,8 @@ - cfbe35822c519cf32e8f41ddb02759ed gcc/testsuite/gcc.target/powerpc/mmfpgpr.c - 995bc75d9399474fb48494a941a1e00a gcc/testsuite/gcc.target/powerpc/mod-1.c - 68dd42cf85da89132923bd22aec1f9dc gcc/testsuite/gcc.target/powerpc/mod-2.c -+3aa7fc41d135e303f0c05c03811cfb39 gcc/testsuite/gcc.target/powerpc/mulkc3-1.c -+1f98efd43a15bde30353489bd97a085d gcc/testsuite/gcc.target/powerpc/nan128-1.c - e22a7266629ff9fe810fc66e708b11a6 gcc/testsuite/gcc.target/powerpc/no-r11-1.c - 0f3e464b60c769b9067c0b49078b50e5 gcc/testsuite/gcc.target/powerpc/no-r11-2.c - 302a3a348ae2f60a0b1366d1c9481f97 gcc/testsuite/gcc.target/powerpc/no-r11-3.c -@@ -45069,7 +45274,7 @@ - 218190fe0e4f681dda260926232e56b5 gcc/testsuite/gcc.target/powerpc/p8vector-builtin-7.c - 39413d857162f864cd0cfa0c0a600923 gcc/testsuite/gcc.target/powerpc/p8vector-builtin-8.c - 3f96842d16ce43bf9d8c92dab6d38fb8 gcc/testsuite/gcc.target/powerpc/p8vector-fp.c --f29a688c117106072da0c3eb645375e9 gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c -+36ce3b715645c5b3d320e55d92cecb36 gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c - dc5273f33a688389eb35c5a79b6b04b9 gcc/testsuite/gcc.target/powerpc/p8vector-int128-2.c - fa4a7a4c3fc9401f5f7a3c80eca753f3 gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c - 11c5f55b0b21129d8c523e1f11c76274 gcc/testsuite/gcc.target/powerpc/p8vector-vbpermq.c -@@ -45080,8 +45285,17 @@ - 8c128eee1ed213711e07bd5bbf4ea8c5 gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-5.c - f368a72cbfc951f5d512a015f6e8c2fe gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-1.c - 46765159df83126bf98a3389decd9548 gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-2.c --ec4a1b33aeb2dc10bc385f3a5cab0690 gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-3.c --44fb83fb0d58cbe1b55027ec048d86a7 gcc/testsuite/gcc.target/powerpc/p9-permute.c -+b2136c61215bc040108f9a44241aa4b3 gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-3.c -+a56e3fa096d4eb9c5d04e5ef09bccdf7 gcc/testsuite/gcc.target/powerpc/p9-minmax-1.c -+a67318a36c32f549811fc609d45bcebe gcc/testsuite/gcc.target/powerpc/p9-minmax-2.c -+1778c48c8bde0f502ec1184c17d6661b gcc/testsuite/gcc.target/powerpc/p9-permute.c -+ce1b8af0ff483cd3f89e77c6158773e6 gcc/testsuite/gcc.target/powerpc/p9-splat-1.c -+ae816fd528711a489a96d36403ab4796 gcc/testsuite/gcc.target/powerpc/p9-splat-2.c -+90f06243a7fc1c6079c823376b9b6cc4 gcc/testsuite/gcc.target/powerpc/p9-splat-3.c -+76e637efba841cdc036746e8f48a0914 gcc/testsuite/gcc.target/powerpc/p9-splat-4.c -+1001e87b8d8b5b7135c100a89e4def45 gcc/testsuite/gcc.target/powerpc/p9-vneg.c -+69dc6d7d44a9c96a4258141385a846d7 gcc/testsuite/gcc.target/powerpc/p9-vparity.c -+7d6c7bf2bdc6cb2de461278049408eb4 gcc/testsuite/gcc.target/powerpc/p9-vpermr.c - de89784ed878c699a73dbedef03c25ef gcc/testsuite/gcc.target/powerpc/pack01.c - c9ce448310ccdac5da6fa5b69ec461fa gcc/testsuite/gcc.target/powerpc/pack02.c - fa72c1f9512bac14ea57ebf20c94c152 gcc/testsuite/gcc.target/powerpc/pack03.c -@@ -45198,7 +45412,7 @@ - 09542fc0756c51e091818e0d1a7a05b5 gcc/testsuite/gcc.target/powerpc/pr47197.c - 524c7b62ac0c9686a6bdb4804a11fce4 gcc/testsuite/gcc.target/powerpc/pr47251.c - 9bcd4da8d1ead179f5ca0c94808c2ec3 gcc/testsuite/gcc.target/powerpc/pr47755-2.c --bcabc94dfa3cff99515bf6e3ff144a3a gcc/testsuite/gcc.target/powerpc/pr47755.c -+b15f022f6f08a7dca1b72ba59441c31f gcc/testsuite/gcc.target/powerpc/pr47755.c - a126c8ee58b9156d861ed2d613db885a gcc/testsuite/gcc.target/powerpc/pr47862.c - 187f203dd54fe5ba94f23b9af10db192 gcc/testsuite/gcc.target/powerpc/pr48053-1.c - e3647ff87eca8354091eead60728a16f gcc/testsuite/gcc.target/powerpc/pr48053-2.c -@@ -45254,7 +45468,7 @@ - 1dc925cae1c688a77865627d749d015c gcc/testsuite/gcc.target/powerpc/pr67071-3.c - 35c73d31cfb2ab34903671c0ed5ded53 gcc/testsuite/gcc.target/powerpc/pr67789.c - d513afbb48bce30e890a5d3d76987740 gcc/testsuite/gcc.target/powerpc/pr67808.c --f9c4133177a090e3d877342b2d04766f gcc/testsuite/gcc.target/powerpc/pr68805.c -+b0dae0a08b67b28c3e8a71536d261274 gcc/testsuite/gcc.target/powerpc/pr68805.c - d369a7045eda68cbec3227a16d5de67b gcc/testsuite/gcc.target/powerpc/pr68872.c - faf2ed46677346059dd2b7fd42254985 gcc/testsuite/gcc.target/powerpc/pr69252.c - 49c8c108299a8b499707f5665d377a18 gcc/testsuite/gcc.target/powerpc/pr69461.c -@@ -45264,6 +45478,17 @@ - a31fef5f59c5f12ea342e66137c45ae7 gcc/testsuite/gcc.target/powerpc/pr70117.c - 222fda9019693e635c2d63ebdda27d2b gcc/testsuite/gcc.target/powerpc/pr70640.c - da2f788bebe8f041672950b7347513cf gcc/testsuite/gcc.target/powerpc/pr70669.c -+d3a79432800e585b3905439b686d873b gcc/testsuite/gcc.target/powerpc/pr70963.c -+31132ce703c42e34a14c7d103e655da2 gcc/testsuite/gcc.target/powerpc/pr71186.c -+18f516c22671e1293affe8823881c35c gcc/testsuite/gcc.target/powerpc/pr71493-1.c -+7d83053012a7579379ae3f803b73b2ec gcc/testsuite/gcc.target/powerpc/pr71493-2.c -+28b1e9d8edb2081a7279eaec89871fee gcc/testsuite/gcc.target/powerpc/pr71656-1.c -+d9ffd95a09400f5746357a34145f6515 gcc/testsuite/gcc.target/powerpc/pr71656-2.c -+a6ef0034e7b09484d521e41a8f3e2b46 gcc/testsuite/gcc.target/powerpc/pr71670.c -+9d1ceb34ff4072b9b15ceedc2d7a4618 gcc/testsuite/gcc.target/powerpc/pr71698.c -+140c404b55422d7f1ea527d9803d6b5f gcc/testsuite/gcc.target/powerpc/pr71720.c -+d9ccfe0048f3d64bbe5861c9aea6294f gcc/testsuite/gcc.target/powerpc/pr71763.c -+743729f568d85b4bd156413e92dea820 gcc/testsuite/gcc.target/powerpc/pr71805.c - 17f878b62dd2e08735d53fce64232a47 gcc/testsuite/gcc.target/powerpc/quad-atomic.c - 171a411d14f30e8450dc3f2ef38b1bd7 gcc/testsuite/gcc.target/powerpc/recip-1.c - 6b7c4920c070e84f6819377bcdb90c0d gcc/testsuite/gcc.target/powerpc/recip-2.c -@@ -45287,6 +45512,9 @@ - 65a53924a48d5df99017fa40a01962f4 gcc/testsuite/gcc.target/powerpc/sd-vsx.c - a53a4937c325ba3bc85e0bdea0b94e11 gcc/testsuite/gcc.target/powerpc/shift-dot.c - 416332739a98fa1f2023fe8c217782e4 gcc/testsuite/gcc.target/powerpc/shift-int.c -+4262b23e41d93c06cc511429249fcda3 gcc/testsuite/gcc.target/powerpc/signbit-1.c -+289a117f2abe4e588c45c20e3418566e gcc/testsuite/gcc.target/powerpc/signbit-2.c -+1ef9b2c104b31118ee37ca3c09991d00 gcc/testsuite/gcc.target/powerpc/signbit-3.c - b3e9870bc5d831fd67c299ee87dfb2f7 gcc/testsuite/gcc.target/powerpc/spe-evmerge.c - 89537cc7476c27c7c10b811da61def34 gcc/testsuite/gcc.target/powerpc/spe-small-data-1.c - 9d04892083c467f0ebf1fc75e043d6d8 gcc/testsuite/gcc.target/powerpc/spe-small-data-2.c -@@ -45325,6 +45553,18 @@ - d1f9b55044b5c80d668c846e0f160115 gcc/testsuite/gcc.target/powerpc/timode_off.c - fe21d9465e0313b29a24703b2cef2b7e gcc/testsuite/gcc.target/powerpc/upper-regs-df.c - 7f45b205e570d7d45266076bd4fd4f4c gcc/testsuite/gcc.target/powerpc/upper-regs-sf.c -+fe1198a185fcf0cf3c192cb7e0f554af gcc/testsuite/gcc.target/powerpc/vadsdu-0.c -+0623613fbcbc6fa96d28c319582034e3 gcc/testsuite/gcc.target/powerpc/vadsdu-1.c -+9ee678d38841407e553ad5d916841cbd gcc/testsuite/gcc.target/powerpc/vadsdu-2.c -+cd4f138fd346361e2e3103806fd8e4c8 gcc/testsuite/gcc.target/powerpc/vadsdu-3.c -+d80a979aa0ab824dbdb31e5e8db1d686 gcc/testsuite/gcc.target/powerpc/vadsdu-4.c -+3e300989c07659ab970072f3d95fde1f gcc/testsuite/gcc.target/powerpc/vadsdu-5.c -+dd9d9603bf7f30ea24dc69a515e1018f gcc/testsuite/gcc.target/powerpc/vadsdub-1.c -+d899788117c4e5a72b4b1f588fe2d14e gcc/testsuite/gcc.target/powerpc/vadsdub-2.c -+99d98db6a63856f69d9535bde676d0dc gcc/testsuite/gcc.target/powerpc/vadsduh-1.c -+b4f95876fdcc9d9ee6da80cca9fda9c6 gcc/testsuite/gcc.target/powerpc/vadsduh-2.c -+8ea44287fbf60977cedb44fec5928530 gcc/testsuite/gcc.target/powerpc/vadsduw-1.c -+f89bc692aa33f0a854308215a8c5a45c gcc/testsuite/gcc.target/powerpc/vadsduw-2.c - 6359ddccab89d64974aacae92509fc9e gcc/testsuite/gcc.target/powerpc/vec-cg.c - 4137a1d7e936bac5292a51f907266de1 gcc/testsuite/gcc.target/powerpc/vec-cmp-sel.c - 2d193a6a4c276dd8b48c488c547c2063 gcc/testsuite/gcc.target/powerpc/vec-cmp.c -@@ -45332,6 +45572,10 @@ - fa102cb45e48c286b356759209443dea gcc/testsuite/gcc.target/powerpc/vec-mult-char-2.c - bbd74596ca12fe9aac0347c6253db300 gcc/testsuite/gcc.target/powerpc/vec-shift.c - 8ee50015e788404267646adf1ac95972 gcc/testsuite/gcc.target/powerpc/vec-shr.c -+2c89883d083bc93d292eb8be25a26a55 gcc/testsuite/gcc.target/powerpc/vslv-0.c -+3032ccdc175db10c55ecb393e9757ea8 gcc/testsuite/gcc.target/powerpc/vslv-1.c -+249c2e1b9f88f56726ab8ecfe5c4e957 gcc/testsuite/gcc.target/powerpc/vsrv-0.c -+b5ff35f6c27a48ed531cd0cb2035da0b gcc/testsuite/gcc.target/powerpc/vsrv-1.c - 4ceb6855c2485b8644bf41d0692dce88 gcc/testsuite/gcc.target/powerpc/vsx-builtin-1.c - 9e3c77c5253ece30391881a511c37067 gcc/testsuite/gcc.target/powerpc/vsx-builtin-2.c - 2cbc6ebb458b1e9d41b7cd611b4dbd55 gcc/testsuite/gcc.target/powerpc/vsx-builtin-3.c -@@ -45340,6 +45584,10 @@ - 0b61a376e7164778a523a0766df4ce6e gcc/testsuite/gcc.target/powerpc/vsx-builtin-6.c - aec0aad4ad9d1a50c30d68081c0f2184 gcc/testsuite/gcc.target/powerpc/vsx-builtin-7.c - 88cd9f4d3675a8897d01117429ae8094 gcc/testsuite/gcc.target/powerpc/vsx-builtin-8.c -+60164d527bd21ab51c50c80abf146df1 gcc/testsuite/gcc.target/powerpc/vsx-elemrev-1.c -+3af84d85921a35dbef53567c5ede1159 gcc/testsuite/gcc.target/powerpc/vsx-elemrev-2.c -+5b80f1ec62fecc5421d5ce52af4b330c gcc/testsuite/gcc.target/powerpc/vsx-elemrev-3.c -+6b19bf3ff62b230d7085a802e8199e3f gcc/testsuite/gcc.target/powerpc/vsx-elemrev-4.c - 29415c0ab3cf79b03ca4a55fa764901b gcc/testsuite/gcc.target/powerpc/vsx-extract-1.c - ad77cf7854ac810c73e5ad0184232f20 gcc/testsuite/gcc.target/powerpc/vsx-extract-2.c - e4ac7f141f61cf4cf8934fe3ee7cf407 gcc/testsuite/gcc.target/powerpc/vsx-extract-3.c -@@ -45466,6 +45714,7 @@ - c06cf2adc5393d32c0b9a8d805d6afb4 gcc/testsuite/gcc.target/s390/md/setmem_long-1.c - a105158cf4633c30f58d84f95c33ee67 gcc/testsuite/gcc.target/s390/morestack.c - ee3f00537b1c391d545c37c6ea4a145c gcc/testsuite/gcc.target/s390/nearestint-1.c -+20772d696b36be5fe8027a9f6a1a5faa gcc/testsuite/gcc.target/s390/nolrl-1.c - 25c3bd00fd3d097e42ac8cfc215fd0c4 gcc/testsuite/gcc.target/s390/pfpo.c - 765307a040de72f2f4376b7068d68018 gcc/testsuite/gcc.target/s390/pr20927.c - 85f31fb9b4b15529205376d3f6fa385c gcc/testsuite/gcc.target/s390/pr24624.c -@@ -45882,6 +46131,8 @@ - 7efe7d6dfe46005ac34237aa9e3e023c gcc/testsuite/gcc.target/sparc/fpadd32s.c - e7a16562b49f44afb077d0a7befb1888 gcc/testsuite/gcc.target/sparc/fpadds.c - e291921904c28ad0957b701bb53b0dda gcc/testsuite/gcc.target/sparc/fpaddsubi.c -+ac111f461cdeae36912fd3f8404ed990 gcc/testsuite/gcc.target/sparc/fpcmp.c -+2744da28c2a65f937a5d696009a68964 gcc/testsuite/gcc.target/sparc/fpcmpu.c - d5c0d8820b76e85d8f0cf1c69966a388 gcc/testsuite/gcc.target/sparc/fpmerge-2.c - a7cc3a1dfad8c1fc65ae115cb1af1560 gcc/testsuite/gcc.target/sparc/fpmerge.c - c589849053db19bd27d64bfbabf5ea20 gcc/testsuite/gcc.target/sparc/fpmul-2.c -@@ -45956,6 +46207,7 @@ - 51fff32a202c8bd3aa39b5f219127064 gcc/testsuite/gcc.target/sparc/vis3move-1.c - b19cd6113dbe3ce177bc3a6f0edd515b gcc/testsuite/gcc.target/sparc/vis3move-2.c - c743e0cdebd780532edc2e21e3de15e4 gcc/testsuite/gcc.target/sparc/vis3move-3.c -+c6e8cea536062af6f23168b438e096e3 gcc/testsuite/gcc.target/sparc/vis4misc.c - 56b799e8f22e02ad94a3b78e432a129c gcc/testsuite/gcc.target/sparc/wrgsr.c - 8ab1e95b1174d62330ff11c4ce7c22d3 gcc/testsuite/gcc.target/sparc/xmul.c - 723fd6618b2db81b9d1ef55c7f12b2d5 gcc/testsuite/gcc.target/spu/Wmain.c -@@ -46653,7 +46905,7 @@ - d5ea8f5a9e2574f03e0f07aefb628587 gcc/testsuite/gfortran.dg/array_constructor_46.f90 - 43de0ab156de7b0350c7425df3859e4a gcc/testsuite/gfortran.dg/array_constructor_47.f90 - 71b1b67746cb3b141002319b6af5c534 gcc/testsuite/gfortran.dg/array_constructor_48.f90 --962a7a6b6e5f15ede68a20cff87053b5 gcc/testsuite/gfortran.dg/array_constructor_49.f90 -+b3fed1ef4a2d1acbb8f29ba81a3ade35 gcc/testsuite/gfortran.dg/array_constructor_49.f90 - 9918ac77cf760a3800e94da773f0a74b gcc/testsuite/gfortran.dg/array_constructor_5.f90 - 6dc05669b848d267b25c38806e59d51f gcc/testsuite/gfortran.dg/array_constructor_6.f90 - 0965c3437a2116ac32e573441184fdee gcc/testsuite/gfortran.dg/array_constructor_7.f90 -@@ -47361,6 +47613,7 @@ - 50b3c8143d77c8ce5bb9d993685e5e6b gcc/testsuite/gfortran.dg/class_array_2.f03 - 5d685c52e64583cc42131880a4b0d8fc gcc/testsuite/gfortran.dg/class_array_20.f03 - 15af94e79a85d05449886a154d162bff gcc/testsuite/gfortran.dg/class_array_21.f03 -+91de14bd0e1e34515a91a4245b3da873 gcc/testsuite/gfortran.dg/class_array_22.f03 - 3c6c7feaa5267df5f131a4ddb69162d9 gcc/testsuite/gfortran.dg/class_array_3.f03 - cb5261f2acfcf95396bea9e699efcd14 gcc/testsuite/gfortran.dg/class_array_4.f03 - b4dd99bc2d3d2741e6f3769df3b8d9e0 gcc/testsuite/gfortran.dg/class_array_5.f03 -@@ -47534,6 +47787,8 @@ - b2dba23fc22128a647db42769be9f272 gcc/testsuite/gfortran.dg/coindexed_1.f90 - f921a7c5a0e4098dd6b6edf4e317a4e1 gcc/testsuite/gfortran.dg/com_block_driver.f90 - 2595b7b0d8e86ae62cf503bd5080ee45 gcc/testsuite/gfortran.dg/comma.f -+ca9b384b7523fa630f1d4edff3cd4267 gcc/testsuite/gfortran.dg/comma_IO_extension_1.f90 -+7b4fe3be18cf5d3e2bcac0b98a2191d6 gcc/testsuite/gfortran.dg/comma_IO_extension_2.f90 - b68510025102f4e42c5ab3a0ebf1b5aa gcc/testsuite/gfortran.dg/comma_format_extension_1.f - e9f174aaa655ec093b7c3dc075581e89 gcc/testsuite/gfortran.dg/comma_format_extension_2.f - e38edb0e607a003fddf67b7597b40626 gcc/testsuite/gfortran.dg/comma_format_extension_3.f -@@ -47693,6 +47948,24 @@ - 311f4c5de7848479e7c29ad08de71190 gcc/testsuite/gfortran.dg/debug/trivial.f - 431530310efb9ec01e397a4a411f8e67 gcc/testsuite/gfortran.dg/debug_1.f90 - f12fc8f8c675ad90dacda21c47b123cf gcc/testsuite/gfortran.dg/debug_2.f -+299b547bcb6b486a2e1f3e6ff0e387b8 gcc/testsuite/gfortran.dg/dec_structure_1.f90 -+facc0d311d19c38571f70f8db13044bc gcc/testsuite/gfortran.dg/dec_structure_10.f90 -+bebb7b5cba927374343e4d102d6bdef2 gcc/testsuite/gfortran.dg/dec_structure_11.f90 -+c065ec9eab467c19e2503ea2b5ec35f6 gcc/testsuite/gfortran.dg/dec_structure_2.f90 -+17d1e3238da3930c57838b7f1d610c40 gcc/testsuite/gfortran.dg/dec_structure_3.f90 -+17bdec7f0e2ee1d7fce0b23ebd82610a gcc/testsuite/gfortran.dg/dec_structure_4.f90 -+e60b5448cb28834a5043d778f28b0029 gcc/testsuite/gfortran.dg/dec_structure_5.f90 -+5276660c4588b2f9922aacd54e303a2d gcc/testsuite/gfortran.dg/dec_structure_6.f90 -+b7df816a5764cf98d0af9a21fc087015 gcc/testsuite/gfortran.dg/dec_structure_7.f90 -+a3842131746a182a4d0d806a0ead8cf9 gcc/testsuite/gfortran.dg/dec_structure_8.f90 -+ba7bd70d8f9beaa28febfa1d800b3cf7 gcc/testsuite/gfortran.dg/dec_structure_9.f90 -+13560c998f2fbbcc2fd45b4777d0e4c9 gcc/testsuite/gfortran.dg/dec_union_1.f90 -+069da68835dead9331318c2f9a653aec gcc/testsuite/gfortran.dg/dec_union_2.f90 -+83928614f196067ade7992b31468aef9 gcc/testsuite/gfortran.dg/dec_union_3.f90 -+0557177e9e8702f52b8f249aa7941985 gcc/testsuite/gfortran.dg/dec_union_4.f90 -+3f6b8d2969f783d7204a320cf8b95cd2 gcc/testsuite/gfortran.dg/dec_union_5.f90 -+ac7e4f8e406a6c26533909c71fa6b3fd gcc/testsuite/gfortran.dg/dec_union_6.f90 -+3bf903f4b6b040909bf42cbcf85d3330 gcc/testsuite/gfortran.dg/dec_union_7.f90 - 24aa7ef3c5125fd57a6bf5b0d5a11a5f gcc/testsuite/gfortran.dg/default_format_1.f90 - 42dc43ca59716a600a5d47ef02504fc7 gcc/testsuite/gfortran.dg/default_format_1.inc - 6639ce11899c92de50597c547e431fe7 gcc/testsuite/gfortran.dg/default_format_2.f90 -@@ -47715,6 +47988,7 @@ - c26c871bf08605ce024253a49da3b53a gcc/testsuite/gfortran.dg/deferred_character_14.f90 - 1c4f05212f5447da65bd477a1f755ce9 gcc/testsuite/gfortran.dg/deferred_character_15.f90 - bcdb84ffa3c50231ecd967d3114134ae gcc/testsuite/gfortran.dg/deferred_character_16.f90 -+c2d3fe3d7d640f7941cc2bc632a62dae gcc/testsuite/gfortran.dg/deferred_character_17.f90 - 0065ab4e114bfcdbbb2b3374d1ffdc63 gcc/testsuite/gfortran.dg/deferred_character_2.f90 - 496fec17b89042f5546165ec11d36f09 gcc/testsuite/gfortran.dg/deferred_character_3.f90 - 1d0633419cdd140f8ca51872f6219b2d gcc/testsuite/gfortran.dg/deferred_character_4.f90 -@@ -47789,6 +48063,7 @@ - dca63cf93efe22616e44d9f46b5b1933 gcc/testsuite/gfortran.dg/dependency_43.f90 - 52a475961b0e9c97d571fa626e1754b5 gcc/testsuite/gfortran.dg/dependency_44.f90 - 9908775fdc0125fcca5e0250d562cdb1 gcc/testsuite/gfortran.dg/dependency_45.f90 -+18bd6a173b22bb353c669d8ab0cbe6df gcc/testsuite/gfortran.dg/dependency_46.f90 - 590a99c4ec44cc37aa92b225e93d6e87 gcc/testsuite/gfortran.dg/dependency_5.f90 - 03218919538313b26e09fa1b8f0efda0 gcc/testsuite/gfortran.dg/dependency_6.f90 - 699f1378f5c1fcdc54eb21fdb4a59be1 gcc/testsuite/gfortran.dg/dependency_7.f90 -@@ -48477,17 +48752,19 @@ - 6efd4df3178f228cb542d2003c66b882 gcc/testsuite/gfortran.dg/goacc/array-reduction.f90 - c92cb05a4e19077108b80407be41b8f4 gcc/testsuite/gfortran.dg/goacc/assumed.f95 - 8cdce510706db86c42684ec44b8eb828 gcc/testsuite/gfortran.dg/goacc/asyncwait-1.f95 --7bd472524bf42138d88fa89386d66b65 gcc/testsuite/gfortran.dg/goacc/asyncwait-2.f95 --e6a2926ae0de810c7fe830bb89c73ecf gcc/testsuite/gfortran.dg/goacc/asyncwait-3.f95 --fdc3c66ef32cd5b7ad3182aa063ae0b2 gcc/testsuite/gfortran.dg/goacc/asyncwait-4.f95 -+e5c0af740e47a34c175a9ceb878b8228 gcc/testsuite/gfortran.dg/goacc/asyncwait-2.f95 -+a9a3cfdb74f2e089482e586df93f98f6 gcc/testsuite/gfortran.dg/goacc/asyncwait-3.f95 -+0084be36b4e094fd83e8998262213cba gcc/testsuite/gfortran.dg/goacc/asyncwait-4.f95 - b5ce38fdd599e1809965f838521def2e gcc/testsuite/gfortran.dg/goacc/branch.f95 --34313aee22abd0152799e922857be58d gcc/testsuite/gfortran.dg/goacc/cache-1.f95 --90ecc7d89f74c8968e175f4f1d53be80 gcc/testsuite/gfortran.dg/goacc/coarray.f95 -+109a3ecc87b1bc758772cc9eeee4d842 gcc/testsuite/gfortran.dg/goacc/cache-1.f95 -+0770d02d65abc7014c30751880ebe628 gcc/testsuite/gfortran.dg/goacc/cache-2.f95 -+83d4a89dbb466047d65da89db7eebee2 gcc/testsuite/gfortran.dg/goacc/coarray.f95 - 802487ba26d5909068b6a8fd851b3b28 gcc/testsuite/gfortran.dg/goacc/coarray_2.f90 --55f389e7d2475dfd568dc4cfc36ee031 gcc/testsuite/gfortran.dg/goacc/combined-directives.f90 -+a7d31e00fe9a2d414bb73e11030c72bc gcc/testsuite/gfortran.dg/goacc/combined-directives.f90 - d1e02d6d5cf7ba5e1a5efb88f2c97c94 gcc/testsuite/gfortran.dg/goacc/combined_loop.f90 - 9d0226e6bd1816759f20d69d9cfb27cc gcc/testsuite/gfortran.dg/goacc/continuation-free-form.f95 --95640396b34a8b7bad7efe08268dc32c gcc/testsuite/gfortran.dg/goacc/cray.f95 -+1d2b9f57ee07b286f80f6b187af2ff1b gcc/testsuite/gfortran.dg/goacc/cray-2.f95 -+decf3300196fa1217139ef97f2e0edda gcc/testsuite/gfortran.dg/goacc/cray.f95 - 4bb22bcb9fe8f7604be602bc77be659f gcc/testsuite/gfortran.dg/goacc/critical.f95 - 022517e8228f065e890dddca8b9c62eb gcc/testsuite/gfortran.dg/goacc/data-clauses.f95 - cf1b8cb94fd316d9739bca6a5a62b7c8 gcc/testsuite/gfortran.dg/goacc/data-tree.f95 -@@ -48522,26 +48799,30 @@ - b3ec1dda65c543c847dd7dddd2c4225d gcc/testsuite/gfortran.dg/goacc/kernels-tree.f95 - 69f03def6f88f62ff022aa924b3ef5ec gcc/testsuite/gfortran.dg/goacc/list.f95 - e6dbc70731a1d1ca5862632bc04ef617 gcc/testsuite/gfortran.dg/goacc/literal.f95 --2b88ae51fe174e583daaf03c09fcec02 gcc/testsuite/gfortran.dg/goacc/loop-1.f95 -+b26795c8c89b35d75e8f259a55524874 gcc/testsuite/gfortran.dg/goacc/loop-1-2.f95 -+687f26e7d2845bfca2374df935de0ad8 gcc/testsuite/gfortran.dg/goacc/loop-1.f95 - f89d863f93581b48d43a32a8190ba33e gcc/testsuite/gfortran.dg/goacc/loop-2.f95 --c9153e6a6dac5781507ac515cab62dd5 gcc/testsuite/gfortran.dg/goacc/loop-3.f95 -+7a6e1274863fdd10d60c8e28013470ad gcc/testsuite/gfortran.dg/goacc/loop-3-2.f95 -+4ab6f70640fa56a4b2322cbd843dc31e gcc/testsuite/gfortran.dg/goacc/loop-3.f95 - 7650c1b33dcca66bb9a4288605d35e20 gcc/testsuite/gfortran.dg/goacc/loop-4.f95 - 9cd553c36e742f7b04d15d0cb0a6a48e gcc/testsuite/gfortran.dg/goacc/loop-5.f95 - 1d6f955c573654211baccdf5274140f4 gcc/testsuite/gfortran.dg/goacc/loop-6.f95 - 6cf3587f7d4ad23454dd236855ca4765 gcc/testsuite/gfortran.dg/goacc/loop-7.f95 - 6a1610362e13864115701f5d730ee4d1 gcc/testsuite/gfortran.dg/goacc/loop-tree-1.f90 - 677cbf9fd090598ed630bcfe28346d68 gcc/testsuite/gfortran.dg/goacc/multi-clause.f90 -+d8029a1c26556a69cbb64f6e00104fc1 gcc/testsuite/gfortran.dg/goacc/nested-function-1.f90 - 0eceec0214676eaf97b87027864084f8 gcc/testsuite/gfortran.dg/goacc/omp-fixed.f - 7ac95438e9a28b224841f382a0cd1c73 gcc/testsuite/gfortran.dg/goacc/omp.f95 - 858af9153dd1e561ac2db5bbc63970fc gcc/testsuite/gfortran.dg/goacc/parallel-kernels-clauses.f95 - 1ba4b22dac74c58581a0548cc088e27d gcc/testsuite/gfortran.dg/goacc/parallel-kernels-regions.f95 - f111c33f57aecc85e59e669c980e4436 gcc/testsuite/gfortran.dg/goacc/parallel-tree.f95 - 4f9ac2d37e02e4f60dbb47924519e3ad gcc/testsuite/gfortran.dg/goacc/parameter.f95 -+b4f5bf838607d6206aae8d768d23c64e gcc/testsuite/gfortran.dg/goacc/pr71704.f90 - 93028fbaf2e1d8a3907db1cacb627cf7 gcc/testsuite/gfortran.dg/goacc/private-1.f95 - 24e251dd88a9ea6377e535f5ee5f31ed gcc/testsuite/gfortran.dg/goacc/private-2.f95 - a70416eb409bcd3ad178b3d0127d84e8 gcc/testsuite/gfortran.dg/goacc/private-3.f95 - 62b5f5b00b9662a8b75727b0922b367d gcc/testsuite/gfortran.dg/goacc/pure-elemental-procedures.f95 --d12cf9a036092d8d5b7280b4a40b9ca0 gcc/testsuite/gfortran.dg/goacc/reduction-2.f95 -+9b703807d8c979fc38c25732d2b58ed7 gcc/testsuite/gfortran.dg/goacc/reduction-2.f95 - d3ab76f25073383b9b4da99d0ae1d5da gcc/testsuite/gfortran.dg/goacc/reduction-3.f95 - 05592ff32b84187f44ceb5b9e28798d2 gcc/testsuite/gfortran.dg/goacc/reduction-promotions.f90 - 46fd853a6275991852de09ff935972f6 gcc/testsuite/gfortran.dg/goacc/reduction.f95 -@@ -48555,7 +48836,6 @@ - 1de77dbd04bee79fc48688363255fcd9 gcc/testsuite/gfortran.dg/goacc/several-directives.f95 - f06b08508075bc5860b3aef6a69260fe gcc/testsuite/gfortran.dg/goacc/sie.f95 - cb4390c1c6c7c2a0935783bfe228925e gcc/testsuite/gfortran.dg/goacc/subarrays.f95 --541c6f516c94b64ec10c75b4beec8152 gcc/testsuite/gfortran.dg/goacc/subroutines.f90 - 2fcae0aca98e7612762a0d64de5d1b4d gcc/testsuite/gfortran.dg/goacc/uninit-copy-clause.f95 - 1b773656b8a7d541df7a20f4cb0b21c5 gcc/testsuite/gfortran.dg/goacc/uninit-dim-clause.f95 - dd2a54a711f3f1fc2d508534164228f9 gcc/testsuite/gfortran.dg/goacc/uninit-firstprivate-clause.f95 -@@ -48649,6 +48929,8 @@ - 31f5c4996a25be6d38e18faf28b150b4 gcc/testsuite/gfortran.dg/gomp/openmp-simd-1.f90 - 2b03c97061d19eddde270a6c9dd3fc38 gcc/testsuite/gfortran.dg/gomp/openmp-simd-2.f90 - 7b53af38ad214d98f0d0550bbb80b654 gcc/testsuite/gfortran.dg/gomp/openmp-simd-3.f90 -+ab6d18741860d8f9094676890b96e068 gcc/testsuite/gfortran.dg/gomp/order-1.f90 -+618c952f5bbb7326c70d6e7a786f679d gcc/testsuite/gfortran.dg/gomp/order-2.f90 - 9a6817790a272cd8153d4303d324c00f gcc/testsuite/gfortran.dg/gomp/pr26224.f - d2c74a71f2bea0005d853821e6f0142c gcc/testsuite/gfortran.dg/gomp/pr27573.f90 - 7905e149c2a2dbed5b9dd43384d712f4 gcc/testsuite/gfortran.dg/gomp/pr29759.f90 -@@ -48688,6 +48970,11 @@ - 624512980f4f3b39deb857cfdd5fdeba gcc/testsuite/gfortran.dg/gomp/pr62131.f90 - 5d7b04ab3b84314d89ea68a7f054ea17 gcc/testsuite/gfortran.dg/gomp/pr66633.f90 - 008d934abb38a4acedd9f90092aa4b6d gcc/testsuite/gfortran.dg/gomp/pr69128.f90 -+94a8931b1a8c928dadf01cdde210bbba gcc/testsuite/gfortran.dg/gomp/pr70855.f90 -+a21e59357a45d319e791dda388391242 gcc/testsuite/gfortran.dg/gomp/pr71687.f90 -+1724cefc87db9a0a62b6387ee74cffc2 gcc/testsuite/gfortran.dg/gomp/pr71704.f90 -+7d3f1abdbdd106580173760b443a9b40 gcc/testsuite/gfortran.dg/gomp/pr71705.f90 -+d07d71ded0663c9dc2e67b06e6231cfc gcc/testsuite/gfortran.dg/gomp/pr71758.f90 - b4be3f9de7631846875a711ae9b67293 gcc/testsuite/gfortran.dg/gomp/proc_ptr_1.f90 - 87885556568e657ef4c936c53e1c7305 gcc/testsuite/gfortran.dg/gomp/proc_ptr_2.f90 - 59e444df8ec8f5ea9859b5aef4d75865 gcc/testsuite/gfortran.dg/gomp/reduction1.f90 -@@ -48770,7 +49057,7 @@ - 5754b3cf46378cb45f6e5a1d41b0cd4a gcc/testsuite/gfortran.dg/graphite/pr37852.f90 - d056a2044b7a3f7f763fe76fad38958d gcc/testsuite/gfortran.dg/graphite/pr37857.f90 - 39980079ddf92937d334ad4fa7d63b74 gcc/testsuite/gfortran.dg/graphite/pr37980.f90 --9fd92c1b4b047e3ecad9e87cacd557e5 gcc/testsuite/gfortran.dg/graphite/pr38083.f90 -+5d9ba2a3b15bd5a5d3fec321b23e780b gcc/testsuite/gfortran.dg/graphite/pr38083.f90 - 2f361e4dc036f2a777b5340709d7cbad gcc/testsuite/gfortran.dg/graphite/pr38459.f90 - 68989e2f56ab16cebeffc96df65b3c7d gcc/testsuite/gfortran.dg/graphite/pr38953.f90 - c5c4a63aba69d822a86d91f0242eb7c9 gcc/testsuite/gfortran.dg/graphite/pr39516.f -@@ -48811,7 +49098,7 @@ - c6ccb0077483440bf572afc0c07cf295 gcc/testsuite/gfortran.dg/graphite/vect-pr40979.f90 - f9932e22f4bc6baa989154035dbac7c1 gcc/testsuite/gfortran.dg/guality/arg1.f90 - 49b421794f66b18bf7f66026f68f035f gcc/testsuite/gfortran.dg/guality/guality.exp --34aa3a6f198ba5d265275076a07dbf9a gcc/testsuite/gfortran.dg/guality/pr41558.f90 -+d4523e218e3a6d976774e7e026bca339 gcc/testsuite/gfortran.dg/guality/pr41558.f90 - 85b827d8051a3d9581ba2a6e6709d5c9 gcc/testsuite/gfortran.dg/hollerith.f90 - 855af7807ad9d75aef7ff85c2859a0c2 gcc/testsuite/gfortran.dg/hollerith2.f90 - ac7abff09db32e7d44719f0d0472dc64 gcc/testsuite/gfortran.dg/hollerith3.f90 -@@ -49025,7 +49312,7 @@ - fa2faf183145bf87d1497a8e18cf67c2 gcc/testsuite/gfortran.dg/integer_exponentiation_3.F90 - 901fdf8ccfce7240b5e2cfa3f7fcb07c gcc/testsuite/gfortran.dg/integer_exponentiation_4.f90 - ebd2c7181d1d1a74fb8d92fa4d5dcadf gcc/testsuite/gfortran.dg/integer_exponentiation_5.F90 --fcfb49c9fc1a86ba81cd5f03602cd781 gcc/testsuite/gfortran.dg/integer_exponentiation_6.F90 -+5436c9710c4dbacc08026642a5d88b2d gcc/testsuite/gfortran.dg/integer_exponentiation_6.F90 - 9a94a4b4c3991300273d3eff16279572 gcc/testsuite/gfortran.dg/intent_optimize_1.f90 - 6ad3133cfe62e722e018d386dbfd3404 gcc/testsuite/gfortran.dg/intent_out_1.f90 - 56f012500f1600964f96a00b144bd1bb gcc/testsuite/gfortran.dg/intent_out_2.f90 -@@ -50114,7 +50401,14 @@ - 4dfe5b03dbae8d8845caac4e7f7c0a89 gcc/testsuite/gfortran.dg/pr69155.f90 - f0a6995f73ec38a5c8e24e5d968a365b gcc/testsuite/gfortran.dg/pr69554-1.F90 - fe55b4afdea6006daace9aa79199e551 gcc/testsuite/gfortran.dg/pr69554-2.F90 -+68938073de3c2383615f40d0ec615519 gcc/testsuite/gfortran.dg/pr69603.f90 - c718be52c08cbfe5941dc1bb7a50bcb5 gcc/testsuite/gfortran.dg/pr69987.f90 -+23dc11b0707086a8168e76c17d13d620 gcc/testsuite/gfortran.dg/pr70673.f90 -+0e424f05f2fdeb786b877ace2617112d gcc/testsuite/gfortran.dg/pr70931.f90 -+a16162b0759105febc1efc1311184688 gcc/testsuite/gfortran.dg/pr71047.f08 -+75b8abd1f0f9d2e236605ecc6792b9fb gcc/testsuite/gfortran.dg/pr71204.f90 -+dffe49f90e191f0e0d1a1c6f8d53f854 gcc/testsuite/gfortran.dg/pr71688.f90 -+ea322d8eb84f224e47f5c54a96e8cd2d gcc/testsuite/gfortran.dg/pr71764.f90 - 6ff99f4b0021f30bee039a61db7cba9d gcc/testsuite/gfortran.dg/predcom-1.f - 20a411a7e5a57891297c4c6a96d92009 gcc/testsuite/gfortran.dg/predcom-2.f - 80cf60710448ac2378aecda5fc4a57b6 gcc/testsuite/gfortran.dg/present_1.f90 -@@ -50711,8 +51005,9 @@ - 3318d144c2d4abef44dd2d14c35a6adc gcc/testsuite/gfortran.dg/submodule_11.f08 - 9542945224c8744c6179ede6b10e8b0d gcc/testsuite/gfortran.dg/submodule_12.f08 - f52d9c0fcdf271bd2e5abda2cc3b4855 gcc/testsuite/gfortran.dg/submodule_13.f08 --afd5cd591a97b8e5a6e049931330c963 gcc/testsuite/gfortran.dg/submodule_14.f08 --475ea51fbff182674030048c7b52aaec gcc/testsuite/gfortran.dg/submodule_15.f08 -+04974d3f93910435057c4f73f05e14cd gcc/testsuite/gfortran.dg/submodule_14.f08 -+adcecf1db1bbd9194a601cae633dbba7 gcc/testsuite/gfortran.dg/submodule_15.f08 -+76252beb42c84ee49919cc34174e21af gcc/testsuite/gfortran.dg/submodule_16.f08 - 97424405e3e17827757a639a19573fa4 gcc/testsuite/gfortran.dg/submodule_2.f08 - ac42e5598feef42b948692956c7ed537 gcc/testsuite/gfortran.dg/submodule_3.f08 - 68f9f70d888318a31160ba732171726f gcc/testsuite/gfortran.dg/submodule_4.f08 -@@ -50931,6 +51226,7 @@ - 0e692a977ecc4ab86f2eddee444794b4 gcc/testsuite/gfortran.dg/uncommon_block_data_1.f90 - 6f108a647e3b73bca74907355e7a2d85 gcc/testsuite/gfortran.dg/unconstrained_commons.f - 2fb717fe29fa528056cd388b7064ce96 gcc/testsuite/gfortran.dg/underflow.f90 -+39050472f0bc284f515f1898b0c79a2e gcc/testsuite/gfortran.dg/unexpected_eof.f - 7b6179afe920e46575539bf900b34222 gcc/testsuite/gfortran.dg/unexpected_interface.f90 - deb2555ff248a9775b72c008e6de9795 gcc/testsuite/gfortran.dg/unf_io_convert_1.f90 - 52c34a568acefcf68e800ca5c3b7f7e8 gcc/testsuite/gfortran.dg/unf_io_convert_2.f90 -@@ -51812,6 +52108,7 @@ - e2983168c9a3f63dee423c9ab7489d56 gcc/testsuite/gnat.dg/c_words.adb - 818af14f525730860678bca32d713541 gcc/testsuite/gnat.dg/c_words.ads - d52f72e41d04b3c98fb25494f2645bea gcc/testsuite/gnat.dg/capture_value.adb -+9db4166fc85c98e9ec451ab5419d883a gcc/testsuite/gnat.dg/case_character.adb - 4770f7aff2ceceb688301adf7cfb0c13 gcc/testsuite/gnat.dg/case_null.adb - 8847695c0d583376223247da04d2d2e5 gcc/testsuite/gnat.dg/case_null.ads - 1bf3fc0381b629fc3f416a475d1302fb gcc/testsuite/gnat.dg/case_optimization1.adb -@@ -51878,6 +52175,7 @@ - 00416c1ffc3228fc0f9bd2f529abeaeb gcc/testsuite/gnat.dg/debug4.adb - 972c01247ac04a4b8e00f62a95d4f0fc gcc/testsuite/gnat.dg/debug4_pkg.adb - 6ea95671601e0326e72591fbfc5de13a gcc/testsuite/gnat.dg/debug4_pkg.ads -+c1bc8b0ecc894424728b5b4911bf1cc6 gcc/testsuite/gnat.dg/debug5.adb - 11735efa0b9cef4f67d8e3f4899d5dcb gcc/testsuite/gnat.dg/decl_ctx_def.ads - 1e3eab2cf62e279c000f95051138781d gcc/testsuite/gnat.dg/decl_ctx_use.adb - d647ddf65b566e41973afeb047912147 gcc/testsuite/gnat.dg/decl_ctx_use.ads -@@ -52427,6 +52725,8 @@ - a6c7953bc37af2c4687583d602b5357c gcc/testsuite/gnat.dg/opt51.adb - 3036c312a42a98f72343dcfb25c615a2 gcc/testsuite/gnat.dg/opt51_pkg.ads - d715f4258a659b9f52add768ec0176d3 gcc/testsuite/gnat.dg/opt52.adb -+61534b77f2217dab18d66d63b8866b3a gcc/testsuite/gnat.dg/opt56.adb -+589d51425474ad576aae93a10d95f178 gcc/testsuite/gnat.dg/opt56.ads - e5e7ff61479fbeb7973786d07f72ba84 gcc/testsuite/gnat.dg/opt6.adb - 87097de987361854f4c5179a6de42c2c gcc/testsuite/gnat.dg/opt6.ads - a441d166cc0d4b34342468308b350060 gcc/testsuite/gnat.dg/opt7.adb -@@ -52529,6 +52829,8 @@ - a69c0bfa5361221d9a3ccb55aba36f65 gcc/testsuite/gnat.dg/remote_type.ads - 5a11b23912d6e1695fe7b02ca1ab1e79 gcc/testsuite/gnat.dg/renaming1.adb - bd812535e6617c5f4dde6719c8748277 gcc/testsuite/gnat.dg/renaming1.ads -+95d7703afe25fd090863c05ffcded594 gcc/testsuite/gnat.dg/renaming10.adb -+404005db149a5434ece08f5fccea5a18 gcc/testsuite/gnat.dg/renaming10.ads - 3afb13f37cfc3455f0f0be64d053892f gcc/testsuite/gnat.dg/renaming2.adb - 1a954da0b1e7e11673319b058eb82146 gcc/testsuite/gnat.dg/renaming3.adb - 9c415422ce59266c9af89e8d3fd1df74 gcc/testsuite/gnat.dg/renaming4.ads -@@ -54379,7 +54681,7 @@ - bc3c7df09495f62a7ff924aeda27871f gcc/testsuite/lib/scantree.exp - fd4fe0b217182ec61ad209b8b9560725 gcc/testsuite/lib/target-libpath.exp - f475e8e2d4f9bd50e1c4f5ee88955e99 gcc/testsuite/lib/target-supports-dg.exp --2ca0216d437918962131c6e27c219116 gcc/testsuite/lib/target-supports.exp -+81a83339c4e05edfaa689434dae89de5 gcc/testsuite/lib/target-supports.exp - cfcacc2a887c0ba90640d2646cdb13df gcc/testsuite/lib/target-utils.exp - d0478737f0c5786d095c1ca581b0dafa gcc/testsuite/lib/timeout-dg.exp - ab858bda48392f10cfc775daebf0bbd8 gcc/testsuite/lib/timeout.exp -@@ -55328,9 +55630,11 @@ - 10d4ea2c47febed0bbc5688f380b3439 gcc/testsuite/objc/execute/static-2.m - a57e521085412bbde60e78229ace4fd5 gcc/testsuite/objc/execute/trivial.m - 2d60a6650416d3bcd6a3f5f1fb61dece gcc/testsuite/objc/execute/va_method.m -+03f60b73f1fbd1151f587782de731364 gcc/testsuite/opt55.adb -+2f8548e74c5a464d97ac0283d9d45017 gcc/testsuite/opt55.ads - 8e810400df215d5a3c3a5918414f2567 gcc/timevar.c --dd062f4defa1af2bf819c4c11f39b79a gcc/timevar.def --e105ea612b809c4eb10d1f55004990f0 gcc/timevar.h -+270ecff76752a63ed71a9cd892884668 gcc/timevar.def -+5d6d78630ce2cf12488bfb9fba34b7da gcc/timevar.h - 1db6f2e372b1af92e0671da08d9bae7b gcc/tlink.c - 67e5012a5b3f405f6257abc6a945e73e gcc/toplev.c - 4b9e8fd609c1573d9fd5d43bde33866c gcc/toplev.h -@@ -55346,7 +55650,7 @@ - f713f4da05f4d4a13d250939a5eb4703 gcc/tree-cfgcleanup.c - 00f42379eee5485bfc493cb60e0d7d5b gcc/tree-cfgcleanup.h - aca1f99bd5df778be73f5678d6f93360 gcc/tree-chkp-opt.c --7f29bc54f04d7bdb5d970c8ced9ce727 gcc/tree-chkp.c -+7e6ad67e923cf3b95ff981d14d0c4a1d gcc/tree-chkp.c - 2ff57aba516c82bd2d6d9444d695ca7c gcc/tree-chkp.h - a5085f5177f0f41d2b8a37af4391a3c7 gcc/tree-chrec.c - 43ea0ae76ce17d30b45a0433304ef5b7 gcc/tree-chrec.h -@@ -55366,17 +55670,17 @@ - 735714950a7040219bdede8abc940737 gcc/tree-hash-traits.h - 4646d637e5cb964a4e6ad3a2589d1cda gcc/tree-hasher.h - 4bbc44b137c67f0e938bded3978e7037 gcc/tree-if-conv.c --30043a2564222962bda8aab68b1f7255 gcc/tree-inline.c -+c4c7b3c7029ba618985649e12ee59731 gcc/tree-inline.c - 38646e6febfe5a1052ade3533870efa3 gcc/tree-inline.h - 0f77f4c320b8b8381c286d3e856c6093 gcc/tree-into-ssa.c - fd4c3d5580777d50b0274967152c64a0 gcc/tree-into-ssa.h - 222c5d841b6028c827eae9f43d0f4d20 gcc/tree-iterator.c - 395c4cd006e9cc4fac2ccacbb10dc907 gcc/tree-iterator.h - 01811cd206083ef2a619b39628839651 gcc/tree-loop-distribution.c --47d8ad95b524f5ccaab1a2df951d9ddb gcc/tree-nested.c -+3e9bbd47ca0a40ea54d1fd57a83164c8 gcc/tree-nested.c - 89c3120b4f9580284e45b7c3b4a302d4 gcc/tree-nested.h - f5b4890f3ea137bd50a75635cdf58410 gcc/tree-nrv.c --f1b1405192c96ea15ae6e64f005f0761 gcc/tree-object-size.c -+f68eba59616ea0d71903e45ebf4f301b gcc/tree-object-size.c - 09aeb8e8a96f12d60fd3221cd8bbd33c gcc/tree-object-size.h - bfdff86bbeca1fa7f1812fcf614346ef gcc/tree-outof-ssa.c - d54568e25cf2ea37efc4fdbdb7cc946a gcc/tree-outof-ssa.h -@@ -55391,13 +55695,13 @@ - 99a21e7e99ce428caf4aff51ca2328a3 gcc/tree-profile.c - c4a672c5b34898471e4c09cd7d897c6f gcc/tree-scalar-evolution.c - ddd74c800272e36b5e04e6b839d5aaf9 gcc/tree-scalar-evolution.h --b1365506126df71ada53674e6e684695 gcc/tree-sra.c -+fc0f9a64091d8fb69026693b3385fafe gcc/tree-sra.c - 5cbd1c07136c29a87b15ca8006f24649 gcc/tree-ssa-address.c - 1fb91694b7ea342f3f4755974d570401 gcc/tree-ssa-address.h - 630bd55e80d8b02f04bf9979745e5eaa gcc/tree-ssa-alias.c - b2112211d28a5a985396b2b827acfd25 gcc/tree-ssa-alias.h - 9a7c8e81ccb787bb00b0ee8ef2a71586 gcc/tree-ssa-ccp.c --f14c1971c50057b0efda7772baa2d122 gcc/tree-ssa-coalesce.c -+4e0e13ee3807e5c0daad9489f9fd55d2 gcc/tree-ssa-coalesce.c - 0a798eb3055ef1b38167cee71723befe gcc/tree-ssa-coalesce.h - d655d555dd2ea00da5e0e3cfe76f03a6 gcc/tree-ssa-copy.c - 7430a47cea2356d7083f6b39087b46cc gcc/tree-ssa-dce.c -@@ -55418,27 +55722,27 @@ - 037e46f901b04e1897e0f5338070fceb gcc/tree-ssa-loop-niter.c - e39c11a700556495027cf2594eda607e gcc/tree-ssa-loop-niter.h - 7206349f9866f4040378a141a4a3fc10 gcc/tree-ssa-loop-prefetch.c --84aa2feb3f8ea51e2cc8fe865216939a gcc/tree-ssa-loop-unswitch.c -+cedc12f866ad14c0ce0ff80357554e21 gcc/tree-ssa-loop-unswitch.c - 7b56fac467e6a65d335907e274999ddb gcc/tree-ssa-loop.c - 4c430ffbb3398e58ddeb42580926a06a gcc/tree-ssa-loop.h - 83739b381655c7ccd1da3706e62f763a gcc/tree-ssa-math-opts.c - 09e6cc3a775fe10a83c1b13a20ff8ad5 gcc/tree-ssa-operands.c - ae2259e78bf92cdab02fb8c53b1f6140 gcc/tree-ssa-operands.h - 169a3b8b19b7f59128b8fe9f320c7fcd gcc/tree-ssa-phionlycprop.c --49410965fa7b486577975e8debd36e2f gcc/tree-ssa-phiopt.c -+b85be844891ced7fd987529031c3d383 gcc/tree-ssa-phiopt.c - 27c779dd8cb8a44e82d9efddf8d5e8e1 gcc/tree-ssa-phiprop.c - b203f1a7e87223f4283cef39502baa59 gcc/tree-ssa-pre.c - 6eca612875babdeead518212272356c7 gcc/tree-ssa-propagate.c - 2c2fdda0693f653ff6694bec50f9c6be gcc/tree-ssa-propagate.h - 33d8e1cb9a77d4f2092ec76958543645 gcc/tree-ssa-reassoc.c --c657927d72df8ff9c34292cc1f741095 gcc/tree-ssa-sccvn.c -+db75889847d8554f03c878a71e52ee38 gcc/tree-ssa-sccvn.c - bf9606517975c072a298e6e9648d84fe gcc/tree-ssa-sccvn.h - 27f3203e67b17d43acb249774afcce00 gcc/tree-ssa-scopedtables.c - faf7ec5d35f4c8016f9e652447e47297 gcc/tree-ssa-scopedtables.h - b5d1efde969440d8b72d27d076a0ded2 gcc/tree-ssa-sink.c --46a7699a73f5e5286886d89d2bd5de52 gcc/tree-ssa-strlen.c --33dafcfeaf6c84a5506cc3816c86faf8 gcc/tree-ssa-structalias.c --1d75d06dc18c08ea9eae1d79c319be9b gcc/tree-ssa-tail-merge.c -+5ca1b76e4fefc9dd0b6407eef1209e54 gcc/tree-ssa-strlen.c -+d738280db76fb802d569cd6be9d607d8 gcc/tree-ssa-structalias.c -+1a154f97147787cf927ca27f492d0000 gcc/tree-ssa-tail-merge.c - a31830f7606f1d982bb91bfda1036ca7 gcc/tree-ssa-ter.c - 72d07b4d9955684fab7636c602c4b360 gcc/tree-ssa-ter.h - f01de11598fc3072fc0b64a42e7d2825 gcc/tree-ssa-threadbackward.c -@@ -55448,8 +55752,8 @@ - cdc7062662420b220cbdf71ad079b3da gcc/tree-ssa-threadupdate.c - 268d9ea686863a09a4d82c900aa4c453 gcc/tree-ssa-threadupdate.h - 2aceb281be597588bf8b234371f7f9b0 gcc/tree-ssa-uncprop.c --8ea45b89bc709fa068dda47244128737 gcc/tree-ssa-uninit.c --ddc52810a19a908dfb484ac2adcd0a8f gcc/tree-ssa.c -+d5a1e950b0f1aec43c3cdc2e60194636 gcc/tree-ssa-uninit.c -+8144927d9c28207da8408d4fe6f74dd9 gcc/tree-ssa.c - d10beb2794c644e7d51b66973cf5f119 gcc/tree-ssa.h - 462f5e30bf38034f61977d169ac9b1d7 gcc/tree-ssanames.c - db5115461f6035db3ac2359d88de6bb6 gcc/tree-ssanames.h -@@ -55461,26 +55765,26 @@ - d582f891f95af854317037e4020c5f90 gcc/tree-streamer.h - 11bd30d126bfef5e25674bf369287718 gcc/tree-switch-conversion.c - 88fc834970e1ba32e98998d7ce7ecf09 gcc/tree-tailcall.c --ff2c431cb2ebc6c957f22bf35b8a688f gcc/tree-vect-data-refs.c -+3df1efa82963e06359c8d728ff0de39f gcc/tree-vect-data-refs.c - a78063c6f19eea041e35fe5515a935f2 gcc/tree-vect-generic.c - 318b8e4c49ce9ec44a055d34b947f5c9 gcc/tree-vect-loop-manip.c --ca460ecf31dfad6c90712eb57309221b gcc/tree-vect-loop.c --59b33d1d3db9231379ab4bc62f42cdad gcc/tree-vect-patterns.c --fa66db0d8c17a25f34719a755a575ea6 gcc/tree-vect-slp.c --05c56dc171e2656047de4e06c36f2cf0 gcc/tree-vect-stmts.c -+295d03e5d7392b0acca8257dea216f96 gcc/tree-vect-loop.c -+799481f961907f33717a68493fea6818 gcc/tree-vect-patterns.c -+c2b28b1f389315c73c5ffce684eb42a1 gcc/tree-vect-slp.c -+6b5219bb5e6297fb4ca0981626118339 gcc/tree-vect-stmts.c - 7729076c55712e0bfb562f337107c400 gcc/tree-vectorizer.c - 99cdf0e00b25ff01da509c7f6bd7f8fd gcc/tree-vectorizer.h --357a693e48ab9a122428746f6bbda9c9 gcc/tree-vrp.c --41531148c5417dcde8dba9bf26c66867 gcc/tree.c -+519f725a2fcd44fc90e9a7b380b3f9ba gcc/tree-vrp.c -+f90241266bdebc4600cc5d1f2d672654 gcc/tree.c - 756c1546f4b1318f8d59106e5a786041 gcc/tree.def --d3ec69521a1c446bbd5dc30b78fbea7c gcc/tree.h -+8f21fb5a83ef2833a239d86c64c6fe49 gcc/tree.h - 59d18b65bc8897bea70f8d136681423f gcc/treestruct.def - 7a21c960d344023b96194e4bc4625c10 gcc/tsan.c - 59b8e58a7954f6d352d923f0bbdd24ba gcc/tsan.h - 4fcf15c72e56a3360214b87bd3df82de gcc/tsystem.h - abc8eba4119c9cb0bc421df5afb01334 gcc/typeclass.h - 572fb9b575cab50b68cebce0e6aaab5b gcc/typed-splay-tree.h --e32ea98c8ae093ac3b194bfcdff55030 gcc/ubsan.c -+c7235fe9fe050b768fe698d0edf40e4a gcc/ubsan.c - 81e340a3b45094070fa00910435108f6 gcc/ubsan.h - 7435de97b351df3a173bb3259cdfa730 gcc/valtrack.c - fd43fe3f222442739550a35e7bad2e4f gcc/valtrack.h -@@ -55610,7 +55914,7 @@ - 68395a53adb86132c753b865a97f49e5 libada/configure - dc03104644ef27c11606ab0f4f675f06 libada/configure.ac - 46d3fe6da7a771cc2d5420c4137a6861 libatomic/.gitignore --a748d5a529fba14ffb71ba76af37f394 libatomic/ChangeLog -+c6d6b7a83aac18a7ec19f90d870b4223 libatomic/ChangeLog - f7e487a2a8e032a211ad21a5681e4b55 libatomic/Makefile.am - 685ebec1fe8aa94deb1729b48bb2fc6c libatomic/Makefile.in - f7853b06953072a9987a45a5b00782d6 libatomic/acinclude.m4 -@@ -55630,12 +55934,14 @@ - 3a5510d41511e835335114b73128a52e libatomic/config/posix/host-config.h - 2ef059ec5908eac5b9f19da9e90e4717 libatomic/config/posix/lock.c - d04f86e742ddfedb71fb4a3d0ceede39 libatomic/config/powerpc/host-config.h -+9bf3d2dd5ae558a4d9ab5b393b86c96b libatomic/config/rtems/host-config.h -+472ff64130ea77e3d5e080beacca1fa8 libatomic/config/rtems/lock.c - fc9523d1ea4e96a55adfb15c3031cf12 libatomic/config/x86/fenv.c - e87431bfab4d41697b1e7bfa18624f2f libatomic/config/x86/host-config.h - 5343c7f0d7449e34a4123a65183e280d libatomic/config/x86/init.c - 6c35813a8871f271868fb796ae4b6e4a libatomic/configure - db061ec219987557cec2ae3ea3c97870 libatomic/configure.ac --05354b654eadd0af2e2aa91621996955 libatomic/configure.tgt -+0b2f1d581b06d5e45b083e9759ffeef0 libatomic/configure.tgt - bea3c296a69d67a89a6da22714ca34d4 libatomic/exch_n.c - b899afba4d403aec004c33141df2324d libatomic/fadd_n.c - ee6f02fad9bd551a906477f16740578f libatomic/fand_n.c -@@ -55692,7 +55998,7 @@ - 8a7308fda7ed1543cb9e3be0f8e47bce libatomic/testsuite/libatomic.c/atomic-store-5.c - 40618200985a15bcba64f871863da498 libatomic/testsuite/libatomic.c/c.exp - 97b0c9cdfcb733664bdf4efe0f5dc449 libatomic/testsuite/libatomic.c/generic-2.c --5af0cf98353185e14ab202d5134d1a07 libbacktrace/ChangeLog -+6e3d18e0325321481dd8fc6b0c938244 libbacktrace/ChangeLog - eb3a88b53140eb234a99a4b3a55e56bf libbacktrace/ChangeLog.jit - adcff7cabf0971aed26d7fe5e3630a23 libbacktrace/Makefile.am - a4bbeef6b43604c1ca251b56c1bc4888 libbacktrace/Makefile.in -@@ -55708,7 +56014,7 @@ - ba93ae2239d2af1adfed22f2fa91164b libbacktrace/configure - f2bbca83f94ce0b40a14c2014386aa1e libbacktrace/configure.ac - 150cbd2ed23f310bcc41f347e524098e libbacktrace/dwarf.c --cc7a845678c203d3820e434fd187feaa libbacktrace/elf.c -+210330106bbc3adbabf0934be8ff1b60 libbacktrace/elf.c - ccbfca5254d57415f02229b05852fe4c libbacktrace/fileline.c - 51926f4b28baf759f214371541616bd8 libbacktrace/filetype.awk - 4a1619d74095c0d90ed2047cfe801a8f libbacktrace/internal.h -@@ -55747,9 +56053,9 @@ - 7b5e3c71c404e08cbe1d3ca92449c0eb libcc1/plugin.cc - 595b9a542a8f80367ebbeecbc51b1ac7 libcc1/rpc.hh - 14f215429d450a743fce24b101552f3e libcc1/status.hh --a90aa9053a5c89426bbbe4367988cf16 libcilkrts/ChangeLog --4fa054d244a7b7a99d1173bc6c24ff2c libcilkrts/Makefile.am --f837283c8a4f9034983ce5d009c42546 libcilkrts/Makefile.in -+45b9413325d303caf626b976ded66a4e libcilkrts/ChangeLog -+df0ff198f37089171b490f87912f9602 libcilkrts/Makefile.am -+71d9f8e3f82862af1e8d523b0ae6a587 libcilkrts/Makefile.in - 4a307b1474cad63768b2ae0c183b6259 libcilkrts/README - 6126c8d03f6c3cc1a2f5e502f3196cd7 libcilkrts/aclocal.m4 - 991e7c85d4800532c24900dc8e2f9e11 libcilkrts/configure -@@ -55883,50 +56189,29 @@ - 8b169f1ea64fbdcd4eb3b28cc2a20e5d libcpp/makeucnid.c - 13e85e048fd80372c5ee39c177ccda58 libcpp/mkdeps.c - 2037cc2be924ca9b3d6dcf813bb1f5a5 libcpp/pch.c --7f8703b9dde7cc96a7b38b846eb0edda libcpp/po/ChangeLog --16add93743f11e9d1d0205a04e4bda1b libcpp/po/be.gmo --1559c0a42bd004e676cda54ca272f453 libcpp/po/be.po --93772efdb39bca70542c9eb4cfd69115 libcpp/po/ca.gmo --abc67e73d2df075360bb47d03f966a60 libcpp/po/ca.po -+e19317ae35b73c8ec3b221f66011547d libcpp/po/ChangeLog -+2ef89459bd607154106cddd9d5643379 libcpp/po/be.po -+a1a6f36f6fb1c4f5a648dcd391370e6c libcpp/po/ca.po - 2eaff30752e253bbc6a6f3147f29ae27 libcpp/po/cpplib.pot --f4665bf2cfc8ea52a9c5dcd603b4c87d libcpp/po/da.gmo --291ea628726a545a31faf6e603d06a2e libcpp/po/da.po --183186721a93f35ebe5cb5efef452541 libcpp/po/de.gmo --129478a9526671f9f1aeb11c29ee4417 libcpp/po/de.po --50dcba779ef25b226362151a23815e88 libcpp/po/el.gmo --904c98c8ea71a366440f9b040ba6fde8 libcpp/po/el.po --8ecdc42ad242ed543e6024cc56a48ef5 libcpp/po/eo.gmo --a7b5efb5f3491c3e787d25790c599713 libcpp/po/eo.po --603c006aec9cb9504359e7f20c6dab7f libcpp/po/es.gmo --d1b55d77237726db4bd7a3b1d30a0c6f libcpp/po/es.po --0f532ddd0b5a92abe2c8620bdcf23d32 libcpp/po/fi.gmo --fe350d53bed05a2b47fc8fff10fcaaaf libcpp/po/fi.po --55e47fb744d48b8e20159311c0a4c0cb libcpp/po/fr.gmo --58c29873a41dfefa30d2aff45818ae54 libcpp/po/fr.po --39ddd555e334249c8130e512452c8fc3 libcpp/po/id.gmo --48482d6240ce173ee2d785d5a2eaa743 libcpp/po/id.po --37ed1f49679dbc578a78dc66a7ea3998 libcpp/po/ja.gmo --36d7c68b0bd77115142ff130d0b0bfae libcpp/po/ja.po --fd30c6f79433b2872abe0a2217fbd291 libcpp/po/nl.gmo --3f6ebd19290c98eea7cef9914f9654d8 libcpp/po/nl.po --94a998c3581a719af78c5cdf216fad18 libcpp/po/pt_BR.gmo --0aaf233a0d7f79627ee398ea192bdd74 libcpp/po/pt_BR.po --79b63b3694b5060a3b38fa8a8573db1f libcpp/po/ru.gmo --17e810f41cd8152d067ee843834605b9 libcpp/po/ru.po --0d50dac9aff5591b5c493123801f5915 libcpp/po/sr.gmo --456bf096ac10652d86537242aeb463c3 libcpp/po/sr.po --3270d407f458f07423f181ee4a40fb53 libcpp/po/sv.gmo --6f366f83d29717cdb9e64cbf89997abf libcpp/po/sv.po --a3a472f46bd1cd7bf3c58618f21cc54e libcpp/po/tr.gmo --1972ca01f7590354477a7256df8a6db7 libcpp/po/tr.po --95e35a0dd2e18bc3ef2c510f396b0fcd libcpp/po/uk.gmo --f4e29e663311363944e207217605faa1 libcpp/po/uk.po --eb9d4c6abf39c08631813497c1e88143 libcpp/po/vi.gmo --ed63d3d462ea423d0e69dc4bfece599d libcpp/po/vi.po --ecdc35f641666bac52fcf050bcf706f3 libcpp/po/zh_CN.gmo --1e612707435e6b2f431d0ea58b86b964 libcpp/po/zh_CN.po --9c28154d3d01abba175e54808d337cf1 libcpp/po/zh_TW.gmo --e936ed69aa5357776e3ff4842baaa7d9 libcpp/po/zh_TW.po -+278cf1b2cce22dea3763b28344886a2a libcpp/po/da.po -+e89016e7c45ec01c20197636ede2cbd0 libcpp/po/de.po -+11c21873f5e6ec33ebfb8fd2edc15ae5 libcpp/po/el.po -+d8ed72c7d26634e8c95da70edb7bc372 libcpp/po/eo.po -+a424670f1e7c781212fcc8b6fc84fde6 libcpp/po/es.po -+0b9472443ff28c36c40f04f1a3088fab libcpp/po/fi.po -+1355bfb80461bd6990de22e13e1f3544 libcpp/po/fr.po -+dbefe42ad79c2a361c8d2874a638509b libcpp/po/id.po -+e8d46de87f8be79612a738a3364a9953 libcpp/po/ja.po -+74c354860e824a03efc4a4d0a0f7f5af libcpp/po/nl.po -+ad9e0f793ad848abb020dd1582d7c506 libcpp/po/pt_BR.po -+9718e0dd8553312042790da1bd8ed557 libcpp/po/ru.po -+2aa02b3cdd59ca4f029ff1e84e5baf58 libcpp/po/sr.po -+474e69915194f83eb88ad85ae241016c libcpp/po/sv.po -+1d16e54e582bc5236bed93a33fb6baa5 libcpp/po/tr.po -+c0676321d8fd8f22839d400145a59e55 libcpp/po/uk.po -+097c8a713da9fbb048eca497169f9e93 libcpp/po/vi.po -+52fade796713669a418cd39a18e2c750 libcpp/po/zh_CN.po -+10138794552573c15bfc3be6c6e35235 libcpp/po/zh_TW.po - f4fb93166f911a7496d4dd7cd1e57f8c libcpp/symtab.c - 1b0ca94d69c0fcdb8b4a544998579e84 libcpp/system.h - 5faa90d66b891533b7d68fa1dcc88bf8 libcpp/traditional.c -@@ -55996,7 +56281,7 @@ - 1b8d5bd512629f5b4d1895fe4dd2c645 libdecnumber/dpd/decimal64.c - 33e09faa8cbe6117509446874a776fc6 libdecnumber/dpd/decimal64.h - 0f6db29710e7075c2fd62bc4478b3b8d libdecnumber/dpd/decimal64Symbols.h --a3e0d6f60a337a91aecc3dc56e0acda6 libffi/ChangeLog -+bf52041046c368175a62277d781b7dc7 libffi/ChangeLog - ba66fc19311348d373ec271be939a659 libffi/ChangeLog.libffi - fbbc216bc25d759a72ea3e6d734af56b libffi/ChangeLog.libgcj - d946d2b97454ad50a1dbfbf48923c5be libffi/ChangeLog.v1 -@@ -56009,7 +56294,6 @@ - 60bcb183fb531852628fcecb1ea6ed66 libffi/configure - c9655a9cea2ec7adcdd5ca72cb247b90 libffi/configure.ac - 84d2d9f2ebfac28a1697db5dc956a25b libffi/configure.host --b966104ceafa5618f9898a1a3bb1ca13 libffi/doc/libffi.info - cfec4a5a1bb5d36550e15ac051c14148 libffi/doc/libffi.texi - 2969ffc23f66d73392207633f25ab252 libffi/doc/version.texi - 22b7acb3b27a7bc2c6d5e436e1944367 libffi/fficonfig.h.in -@@ -56158,7 +56442,7 @@ - 2e5e042bd1709c208dd670c61bbc5ef1 libffi/testsuite/Makefile.am - e52378e7fee52f7a3af3b8e8267c4c15 libffi/testsuite/Makefile.in - dce80ba7e038ca18591aabc6d3d2582c libffi/testsuite/config/default.exp --0cfcd6f2d3b7c42d7e918c631681ad09 libffi/testsuite/lib/libffi.exp -+cff6a796e12fcc98d74bd98cac4cdf67 libffi/testsuite/lib/libffi.exp - 88f888c66cee8d916e1ac91000ecc87a libffi/testsuite/lib/target-libpath.exp - 68db067550882b3b091a82df87310fff libffi/testsuite/lib/wrapper.exp - e2b2182b50885f833527f9ccc86eeaa4 libffi/testsuite/libffi.call/call.exp -@@ -56354,9 +56638,9 @@ - 291be426192f460f6a07dfe1c96ab094 libffi/testsuite/libffi.special/special.exp - 93fc3ea311b79f64004992807ce75d1e libffi/testsuite/libffi.special/unwindtest.cc - 185d0795017fbbe253a13db8e34085f9 libffi/testsuite/libffi.special/unwindtest_ffi_call.cc --1863571149697e4b63ce3f4a6271960c libgcc/ChangeLog -+fbddbb651e2206a97d9d80ba4ba1e9fc libgcc/ChangeLog - d35f709a03da6e07d660c91956551a36 libgcc/Makefile.in --a6e140bfee349c6b1e07f463c967a52a libgcc/config.host -+bee9ede19588ab9e5fc65f2f422488b2 libgcc/config.host - 3b9d11b9f405d47c079d725f2f16271e libgcc/config.in - c1dd89f96f28e8843a51c0c7b560c6c7 libgcc/config/aarch64/crtfastmath.c - 9dca9ad5de19b368a1b3ec83a660a34f libgcc/config/aarch64/crti.S -@@ -57280,6 +57564,8 @@ - 32d9de959d3c6e0ae0519a32b9019cf1 libgcc/config/rl78/t-rl78 - 48a7e3ef8d25dc3fe190d63c81df0ccc libgcc/config/rl78/trampoline.S - 760912f22e59adbfe0317ee3df1b4849 libgcc/config/rl78/vregs.h -+c8d40dfa3c5da5264575681c125cf8e5 libgcc/config/rs6000/_divkc3.c -+6b20fcda7294bd54b5687f751561cae1 libgcc/config/rs6000/_mulkc3.c - c16e3f7c33fc7e6d7b9fc3848e9fef80 libgcc/config/rs6000/aix-unwind.h - 737841f917469789a5f925e6f08da1de libgcc/config/rs6000/aixinitfini.c - d8742cbcf2910ae155f782fd708e4650 libgcc/config/rs6000/atexit.c -@@ -57343,7 +57629,7 @@ - be7356b9f07a2aec27b9513356b579bb libgcc/config/rs6000/morestack.S - f509faf6a043b7f628b9a5b7b64497c7 libgcc/config/rs6000/on_exit.c - aa98229d1fb7829c9c2736a6f235b935 libgcc/config/rs6000/ppc64-fp.c --0e804e76a84bf2fe403fa63a69cbe8f2 libgcc/config/rs6000/quad-float128.h -+5decdd89de7b5048dcc33ea7e516457b libgcc/config/rs6000/quad-float128.h - aba354b12ccddf23281f544a4b3c446a libgcc/config/rs6000/sfp-exceptions.c - 8ec74aa9b81fc396f992f9900794bfc0 libgcc/config/rs6000/sfp-machine.h - 692f688b65e81676c6fe126268165355 libgcc/config/rs6000/sol-ci.S -@@ -57354,7 +57640,7 @@ - d7cdc73d7a8e658f872ea07474837bc2 libgcc/config/rs6000/t-darwin64 - f809b3f51cd4c6b7b1b2a01f98f5917a libgcc/config/rs6000/t-e500v1-fp - 9553248d1ebf726cfc8ab5c14e739322 libgcc/config/rs6000/t-e500v2-fp --f7b847fe7c81592dd38f899900b92306 libgcc/config/rs6000/t-float128 -+b9b0914220774c0a3a5958018b9adf0d libgcc/config/rs6000/t-float128 - 6b46d6077e82665fed06030e9dbf0d0c libgcc/config/rs6000/t-float128-hw - 491851bed60093e210455661abd50ba3 libgcc/config/rs6000/t-freebsd - 4976aac1da0b181cf133fe8ef7243000 libgcc/config/rs6000/t-freebsd64 -@@ -60580,7 +60866,7 @@ - 1526040f769ea611af781d4ed150f258 libgo/testsuite/gotest - ead4e721beb57b319fcd7da8ddf10705 libgo/testsuite/lib/libgo.exp - 6df485581d2f02246f41b5ca46f5bb5d libgo/testsuite/libgo.testmain/testmain.exp --9befdbc414a14f64f3bf9d882a6cc3d3 libgomp/ChangeLog -+e2942a09bb570e700d8ab4230a14bce1 libgomp/ChangeLog - 0d55aa862aee66efdc5f8d62c94ff8fb libgomp/ChangeLog.graphite - 255738c9562136c311d799ad06684be1 libgomp/Makefile.am - a97552ea29bea4babb0d125f47fbc5f9 libgomp/Makefile.in -@@ -60693,7 +60979,6 @@ - 2a682110865cc758a3c1df97dd3992a3 libgomp/libgomp-plugin.c - dd8799786633c7a3094553dfc8a9ca8b libgomp/libgomp-plugin.h - 99fefc96d4bc2d4b96c65131330e2c70 libgomp/libgomp.h --4bec48b377f524140d3caa7eea71c995 libgomp/libgomp.info - 9a1ab09c02391af1c95e6d63cb8eb499 libgomp/libgomp.map - 8b2aa50aecad82171348a6918309afd6 libgomp/libgomp.spec.in - 6a91bc2eda39d9eddffc49cbcb5e07f2 libgomp/libgomp.texi -@@ -60910,6 +61195,8 @@ - f7b3ed0affdfcdc8be33426e55f56c65 libgomp/testsuite/libgomp.c++/target-19.C - a7edc8ba5a137d69a617a4d3675b5b01 libgomp/testsuite/libgomp.c++/target-2-aux.cc - adba67f432b50b18b63fd983c7c0402a libgomp/testsuite/libgomp.c++/target-2.C -+37e4e40177aed08ff1f53d7b901a11ce libgomp/testsuite/libgomp.c++/target-20.C -+0348df8a93fdb7c3f0a0f7923eb9555c libgomp/testsuite/libgomp.c++/target-21.C - f5f370945da4ed9519d04fd309672472 libgomp/testsuite/libgomp.c++/target-3.C - da31150d5d916f6dc9bde797015a2f2f libgomp/testsuite/libgomp.c++/target-4.C - 1ef24f8ab6abe7b7355060391f0ec986 libgomp/testsuite/libgomp.c++/target-5.C -@@ -61207,6 +61494,8 @@ - 37da387849a1a7da3f75e528c47ee2cb libgomp/testsuite/libgomp.c/pr68960.c - 9995ebc7d239ebe751419090068c6f33 libgomp/testsuite/libgomp.c/pr69110.c - fae0065b967df85f2d4ef6b0d6a27837 libgomp/testsuite/libgomp.c/pr69805.c -+44e637116f58b1ad19c190f3b5a123fa libgomp/testsuite/libgomp.c/pr70680-1.c -+2c3d1f7b987fcb66ad2f7ba2adc2dc73 libgomp/testsuite/libgomp.c/pr70680-2.c - 2a0a447db3ae892c0c62b0136b00360e libgomp/testsuite/libgomp.c/priority.c - ea7c9e74bda402b1663a903b26400fab libgomp/testsuite/libgomp.c/private-1.c - a594cebdf052900dd0c8792068e14d85 libgomp/testsuite/libgomp.c/reduction-1.c -@@ -61350,6 +61639,7 @@ - 6116086a89b906c26bd9afe26e57a07a libgomp/testsuite/libgomp.fortran/appendix-a/a10.1.f90 - ba05d0e1b584ec6c750d14a486ac83b2 libgomp/testsuite/libgomp.fortran/associate1.f90 - 41cd3ed9183e6bc7b20ef8836663fbdd libgomp/testsuite/libgomp.fortran/associate2.f90 -+aa03f95280189c0147b6c2ec288164ba libgomp/testsuite/libgomp.fortran/associate3.f90 - cb0b79f7bddc47118981784eb7ba6f75 libgomp/testsuite/libgomp.fortran/cancel-do-1.f90 - 2a5fe3d97ff9f23e08df5e015a45e3bc libgomp/testsuite/libgomp.fortran/cancel-do-2.f90 - a110324b7cb72dc5755c1ad39c5230fd libgomp/testsuite/libgomp.fortran/cancel-parallel-1.f90 -@@ -61575,6 +61865,7 @@ - f3d2ea4630d1fcb25d84b6ba89ae47f2 libgomp/testsuite/libgomp.hsa.c/builtins-1.c - 6e3e2fc227f8fad61ddcb85fcddd983d libgomp/testsuite/libgomp.hsa.c/c.exp - 27fb32a6a737ec1b4f131bda0a196191 libgomp/testsuite/libgomp.hsa.c/complex-1.c -+7c0ddbedd6b281bc9300f36374a8e5df libgomp/testsuite/libgomp.hsa.c/complex-align-2.c - 9ca2d40b0829f30ffd252bf29d77c6f6 libgomp/testsuite/libgomp.hsa.c/formal-actual-args-1.c - 566a787a23dbfd923ff41ba6a4a30736 libgomp/testsuite/libgomp.hsa.c/function-call-1.c - a4130e550c56fec85239c9db68e18fdb libgomp/testsuite/libgomp.hsa.c/get-level-1.c -@@ -61587,9 +61878,10 @@ - dfc590b024995313958247342296f179 libgomp/testsuite/libgomp.hsa.c/rotate-1.c - bfac6d74739b95deba27861d2be18215 libgomp/testsuite/libgomp.hsa.c/switch-1.c - e410b9a2ecc042fbefbbbcff667b3510 libgomp/testsuite/libgomp.hsa.c/switch-branch-1.c -+ca9f24c1fc8b56e57a5e25787159b637 libgomp/testsuite/libgomp.hsa.c/switch-sbr-2.c - e4d2b044d4aee116d4062f8d22fe1113 libgomp/testsuite/libgomp.oacc-c++/c++.exp - b27cecd237d0e2ce459988833e90f28a libgomp/testsuite/libgomp.oacc-c++/declare-1.C --50a71d368a1d2347284a608ab6a629aa libgomp/testsuite/libgomp.oacc-c++/template-reduction.C -+4b124b6e487c75fcb15e9f0e8d1f85b5 libgomp/testsuite/libgomp.oacc-c++/template-reduction.C - 451978dda3b58f6a597aa1b515da90e7 libgomp/testsuite/libgomp.oacc-c-c++-common/abort-1.c - 2187ea0d1f3ce15e1d66e17ed2fecfc6 libgomp/testsuite/libgomp.oacc-c-c++-common/abort-2.c - 659c1e7c321078b832a4fe638bb81184 libgomp/testsuite/libgomp.oacc-c-c++-common/abort-3.c -@@ -61603,7 +61895,7 @@ - 7701cc2c5657c7e8793bdc8a296226d0 libgomp/testsuite/libgomp.oacc-c-c++-common/atomic_capture-2.c - 97f62618e6e37c14b2b9ed17c7579fd0 libgomp/testsuite/libgomp.oacc-c-c++-common/atomic_rw-1.c - 276fea47eb47f5b846d12e7f4013aaa1 libgomp/testsuite/libgomp.oacc-c-c++-common/atomic_update-1.c --9ecb1a6355fa4295e382d463432d8e21 libgomp/testsuite/libgomp.oacc-c-c++-common/cache-1.c -+b38b68cea6a76f0b24d0695e8101f2cf libgomp/testsuite/libgomp.oacc-c-c++-common/cache-1.c - 1f516ecd3b6c4ad48b36e5fe908cae6a libgomp/testsuite/libgomp.oacc-c-c++-common/clauses-1.c - e69ad21264603585ada7277411b59fab libgomp/testsuite/libgomp.oacc-c-c++-common/clauses-2.c - a4310590c76fb5671abb7e599593076d libgomp/testsuite/libgomp.oacc-c-c++-common/collapse-1.c -@@ -61611,6 +61903,7 @@ - 89f08493dc1d069d2b20c950dc3daeb3 libgomp/testsuite/libgomp.oacc-c-c++-common/collapse-3.c - ca0f03a313f6823442da3d981e03bc9f libgomp/testsuite/libgomp.oacc-c-c++-common/collapse-4.c - 19f2f5601f95ec58b09b95258b0818b1 libgomp/testsuite/libgomp.oacc-c-c++-common/combined-directives-1.c -+958046e6274805975b0db25945fb2609 libgomp/testsuite/libgomp.oacc-c-c++-common/combined-reduction.c - e05c73847f8ec27c6cb39c45216fcf0f libgomp/testsuite/libgomp.oacc-c-c++-common/context-1.c - 082ce69140a390063d0f7f40d1eb2046 libgomp/testsuite/libgomp.oacc-c-c++-common/context-2.c - 223e42eece140c60f9e6b5befdcca4e1 libgomp/testsuite/libgomp.oacc-c-c++-common/context-3.c -@@ -61820,6 +62113,8 @@ - e65c44041c15898765a99f6782a191d2 libgomp/testsuite/libgomp.oacc-c-c++-common/vector-type-1.c - ab9847c46ebba2b7d32c8dd686d0dd0c libgomp/testsuite/libgomp.oacc-c-c++-common/vprop.c - 6a3ebccf985a3d14104d3ff79347af01 libgomp/testsuite/libgomp.oacc-c/c.exp -+cbdcc7dbb1bbfcb008b972db87d6a771 libgomp/testsuite/libgomp.oacc-c/nested-function-1.c -+009dee52db49f02bd518c318808bd4ab libgomp/testsuite/libgomp.oacc-c/nested-function-2.c - 00763c45e9c4a49ef7249e327925090e libgomp/testsuite/libgomp.oacc-fortran/abort-1.f90 - 92672ea2291844ee4dc0b00666eb7766 libgomp/testsuite/libgomp.oacc-fortran/abort-2.f90 - c280f253738f9ec4dac767225d094975 libgomp/testsuite/libgomp.oacc-fortran/acc_on_device-1-1.f90 -@@ -61831,6 +62126,7 @@ - 7c923f2a5e595d3e5bc0ae52b8c3b1d2 libgomp/testsuite/libgomp.oacc-fortran/atomic_capture-1.f90 - 1239e7569c34d9842432ab6666cd411c libgomp/testsuite/libgomp.oacc-fortran/atomic_rw-1.f90 - 41253d0cb8d36acbbcd34b0461a3bb46 libgomp/testsuite/libgomp.oacc-fortran/atomic_update-1.f90 -+c459a54e791263602dae13c9b38a66ad libgomp/testsuite/libgomp.oacc-fortran/cache-1.f95 - 2ccddd43e49018b56fe9e1a45e9f9901 libgomp/testsuite/libgomp.oacc-fortran/clauses-1.f90 - 0d6c26df6be6cef756b12696e14e07b5 libgomp/testsuite/libgomp.oacc-fortran/collapse-1.f90 - 5a8991a0764ce9b04257546e4fa5f658 libgomp/testsuite/libgomp.oacc-fortran/collapse-2.f90 -@@ -61841,6 +62137,7 @@ - 13468844967101467070cb7ac463c16b libgomp/testsuite/libgomp.oacc-fortran/collapse-7.f90 - 6b3128948ec46f6c5a25eb114b5fc9c4 libgomp/testsuite/libgomp.oacc-fortran/collapse-8.f90 - 8c396e2144fc18a3de1818ae8108bda5 libgomp/testsuite/libgomp.oacc-fortran/combined-directives-1.f90 -+3733716c9184c05cf46fd635d0943a6d libgomp/testsuite/libgomp.oacc-fortran/combined-reduction.f90 - 6306783e85f144ba81b9aac0fc341a71 libgomp/testsuite/libgomp.oacc-fortran/data-1.f90 - e8adb123c09781787869ea368c1fa278 libgomp/testsuite/libgomp.oacc-fortran/data-2.f90 - ce578dabaea526c76233d523eab686f7 libgomp/testsuite/libgomp.oacc-fortran/data-3.f90 -@@ -61882,6 +62179,9 @@ - efcda465915ae848c58a3ea43c284842 libgomp/testsuite/libgomp.oacc-fortran/lib-7.f90 - e055a49425dde48525db5350406511b2 libgomp/testsuite/libgomp.oacc-fortran/lib-8.f90 - 8166a0c9b27377f05eb06d5dd0735cee libgomp/testsuite/libgomp.oacc-fortran/map-1.f90 -+9dcc6a7c4180d3d892e5cdd3df4f088b libgomp/testsuite/libgomp.oacc-fortran/nested-function-1.f90 -+bd7a72425ffbe9f89587d5a5138fe462 libgomp/testsuite/libgomp.oacc-fortran/nested-function-2.f90 -+a1fa3ef264aa86add5dc08b5e9bd4b89 libgomp/testsuite/libgomp.oacc-fortran/nested-function-3.f90 - a09b08acb0185066a021ba50ed1dacc8 libgomp/testsuite/libgomp.oacc-fortran/non-scalar-data.f90 - 7702e59e2172a9499f765f4c9327f0bb libgomp/testsuite/libgomp.oacc-fortran/openacc_version-1.f - 77ec7fb0079c057c097fef3a8693467e libgomp/testsuite/libgomp.oacc-fortran/openacc_version-2.f90 -@@ -61912,7 +62212,7 @@ - 6d7b9ef24d9986c5e4cb3f32834b1653 libgomp/work.c - 99c2e5e712b990ee07be10f53e41f3fb libiberty/.gitignore - a916467b91076e631dd8edb7424769c7 libiberty/COPYING.LIB --e4968519e78a8d9b3a6eb68364f43232 libiberty/ChangeLog -+dca230bedb414d8383bd5c94687b76e5 libiberty/ChangeLog - 347c31392973de6a4872d540c1718dc1 libiberty/ChangeLog.jit - f925c3515902a26a68a6019f355abc56 libiberty/Makefile.in - c68dbf7834af4281ebd84caa3fd54680 libiberty/README -@@ -61944,7 +62244,7 @@ - 5824bd0f9be9f4fa74bb3bdc7fd9431c libiberty/configure.com - 32149e9d61d873be9c2950bee2ae7137 libiberty/copying-lib.texi - fe053283d3559af3ec5cac45f8ead009 libiberty/copysign.c --c6b40d8511eeaeb0b11a26fee6683f34 libiberty/cp-demangle.c -+a246775fbbbac2ddc6a2adc29a33a106 libiberty/cp-demangle.c - 652cd1eb0406f7c91f9297b189af4715 libiberty/cp-demangle.h - 5868438b5b6c384018d526ccee754b8f libiberty/cp-demint.c - 93007574a947e87f0a09933f28203e4a libiberty/cplus-dem.c -@@ -62047,7 +62347,7 @@ - 9e1bb6fe95ebb6415672ddf1da29ec65 libiberty/strverscmp.c - 6c6e2b1b21232455a5e54af57d46f959 libiberty/testsuite/Makefile.in - 69dd92f0372ec3a77e992bb9318dbdac libiberty/testsuite/d-demangle-expected --c22ce95c546f35923318dbdd235fb561 libiberty/testsuite/demangle-expected -+be18dcce0dfaec61638eb3172a13fe50 libiberty/testsuite/demangle-expected - 10ce55269f247e57d2901ee11e88d8bd libiberty/testsuite/demangler-fuzzer.c - 8b476ce26e8583eea8df7d77fe287a5a libiberty/testsuite/test-demangle.c - d629c8f2adde10d53657e437416cf27f libiberty/testsuite/test-expandargv.c -@@ -62132,7 +62432,6 @@ - ca06f6a22290f04aac1fc335ece29711 libitm/dispatch.h - c4d7034d2f52d605b4b8f4644d0b669e libitm/eh_cpp.cc - f545350500de7fa7f56cff5f11802e73 libitm/libitm.h --3619f31e0d1c048d49bf8b940ad76a78 libitm/libitm.info - 0c43820b921ecdbe9d98f068100e716a libitm/libitm.map - ea467d7117853d139bb288ab75261139 libitm/libitm.spec.in - 1c481e6f4cca694530ceaa0fdf2623a5 libitm/libitm.texi -@@ -62178,7 +62477,7 @@ - 62d4ccb869b56e1e27163303bf2a85f0 libitm/useraction.cc - 3028050fc7e9c2aa747445850c00fe86 libitm/util.cc - 94d55d512a9ba36caa9b7df079bae19f libjava/COPYING --77b69809abcc46abd5e609709c803b57 libjava/ChangeLog -+3155232b54d6470236f6ff13fd9b4714 libjava/ChangeLog - 03e1f38b916604fdf1470238201325f3 libjava/ChangeLog-1998 - 691acb61fbd6a2235826ff55db5578be libjava/ChangeLog-1999 - b58c6701706771a02bf00a77666941ef libjava/ChangeLog-2000 -@@ -62259,21 +62558,8 @@ - b343eec566430e85d1f95c21438aa4ee libjava/classpath/doc/api/Makefile.am - 1d310e1c7d51b6af013da87024dc9620 libjava/classpath/doc/api/Makefile.in - 5ddd829b35fc94b0cdb119084089edb8 libjava/classpath/doc/cp-hacking.texinfo --862e32ddcce3928c53d25ceb1608b8f1 libjava/classpath/doc/cp-tools.info - 0349e5c38c548584225423ef4bafd20b libjava/classpath/doc/cp-tools.texinfo - 3155d9bd9a7bf4aff2ff0dfe4a2cb878 libjava/classpath/doc/cp-vmintegration.texinfo --9766e6c08e86644094f635b7c9f26311 libjava/classpath/doc/gappletviewer.1 --a13d380ac9cfbfab4d349255c7e2e583 libjava/classpath/doc/gjar.1 --620518f40be66424ca3f3554ff11d9a2 libjava/classpath/doc/gjarsigner.1 --99a3b53ff1caa9d501559d63c3f1a8ab libjava/classpath/doc/gjavah.1 --8946f2588c6fc6b9ec95f3aa67dc0ebf libjava/classpath/doc/gjdoc.1 --e23154e1fde98eb1e2a036311e26079e libjava/classpath/doc/gkeytool.1 --e2138b41681a6410660c264ac6110b01 libjava/classpath/doc/gnative2ascii.1 --5f3880893ede4b0bda9592d85edbfe77 libjava/classpath/doc/gorbd.1 --2730c7c5094b36af6f622d423ac4415f libjava/classpath/doc/grmid.1 --e12a5f4399bcd70334461eafe135ad3c libjava/classpath/doc/grmiregistry.1 --9e8815d844b257ea8d78b6c8120512b2 libjava/classpath/doc/gserialver.1 --f2565826380e1f2dffe56404bb279a41 libjava/classpath/doc/gtnameserv.1 - f7edd2bbe78e9a7e7aa706fbfa6f467e libjava/classpath/doc/texi2pod.pl - 01b23c87dcf82048a5958c8224653305 libjava/classpath/doc/texinfo.tex - b1e0c0c30547d57d7a09b04d47c70b06 libjava/classpath/examples/.cvsignore -@@ -85323,7 +85609,7 @@ - 4eaec6ec74d70ecea0976f23533030a8 libjava/testsuite/Makefile.am - fb42187d8e0bcb05191ae145e2ad631c libjava/testsuite/Makefile.in - dce80ba7e038ca18591aabc6d3d2582c libjava/testsuite/config/default.exp --046515428f7068fa92b4af50db67e94f libjava/testsuite/lib/libjava.exp -+12cddc134208161f95fe25d2b6ce9eed libjava/testsuite/lib/libjava.exp - 5bc5f3c2b92712d89b8fa8d99293ad20 libjava/testsuite/libjava.cni/PR9577.h - 783e9ef77859cbe3613da93348196aa4 libjava/testsuite/libjava.cni/PR9577.jar - 1cb376d608ce588877129087d302ad27 libjava/testsuite/libjava.cni/PR9577.java -@@ -86189,7 +86475,7 @@ - 434ac04eb066f5075299583492846410 libjava/verify.cc - 355440a0c2fb5e16259d7ae381b37ed5 libjava/win32-threads.cc - 434d5e5e91727dec004f0d1d1fab47ec libjava/win32.cc --f3fe0508b7217ee2f00578980c8b8c54 libmpx/ChangeLog -+1c2946e52a9e26c93e4b6fcd49671624 libmpx/ChangeLog - 38b5a5961bf81cf96b7905974a000dc2 libmpx/Makefile.am - 52ceef9cd663650f4d1d9c8e91656d14 libmpx/Makefile.in - 9883ed42b491d8aea83fdde90561cf2a libmpx/acinclude.m4 -@@ -86211,7 +86497,7 @@ - e67fb1bdc86e2be5473ab0192835f369 libmpx/mpxwrap/Makefile.in - e7c62aca341ea472234d7cb0bc4af328 libmpx/mpxwrap/libmpxwrappers.map - 514fed0b52cdd26987101b36d86a7cf8 libmpx/mpxwrap/libtool-version --e2c59f29f5e40b045f5ffb7b1b983c89 libmpx/mpxwrap/mpx_wrappers.c -+c32d22d10f53f727607e2159bb49c6c2 libmpx/mpxwrap/mpx_wrappers.c - c281087ccf06b1126d489b8de6de6263 libobjc/ChangeLog - b9ae0bf274b89fa44e8eee13ad306f00 libobjc/Makefile.in - 261388284fa6d545a9a911c95536c866 libobjc/NXConstStr.m -@@ -86379,7 +86665,6 @@ - bf09ede5c6d78e3d132bde0f933590d8 libquadmath/config.h.in - e2528fdd401f4aa4949acf6b7472c6e5 libquadmath/configure - 29e66c9d2ef7b7621276c63bee20d622 libquadmath/configure.ac --598ff623da7a336b4221c56150947711 libquadmath/libquadmath.info - c4e13f3169f2de58d737acfdba76647b libquadmath/libquadmath.texi - 77280bb7ee423875e03d9c0d34527df6 libquadmath/libtool-version - f44065462735b4699d44588271a5f09a libquadmath/math/acoshq.c -@@ -86503,7 +86788,7 @@ - a81cc82679e80c86cfbd5575867450d0 libquadmath/strtod/strtod_l.c - da808e110fc09ebd41ebd405790a70df libquadmath/strtod/strtoflt128.c - d15a18f7c46ba2add6148edc5b7563c0 libquadmath/strtod/tens_in_limb.c --0448d915a72917daa48bf8ca1e9263a8 libsanitizer/ChangeLog -+7fe19e70f12e02776cbac41f1a7ee6d8 libsanitizer/ChangeLog - be9b1514f2ae0907d5459acd6331993d libsanitizer/HOWTO_MERGE - 0249c37748936faf5b1efd5789587909 libsanitizer/LICENSE.TXT - e9eb4a77cb6d1457005493aeef54478e libsanitizer/MERGE -@@ -86534,7 +86819,7 @@ - de5adde40dad853f62e7f6f02fb39c63 libsanitizer/asan/asan_linux.cc - 68b329da9893e34099c7d8ad5cb9c940 libsanitizer/asan/asan_lock.h - 6e3e514ee98224b3d35eedd20f31dc69 libsanitizer/asan/asan_mac.cc --6fb2bb576d0db871840b266caacf5b4c libsanitizer/asan/asan_malloc_linux.cc -+7f4eda2466f1bea4ffea043b3ad74fb1 libsanitizer/asan/asan_malloc_linux.cc - fe8e70d61f125f2574ee3f7cabb27f2b libsanitizer/asan/asan_malloc_mac.cc - a0ee9f2d00416a8d00d5ac0a4f3758d7 libsanitizer/asan/asan_malloc_win.cc - 0e28518acb95e6eafea10c5aaa44562a libsanitizer/asan/asan_mapping.h -@@ -86822,7 +87107,7 @@ - e9ab923d2562bf5f5be6883dfb9f0184 libssp/strncpy-chk.c - 5e0d8b8a766c31b12354baec1b7a159c libssp/vsnprintf-chk.c - f56ab1f8922a16f7e9e4f5270ae1e34e libssp/vsprintf-chk.c --f1d092ccae45492fea4540383deb77bc libstdc++-v3/ChangeLog -+71074b77ce0c343a8adaf3aff273b763 libstdc++-v3/ChangeLog - 7aa6c40440a44fcf5ec94c066160c2f8 libstdc++-v3/ChangeLog-1998 - 7aff86600b6a1ed3fa87305075a92db0 libstdc++-v3/ChangeLog-1999 - a6f28e8fc9bb07696a9e068b439a3a87 libstdc++-v3/ChangeLog-2000 -@@ -87499,7 +87784,7 @@ - 4a4591228c96b08e8cfafd659ca4e914 libstdc++-v3/include/bits/boost_concept_check.h - 6c698861fbe30dd645b02cc9332c3cc9 libstdc++-v3/include/bits/c++0x_warning.h - 156583d00adec3e9c84f8cd3ab85473d libstdc++-v3/include/bits/c++14_warning.h --8ab4f9b79a29c20a2247731d46677e7d libstdc++-v3/include/bits/c++config -+3391eba3a0b35521e3a211d2f69ddc63 libstdc++-v3/include/bits/c++config - 56792010974749b8b8d1f8f4a87bdff7 libstdc++-v3/include/bits/char_traits.h - d4c48cb0855253bba8b25e24a6717ac1 libstdc++-v3/include/bits/codecvt.h - 8c6f43ad3e5d5237110200d354580da1 libstdc++-v3/include/bits/concept_check.h -@@ -87559,8 +87844,8 @@ - 81a9105e594bdd4f31466efb0ea2591c libstdc++-v3/include/bits/specfun.h - a046bed66696adfb2a6c4a593d6a1e3d libstdc++-v3/include/bits/sstream.tcc - dca1017544bda4f3e231a60f4bfb96aa libstdc++-v3/include/bits/std_mutex.h --ccd3933342ad7b6b8f8eb265794edd01 libstdc++-v3/include/bits/stl_algo.h --68a5fbc2687db7264a5ec538cab5ef20 libstdc++-v3/include/bits/stl_algobase.h -+11add78efd9f165a0d9767f4ef18f5e4 libstdc++-v3/include/bits/stl_algo.h -+23ea4a3aeea06844a671d0edb8f31227 libstdc++-v3/include/bits/stl_algobase.h - 243fe3e2f3c79e871cf74b93be35026e libstdc++-v3/include/bits/stl_bvector.h - 5ca41a37aa22865a2e5acf8a62c8f437 libstdc++-v3/include/bits/stl_construct.h - 8fd1c24a11e47aa7313171f7d4fe3b0f libstdc++-v3/include/bits/stl_deque.h -@@ -87723,11 +88008,11 @@ - 23e7049f7e8b7983c52206aab9113937 libstdc++-v3/include/decimal/decimal - 71e2a65287f65ee51824acf28e1d9f7a libstdc++-v3/include/decimal/decimal.h - 5ad6f3f20409d7de29835de97387918e libstdc++-v3/include/experimental/algorithm --e65a44cf13272360ff0478fcc8ee5a57 libstdc++-v3/include/experimental/any -+c64f903aa7f538c08886fe5dc1582f0a libstdc++-v3/include/experimental/any - 89b45a19b6cf153e676d40cf2f37aaf7 libstdc++-v3/include/experimental/array - 29b77f84375c4242993cfe208f650912 libstdc++-v3/include/experimental/bits/erase_if.h --f9f6312c24ee02dc5cd916d50da8fb83 libstdc++-v3/include/experimental/bits/fs_dir.h --4c72ea9fbedf180024c0cf4dd5fe4e1b libstdc++-v3/include/experimental/bits/fs_fwd.h -+122d1256bd80e98d1c61240bbfaf59f1 libstdc++-v3/include/experimental/bits/fs_dir.h -+e1c40a546f26acefc0463b336869af95 libstdc++-v3/include/experimental/bits/fs_fwd.h - 158630c37ddb30cc20d99ff56ac65063 libstdc++-v3/include/experimental/bits/fs_ops.h - eed4217b2f9fe20ca72578b391c7a2d2 libstdc++-v3/include/experimental/bits/fs_path.h - 34de3fdf15beca4475dd988e0184df6f libstdc++-v3/include/experimental/bits/shared_ptr.h -@@ -87736,14 +88021,14 @@ - 6826964fdd0c501df4e92c523e2862f1 libstdc++-v3/include/experimental/deque - f88ee31c92f92057c2fd3ac31e24d93e libstdc++-v3/include/experimental/filesystem - 2bff8bbef91fcc1b5d11d98bf5905df8 libstdc++-v3/include/experimental/forward_list --4264211c5282d287ebadc45d97d4de45 libstdc++-v3/include/experimental/functional -+e59810aa4afce25362a948f28b60b9de libstdc++-v3/include/experimental/functional - 6c5f935e4fff3629ee30c039f4c55bb6 libstdc++-v3/include/experimental/iterator - cfe5bab2e8a6e1cfbfba279ecd095b9b libstdc++-v3/include/experimental/list - 5ea3575f34c060bd14c6163b5c02910d libstdc++-v3/include/experimental/map - 9f2ff72def8b2ccefde5f79da53d689c libstdc++-v3/include/experimental/memory - 0ea55299535b43a37b77451c2a04adb4 libstdc++-v3/include/experimental/memory_resource - b0a72f080296c31dcf5665d20d230540 libstdc++-v3/include/experimental/numeric --e625ff0e60fda3fc4623907cbba234be libstdc++-v3/include/experimental/optional -+b0e91dbbf7e68aa5f99049900d816b46 libstdc++-v3/include/experimental/optional - 7283a9f678ec265aa97152d6dca56bea libstdc++-v3/include/experimental/propagate_const - dbf6b0596c17e1fe3bb7c3646ab1fbfa libstdc++-v3/include/experimental/random - 1e0349a2dbba50ce5eaf18062017033e libstdc++-v3/include/experimental/ratio -@@ -88047,12 +88332,12 @@ - 08ed130b911c8861f17b625300af7808 libstdc++-v3/include/parallel/algobase.h - c3b97fba09aac2b83819d8dcd1517672 libstdc++-v3/include/parallel/algorithm - 0e840c628f0736ab041408bcada33951 libstdc++-v3/include/parallel/algorithmfwd.h --59c030b3f0ec2df5766b985d1bd49305 libstdc++-v3/include/parallel/balanced_quicksort.h -+255353a08bb95bf6328d3e2b85d90de0 libstdc++-v3/include/parallel/balanced_quicksort.h - 581bdc62656985390da46c99509e6d12 libstdc++-v3/include/parallel/base.h - 088195ce733ee584f5b8a0b095d0cda8 libstdc++-v3/include/parallel/basic_iterator.h - 233e2ab9c418055cb6565f1be8665f71 libstdc++-v3/include/parallel/checkers.h - fff9a8759ef5329e1b198ecd68df5d87 libstdc++-v3/include/parallel/compatibility.h --8550b5411dea9e7a7d09dc2e2286c025 libstdc++-v3/include/parallel/compiletime_settings.h -+a429f2c927389fab5d0c8b3c06a21616 libstdc++-v3/include/parallel/compiletime_settings.h - 31cb4710e1cbb06626f80fad6dba2f86 libstdc++-v3/include/parallel/equally_split.h - d790719d808ca3e1f934654ba35f4c23 libstdc++-v3/include/parallel/features.h - 8a450ac00797e5880593bd1798d33c89 libstdc++-v3/include/parallel/find.h -@@ -88162,7 +88447,7 @@ - 4b6625c7cbce87a5b4a6e79c315b0f1d libstdc++-v3/include/std/string - 56ecd8ef9e669ad9046f93b40c6adeb0 libstdc++-v3/include/std/system_error - 3c38cff34b5471d6ef6b8f5ebd334363 libstdc++-v3/include/std/thread --a20360f1d00c525b1c3a82a850399bbb libstdc++-v3/include/std/tuple -+69c9fe68e28b9c6a300b100398e4eff3 libstdc++-v3/include/std/tuple - 8dfc4dc705dbfdceed5a96a1d17dcb31 libstdc++-v3/include/std/type_traits - 66c41d38d5277a5c6662a5c974f65fc4 libstdc++-v3/include/std/typeindex - b23b42f90aab11eae50546959be31645 libstdc++-v3/include/std/unordered_map -@@ -88339,7 +88624,7 @@ - 30665c8b6d46064d472972b057ac96cb libstdc++-v3/src/c++11/Makefile.am - a71513788b148a7ade2ec04c6070aa8e libstdc++-v3/src/c++11/Makefile.in - 4fdcbea8f299a029c4f5ea8d59f630c6 libstdc++-v3/src/c++11/chrono.cc --e577d458447700de0808ac76b14c07ec libstdc++-v3/src/c++11/codecvt.cc -+28ba9ca2926c19035cb646b2329710f4 libstdc++-v3/src/c++11/codecvt.cc - 8bfae905b9eab9ab26ee92eb3978ab4a libstdc++-v3/src/c++11/compatibility-atomic-c++0x.cc - 5d0b8ad9f6d2ee8e8040a8b666bf9e40 libstdc++-v3/src/c++11/compatibility-c++0x.cc - 4c716fd1981b6de7c33c9ee168aaa28d libstdc++-v3/src/c++11/compatibility-chrono.cc -@@ -88350,7 +88635,7 @@ - 98214d46bbe793351796b07e0a42a42d libstdc++-v3/src/c++11/cow-locale_init.cc - 8b1fca2685592e27c6e2512aab409c53 libstdc++-v3/src/c++11/cow-shim_facets.cc - a1e95554d798e75aaf108cf99555acbe libstdc++-v3/src/c++11/cow-sstream-inst.cc --d24f762e5c1518d3d881dec110cd3015 libstdc++-v3/src/c++11/cow-stdexcept.cc -+11f38398949bd792c8cf299bb71de812 libstdc++-v3/src/c++11/cow-stdexcept.cc - f24a3851a742dd9c9e641146183b51a8 libstdc++-v3/src/c++11/cow-string-inst.cc - 2fc29df6c120b834cdf25d9a94bb04be libstdc++-v3/src/c++11/cow-wstring-inst.cc - a85f17026568d8b29a5918c5fdb0de37 libstdc++-v3/src/c++11/ctype.cc -@@ -88437,7 +88722,7 @@ - a55f615eaeda6a459dd7afb072d7b189 libstdc++-v3/src/filesystem/cow-ops.cc - 69cc034ef75e4e41c856abb14ff6a9c6 libstdc++-v3/src/filesystem/cow-path.cc - d65d2e058df05915cedab245e7b83ebb libstdc++-v3/src/filesystem/dir.cc --4bd5a2c20b1ea1acbeadb448465d6e91 libstdc++-v3/src/filesystem/ops.cc -+ae63ac87d47a4928b951406c3e823ce4 libstdc++-v3/src/filesystem/ops.cc - 565e7324068b67ac6d423123a8796c82 libstdc++-v3/src/filesystem/path.cc - 588e1f8e679966c86b3269c806c1baaa libstdc++-v3/src/shared/hashtable-aux.cc - fd840c906f4a0cf5df5cd7bc96c757e5 libstdc++-v3/testsuite/17_intro/freestanding.cc -@@ -89315,6 +89600,7 @@ - f2c34e193c19314affc8a00a6a445a92 libstdc++-v3/testsuite/20_util/tuple/cons/constexpr-3.cc - a9cd6398ea857a03537f88c7e23f4b60 libstdc++-v3/testsuite/20_util/tuple/cons/constructor.cc - 0aabd51cea226df6c82b765ef09c9441 libstdc++-v3/testsuite/20_util/tuple/cons/converting.cc -+26bb13fcf5c5e3ab980dfe85b16b7496 libstdc++-v3/testsuite/20_util/tuple/cons/element_accepts_anything_byval.cc - 7e5c8d7e9d12164bb1347a124ace6a37 libstdc++-v3/testsuite/20_util/tuple/cons/explicit_construct.cc - 080671dc61cd5a1adb690c82272a7aa5 libstdc++-v3/testsuite/20_util/tuple/cons/nested_tuple_construct.cc - 441b45a224b065aa135d3ec04bd9a4b2 libstdc++-v3/testsuite/20_util/tuple/cons/noexcept_move_construct.cc -@@ -89660,8 +89946,9 @@ - c97f26a8973c209ae0f7d360ad9f2fcc libstdc++-v3/testsuite/22_locale/codecvt/char32_t.cc - c5071e3bdcb84c6edc7d311f74de1d4a libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/66417.cc - a9d0a70ac98a0b17d2d1cc8c848a8efc libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/requirements/1.cc -+d1ed67ee033e3f14a4e84f4874b7f324 libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/69703.cc - ff59d91f6f27e3904a6f0c4e0fc63592 libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/requirements/1.cc --69fc313af596ee07d279da2f57847abc libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/66855.cc -+a6f9396f0c42a4c6d1d6de7ae30882e3 libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/66855.cc - 50aec117b3903134dc297553a6e7d171 libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/requirements/1.cc - fb446a5424dced8689e50d049d902d15 libstdc++-v3/testsuite/22_locale/codecvt/encoding/char/1.cc - fb4c80aa2f3965e8a807cf632dd40511 libstdc++-v3/testsuite/22_locale/codecvt/encoding/char/wrapped_env.cc -@@ -91461,6 +91748,7 @@ - 7a12e960fa6c1e202b05b2045bf30243 libstdc++-v3/testsuite/25_algorithms/binary_search/1.cc - fa283b2c4d3165d0550387d9bea029e9 libstdc++-v3/testsuite/25_algorithms/binary_search/2.cc - 39f41d4b1f8549c8788b2a85a1c1a063 libstdc++-v3/testsuite/25_algorithms/binary_search/check_type.cc -+dbcdd5ed11c3e7f7c6993f08d03a384a libstdc++-v3/testsuite/25_algorithms/binary_search/partitioned.cc - b9a614d8754b69aacd56a041d87d4f4c libstdc++-v3/testsuite/25_algorithms/binary_search/requirements/explicit_instantiation/2.cc - 00923b3f1fe62755ccaea3e61a14e149 libstdc++-v3/testsuite/25_algorithms/binary_search/requirements/explicit_instantiation/pod.cc - ee54ed262f118b0a86e1ba3198a8bbbb libstdc++-v3/testsuite/25_algorithms/copy/1.cc -@@ -91517,6 +91805,7 @@ - 471256a571753ee1e1eee18449dc96b8 libstdc++-v3/testsuite/25_algorithms/equal_range/1.cc - 911a0936f661b747ba8f0a5329a6dadd libstdc++-v3/testsuite/25_algorithms/equal_range/2.cc - 111dc42bd57e81f298f0d17a0f4e7c91 libstdc++-v3/testsuite/25_algorithms/equal_range/check_type.cc -+e5252e8afeb3f5de27ed99de48b74b8b libstdc++-v3/testsuite/25_algorithms/equal_range/partitioned.cc - fe50e7ee7caeb1e75440d7f7b268af24 libstdc++-v3/testsuite/25_algorithms/equal_range/requirements/explicit_instantiation/2.cc - 5e6967d287d4c6526375184ee5831157 libstdc++-v3/testsuite/25_algorithms/equal_range/requirements/explicit_instantiation/pod.cc - 1ff6701c1f7885f5cf7ae178fa6e3a30 libstdc++-v3/testsuite/25_algorithms/fill/1.cc -@@ -91620,6 +91909,7 @@ - 3fce4489cef94bc78fa0b2cfe622659f libstdc++-v3/testsuite/25_algorithms/iter_swap/requirements/explicit_instantiation/2.cc - 563704df11793a2cb3925520a0584712 libstdc++-v3/testsuite/25_algorithms/iter_swap/requirements/explicit_instantiation/pod.cc - 4c615f82254ba19627efd93190dc8741 libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/1.cc -+981466c0627cc5b1a3a290dde5c624ea libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/71545.cc - 6b2d034347a8395f85b112da5151e1eb libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/check_type.cc - ebb6313449d28677e1a105baa61eb93f libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/debug/irreflexive_neg.cc - 3468195c2351971106ecfec5637ae780 libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/requirements/explicit_instantiation/2.cc -@@ -91630,6 +91920,7 @@ - f3bcfbb7cff9aba454e55e19bcf2baf8 libstdc++-v3/testsuite/25_algorithms/lower_bound/check_type.cc - 20a0ac6a9a8d6fefcde91c6b9e41e0c6 libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/irreflexive.cc - 63320e25fd7aa7498b9e83cc5cd18506 libstdc++-v3/testsuite/25_algorithms/lower_bound/no_operator_ne.cc -+7539641d39861d52133a38d930f614e5 libstdc++-v3/testsuite/25_algorithms/lower_bound/partitioned.cc - b081808f9153f80a70b6a6a0bcb10b0a libstdc++-v3/testsuite/25_algorithms/lower_bound/requirements/explicit_instantiation/2.cc - 324cb134faf27bc3b70cead47184663a libstdc++-v3/testsuite/25_algorithms/lower_bound/requirements/explicit_instantiation/pod.cc - 4152775a73ca52f1f39a0843d3711e9c libstdc++-v3/testsuite/25_algorithms/make_heap/complexity.cc -@@ -91897,6 +92188,7 @@ - fcff315b520a5c220c95b06bf0afc3d7 libstdc++-v3/testsuite/25_algorithms/upper_bound/2.cc - 5799c9c188ff54c06a37c2b1684c3829 libstdc++-v3/testsuite/25_algorithms/upper_bound/33613.cc - 2367e61d5039679b915978b0831e9557 libstdc++-v3/testsuite/25_algorithms/upper_bound/check_type.cc -+a2a39374248d3f8330f33262bf983424 libstdc++-v3/testsuite/25_algorithms/upper_bound/partitioned.cc - 1bde07efc71b4272f874aa9b60b1c41a libstdc++-v3/testsuite/25_algorithms/upper_bound/requirements/explicit_instantiation/2.cc - 831507ab22c2dd811af9549c9b05042a libstdc++-v3/testsuite/25_algorithms/upper_bound/requirements/explicit_instantiation/pod.cc - 2ccc854d45ba39bdccef1dd6b95a2767 libstdc++-v3/testsuite/26_numerics/accumulate/1.cc -@@ -93837,8 +94129,8 @@ - 4d143ca68b2fc8e2f44162f96937b954 libstdc++-v3/testsuite/experimental/any/cons/2.cc - bcb1af3db3b58578f36d9fc7692922cf libstdc++-v3/testsuite/experimental/any/cons/aligned.cc - 48399811d2d329c756e82d87ef698e93 libstdc++-v3/testsuite/experimental/any/cons/nontrivial.cc --88fff9f76f2cb12f04ec3c220bd1bdf6 libstdc++-v3/testsuite/experimental/any/misc/any_cast.cc --b4f7ba6bd9238f17d0e8c4fd7018dbeb libstdc++-v3/testsuite/experimental/any/misc/any_cast_neg.cc -+f202bdedc914a2ba5e8700ca4b541d88 libstdc++-v3/testsuite/experimental/any/misc/any_cast.cc -+d6699928a0c4ff31a16b82901e0135d9 libstdc++-v3/testsuite/experimental/any/misc/any_cast_neg.cc - ede8bc6c2abc8e8e88dd015c19f35bc9 libstdc++-v3/testsuite/experimental/any/misc/any_cast_no_rtti.cc - 4c83567229f17dfc9aeee2ceada69bc7 libstdc++-v3/testsuite/experimental/any/misc/swap.cc - 89d8fbc9a4c2072fb0d49f46675f92e7 libstdc++-v3/testsuite/experimental/any/modifiers/1.cc -@@ -93850,15 +94142,18 @@ - a6bed3df705f73fb6770e7e17600b531 libstdc++-v3/testsuite/experimental/deque/erasure.cc - 1c10a535f04c73dcb2dcf34a55e5f892 libstdc++-v3/testsuite/experimental/feat-cxx14.cc - f1868e7d6427fc60964c1a38200d329f libstdc++-v3/testsuite/experimental/feat-lib-fund.cc --90f90e5d1004c083226bf7207a8b18f1 libstdc++-v3/testsuite/experimental/filesystem/iterators/directory_iterator.cc --a7fea621d015988d3fa1fc76e86eedd9 libstdc++-v3/testsuite/experimental/filesystem/iterators/recursive_directory_iterator.cc -+e9dc54abe60b8b705c14ac3d74636838 libstdc++-v3/testsuite/experimental/filesystem/iterators/directory_iterator.cc -+af9d47d33b74004315b691b6346b9d86 libstdc++-v3/testsuite/experimental/filesystem/iterators/recursive_directory_iterator.cc - 6659047a437b84cfb9f2391f87429043 libstdc++-v3/testsuite/experimental/filesystem/operations/absolute.cc --e9ab5236864aff79b6568b648c388648 libstdc++-v3/testsuite/experimental/filesystem/operations/canonical.cc --3ba41914e00797409515d4219a56de5a libstdc++-v3/testsuite/experimental/filesystem/operations/copy.cc --17841b5e8220264cf46deb635f6e3d3b libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc -+cb96d4f460d63079de67211a5fa98add libstdc++-v3/testsuite/experimental/filesystem/operations/canonical.cc -+0cf2c31ebc01188c0a36787d294b6c6b libstdc++-v3/testsuite/experimental/filesystem/operations/copy.cc -+43478894c9ffeeff98b3c58779cdd278 libstdc++-v3/testsuite/experimental/filesystem/operations/copy_file.cc -+5b67c7238f734df125c006ea8e224a86 libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc -+25adc7117e80c1cd1e18b1cde11f4c1e libstdc++-v3/testsuite/experimental/filesystem/operations/create_directory.cc - c5446130c200098a30ef1dc1a283b2b9 libstdc++-v3/testsuite/experimental/filesystem/operations/current_path.cc - 7340da71f52f79524efcb005b8a0dfbf libstdc++-v3/testsuite/experimental/filesystem/operations/exists.cc - 543f1f3a74e4731a28b2350f36b57987 libstdc++-v3/testsuite/experimental/filesystem/operations/file_size.cc -+a5fe820ebc0fc04c2078c67418d5e236 libstdc++-v3/testsuite/experimental/filesystem/operations/permissions.cc - 6c082c2b9134f256176dbd1ced18ec29 libstdc++-v3/testsuite/experimental/filesystem/operations/status.cc - 1d8c4e2df6535130a0759320e07efee6 libstdc++-v3/testsuite/experimental/filesystem/operations/temp_directory_path.cc - 6572ad4bfd145d4c0c079938a286897c libstdc++-v3/testsuite/experimental/filesystem/path/append/path.cc -@@ -93889,6 +94184,7 @@ - 5df8e09e624d87e17a044d9858058c9e libstdc++-v3/testsuite/experimental/filesystem/path/modifiers/replace_extension.cc - e2817cfd26742b69b8b7b73f942ccde9 libstdc++-v3/testsuite/experimental/filesystem/path/modifiers/replace_filename.cc - d4e9d71c8fd2b42db51b8797aebca13f libstdc++-v3/testsuite/experimental/filesystem/path/modifiers/swap.cc -+2321736afe6f050de2a69492d9bd096c libstdc++-v3/testsuite/experimental/filesystem/path/native/string.cc - 45a57bfce67b5460ea4ad3626a5133b5 libstdc++-v3/testsuite/experimental/filesystem/path/nonmember/hash_value.cc - 3e4cb85aec4dd2457d9b4efcbb7e8c0a libstdc++-v3/testsuite/experimental/filesystem/path/query/empty.cc - 71662b7f8ba3c6eb3dd94d008fe8ce02 libstdc++-v3/testsuite/experimental/filesystem/path/query/has_extension.cc -@@ -93902,7 +94198,7 @@ - b427c42986c003d6253ad475d252580b libstdc++-v3/testsuite/experimental/filesystem/path/query/is_relative.cc - f670b614d1cc3d7d0ad24712e408b00d libstdc++-v3/testsuite/experimental/forward_list/erasure.cc - bbbce96b885b0a3e2fff3467f74603b3 libstdc++-v3/testsuite/experimental/functional/not_fn.cc --8b60f23ac93b783a0235699abcca08e4 libstdc++-v3/testsuite/experimental/functional/searchers.cc -+854913f12196247a55853dd04d8eee4d libstdc++-v3/testsuite/experimental/functional/searchers.cc - 043c6e8e4f78804111ba475b4b36f43a libstdc++-v3/testsuite/experimental/functional/value.cc - b8a37dc3290caea1a96660d87ea5a9a3 libstdc++-v3/testsuite/experimental/iterator/make_ostream_joiner.cc - 1c550ab3838807146948e05c220dd3c2 libstdc++-v3/testsuite/experimental/iterator/ostream_joiner.cc -@@ -93947,7 +94243,8 @@ - 5cafc7a64c3fd8161ec5647978b89f4a libstdc++-v3/testsuite/experimental/optional/cons/copy.cc - ad6988975eb0537cef61d8ca1a71f663 libstdc++-v3/testsuite/experimental/optional/cons/default.cc - f4226d3e8ed1ba519c69491709698d38 libstdc++-v3/testsuite/experimental/optional/cons/move.cc --66f5ea892439f3d2ff2ef9f386ac41cd libstdc++-v3/testsuite/experimental/optional/cons/value.cc -+cd8840b7866b44b7ceed99d196c79446 libstdc++-v3/testsuite/experimental/optional/cons/value.cc -+bfdb103f8e1eff6b08a67e1e20910b8a libstdc++-v3/testsuite/experimental/optional/cons/value_neg.cc - 8ff6b45a9b1050aed7e2229378bea517 libstdc++-v3/testsuite/experimental/optional/constexpr/cons/default.cc - 64cafc604813d41180b02bbdb5175243 libstdc++-v3/testsuite/experimental/optional/constexpr/cons/value.cc - 87ed87ffad80d6207261ad9e9ccd90ec libstdc++-v3/testsuite/experimental/optional/constexpr/in_place.cc -@@ -95306,12 +95603,12 @@ - 23fd997da513a65fe1471c19a226fc52 libstdc++-v3/testsuite/util/testsuite_containers.h - 04a32a019d1586ab2217d06583f33404 libstdc++-v3/testsuite/util/testsuite_counter_type.h - 0dc60b6ac596bc87a4e7a40aa06f58e9 libstdc++-v3/testsuite/util/testsuite_error.h --e09bbb8df91a8ee7256775a6d4d4d163 libstdc++-v3/testsuite/util/testsuite_fs.h -+8e55222cc23d00baba3a214230f59761 libstdc++-v3/testsuite/util/testsuite_fs.h - ff826c1dd2ee6a0fe894da2321232547 libstdc++-v3/testsuite/util/testsuite_greedy_ops.h - c2aa93a55fce4b410f3963907115507e libstdc++-v3/testsuite/util/testsuite_hooks.cc - a837c7d31a1866b0a6125d854aeeb3ba libstdc++-v3/testsuite/util/testsuite_hooks.h - 03ef0d72a4d44308b72f20d48a98490f libstdc++-v3/testsuite/util/testsuite_io.h --426181cd245715e20a7e2d0a664f1875 libstdc++-v3/testsuite/util/testsuite_iterators.h -+014a5d7501d7109088bf371b70c55f19 libstdc++-v3/testsuite/util/testsuite_iterators.h - 915de1d2f670ce7f4b76542e99a70c50 libstdc++-v3/testsuite/util/testsuite_new_operators.h - d8cb74dfe347cc7d377fbd19b3efb585 libstdc++-v3/testsuite/util/testsuite_performance.h - 78117be975dcbe3823aa930cfbce08c0 libstdc++-v3/testsuite/util/testsuite_random.h -@@ -95323,9 +95620,9 @@ - 204ec69a032d5a889dacc11cf18fa4ed libstdc++-v3/testsuite/util/thread/all.h - b950d655469c477755252b1e18009596 libtool-ldflags - 7a2b83d2d625a4022b9213ceb75f5897 libtool.m4 --d2a523d344604dd6a3e8e1f7bfb1c2b4 libvtv/ChangeLog --8cf2d09520df1da87dce0b192c1af79a libvtv/Makefile.am --31c82474804ec75aab274ed98b4e6b51 libvtv/Makefile.in -+780474b8d3fa8c8117ccfd8281527085 libvtv/ChangeLog -+580d40bdd6efd6663aa0d78101a2ef1a libvtv/Makefile.am -+c9973f89d6d559403509edf0c5aa127f libvtv/Makefile.in - 4ce86f8604e6c86211a4cb2025ffc53e libvtv/acinclude.m4 - 1fadd2a7f8c12da8f434cd33e68d271e libvtv/aclocal.m4 - 754a4cbfde648aca416470cd6c95e4d8 libvtv/configure -@@ -95419,11 +95716,11 @@ - bc2f6032c98896249eadb56177c7d357 ltsugar.m4 - c30cd33c496505f13d9fbdb6970c7c33 ltversion.m4 - 293853a13b7e218e3a4342cf85fbbf25 lt~obsolete.m4 --b53da0da0c103a537dcf0ca69e0f0ef3 maintainer-scripts/ChangeLog -+b2ed68474b6ccc5f6ea1349c114e9064 maintainer-scripts/ChangeLog - 33c7bc2d2c55956dfac85a05d8a80eff maintainer-scripts/README - d0d4b92a5ba9606c481075c7bf65469a maintainer-scripts/crontab - 91544f3a251dde1c76b2b9a58aee73a9 maintainer-scripts/gcc_release --d87b258ea691681aca69f5c94d2f7cca maintainer-scripts/generate_libstdcxx_web_docs -+4b1217d62242596f1d1b439c25dce68f maintainer-scripts/generate_libstdcxx_web_docs - 33d97164a8610c7abf67eff7d28f47ff maintainer-scripts/maintainer-addresses - fd2c02d88bca262690f0cbbfaeab16e1 maintainer-scripts/update_version_svn - c8dfca01bf19508e40afff1dcd255211 maintainer-scripts/update_web_docs_libstdcxx_svn -Only in gcc-6.1.0: NEWS -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/fixincludes/ChangeLog gcc-6-20160721/fixincludes/ChangeLog ---- gcc-6.1.0/fixincludes/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/fixincludes/ChangeLog 2016-06-15 14:32:35.000000000 +0000 -@@ -1,3 +1,18 @@ -+2016-06-15 David Edelsohn <dje.gcc@gmail.com> -+ -+ Backport from mainline -+ 2016-06-13 David Edelsohn <dje.gcc@gmail.com> -+ -+ * inclhack.def (aix_stdlib_malloc): New fix. -+ (aix_stdlib_realloc): New fix. -+ (aix_stdlib_calloc): New fix. -+ (aix_stdlib_valloc): New fix. -+ * fixincl.x: Regenerate. -+ * tests/base/stdlib.h [AIX_STDLIB_MALLOC]: New test. -+ [AIX_STDLIB_REALLOC]: New test. -+ [AIX_STDLIB_CALLOC]: New test. -+ [AIX_STDLIB_VALLOC]: New test. -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/fixincludes/fixincl.x gcc-6-20160721/fixincludes/fixincl.x ---- gcc-6.1.0/fixincludes/fixincl.x 2016-02-01 00:54:22.000000000 +0000 -+++ gcc-6-20160721/fixincludes/fixincl.x 2016-06-15 14:32:35.000000000 +0000 -@@ -2,11 +2,11 @@ - * - * DO NOT EDIT THIS FILE (fixincl.x) - * -- * It has been AutoGen-ed Sunday January 31, 2016 at 07:52:05 PM EST -+ * It has been AutoGen-ed June 10, 2016 at 12:56:52 PM by AutoGen 5.18.3 - * From the definitions inclhack.def - * and the template file fixincl - */ --/* DO NOT SVN-MERGE THIS FILE, EITHER Sun 31 Jan 2016 19:52:05 EST -+/* DO NOT SVN-MERGE THIS FILE, EITHER Fri Jun 10 12:56:52 UTC 2016 - * - * You must regenerate it. Use the ./genfixes script. - * -@@ -15,7 +15,7 @@ - * certain ANSI-incompatible system header files which are fixed to work - * correctly with ANSI C and placed in a directory that GNU C will search. - * -- * This file contains 231 fixup descriptions. -+ * This file contains 235 fixup descriptions. - * - * See README for more information. - * -@@ -1547,6 +1547,154 @@ - - /* * * * * * * * * * * * * * * * * * * * * * * * * * - * -+ * Description of Aix_Stdlib_Malloc fix -+ */ -+tSCC zAix_Stdlib_MallocName[] = -+ "aix_stdlib_malloc"; -+ -+/* -+ * File name selection pattern -+ */ -+tSCC zAix_Stdlib_MallocList[] = -+ "stdlib.h\0"; -+/* -+ * Machine/OS name selection pattern -+ */ -+tSCC* apzAix_Stdlib_MallocMachs[] = { -+ "*-*-aix*", -+ (const char*)NULL }; -+ -+/* -+ * content selection pattern - do fix if pattern found -+ */ -+tSCC zAix_Stdlib_MallocSelect0[] = -+ "#define[ \t]+malloc[ \t]+__linux_malloc"; -+ -+#define AIX_STDLIB_MALLOC_TEST_CT 1 -+static tTestDesc aAix_Stdlib_MallocTests[] = { -+ { TT_EGREP, zAix_Stdlib_MallocSelect0, (regex_t*)NULL }, }; -+ -+/* -+ * Fix Command Arguments for Aix_Stdlib_Malloc -+ */ -+static const char* apzAix_Stdlib_MallocPatch[] = { -+ "format", -+ "extern void *malloc(size_t) __asm__(\"__linux_malloc\");", -+ (char*)NULL }; -+ -+/* * * * * * * * * * * * * * * * * * * * * * * * * * -+ * -+ * Description of Aix_Stdlib_Realloc fix -+ */ -+tSCC zAix_Stdlib_ReallocName[] = -+ "aix_stdlib_realloc"; -+ -+/* -+ * File name selection pattern -+ */ -+tSCC zAix_Stdlib_ReallocList[] = -+ "stdlib.h\0"; -+/* -+ * Machine/OS name selection pattern -+ */ -+tSCC* apzAix_Stdlib_ReallocMachs[] = { -+ "*-*-aix*", -+ (const char*)NULL }; -+ -+/* -+ * content selection pattern - do fix if pattern found -+ */ -+tSCC zAix_Stdlib_ReallocSelect0[] = -+ "#define[ \t]+realloc[ \t]+__linux_realloc"; -+ -+#define AIX_STDLIB_REALLOC_TEST_CT 1 -+static tTestDesc aAix_Stdlib_ReallocTests[] = { -+ { TT_EGREP, zAix_Stdlib_ReallocSelect0, (regex_t*)NULL }, }; -+ -+/* -+ * Fix Command Arguments for Aix_Stdlib_Realloc -+ */ -+static const char* apzAix_Stdlib_ReallocPatch[] = { -+ "format", -+ "extern void *realloc(void *, size_t) __asm__(\"__linux_realloc\");", -+ (char*)NULL }; -+ -+/* * * * * * * * * * * * * * * * * * * * * * * * * * -+ * -+ * Description of Aix_Stdlib_Calloc fix -+ */ -+tSCC zAix_Stdlib_CallocName[] = -+ "aix_stdlib_calloc"; -+ -+/* -+ * File name selection pattern -+ */ -+tSCC zAix_Stdlib_CallocList[] = -+ "stdlib.h\0"; -+/* -+ * Machine/OS name selection pattern -+ */ -+tSCC* apzAix_Stdlib_CallocMachs[] = { -+ "*-*-aix*", -+ (const char*)NULL }; -+ -+/* -+ * content selection pattern - do fix if pattern found -+ */ -+tSCC zAix_Stdlib_CallocSelect0[] = -+ "#define[ \t]+calloc[ \t]+__linux_calloc"; -+ -+#define AIX_STDLIB_CALLOC_TEST_CT 1 -+static tTestDesc aAix_Stdlib_CallocTests[] = { -+ { TT_EGREP, zAix_Stdlib_CallocSelect0, (regex_t*)NULL }, }; -+ -+/* -+ * Fix Command Arguments for Aix_Stdlib_Calloc -+ */ -+static const char* apzAix_Stdlib_CallocPatch[] = { -+ "format", -+ "extern void *calloc(size_t, size_t) __asm__(\"__linux_calloc\");", -+ (char*)NULL }; -+ -+/* * * * * * * * * * * * * * * * * * * * * * * * * * -+ * -+ * Description of Aix_Stdlib_Valloc fix -+ */ -+tSCC zAix_Stdlib_VallocName[] = -+ "aix_stdlib_valloc"; -+ -+/* -+ * File name selection pattern -+ */ -+tSCC zAix_Stdlib_VallocList[] = -+ "stdlib.h\0"; -+/* -+ * Machine/OS name selection pattern -+ */ -+tSCC* apzAix_Stdlib_VallocMachs[] = { -+ "*-*-aix*", -+ (const char*)NULL }; -+ -+/* -+ * content selection pattern - do fix if pattern found -+ */ -+tSCC zAix_Stdlib_VallocSelect0[] = -+ "#define[ \t]+valloc[ \t]+__linux_valloc"; -+ -+#define AIX_STDLIB_VALLOC_TEST_CT 1 -+static tTestDesc aAix_Stdlib_VallocTests[] = { -+ { TT_EGREP, zAix_Stdlib_VallocSelect0, (regex_t*)NULL }, }; -+ -+/* -+ * Fix Command Arguments for Aix_Stdlib_Valloc -+ */ -+static const char* apzAix_Stdlib_VallocPatch[] = { -+ "format", -+ "extern void *valloc(size_t) __asm__(\"__linux_valloc\");", -+ (char*)NULL }; -+ -+/* * * * * * * * * * * * * * * * * * * * * * * * * * -+ * - * Description of Aix_Strtof_Const fix - */ - tSCC zAix_Strtof_ConstName[] = -@@ -9485,9 +9633,9 @@ - * - * List of all fixes - */ --#define REGEX_COUNT 268 -+#define REGEX_COUNT 272 - #define MACH_LIST_SIZE_LIMIT 187 --#define FIX_COUNT 231 -+#define FIX_COUNT 235 - - /* - * Enumerate the fixes -@@ -9525,6 +9673,10 @@ - AIX_STDINT_4_FIXIDX, - AIX_STDINT_5_FIXIDX, - AIX_STDIO_INLINE_FIXIDX, -+ AIX_STDLIB_MALLOC_FIXIDX, -+ AIX_STDLIB_REALLOC_FIXIDX, -+ AIX_STDLIB_CALLOC_FIXIDX, -+ AIX_STDLIB_VALLOC_FIXIDX, - AIX_STRTOF_CONST_FIXIDX, - AIX_SYSMACHINE_FIXIDX, - AIX_SYSWAIT_2_FIXIDX, -@@ -9887,6 +10039,26 @@ - AIX_STDIO_INLINE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, - aAix_Stdio_InlineTests, apzAix_Stdio_InlinePatch, 0 }, - -+ { zAix_Stdlib_MallocName, zAix_Stdlib_MallocList, -+ apzAix_Stdlib_MallocMachs, -+ AIX_STDLIB_MALLOC_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, -+ aAix_Stdlib_MallocTests, apzAix_Stdlib_MallocPatch, 0 }, -+ -+ { zAix_Stdlib_ReallocName, zAix_Stdlib_ReallocList, -+ apzAix_Stdlib_ReallocMachs, -+ AIX_STDLIB_REALLOC_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, -+ aAix_Stdlib_ReallocTests, apzAix_Stdlib_ReallocPatch, 0 }, -+ -+ { zAix_Stdlib_CallocName, zAix_Stdlib_CallocList, -+ apzAix_Stdlib_CallocMachs, -+ AIX_STDLIB_CALLOC_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, -+ aAix_Stdlib_CallocTests, apzAix_Stdlib_CallocPatch, 0 }, -+ -+ { zAix_Stdlib_VallocName, zAix_Stdlib_VallocList, -+ apzAix_Stdlib_VallocMachs, -+ AIX_STDLIB_VALLOC_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, -+ aAix_Stdlib_VallocTests, apzAix_Stdlib_VallocPatch, 0 }, -+ - { zAix_Strtof_ConstName, zAix_Strtof_ConstList, - apzAix_Strtof_ConstMachs, - AIX_STRTOF_CONST_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/fixincludes/inclhack.def gcc-6-20160721/fixincludes/inclhack.def ---- gcc-6.1.0/fixincludes/inclhack.def 2016-02-01 00:54:22.000000000 +0000 -+++ gcc-6-20160721/fixincludes/inclhack.def 2016-06-15 14:32:35.000000000 +0000 -@@ -911,6 +911,48 @@ - test_text = "#ifdef __cplusplus\n}\n\n#ifdef ferror"; - }; - -+/* -+ * stdlib.h on AIX uses #define on malloc and friends. -+ */ -+fix = { -+ hackname = aix_stdlib_malloc; -+ mach = "*-*-aix*"; -+ files = stdlib.h; -+ select = "#define[ \t]+malloc[ \t]+__linux_malloc"; -+ c_fix = format; -+ c_fix_arg = "extern void *malloc(size_t) __asm__(\"__linux_malloc\");"; -+ test_text = "#define malloc __linux_malloc"; -+}; -+ -+fix = { -+ hackname = aix_stdlib_realloc; -+ mach = "*-*-aix*"; -+ files = stdlib.h; -+ select = "#define[ \t]+realloc[ \t]+__linux_realloc"; -+ c_fix = format; -+ c_fix_arg = "extern void *realloc(void *, size_t) __asm__(\"__linux_realloc\");"; -+ test_text = "#define realloc __linux_realloc"; -+}; -+ -+fix = { -+ hackname = aix_stdlib_calloc; -+ mach = "*-*-aix*"; -+ files = stdlib.h; -+ select = "#define[ \t]+calloc[ \t]+__linux_calloc"; -+ c_fix = format; -+ c_fix_arg = "extern void *calloc(size_t, size_t) __asm__(\"__linux_calloc\");"; -+ test_text = "#define calloc __linux_calloc"; -+}; -+ -+fix = { -+ hackname = aix_stdlib_valloc; -+ mach = "*-*-aix*"; -+ files = stdlib.h; -+ select = "#define[ \t]+valloc[ \t]+__linux_valloc"; -+ c_fix = format; -+ c_fix_arg = "extern void *valloc(size_t) __asm__(\"__linux_valloc\");"; -+ test_text = "#define valloc __linux_valloc"; -+}; - - /* - * stdlib.h on AIX 4.3 declares strtof() with a non-const first argument. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/fixincludes/tests/base/stdlib.h gcc-6-20160721/fixincludes/tests/base/stdlib.h ---- gcc-6.1.0/fixincludes/tests/base/stdlib.h 2015-02-17 14:45:48.000000000 +0000 -+++ gcc-6-20160721/fixincludes/tests/base/stdlib.h 2016-06-15 14:32:35.000000000 +0000 -@@ -9,6 +9,26 @@ - - - -+#if defined( AIX_STDLIB_MALLOC_CHECK ) -+extern void *malloc(size_t) __asm__("__linux_malloc"); -+#endif /* AIX_STDLIB_MALLOC_CHECK */ -+ -+ -+#if defined( AIX_STDLIB_REALLOC_CHECK ) -+extern void *realloc(void *, size_t) __asm__("__linux_realloc"); -+#endif /* AIX_STDLIB_REALLOC_CHECK */ -+ -+ -+#if defined( AIX_STDLIB_CALLOC_CHECK ) -+extern void *calloc(size_t, size_t) __asm__("__linux_calloc"); -+#endif /* AIX_STDLIB_CALLOC_CHECK */ -+ -+ -+#if defined( AIX_STDLIB_VALLOC_CHECK ) -+extern void *valloc(size_t) __asm__("__linux_valloc"); -+#endif /* AIX_STDLIB_VALLOC_CHECK */ -+ -+ - #if defined( AIX_STRTOF_CONST_CHECK ) - extern float strtof(const char *, char **); - #endif /* AIX_STRTOF_CONST_CHECK */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/BASE-VER gcc-6-20160721/gcc/BASE-VER ---- gcc-6.1.0/gcc/BASE-VER 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/gcc/BASE-VER 2016-04-27 10:38:16.000000000 +0000 -@@ -1 +1 @@ --6.1.0 -+6.1.1 -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ChangeLog gcc-6-20160721/gcc/ChangeLog ---- gcc-6.1.0/gcc/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/gcc/ChangeLog 2016-07-21 16:18:46.000000000 +0000 -@@ -1,3 +1,2020 @@ -+2016-07-21 Jakub Jelinek <jakub@redhat.com> -+ -+ PR sanitizer/71953 -+ * asan.c (asan_dynamic_init_call): Call asan_init_shadow_ptr_types -+ before builtin_decl_implicit. -+ -+ * tree-object-size.c (unknown): Use HOST_WIDE_INT_M1U instead of -1. -+ -+2016-07-21 Andrew Sutton <andrew.n.sutton@gmail.com> -+ -+ Improving concepts performance and diagnostics. -+ * timevar.def (TV_CONSTRAINT_SAT, TV_CONSTRAINT_SUB): New time vars -+ for constraint satisfaction and subsumption. -+ * timevar.h (auto_timevar): New constructor that matches the push/pop -+ pattern of usage in pt.c. -+ -+2016-07-20 John David Anglin <danglin@gcc.gnu.org> -+ -+ Backport from mainline -+ 2016-07-16 John David Anglin <danglin@gcc.gnu.org> -+ -+ * config/pa/pa.c (hppa_profile_hook): Allocate stack space for -+ register parameters. Remove code to initialize argument pointer -+ on TARGET_64BIT. Optimize call to _mcount when it can be reached -+ using a pc-relative branch. Cleanup conditional code. -+ * config/pa/pa.md (call_mcount): New expander. -+ (call_mcount_nonpic): New insn. -+ (call_mcount_pic): New insn and split. -+ (call_mcount_pic_post_reload): New insn. -+ (call_mcount_64bit): New insn and split. -+ (call_mcount_64bit_post_reload): New insn. -+ -+2016-07-20 Andreas Krebbel <krebbel@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-07-20 Andreas Krebbel <krebbel@linux.vnet.ibm.com> -+ -+ * config/s390/s390.c (s390_encode_section_info): Remove mode size -+ check. -+ -+2016-07-20 Martin Jambor <mjambor@suse.cz> -+ -+ PR fortran/71688 -+ * trans-decl.c (gfc_generate_function_code): Use get_create rather -+ than create to get a call graph node. -+ -+2016-07-19 Jakub Jelinek <jakub@redhat.com> -+ -+ PR rtl-optimization/71916 -+ * cfgrtl.c (contains_no_active_insn_p): Return false also for -+ bb which have a single succ fake edge. -+ -+2016-07-19 Aldy Hernandez <aldyh@redhat.com> -+ -+ PR debug/71855 -+ * dwarf2out.c (gen_subprogram_die): Only call -+ gen_unspecified_parameters_die while dumping early dwarf. -+ -+2016-07-19 Jakub Jelinek <jakub@redhat.com> -+ -+ PR middle-end/71874 -+ * gimple-fold.c (fold_builtin_memory_op): Use -+ get_addr_base_and_unit_offset instead of get_ref_base_and_extent. -+ -+2016-07-18 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ Back port from mainline -+ 2016-07-18 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ PR target/71493 -+ * config/rs6000/rs6000.c (rs6000_function_value): Fix -+ unintentional System V.4 structure return breakage for structures -+ with a single floating point element. -+ -+2016-07-18 Martin Liska <mliska@suse.cz> -+ -+ Backported from mainline -+ 2016-07-12 Martin Liska <mliska@suse.cz> -+ -+ PR rtl-optimization/71634 -+ * ira-build.c (mark_loops_for_removal): Properly iterate -+ loops. -+ -+2016-07-18 Andreas Krebbel <krebbel@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-07-18 Andreas Krebbel <krebbel@linux.vnet.ibm.com> -+ -+ * config/s390/s390.c (s390_encode_section_info): Always set -+ notaligned marker if mode size is 0 or no MEM_ALIGN info could be -+ found. -+ -+2016-07-15 Alan Modra <amodra@gmail.com> -+ -+ Apply from mainline -+ 2016-07-11 Alan Modra <amodra@gmail.com> -+ * config/rs6000/rs6000.md (UNSPEC_DOLOOP): New unspec. -+ (ctr<mode>): Add unspec. -+ (ctr<mode>_internal*): Likewise. -+ -+2016-07-14 Alan Modra <amodra@gmail.com> -+ -+ PR target/71733 -+ * config/rs6000/rs6000.c (rs6000_option_override_internal): Deal -+ with p9_vector override before power9-dform override. -+ -+2016-07-13 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ Backport from mainline r238086. -+ 2016-07-07 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ PR ipa/71624 -+ * ipa-inline-analysis.c (compute_inline_parameters): Set -+ local.can_change_signature to false for intrumentation -+ thunk callees. -+ -+2016-07-12 Michael Meissner <meissner@linux.vnet.ibm.com> -+ Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-07-05 Michael Meissner <meissner@linux.vnet.ibm.com> -+ Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ * config/rs6000/rs6000-protos.h (rs6000_split_signbit): New -+ prototype. -+ * config/rs6000/rs6000.c (rs6000_split_signbit): New function. -+ * config/rs6000/rs6000.md (UNSPEC_SIGNBIT): New constant. -+ (SIGNBIT): New mode iterator. -+ (Fsignbit): New mode attribute. -+ (signbit<mode>2): Change operand1 to match FLOAT128 instead of -+ IBM128; dispatch to gen_signbit{kf,tf}2_dm for __float128 -+ when direct moves are available. -+ (signbit<mode>2_dm): New define_insn_and_split). -+ (signbit<mode>2_dm2): New define_insn. -+ -+2016-07-12 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-07-12 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ PR target/71805 -+ * config/rs6000/altivec.md (altivec_vperm_<mode>_internal): -+ The xxperm and xxpermr instructions require that the 2nd input -+ operand overlap with the output operand, and not the 1st. -+ (altivec_vperm_v8hiv16qi): Likewise. -+ (altivec_vperm_<mode>_uns_internal): Likewise. -+ (altivec_vpermr_<mode>_internal): Likewise. -+ (vperm_v8hiv4si): Likewise. -+ (vperm_v16qiv8hi): Likewise. -+ -+2016-07-12 Segher Boessenkool <segher@kernel.crashing.org> -+ -+ Backport from mainline -+ 2016-07-06 Segher Boessenkool <segher@kernel.crashing.org> -+ -+ PR target/70098 -+ PR target/71763 -+ * config/rs6000/rs6000.md (*ctr<mode>_internal1, *ctr<mode>_internal2, -+ *ctr<mode>_internal5, *ctr<mode>_internal6): Add *wi to the output -+ constraint. -+ -+2016-07-11 Jakub Jelinek <jakub@redhat.com> -+ -+ PR middle-end/71758 -+ * omp-low.c (expand_omp_target): Gimplify device. -+ -+ PR tree-optimization/71823 -+ * tree-vect-stmts.c (vectorizable_operation): Use vect_get_vec_defs -+ to get vec_oprnds2 from op2. -+ -+2016-07-11 Yuri Rumyantsev <ysrumyan@gmail.com> -+ -+ Backport from mainline r238055. -+ 2016-07-06 Yuri Rumyantsev <ysrumyan@gmail.com> -+ -+ PR tree-optimization/71518 -+ * tree-vect-data-refs.c (vect_compute_data_ref_alignment): Adjust -+ misalign also for outer loops with negative step. -+ -+2016-07-08 Martin Liska <mliska@suse.cz> -+ -+ Backported from mainline -+ 2016-07-08 Martin Liska <mliska@suse.cz> -+ -+ PR middle-end/71606 -+ * fold-const.c (fold_convertible_p): As COMPLEX_TYPE -+ folding produces SAVE_EXPRs, thus return false for the type. -+ -+2016-07-08 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ * config/rs6000/rs6000-builtin.def (BU_P9_MISC_1): Remove -+ redundant and erroneous definition of this macro accidentally -+ inserted during backporting. -+ (BU_P9_64BIT_MISC_0): Likewise. -+ (BU_P9_MISC_0): Likewise. -+ -+2016-07-08 Jiong Wang <jiong.wang@arm.com> -+ -+ Back port from the trunk -+ 2016-07-08 Jiong Wang <jiong.wang@arm.com> -+ -+ * config/aarch64/aarch64-simd-builtins.def (smax): Remove float -+ variants. -+ (smin): Likewise. -+ (fmax): New entry. -+ (fmin): Likewise. -+ * config/aarch64/arm_neon.h (vmaxnm_f32): Use -+ __builtin_aarch64_fmaxv2sf. -+ (vmaxnmq_f32): Likewise. -+ (vmaxnmq_f64): Likewise. -+ (vminnm_f32): Likewise. -+ (vminnmq_f32): Likewise. -+ (vminnmq_f64): Likewise. -+ -+2016-07-08 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ Back port from trunk -+ 2016-07-08 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ PR target/71806 -+ * config/rs6000/rs6000-cpus.def (ISA_3_0_MASKS_SERVER): Do not -+ enable -mfloat128-hardware by default. -+ (ISA_3_0_MASKS_IEEE): New macro to give all of the VSX options -+ that IEEE 128-bit hardware support needs. -+ * config/rs6000/rs6000.c (rs6000_option_override_internal): If -+ -mcpu=power9 -mfloat128, enable -mfloat128-hardware by default. -+ Use ISA_3_0_MASKS_IEEE as the set of options that IEEE 128-bit -+ floating point requires. -+ * doc/invoke.texi (RS/6000 and PowerPC Options): Document -+ -mfloat128 and -mfloat128-hardware changes. -+ -+2016-07-08 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ Backport from mainline r237912 -+ 2016-07-01 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ * config/rs6000/altivec.md (*altivec_vpermr_<mode>_internal): -+ Exchange the order of the second and third operands in the vpermr -+ instruction tmeplate. -+ -+2016-07-07 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ Back port from the trunk -+ 2016-07-01 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ PR target/71720 -+ * config/rs6000/vsx.md (vsx_splat_v4sf_internal): When splitting -+ the insns, use an insn form that does not adjust the offset on -+ little endian systems. -+ -+2016-07-07 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ Backport from mainline r237885 -+ 2016-06-30 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ * config/rs6000/altivec.md (darn_32): Change the condition to -+ TARGET_P9_MISC instead of TARGET_MODULO. -+ (darn_raw): Replace TARGET_MODULO with TARGET_P9_MISC in the -+ condition expression. -+ (darn): Replace TARGET_MODULO with TARGET_P9_MISC in the -+ condition expression. -+ * config/rs6000/dfp.md (UNSPEC_DTSTSFI): New unspec constant. -+ (DFP_TEST): New code iterator. -+ (dfptstsfi_<code>_mode>): New define_expand. -+ (*dfp_sgnfcnc_<mode>): New define_insn. -+ * config/rs6000/rs6000-builtin.def (BU_P9_MISC_0): Move this macro -+ definition next to BU_P9_MISC_1 definition and change the MASK -+ value to RS6000_BTM_P9_MISC. -+ (BU_P9_MISC_1): Change the MASK value to RS6000_BTM_P9_MISC. -+ (BU_P9_64BIT_MISC_0): Likewise. -+ (BU_P9_DFP_MISC_0): New macro definition. -+ (BU_P9_DFP_MISC_1): New macro definition. -+ (BU_P9_DFP_MISC_2): New macro definition. -+ (BU_P9_DFP_OVERLOAD_1): New macro definition. -+ (BU_P9_DFP_OVERLOAD_2): New macro definition. -+ (BU_P9_DFP_OVERLOAD_3): New macro definition. -+ (TSTSFI_LT_DD): New BU_P9_DFP_MISC_2. -+ (TSTSFI_LT_TD): Likewise. -+ (TSTSFI_EQ_DD): Likewise. -+ (TSTSFI_EQ_TD): Likewise. -+ (TSTSFI_GT_DD): Likewise. -+ (TSTSFI_GT_TD): Likewise. -+ (TSTSFI_OV_DD): Likewise. -+ (TSTSFI_OV_TD): Likewise. -+ (TSTSFI_LT): New BU_P9_DFP_OVERLOAD_2. -+ (TSTSFI_LT_DD): Likewise. -+ (TSTSFI_LT_TD): Likewise. -+ (TSTSFI_EQ): Likewise. -+ (TSTSFI_EQ_DD): Likewise. -+ (TSTSFI_EQ_TD): Likewise. -+ (TSTSFI_GT): Likewise. -+ (TSTSFI_GT_DD): Likewise. -+ (TSTSFI_GT_TD): Likewise. -+ (TSTSFI_OV): Likewise. -+ (TSTSFI_OV_DD): Likewise. -+ (TSTSFI_OV_TD): Likewise. -+ * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Add -+ overloaded test significance functions. -+ * config/rs6000/rs6000-cpus.def (ISA_3_0_MASKS_SERVER): Add -+ OPTION_MASK_P9_MISC into the representation of this mask. -+ (POWERPC_MASKS): Add OPTION_MASK_P9_MISC into the representation -+ of this mask. -+ * config/rs6000/rs6000.c (rs6000_builtin_mask_calculate): Set the -+ RS6000_BTM_P9_MISC flag in the return value if TARGET_P9_MISC is -+ non-zero. -+ (rs6000_expand_binop_builtin): Enforce that argument 0 of the exp -+ argument is a 6-bit unsigned literal value if the icode argument -+ represents a DFP test significance built-in call. -+ (rs6000_invalid_builtin): Add support for the RS6000_BTM_P9_MISC -+ flag used independently and in combination with the -+ RS6000_BTM_64BIT flag. -+ (rs6000_opt_masks): Add entry for power9-misc command-line option. -+ (rs6000_builtin_mask_names): Add entry for power9-misc -+ command-line option. -+ * config/rs6000/rs6000.h: Redefine TARGET_P9_MISC as 0 if -+ HAVE_AS_POWER9 is not a defined macro. Define MASK_P9_MISC and -+ RS6000_BTM_P9_MISC macros. -+ * config/rs6000/rs6000.opt: Add support for the -mpower9-misc -+ option and change the description of the -mpower9-vector option to -+ enable only vector instructions, removing its erroneously claimed -+ support for scalar instructions. -+ * doc/extend.texi (PowerPC AltiVec Built-in Functions): Document -+ the ISA 3.0 digital floating point test significance built-in -+ functions. -+ -+2016-07-07 Richard Biener <rguenther@suse.de> -+ -+ Backport from mainline -+ 2016-06-13 Richard Biener <rguenther@suse.de> -+ -+ PR middle-end/64516 -+ * fold-const.c (fold_unary_loc): Preserve alignment when -+ folding a VIEW_CONVERT_EXPR into a MEM_REF. -+ -+2016-07-07 Richard Biener <rguenther@suse.de> -+ -+ Backport from mainline -+ 2016-05-25 Richard Biener <rguenther@suse.de> -+ -+ PR tree-optimization/71264 -+ * tree-vect-stmts.c (vect_init_vector): Properly deal with -+ vector type val. -+ -+ 2016-06-07 Richard Biener <rguenther@suse.de> -+ -+ PR middle-end/71423 -+ * match.pd ((X | ~Y) -> Y <= X): Properly invert the comparison -+ for signed ops. -+ -+ 2016-06-14 Richard Biener <rguenther@suse.de> -+ -+ PR tree-optimization/71521 -+ * tree-vrp.c (extract_range_from_binary_expr_1): Guard -+ division int_const_binop against zero divisor. -+ -+ 2016-06-08 Richard Biener <rguenther@suse.de> -+ -+ PR tree-optimization/71452 -+ * tree-ssa.c (non_rewritable_lvalue_p): Make sure that the -+ type used for the SSA rewrite has enough precision to cover -+ the dynamic type of the location. -+ -+ 2016-06-14 Richard Biener <rguenther@suse.de> -+ -+ PR tree-optimization/71522 -+ * tree-ssa.c (non_rewritable_lvalue_p): Do not rewrite non-float -+ copying into float copying. -+ -+2016-07-06 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com> -+ -+ Backport from mainline -+ 2016-07-06 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com> -+ -+ PR target/50739 -+ * config/avr/avr.c (avr_asm_select_section): Strip off -+ SECTION_DECLARED from flags when calling get_section. -+ -+2016-07-05 Pat Haugen <pthaugen@us.ibm.com> -+ -+ Backport from mainline -+ 2016-06-28 Pat Haugen <pthaugen@us.ibm.com> -+ -+ * config/rs6000/rs6000.md ('type' attribute): Add htmsimple/dfp types. -+ ('size' attribute): Add '128'. -+ Include power9.md. -+ (*mov<mode>_hardfloat32, *mov<mode>_hardfloat64, *movdi_internal32, -+ *movdi_internal64, *movdf_update1): Set size attribute to '64'. -+ (add<mode>3, sub<mode>3, mul<mode>3, div<mode>3, sqrt<mode>2, -+ copysign<mode>3, neg<mode>2_hw, abs<mode>2_hw, *nabs<mode>2_hw, -+ *fma<mode>4_hw, *fms<mode>4_hw, *nfma<mode>4_hw, *nfms<mode>4_hw, -+ extend<SFDF:mode><IEEE128:mode>2_hw, trunc<mode>df2_hw, -+ *xscvqp<su>wz_<mode>, *xscvqp<su>dz_<mode>, *xscv<su>dqp_<mode>, -+ *trunc<mode>df2_odd): Set size attribute to '128'. -+ (*cmp<mode>_hw): Change type to veccmp and set size attribute to '128'. -+ * config/rs6000/power6.md (power6-fp): Include dfp type. -+ * config/rs6000/power7.md (power7-fp): Likewise. -+ * config/rs6000/power8.md (power8-fp): Likewise. -+ * config/rs6000/power9.md: New file. -+ * config/rs6000/t-rs6000 (MD_INCLUDES): Add power9.md. -+ * config/rs6000/htm.md (*tabort, *tabort<wd>c, *tabort<wd>ci, -+ *trechkpt, *treclaim, *tsr, *ttest): Change type attribute to -+ htmsimple. -+ * config/rs6000/dfp.md (extendsddd2, truncddsd2, extendddtd2, -+ trunctddd2, adddd3, addtd3, subdd3, subtd3, muldd3, multd3, divdd3, -+ divtd3, *cmpdd_internal1, *cmptd_internal1, floatdidd2, floatditd2, -+ ftruncdd2, fixdddi2, ftrunctd2, fixtddi2, dfp_ddedpd_<mode>, -+ dfp_denbcd_<mode>, dfp_dxex_<mode>, dfp_diex_<mode>, dfp_dscli_<mode>, -+ dfp_dscri_<mode>): Change type attribute to dfp. -+ * config/rs6000/crypto.md (crypto_vshasigma<CR_char>): Change type -+ attribute to vecsimple. -+ * config/rs6000/rs6000.c (power9_cost): Update costs, cache size -+ and prefetch streams. -+ (rs6000_option_override_internal): Remove temporary code setting -+ tuning to power8. Don't set rs6000_sched_groups for power9. -+ (last_scheduled_insn): Change to rtx_insn *. -+ (divide_cnt, vec_load_pendulum): New variables. -+ (rs6000_adjust_cost): Add Power9 to test for store->load separation. -+ (rs6000_issue_rate): Set issue rate for Power9. -+ (is_power9_pairable_vec_type): New. -+ (power9_sched_reorder2): New. -+ (rs6000_sched_reorder2): Call new function for Power9 specific -+ reordering. -+ (insn_must_be_first_in_group): Remove Power9. -+ (insn_must_be_last_in_group): Likewise. -+ (force_new_group): Likewise. -+ (rs6000_sched_init): Fix initialization of last_scheduled_insn. -+ Initialize divide_cnt/vec_load_pendulum. -+ (_rs6000_sched_context, rs6000_init_sched_context, -+ rs6000_set_sched_context): Handle context save/restore of new -+ variables. -+ -+2016-07-05 Pat Haugen <pthaugen@us.ibm.com> -+ -+ Backport from mainline -+ 2016-06-27 Pat Haugen <pthaugen@us.ibm.com> -+ -+ * config/rs6000/rs6000.md ('type' attribute): Add -+ veclogical,veccmpfx,vecexts,vecmove insn types. -+ (*abs<mode>2_fpr, *nabs<mode>2_fpr, *neg<mode>2_fpr, *extendsfdf2_fpr, -+ copysign<mode>3_fcpsgn, trunc<mode>df2_internal1, neg<mode>2_internal, -+ p8_fmrgow_<mode>, pack<mode>): Change type to fpsimple. -+ (*xxsel<mode>, copysign<mode>3_hard, neg<mode>2_hw, abs<mode>2_hw, -+ *nabs<mode>2_hw): Change type to vecmove. -+ (*and<mode>3_internal, *bool<mode>3_internal, *boolc<mode>3_internal, -+ *boolcc<mode>3_internal, *eqv<mode>3_internal, -+ *one_cmpl<mode>3_internal, *ieee_128bit_vsx_neg<mode>2_internal, -+ *ieee_128bit_vsx_abs<mode>2_internal, -+ *ieee_128bit_vsx_nabs<mode>2_internal, extendkftf2, trunctfkf2, -+ *ieee128_mfvsrd_64bit, *ieee128_mfvsrd_32bit, *ieee128_mtvsrd_64bit, -+ *ieee128_mtvsrd_32bit): Change type to veclogical. -+ (mov<mode>_hardfloat, *mov<mode>_hardfloat32, *mov<mode>_hardfloat64, -+ *movdi_internal32, *movdi_internal64): Update insn types. -+ * config/rs6000/vsx.md (*vsx_le_undo_permute_<mode>, -+ vsx_extract_<mode>): Change type to veclogical. -+ (*vsx_xxsel<mode>, *vsx_xxsel<mode>_uns): Change type to vecmove. -+ (vsx_sign_extend_qi_<mode>, *vsx_sign_extend_hi_<mode>, -+ *vsx_sign_extend_si_v2di): Change type to vecexts. -+ * config/rs6000/altivec.md (*altivec_mov<mode>, *altivec_movti): Change -+ type to veclogical. -+ (*altivec_eq<mode>, *altivec_gt<mode>, *altivec_gtu<mode>, -+ *altivec_vcmpequ<VI_char>_p, *altivec_vcmpgts<VI_char>_p, -+ *altivec_vcmpgtu<VI_char>_p): Change type to veccmpfx. -+ (*altivec_vsel<mode>, *altivec_vsel<mode>_uns): Change type to vecmove. -+ * config/rs6000/dfp.md (*negdd2_fpr, *absdd2_fpr, *nabsdd2_fpr, -+ negtd2, *abstd2_fpr, *nabstd2_fpr): Change type to fpsimple. -+ * config/rs6000/40x.md (ppc405-float): Add fpsimple. -+ * config/rs6000/440.md (ppc440-fp): Add fpsimple. -+ * config/rs6000/476.md (ppc476-fp): Add fpsimple. -+ * config/rs6000/601.md (ppc601-fp): Add fpsimple. -+ * config/rs6000/603.md (ppc603-fp): Add fpsimple. -+ * config/rs6000/6xx.md (ppc604-fp): Add fpsimple. -+ * config/rs6000/7xx.md (ppc750-fp): Add fpsimple. -+ (ppc7400-vecsimple): Add veclogical, vecmove, veccmpfx. -+ * config/rs6000/7450.md (ppc7450-fp): Add fpsimple. -+ (ppc7450-vecsimple): Add veclogical, vecmove. -+ (ppc7450-veccmp): Add veccmpfx. -+ * config/rs6000/8540.md (ppc8540_simple_vector): Add veclogical, -+ vecmove. -+ (ppc8540_vector_compare): Add veccmpfx. -+ * config/rs6000/a2.md (ppca2-fp): Add fpsimple. -+ * config/rs6000/cell.md (cell-fp): Add fpsimple. -+ (cell-vecsimple): Add veclogical, vecmove. -+ (cell-veccmp): Add veccmpfx. -+ * config/rs6000/e300c2c3.md (ppce300c3_fp): Add fpsimple. -+ * config/rs6000/e6500.md (e6500_vecsimple): Add veclogical, vecmove, -+ veccmpfx. -+ * config/rs6000/mpc.md (mpccore-fp): Add fpsimple. -+ * config/rs6000/power4.md (power4-fp): Add fpsimple. -+ (power4-vecsimple): Add veclogical, vecmove. -+ (power4-veccmp): Add veccmpfx. -+ * config/rs6000/power5.md (power5-fp): Add fpsimple. -+ * config/rs6000/power6.md (power6-fp): Add fpsimple. -+ (power6-vecsimple): Add veclogical, vecmove. -+ (power6-veccmp): Add veccmpfx. -+ * config/rs6000/power7.md (power7-fp): Add fpsimple. -+ (power7-vecsimple): Add veclogical, vecmove, veccmpfx. -+ * config/rs6000/power8.md (power8-fp): Add fpsimple. -+ (power8-vecsimple): Add veclogical, vecmove, veccmpfx. -+ * config/rs6000/rs64.md (rs64a-fp): Add fpsimple. -+ * config/rs6000/titan.md (titan_fp): Add fpsimple. -+ * config/rs6000/xfpu.md (fp-default, fp-addsub-s, fp-addsub-d): Add -+ fpsimple. -+ * config/rs6000/rs6000.c (rs6000_adjust_cost): Add TYPE_FPSIMPLE. -+ -+2016-07-05 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ Backport from mainline r237391 -+ 2016-06-13 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ * config/rs6000/rs6000.h (RS6000_BTM_COMMON): Add the -+ RS6000_BTM_MODULO flag into the set of flags that are considered -+ to be part of the common configuration. -+ -+2016-07-04 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71739 -+ * tree.c (attribute_value_equal): Use get_attribute_name instead of -+ directly using TREE_PURPOSE. -+ -+2016-07-04 Segher Boessenkool <segher@kernel.crashing.org> -+ -+ Backport from mainline -+ 2016-06-27 Segher Boessenkool <segher@kernel.crashing.org> -+ -+ PR target/71670 -+ * config/rs6000/rs6000.md (ashdi3_extswsli_dot): Use -+ gen_ashdi3_extswsli_dot2 instead of gen_ashdi3_extswsli_dot. -+ -+2016-07-02 Jakub Jelinek <jakub@redhat.com> -+ -+ Backported from mainline -+ 2016-06-28 Jakub Jelinek <jakub@redhat.com> -+ -+ PR middle-end/71626 -+ * config/i386/i386.c (ix86_expand_vector_move): For SUBREG of -+ a constant, force its SUBREG_REG into memory or register instead -+ of whole op1. -+ -+ 2016-06-20 Jakub Jelinek <jakub@redhat.com> -+ -+ PR target/71559 -+ * config/i386/i386.c (ix86_fp_cmp_code_to_pcmp_immediate): Fix up -+ returned values and add UN*/LTGT/*ORDERED cases with values matching -+ D operand modifier on vcmp for AVX. -+ -+2016-07-01 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ Backport from trunk r237659 -+ 2016-06-21 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ * config/rs6000/rs6000.h: Add conditional preprocessing directives -+ to disable Power9-specific compiler features if HAVE_AS_POWER9 is -+ not defined. -+ -+2016-07-01 Peter Bergner <bergner@vnet.ibm.com> -+ -+ Backport from trunk -+ 2016-06-27 Peter Bergner <bergner@vnet.ibm.com> -+ -+ PR target/71656 -+ * config/rs6000/rs6000-cpus.def (ISA_3_0_MASKS_SERVER): Add -+ OPTION_MASK_P9_DFORM_VECTOR. -+ * config/rs6000/rs6000.c (rs6000_option_override_internal): Do not -+ disable -mpower9-dform-vector when using reload. -+ (quad_address_p): Remove 'gpr_p' argument and all associated code. -+ New 'strict' argument. Update all callers. Add strict addressing -+ support. -+ (rs6000_legitimate_offset_address_p): Remove call to -+ virtual_stack_registers_memory_p. -+ (rs6000_legitimize_reload_address): Add quad address support. -+ (rs6000_legitimate_address_p): Move call to quad_address_p above -+ call to virtual_stack_registers_memory_p. Adjust quad_address_p args -+ to account for new strict usage. -+ (rs6000_output_move_128bit): Adjust quad_address_p args to account -+ for new strict usage. -+ * config/rs6000/predicates.md (quad_memory_operand): Likewise. -+ -+2016-07-01 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-06-24 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ * config/rs6000/rs6000-builtin.def (BU_FLOAT128_2): New #define. -+ (BU_FLOAT128_1): Likewise. -+ (FABSQ): Likewise. -+ (COPYSIGNQ): Likewise. -+ (RS6000_BUILTIN_NANQ): Likewise. -+ (RS6000_BUILTIN_NANSQ): Likewise. -+ (RS6000_BUILTIN_INFQ): Likewise. -+ (RS6000_BUILTIN_HUGE_VALQ): Likewise. -+ * config/rs6000/rs6000.c (rs6000_fold_builtin): New prototype. -+ (TARGET_FOLD_BUILTIN): New #define. -+ (rs6000_builtin_mask_calculate): Add TARGET_FLOAT128 entry. -+ (rs6000_invalid_builtin): Add handling for RS6000_BTM_FLOAT128. -+ (rs6000_fold_builtin): New target hook implementation, handling -+ folding of 128-bit NaNs and infinities. -+ (rs6000_init_builtins): Initialize const_str_type_node; ensure all -+ entries are filled in to avoid problems during bootstrap -+ self-test; define builtins for 128-bit NaNs and infinities. -+ (rs6000_opt_mask): Add entry for float128. -+ * config/rs6000/rs6000.h (RS6000_BTM_FLOAT128): New #define. -+ (RS6000_BTM_COMMON): Include RS6000_BTM_FLOAT128. -+ (rs6000_builtin_type_index): Add RS6000_BTI_const_str. -+ (const_str_type_node): New #define. -+ * config/rs6000/rs6000.md (copysign<mode>3 for IEEE128): Convert -+ to a define_expand that dispatches to either copysign<mode>3_soft -+ or copysign<mode>3_hard. -+ (copysign<mode>3_hard): Rename from copysign<mode>3. -+ (copysign<mode>3_soft): New define_insn. -+ * doc/extend.texi: Document new builtins. -+ -+2016-07-01 Peter Bergner <bergner@vnet.ibm.com> -+ -+ Backport from trunk -+ 2016-07-01 Peter Bergner <bergner@vnet.ibm.com> -+ -+ PR target/71698 -+ * config/rs6000/rs6000.c (rs6000_secondary_reload_simple_move): Disallow -+ TDmode values. -+ -+2016-07-01 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ Backport from trunk r236992 -+ 2016-06-01 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ * config/rs6000/altivec.h (vec_slv): New macro. -+ (vec_srv): New macro. -+ * config/rs6000/altivec.md (UNSPEC_VSLV): New value. -+ (UNSPEC_VSRV): New value. -+ (vslv): New insn. -+ (vsrv): New insn. -+ * config/rs6000/rs6000-builtin.def (vslv): New builtin definition. -+ (vsrv): New builtin definition. -+ * config/rs6000/rs6000-c.c (P9V_BUILTIN_VSLV): Macro expansion to -+ define argument types for new builtin. -+ (P9V_BUILTIN_VSRV): Macro expansion to define argument types for -+ new builtin. -+ * doc/extend.texi: Document the new vec_vslv and vec_srv built-in -+ functions. -+ -+2016-07-01 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * config/arm/arm.c (arm_function_ok_for_sibcall): Add another check -+ for NULL decl. -+ -+2016-06-30 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ Backport from trunk r237390 -+ 2016-06-13 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ * config/rs6000/altivec.h (vec_absd): New macro for vector absolute -+ difference unsigned. -+ (vec_absdb): New macro for vector absolute difference unsigned -+ byte. -+ (vec_absdh): New macro for vector absolute difference unsigned -+ half-word. -+ (vec_absdw): New macro for vector absolute difference unsigned word. -+ * config/rs6000/altivec.md (UNSPEC_VADU): New value. -+ (vadu<mode>3): New insn. -+ (*p9_vadu<mode>3): New insn. -+ * config/rs6000/rs6000-builtin.def (vadub): New built-in -+ definition. -+ (vaduh): New built-in definition. -+ (vaduw): New built-in definition. -+ (vadu): New overloaded built-in definition. -+ (vadub): New overloaded built-in definition. -+ (vaduh): New overloaded built-in definition. -+ (vaduw): New overloaded built-in definition. -+ * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Add -+ overloaded vector absolute difference unsigned functions. -+ * doc/extend.texi (PowerPC AltiVec Built-in Functions): Document -+ the ISA 3.0 vector absolute difference unsigned built-in functions. -+ -+2016-06-30 David Malcolm <dmalcolm@redhat.com> -+ -+ Backport from trunk r237880. -+ 2016-06-30 David Malcolm <dmalcolm@redhat.com> -+ -+ PR driver/71651 -+ * gcc.c (driver::build_option_suggestions): Pass "option" to -+ add_misspelling_candidates. -+ * opts-common.c (add_misspelling_candidates): Add "option" param; -+ use it to avoid adding negated forms for options marked with -+ RejectNegative. -+ * opts.h (add_misspelling_candidates): Add "option" param. -+ -+2016-06-30 Jakub Jelinek <jakub@redhat.com> -+ -+ PR middle-end/71693 -+ * fold-const.c (fold_binary_loc) <case RROTATE_EXPR>: Cast -+ TREE_OPERAND (arg0, 0) and TREE_OPERAND (arg0, 1) to type -+ first when permuting bitwise operation with rotate. Cast -+ TREE_OPERAND (arg0, 0) to type when cancelling two rotations. -+ -+2016-06-30 Martin Liska <mliska@suse.cz> -+ -+ Parting backport from mainline -+ 2016-06-29 Martin Liska <mliska@suse.cz> -+ -+ * ipa-inline-transform.c (inline_call): Remove unnecessary call -+ of build_optimization_node. -+ -+2016-06-29 Eric Botcazou <ebotcazou@adacore.com> -+ -+ Backport from mainline -+ 2016-06-09 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * df-problems.c (df_note_bb_compute): Guard use of DF_INSN_INFO_GET. -+ -+2016-06-27 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ Back port from trunk -+ 2016-06-21 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ * stor-layout.c (layout_type): Move setting complex MODE to -+ layout_type, instead of setting it ahead of time by the caller. -+ -+ Back port from trunk -+ 2016-05-11 Alan Modra <amodra@gmail.com> -+ -+ * config/rs6000/rs6000.c (is_complex_IBM_long_double, -+ abi_v4_pass_in_fpr): New functions. -+ (rs6000_function_arg_boundary): Exclude complex IBM long double -+ from 64-bit alignment when ABI_V4. -+ (rs6000_function_arg, rs6000_function_arg_advance_1, -+ rs6000_gimplify_va_arg): Use abi_v4_pass_in_fpr. -+ -+ Back port from trunk -+ 2016-05-02 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ * machmode.h (mode_complex): Add support to give the complex mode -+ for a given mode. -+ (GET_MODE_COMPLEX_MODE): Likewise. -+ * stor-layout.c (layout_type): For COMPLEX_TYPE, use the mode -+ stored by build_complex_type and gfc_build_complex_type instead of -+ trying to figure out the appropriate mode based on the size. Raise -+ an assertion error, if the type was not set. -+ * genmodes.c (struct mode_data): Add field for the complex type of -+ the given type. -+ (blank_mode): Likewise. -+ (make_complex_modes): Remember the complex mode created in the -+ base type. -+ (emit_mode_complex): Write out the mode_complex array to map a -+ type mode to the complex version. -+ (emit_insn_modes_c): Likewise. -+ * tree.c (build_complex_type): Set the complex type to use before -+ calling layout_type. -+ * config/rs6000/rs6000.c (rs6000_hard_regno_nregs_internal): Add -+ support for __float128 complex datatypes. -+ (rs6000_hard_regno_mode_ok): Likewise. -+ (rs6000_setup_reg_addr_masks): Likewise. -+ (rs6000_complex_function_value): Likewise. -+ * config/rs6000/rs6000.h (FLOAT128_IEEE_P): Likewise. -+ __float128 and __ibm128 complex. -+ (FLOAT128_IBM_P): Likewise. -+ (ALTIVEC_ARG_MAX_RETURN): Likewise. -+ * doc/extend.texi (Additional Floating Types): Document that -+ -mfloat128 must be used to enable __float128. Document complex -+ __float128 and __ibm128 support. -+ -+2016-06-24 Jakub Jelinek <jakub@redhat.com> -+ -+ PR tree-optimization/71647 -+ * omp-low.c (lower_rec_input_clauses): Convert -+ omp_clause_aligned_alignment (c) to size_type_node for the -+ last argument of __builtin_assume_aligned. -+ -+2016-06-22 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * function.c (assign_parm_setup_reg): Prevent sharing in another case. -+ -+2016-06-21 Georg-Johann Lay <avr@gjlay.de> -+ -+ Backport from 2016-06-21 trunk r237639. -+ -+ PR target/30417 -+ * config/avr/gen-avr-mmcu-specs.c (print_mcu): -+ [*link_data_start]: Wrap -Tdata into %{!Tdata:...}. -+ [*link_text_start]: Wrap -Ttext into %{!Ttext:...}. -+ -+2016-06-21 Georg-Johann Lay <avr@gjlay.de> -+ -+ PR target/71103 -+ * config/avr/avr.md (movqi): Only handle loading subreg:qi of -+ constant addresses if can_create_pseudo_p. -+ -+2016-06-21 Jakub Jelinek <jakub@redhat.com> -+ -+ PR tree-optimization/71588 -+ * tree-ssa-strlen.c (valid_builtin_call): New function. -+ (adjust_last_stmt, handle_builtin_memset, strlen_optimize_stmt): Use -+ it. -+ -+ Backported from mainline -+ 2016-06-20 Jakub Jelinek <jakub@redhat.com> -+ -+ PR middle-end/71581 -+ * tree-ssa-uninit.c (warn_uninit): If EXPR and VAR are NULL, -+ see if T isn't anonymous SSA_NAME with COMPLEX_EXPR created -+ for conversion of scalar user var to complex type and use the -+ underlying SSA_NAME_VAR in that case. If EXPR is still NULL, -+ punt. -+ -+ 2016-06-16 Jakub Jelinek <jakub@redhat.com> -+ -+ * gimplify.c (gimplify_scan_omp_clauses): Handle COMPONENT_REFs -+ with base of reference to struct. -+ -+2016-06-20 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ Backport from mainline r237484. -+ 2016-06-15 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ PR middle-end/71529 -+ * ipa-chkp.c (chkp_build_instrumented_fndecl): Fix -+ DECL_CONTEXT for copied arguments. -+ -+2016-06-20 Georg-Johann Lay <avr@gjlay.de> -+ Pitchumani Sivanupandi <pitchumani.s@atmel.com> -+ -+ Backport from 2016-06-20 trunk r237589, r236558. -+ -+ PR target/71103 -+ * config/avr/avr.md (movqi): Handle loading subreg:qi (const, -+ symbol_ref,label_ref). -+ -+2016-06-16 Jakub Jelinek <jakub@redhat.com> -+ -+ PR target/71554 -+ * config/i386/i386.md (setcc + movzbl peephole2): Use reg_set_p. -+ (setcc + and peephole2): Likewise. -+ -+2016-06-15 Andreas Tobler <andreast@gcc.gnu.org> -+ -+ Backported from mainline -+ 2016-06-14 Andreas Tobler <andreast@gcc.gnu.org> -+ -+ * config/arm/freebsd.h: Only enable unaligned access for armv6 on -+ FreeBSD 11 and above. -+ -+2016-06-15 Ilya Verbin <ilya.verbin@intel.com> -+ -+ Backport from mainline -+ 2016-04-30 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> -+ -+ * config/darwin.h (LINK_COMMAND_SPEC_A): Handle -fcilkplus. -+ -+2016-06-14 Jakub Jelinek <jakub@redhat.com> -+ -+ Backported from mainline -+ 2016-06-10 Jakub Jelinek <jakub@redhat.com> -+ -+ PR middle-end/71494 -+ * tree-nested.c (convert_nonlocal_reference_stmt): For GIMPLE_GOTO -+ without LABEL_DECL, set *handled_ops_p to false instead of true. -+ -+ 2016-06-08 Jakub Jelinek <jakub@redhat.com> -+ Richard Biener <rguenther@suse.de> -+ -+ PR c++/71448 -+ * fold-const.c (fold_comparison): Handle CONSTANT_CLASS_P (base0) -+ the same as DECL_P (base0) for indirect_base0. Use equality_code -+ in one further place. -+ -+ 2016-06-04 Jakub Jelinek <jakub@redhat.com> -+ -+ PR tree-optimization/71405 -+ * tree-ssa.c (execute_update_addresses_taken): For clobber with -+ incompatible type, build a new clobber with the right type instead -+ of building a VIEW_CONVERT_EXPR around it. -+ -+2016-06-13 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * tree-ssa-sccvn.c (vn_reference_lookup_3): Use a uniform test and -+ update shared_lookup_references only once after changing operands. -+ -+2016-06-13 Richard Biener <rguenther@suse.de> -+ -+ PR tree-optimization/71505 -+ * tree-vect-data-refs.c (vect_analyze_data_ref_accesses): Make -+ assert match comment. -+ -+2016-06-13 Andreas Krebbel <krebbel@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-06-13 Andreas Krebbel <krebbel@linux.vnet.ibm.com> -+ -+ PR target/71379 -+ * config/s390/s390.c (s390_expand_builtin): Increase MAX_ARGS by -+ one. -+ -+2016-06-10 Thomas Schwinge <thomas@codesourcery.com> -+ -+ PR middle-end/71373 -+ Backport from trunk r237291: -+ * tree-nested.c (convert_nonlocal_omp_clauses) -+ (convert_local_omp_clauses): Handle OMP_CLAUSE_ASYNC, -+ OMP_CLAUSE_WAIT, OMP_CLAUSE_INDEPENDENT, OMP_CLAUSE_AUTO, -+ OMP_CLAUSE__CACHE_, OMP_CLAUSE_TILE. -+ -+ Backport from trunk r237291: -+ * gimplify.c (gimplify_adjust_omp_clauses): Discard -+ OMP_CLAUSE_TILE. -+ * omp-low.c (scan_sharing_clauses): Don't expect OMP_CLAUSE_TILE. -+ -+ Backport from trunk r237290: -+ * omp-low.c (scan_sharing_clauses): Don't expect -+ OMP_CLAUSE__CACHE_. -+ -+ Backport trunk r235964: -+ 2016-05-06 Nathan Sidwell <nathan@codesourcery.com> -+ -+ * gimple.c (gimple_call_same_target_p): Unique functions are eq. -+ * tree-ssa-tail-merge.c (same_succ::equal): Check pointer eq -+ equality first. -+ -+2016-06-09 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ Back port from trunk -+ 2016-05-31 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ * config/rs6000/vsx.md (vsx_splat_<mode>, V2DI/V2DF): Simplify -+ alternatives, eliminating preferred register class. Add support -+ for the MTVSRDD instruction in ISA 3.0. -+ (vsx_splat_v4si_internal): Use splat_input_operand instead of -+ reg_or_indexed_operand. -+ (vsx_splat_v4sf_internal): Likewise. -+ -+ Back port from trunk -+ 2016-05-31 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ PR target/71186 -+ * config/rs6000/vsx.md (xxspltib_<mode>_nosplit): Add alternatives -+ for loading up all 0's or all 1's. -+ -+ Back port from trunk -+ 2016-05-18 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ PR target/70915 -+ * config/rs6000/constraints.md (wE constraint): New constraint -+ for a vector constant that can be loaded with XXSPLTIB. -+ (wM constraint): New constraint for a vector constant of a 1's. -+ (wS constraint): New constraint for a vector constant that can be -+ loaded with XXSPLTIB and a vector sign extend instruction. -+ * config/rs6000/predicates.md (xxspltib_constant_split): New -+ predicates for wE/wS constraints. -+ (xxspltib_constant_nosplit): Likewise. -+ (easy_vector_constant): Add support for constants that can be -+ loaded via XXSPLTIB. -+ (splat_input_operand): Add support for ISA 3.0 word splat operations. -+ * config/rs6000/rs6000.c (xxspltib_constant_p): New function to -+ return if a constant can be loaded with the ISA 3.0 XXSPLTIB -+ instruction and possibly with a sign extension. -+ (output_vec_const_move): Add support for XXSPLTIB. If we are -+ loading up 0/-1 into Altivec registers, prefer using VSPLTISW -+ instead of XXLXOR/XXLORC. -+ (rs6000_expand_vector_init): Add support for ISA 3.0 word splat -+ operations. -+ (rs6000_legitimize_reload_address): Likewise. -+ (rs6000_output_move_128bit): Use output_vec_const_move to emit -+ constants. -+ * config/rs6000/vsx.md (VSX_M): Add TImode (if -mvsx-timode) and -+ combine VSX_M and VSX_M2 into one iterator. -+ (VSX_M2): Likewise. -+ (VSINT_84): New iterators for loading constants with XXSPLTIB. -+ (VSINT_842): Likewise. -+ (UNSPEC_VSX_SIGN_EXTEND): New UNSPEC. -+ (xxspltib_v16qi): New insns to load up constants with the ISA 3.0 -+ XXSPLTIB instruction. -+ (xxspltib_<mode>_nosplit): Likewise. -+ (xxspltib_<mode>_split): New insn to load up constants with -+ XXSPLTIB and a sign extend instruction. -+ (vsx_mov<mode>): Replace single move that handled all vector types -+ with separate 32-bit and 64-bit moves. Combine the movti_<bit> -+ moves (when -mvsx-timode is in effect) into the main vector -+ moves. Eliminate separate moves for <VSr> <VSa>, where the -+ preferred register class (<VSr>) is listed first, and the -+ secondary register class (<VSa>) is listed second with a '?' to -+ discourage use. Prefer loading 0/-1 in any VSX register for ISA -+ 3.0, and Altivec registers for ISA 2.06/2.07 (PR target/70915) so -+ that if the register was involved in a slow operation, the -+ clear/set operation does not wait for the slow operation to -+ finish. Adjust the length attributes for 32-bit mode. Use -+ rs6000_output_move_128bit and drop the use of the string -+ instructions for 32-bit movti when -mvsx-timode is in effect. Use -+ spacing so that the alternatives and attributes don't generate -+ long lines, and put things in columns, so that it is easier to -+ match up the operands and attributes with the insn alternatives. -+ (vsx_mov<mode>_64bit): Likewise. -+ (vsx_mov<mode>_32bit): Likewise. -+ (vsx_movti_64bit): Fold movti into normal vector moves. -+ (vsx_movti_32bit): Likewise. -+ (vsx_splat_<mode>, V4SI/V4SF modes): Add support for ISA 3.0 word -+ splat instructions. -+ (vsx_splat_v4si_internal): Likewise. -+ (vsx_splat_v4sf_internal): Likewise. -+ (vector fusion peepholes): Use VSX_M instead of VSX_M2. -+ (vsx_sign_extend_qi_<mode>): New ISA 3.0 instructions to sign -+ extend vector elements. -+ (vsx_sign_extend_hi_<mode>): Likewise. -+ (vsx_sign_extend_si_v2di): Likewise. -+ * config/rs6000/rs6000-protos.h (xxspltib_constant_p): Add -+ declaration. -+ * doc/md.texi (PowerPC constraints): Document the wE, wM, and wS -+ constraints. Add trailing period to wL documentation. -+ -+2016-06-08 Jose E. Marchesi <jose.marchesi@oracle.com> -+ -+ Backport from mainline -+ 2016-06-08 Jose E. Marchesi <jose.marchesi@oracle.com> -+ -+ * config/sparc/driver-sparc.c (cpu_names): Fix the entry for the -+ SPARC-M7 and add an entry for SPARC-S7 cpus (Sonoma). -+ -+2016-06-08 Eric Botcazou <ebotcazou@adacore.com> -+ -+ Backport from mainline -+ 2016-06-06 Jose E. Marchesi <jose.marchesi@oracle.com> -+ -+ * config/sparc/sparc.md (cpu): Add niagara7 cpu type. -+ Include the M7 SPARC DFA scheduler. -+ New attribute v3pipe. -+ Annotate insns with v3pipe where appropriate. -+ Define cpu_feature vis4. -+ Add lzd instruction type and set it on clzdi_sp64 and clzsi_sp64. -+ Add (V8QI "8") to vbits. -+ Add insns {add,sub}v8qi3 -+ Add insns ss{add,sub}v8qi3 -+ Add insns us{add,sub}{v8qi,v4hi}3 -+ Add insns {min,max}{v8qi,v4hi,v2si}3 -+ Add insns {minu,maxu}{v8qi,v4hi,v2si}3 -+ Add insns fpcmp{le,gt,ule,ug,ule,ugt}{8,16,32}_vis. -+ * config/sparc/niagara4.md: Add a comment explaining the -+ discrepancy between the documented latenty numbers and the -+ implemented ones. -+ * config/sparc/niagara7.md: New file. -+ * configure.ac (HAVE_AS_SPARC5_VIS4): Define if the assembler -+ supports SPARC5 and VIS 4.0 instructions. -+ * configure: Regenerate. -+ * config.in: Likewise. -+ * config.gcc: niagara7 is a supported cpu in sparc*-*-* targets. -+ * config/sparc/sol2.h (ASM_CPU32_DEFAUILT_SPEC): Set for -+ TARGET_CPU_niagara7. -+ (ASM_CPU64_DEFAULT_SPEC): Likewise. -+ (CPP_CPU_SPEC): Handle niagara7. -+ (ASM_CPU_SPEC): Likewise. -+ * config/sparc/sparc-opts.h (processor_type): Add -+ PROCESSOR_NIAGARA7. -+ (mvis4): New option. -+ * config/sparc/sparc.h (TARGET_CPU_niagara7): Define. -+ (AS_NIAGARA7_FLAG): Define. -+ (ASM_CPU64_DEFAULT_SPEC): Set for niagara7. -+ (CPP_CPU64_DEFAULT_SPEC): Likewise. -+ (CPP_CPU_SPEC): Handle niagara7. -+ (ASM_CPU_SPEC): Likewise. -+ * config/sparc/sparc.c (niagara7_costs): Define. -+ (sparc_option_override): Handle niagara7 and adjust cache-related -+ parameters with better values for niagara cpus. Also support VIS4. -+ (sparc32_initialize_trampoline): Likewise. -+ (sparc_use_sched_lookahead): Likewise. -+ (sparc_issue_rate): Likewise. -+ (sparc_register_move_cost): Likewise. -+ (dump_target_flag_bits): Support VIS4. -+ (sparc_vis_init_builtins): Likewise. -+ (sparc_builtins): Likewise. -+ * config/sparc/sparc-c.c (sparc_target_macros): Define __VIS__ for -+ VIS4 4.0. -+ * config/sparc/driver-sparc.c (cpu_names): Add SPARC-M7 and -+ UltraSparc M7. -+ * config/sparc/sparc.opt (sparc_processor_type): New value -+ niagara7. -+ * config/sparc/visintrin.h (__attribute__): Prototypes for the -+ VIS4 builtins. -+ * doc/invoke.texi (SPARC Options): Document -mcpu=niagara7 and -+ -mvis4. -+ * doc/extend.texi (SPARC VIS Built-in Functions): Document the -+ VIS4 builtins. -+ -+ 2016-05-30 Jose E. Marchesi <jose.marchesi@oracle.com> -+ -+ * config.gcc (sparc*-*-*): Support cpu_32, cpu_64, tune_32 and -+ tune_64. -+ * doc/install.texi (--with-cpu-32, --with-cpu-64): Document -+ support on SPARC. -+ * config/sparc/linux64.h (OPTION_DEFAULT_SPECS): Add entries for -+ cpu_32, cpu_64, tune_32 and tune_64. -+ * config/sparc/sol2.h (OPTION_DEFAULT_SPECS): Likewise. -+ -+2016-06-08 Ilya Verbin <ilya.verbin@intel.com> -+ -+ Backport from mainline -+ 2016-05-25 Ilya Verbin <ilya.verbin@intel.com> -+ -+ * config/i386/i386-builtin-types.def: Add V16SI_FTYPE_V16SF, -+ V8DF_FTYPE_V8DF_ROUND, V16SF_FTYPE_V16SF_ROUND, V16SI_FTYPE_V16SF_ROUND. -+ * config/i386/i386.c (enum ix86_builtins): Add -+ IX86_BUILTIN_CVTPS2DQ512_MASK, IX86_BUILTIN_FLOORPS512, -+ IX86_BUILTIN_FLOORPD512, IX86_BUILTIN_CEILPS512, IX86_BUILTIN_CEILPD512, -+ IX86_BUILTIN_TRUNCPS512, IX86_BUILTIN_TRUNCPD512, -+ IX86_BUILTIN_CVTPS2DQ512, IX86_BUILTIN_VEC_PACK_SFIX512, -+ IX86_BUILTIN_FLOORPS_SFIX512, IX86_BUILTIN_CEILPS_SFIX512, -+ IX86_BUILTIN_ROUNDPS_AZ_SFIX512. -+ (builtin_description bdesc_args): Add __builtin_ia32_floorps512, -+ __builtin_ia32_ceilps512, __builtin_ia32_truncps512, -+ __builtin_ia32_floorpd512, __builtin_ia32_ceilpd512, -+ __builtin_ia32_truncpd512, __builtin_ia32_cvtps2dq512, -+ __builtin_ia32_vec_pack_sfix512, __builtin_ia32_roundps_az_sfix512, -+ __builtin_ia32_floorps_sfix512, __builtin_ia32_ceilps_sfix512. -+ Change IX86_BUILTIN_CVTPS2DQ512 to IX86_BUILTIN_CVTPS2DQ512_MASK for -+ __builtin_ia32_cvtps2dq512_mask. -+ (ix86_expand_args_builtin): Handle V8DF_FTYPE_V8DF_ROUND, -+ V16SF_FTYPE_V16SF_ROUND, V16SI_FTYPE_V16SF_ROUND, V16SI_FTYPE_V16SF. -+ (ix86_builtin_vectorized_function): Handle builtins mentioned above. -+ * config/i386/sse.md -+ (<mask_codefor>avx512f_fix_notruncv16sfv16si<mask_name><round_name>): -+ Rename to ... -+ (avx512f_fix_notruncv16sfv16si<mask_name><round_name>): ... this. -+ (<mask_codefor>avx512f_cvtpd2dq512<mask_name><round_name>): Rename -+ to ... -+ (avx512f_cvtpd2dq512<mask_name><round_name>): ... this. -+ (avx512f_vec_pack_sfix_v8df): New define_expand. -+ (avx512f_roundpd512): Rename to ... -+ (avx512f_round<castmode>512): ... this. Change iterator. -+ (avx512f_roundps512_sfix): New define_expand. -+ (round<mode>2_sfix): Change iterator. -+ -+2016-06-07 Peter Bergner <bergner@vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-06-07 Peter Bergner <bergner@vnet.ibm.com> -+ -+ * doc/invoke.texi (RS/6000 and PowerPC Options): Document -mhtm and -+ -mno-htm. -+ -+2016-06-07 Uros Bizjak <ubizjak@gmail.com> -+ -+ PR target/71389 -+ * config/i386/i386.c (ix86_avx256_split_vector_move_misalign): -+ Copy op1 RTX to avoid invalid sharing. -+ (ix86_expand_vector_move_misalign): Ditto. -+ -+2016-06-06 Jakub Jelinek <jakub@redhat.com> -+ -+ PR tree-optimization/71259 -+ * tree-vect-slp.c (vect_get_constant_vectors): For -+ VECTOR_BOOLEAN_TYPE_P, return all ones constant instead of -+ one for constant op, and use COND_EXPR for non-constant. -+ -+2016-06-06 Kyrylo Tkachov <kyrylo.tkachov@arm.com> -+ -+ Backport from trunk -+ 2016-06-02 Kyrylo Tkachov <kyrylo.tkachov@arm.com> -+ -+ PR target/70830 -+ * config/arm/arm.c (arm_output_multireg_pop): Guard "pop" on update. -+ -+2016-06-05 Uros Bizjak <ubizjak@gmail.com> -+ -+ Backport from mainline -+ 2016-06-01 Uros Bizjak <ubizjak@gmail.com> -+ Jocelyn Mayer <l_indien@magic.fr> -+ -+ PR target/67310 -+ * config/i386/driver-i386.c (host_detect_local_cpu): Correctly -+ detect processor family for signature_CENTAUR_ebx. -+ <case PROCESSOR_I486>: Pass c3, winchip2 or winchip-c6 for -+ signature_CENTAUR_ebx. -+ <case PROCESSOR _PENTIUMPRO>: Pass c3-2 for signature_CENTAUR_ebx. -+ <default>: Pass x86-64 for has_longmode. -+ -+2016-06-03 Jakub Jelinek <jakub@redhat.com> -+ -+ PR middle-end/71387 -+ * cgraph.c (cgraph_edge::redirect_call_stmt_to_callee): If redirecting -+ to noreturn e->callee->decl that has void return type and void -+ arguments, adjust gimple_call_fntype and remove lhs even if it had -+ previously addressable type. -+ -+2016-06-02 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ Back port from trunk -+ 2016-05-26 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ * config/rs6000/rs6000.c (rs6000_emit_p9_fp_minmax): New function -+ for ISA 3.0 min/max support. -+ (rs6000_emit_p9_fp_cmove): New function for ISA 3.0 floating point -+ conditional move support. -+ (rs6000_emit_cmove): Call rs6000_emit_p9_fp_minmax and -+ rs6000_emit_p9_fp_cmove if the ISA 3.0 instructions are -+ available. -+ * config/rs6000/rs6000.md (SFDF2): New iterator to allow doing -+ conditional moves where the comparison type is different from move -+ type. -+ (fp_minmax): New code iterator for smin/smax. -+ (minmax): New code attributes for min/max. -+ (SMINMAX): Likewise. -+ (smax<mode>3): Combine min, max insns into one insn using the -+ fp_minmax code iterator. Add support for ISA 3.0 min/max -+ instructions that don't need -ffast-math. -+ (s<minmax><mode>3): Likewise. -+ (smax<mode>3_vsx): Likewise. -+ (smin<mode>3): Likewise. -+ (s<minmax><mode>3_vsx): Likewise. -+ (smin<mode>3_vsx): Likewise. -+ (pre-VSX min/max splitters): Likewise. -+ (s<minmax><mode>3_fpr): Likewise. -+ (movsfcc): Rewrite floating point conditional moves to combine -+ SFmode/DFmode into a single insn. -+ (mov<mode>cc): Likewise. -+ (movdfcc): Likewise. -+ (fselsfsf4): Combine FSEL cases into a single insn, using SFDF and -+ SFDF2 iterators to handle all combinations. -+ (fseldfsf4): Likewise. -+ (fsel<SFDF:mode><SFDF2:mode>4): Likewise. -+ (fseldfdf4): Likewise. -+ (fselsfdf4): Likewise. -+ (mov<SFDF:mode><SFDF2:mode>cc_p9): Add support for the ISA 3.0 -+ comparison instructions that set a 0/-1 mask, and use it for -+ floating point conditional move via XXSEL. -+ (fpmask<mode>): Likewise. -+ (xxsel<mode>): Likewise. -+ * config/rs6000/predicates.md (min_max_operator): Delete, no -+ longer used. -+ (fpmask_comparison_operaton): New insn for ISA 3.0 comparison -+ instructions that generate a 0/-1 mask for use with XXSEL. -+ * config/rs6000/rs6000.h (TARGET_MINMAX_SF): New helper macros to -+ say whether floating point min/max is available, either through -+ FSEL, ISA 2.06 min/max, and ISA 3.0 min/max instrucitons. -+ (TARGET_MINMAX_DF): Likewise. -+ -+ Back port from trunk -+ 2016-05-18 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ * config/rs6000/predicate.md (all_ones_constant): New predicate -+ for vector constant with all 1's set. -+ -+2016-06-02 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ Back port from trunk -+ 2016-05-19 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ * config/rs6000/altivec.md (UNSPEC_DARN): New unspec constant. -+ (UNSPEC_DARN_32): New unspec constant. -+ (UNSPEC_DARN_RAW): New unspec constant. -+ (darn_32): New instruction. -+ (darn_raw): New instruction. -+ (darn): New instruction. -+ * config/rs6000/rs6000-builtin.def (RS6000_BUILTIN_0): Add -+ support and documentation for this macro. -+ (BU_P9_MISC_1): New macro definition. -+ (BU_P9_64BIT_MISC_0): New macro definition. -+ (BU_P9_MISC_0): New macro definition. -+ (darn_32): New builtin definition. -+ (darn_raw): New builtin definition. -+ (darn): New builtin definition. -+ * config/rs6000/rs6000.c: Add #define RS6000_BUILTIN_0 and #undef -+ RS6000_BUILTIN_0 directives to surround each occurrence of -+ #include "rs6000-builtin.def". -+ (rs6000_builtin_mask_calculate): Add in the RS6000_BTM_MODULO and -+ RS6000_BTM_64BIT flags to the returned mask, depending on -+ configuration. -+ (def_builtin): Correct an error in the assignments made to the -+ debugging variable attr_string. -+ (rs6000_expand_builtin): Add support for no-operand built-in -+ functions. -+ (builtin_function_type): Remove fatal_error assertion that is no -+ longer valid. -+ (rs6000_common_init_builtins): Add support for no-operand built-in -+ functions. -+ * config/rs6000/rs6000.h (RS6000_BTM_MODULO): New macro -+ definition. -+ (RS6000_BTM_PURE): Enhance comment to clarify intent of this flag -+ definition. -+ (RS6000_BTM_64BIT): New macro definition. -+ * doc/extend.texi: Document __builtin_darn (void), -+ __builtin_darn_raw (void), and __builtin_darn_32 (void) built-in -+ functions. -+ -+2016-06-01 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ Back port from trunk -+ 2016-05-23 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ PR target/71201 -+ * config/rs6000/altivec.md (altivec_vperm_<mode>_internal): Drop -+ ISA 3.0 xxperm fusion alternative. -+ (altivec_vperm_v8hiv16qi): Likewise. -+ (altivec_vperm_<mode>_uns_internal): Likewise. -+ (vperm_v8hiv4si): Likewise. -+ (vperm_v16qiv8hi): Likewise. -+ -+ Back port from trunk -+ 2016-05-23 Michael Meissner <meissner@linux.vnet.ibm.com> -+ Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ * config/rs6000/rs6000.c (rs6000_expand_vector_set): Generate -+ vpermr/xxpermr on ISA 3.0. -+ (altivec_expand_vec_perm_le): Likewise. -+ * config/rs6000/altivec.md (UNSPEC_VPERMR): New unspec. -+ (altivec_vpermr_<mode>_internal): Add VPERMR/XXPERMR support for -+ ISA 3.0. -+ -+ Back port from trunk -+ 2016-05-24 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ * config/rs6000/altivec.md (VParity): New mode iterator for vector -+ parity built-in functions. -+ (p9v_ctz<mode>2): Add support for ISA 3.0 vector count trailing -+ zeros. -+ (p9v_parity<mode>2): Likewise. -+ * config/rs6000/vector.md (VEC_IP): New mode iterator for vector -+ parity. -+ (ctz<mode>2): ISA 3.0 expander for vector count trailing zeros. -+ (parity<mode>2): ISA 3.0 expander for vector parity. -+ * config/rs6000/rs6000-builtin.def (BU_P9_MISC_1): New macros for -+ power9 built-ins. -+ (BU_P9_64BIT_MISC_0): Likewise. -+ (BU_P9_MISC_0): Likewise. -+ (BU_P9V_AV_1): Likewise. -+ (BU_P9V_AV_2): Likewise. -+ (BU_P9V_AV_3): Likewise. -+ (BU_P9V_AV_P): Likewise. -+ (BU_P9V_VSX_1): Likewise. -+ (BU_P9V_OVERLOAD_1): Likewise. -+ (BU_P9V_OVERLOAD_2): Likewise. -+ (BU_P9V_OVERLOAD_3): Likewise. -+ (VCTZB): Add vector count trailing zeros support. -+ (VCTZH): Likewise. -+ (VCTZW): Likewise. -+ (VCTZD): Likewise. -+ (VPRTYBD): Add vector parity support. -+ (VPRTYBQ): Likewise. -+ (VPRTYBW): Likewise. -+ (VCTZ): Add overloaded vector count trailing zeros support. -+ (VPRTYB): Add overloaded vector parity support. -+ * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Add -+ overloaded vector count trailing zeros and parity instructions. -+ * config/rs6000/rs6000.md (wd mode attribute): Add V1TI and TI for -+ vector parity support. -+ * config/rs6000/altivec.h (vec_vctz): Add ISA 3.0 vector count -+ trailing zeros support. -+ (vec_cntlz): Likewise. -+ (vec_vctzb): Likewise. -+ (vec_vctzd): Likewise. -+ (vec_vctzh): Likewise. -+ (vec_vctzw): Likewise. -+ (vec_vprtyb): Add ISA 3.0 vector parity support. -+ (vec_vprtybd): Likewise. -+ (vec_vprtybw): Likewise. -+ (vec_vprtybq): Likewise. -+ * doc/extend.texi (PowerPC AltiVec Built-in Functions): Document -+ the ISA 3.0 vector count trailing zeros and vector parity built-in -+ functions. -+ -+ Back port from trunk -+ 2016-05-24 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ * config/rs6000/altivec.md (VNEG iterator): New iterator for -+ VNEGW/VNEGD instructions. -+ (p9_neg<mode>2): New insns for ISA 3.0 VNEGW/VNEGD. -+ (neg<mode>2): Add expander for V2DImode added in ISA 2.07, and -+ support for ISA 3.0 VNEGW/VNEGD instructions. -+ -+ Back port from trunk -+ 2016-05-11 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ * config/rs6000/predicates.md (quad_memory_operand): Move most of -+ the code into quad_address_p and call it to share code with -+ vsx_quad_dform_memory_operand. -+ (vsx_quad_dform_memory_operand): New predicate for ISA 3.0 vector -+ d-form support. -+ * config/rs6000/rs6000.opt (-mlra): Switch to being an option mask -+ bit instead of being a separate word. Split -mpower9-dform into -+ two switches, -mpower9-dform-scalar and -mpower9-dform-vector. -+ * config/rs6000/rs6000.c (RELOAD_REG_QUAD_OFFSET): New addr_mask -+ for the register class supporting 128-bit quad word memory offsets. -+ (mode_supports_vsx_dform_quad): Helper function to return if the -+ register class uses quad word memory offsets. -+ (rs6000_debug_addr_mask): Add support for quad word memory offsets. -+ (rs6000_debug_reg_global): Always print if we are using LRA or not. -+ (rs6000_setup_reg_addr_masks): If ISA 3.0 vector d-form -+ instructions are enabled, set up the appropriate addr_masks for -+ 128-bit types. -+ (rs6000_init_hard_regno_mode_ok): wb constraint is now based on -+ -mpower9-dform-scalar, instead of -mpower9-dform. -+ (rs6000_option_override_internal): Split -mpower9-dform into two -+ switches, -mpower9-dform-scalar and -mpower9-dform-vector. The -+ -mpower9-dform switch sets or clears both. If we are not using -+ the LRA register allocator, do not enable -mpower9-dform-vector by -+ default. If we are using LRA, enable -mpower9-dform-vector and -+ -mvsx-timode if it is appropriate. Issue a warning if either -+ -mpower9-dform-vector or -mvsx-timode are explicitly used without -+ enabling LRA. -+ (quad_address_offset_p): New helper function to return if the -+ offset is legal for quad word memory instructions. -+ (quad_address_p): New function to determin if GPR or vector -+ register quad word memory addresses are legal. -+ (mem_operand_gpr): Validate quad word address offsets. -+ (reg_offset_addressing_ok_p): Add support for ISA 3.0 vector -+ d-form (register + offset) instructions. -+ (offsettable_ok_by_alignment): Likewise. -+ (rs6000_legitimate_offset_address_p): Likewise. -+ (legitimate_lo_sum_address_p): Likewise. -+ (rs6000_legitimize_address): Likewise. -+ (rs6000_legitimize_reload_address): Add more debug statements for -+ -mdebug=addr. -+ (rs6000_legitimate_address_p): Add support for ISA 3.0 vector -+ d-form instructions. -+ (rs6000_secondary_reload_memory): Add support for ISA 3.0 vector -+ d-form instructions. Distinguish different cases in debug -+ output. (rs6000_secondary_reload_inner): Add support for ISA 3.0 vector -+ d-form instructions. -+ (rs6000_preferred_reload_class): Likewise. -+ (rs6000_output_move_128bit): Add support for ISA 3.0 d-form -+ instructions. If ISA 3.0 is available, generate lxvx/stxvx instead -+ of the ISA 2.06 indexed memory instructions. -+ (rs6000_emit_prologue): If we have ISA 3.0 d-form instructions, -+ use them to save/restore the saved vector registers instead of -+ using Altivec instructions. -+ (rs6000_emit_epilogue): Likewise. -+ (rs6000_lra_p): Use TARGET_LRA instead of the old option word. -+ (rs6000_opt_masks): Split -mpower9-dform into -+ -mpower9-dform-scalar and -mpower9-dform-vector. -+ (rs6000_print_options_internal): Print -mno-<switch> if <switch> -+ was not selected. -+ * config/rs6000/vsx.md (p9_vecload_<mode>): Delete hack to emit -+ ISA 3.0 vector indexed memory instructions, and fold the code into -+ the normal mov<mode> patterns. -+ (p9_vecstore_<mode>): Likewise. -+ (vsx_mov<mode>): Add support for ISA 3.0 vector d-form -+ instructions. -+ (vsx_movti_64bit): Likewise. -+ (vsx_movti_32bit): Likewise. -+ * config/rs6000/constraints.md (wO constraint): New constraint for -+ ISA 3.0 vector d-form support. -+ * config/rs6000/rs6000-cpus.def (ISA_3_0_MASKS_SERVER): Use -+ -mpower9-dform-scalar instead of -mpower9-dform. Add note not to -+ include -mpower9-dform-vector until we switch over to LRA. -+ (POWERPC_MASKS): Add -mlra. Split -mpower9-dform into two. -+ switches, -mpower9-dform-scalar and -mpower9-dform-vector. -+ * config/rs6000/rs6000-protos.h (quad_address_p): Add declaration. -+ * doc/invoke.texi (RS/6000 and PowerPC Options): Add documentation -+ for -mpower9-dform and -mlra. -+ * doc/md.texi (wO constraint): Document wO constraint. -+ -+2016-06-01 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * tree-vect-loop.c (vect_determine_vectorization_factor): Also compute -+ the factor for live Phi nodes. -+ -+2016-06-01 Jakub Jelinek <jakub@redhat.com> -+ -+ PR middle-end/71371 -+ * gimplify.c (gimplify_omp_for): Temporarily clear gimplify_omp_ctxp -+ around creation of the temporary. -+ -+2016-06-01 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * tree-vect-loop.c (vect_determine_vectorization_factor): Also take -+ into account live statements for mask producers. -+ -+2016-05-31 Richard Biener <rguenther@suse.de> -+ -+ Backport from mainline -+ 2016-05-11 Richard Biener <rguenther@suse.de> -+ -+ PR debug/71057 -+ * dwarf2out.c (retry_incomplete_types): Set early_dwarf. -+ (dwarf2out_finish): Move retry_incomplete_types call ... -+ (dwarf2out_early_finish): ... here. -+ -+2016-05-31 Kyrylo Tkachov <kyrylo.tkachov@arm.com> -+ -+ PR target/71056 -+ * config/arm/arm-builtins.c (arm_builtin_vectorized_function): Return -+ NULL_TREE early if NEON is not available. Remove now redundant check -+ in ARM_CHECK_BUILTIN_MODE. -+ -+2016-05-31 Tom de Vries <tom@codesourcery.com> -+ -+ backport: -+ 2016-05-31 Tom de Vries <tom@codesourcery.com> -+ -+ PR tree-optimization/69068 -+ * graphite-isl-ast-to-gimple.c (copy_bb_and_scalar_dependences): Handle -+ phis with more than two args. -+ -+2016-05-30 Andreas Tobler <andreast@gcc.gnu.org> -+ -+ Backport from mainline -+ 2016-05-30 Andreas Tobler <andreast@gcc.gnu.org> -+ -+ * config.gcc: Move hard float support for arm*hf*-*-freebsd* into -+ armv6*-*-freebsd* for FreeBSD 11. Eliminate the arm*hf*-*-freebsd* -+ target. -+ -+2016-05-30 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-04-29 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ * config/rs6000/altivec.h: Change definitions of vec_xl and -+ vec_xst. -+ * config/rs6000/rs6000-builtin.def (LD_ELEMREV_V2DF): New. -+ (LD_ELEMREV_V2DI): New. -+ (LD_ELEMREV_V4SF): New. -+ (LD_ELEMREV_V4SI): New. -+ (LD_ELEMREV_V8HI): New. -+ (LD_ELEMREV_V16QI): New. -+ (ST_ELEMREV_V2DF): New. -+ (ST_ELEMREV_V2DI): New. -+ (ST_ELEMREV_V4SF): New. -+ (ST_ELEMREV_V4SI): New. -+ (ST_ELEMREV_V8HI): New. -+ (ST_ELEMREV_V16QI): New. -+ (XL): New. -+ (XST): New. -+ * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Add -+ descriptions for VSX_BUILTIN_VEC_XL and VSX_BUILTIN_VEC_XST. -+ * config/rs6000/rs6000.c (rs6000_builtin_mask_calculate): Map from -+ TARGET_P9_VECTOR to RS6000_BTM_P9_VECTOR. -+ (altivec_expand_builtin): Add handling for -+ VSX_BUILTIN_ST_ELEMREV_<MODE> and VSX_BUILTIN_LD_ELEMREV_<MODE>. -+ (rs6000_invalid_builtin): Add error-checking for -+ RS6000_BTM_P9_VECTOR. -+ (altivec_init_builtins): Define builtins used to implement vec_xl -+ and vec_xst. -+ (rs6000_builtin_mask_names): Define power9-vector. -+ * config/rs6000/rs6000.h (MASK_P9_VECTOR): Define. -+ (RS6000_BTM_P9_VECTOR): Define. -+ (RS6000_BTM_COMMON): Include RS6000_BTM_P9_VECTOR. -+ * config/rs6000/vsx.md (vsx_ld_elemrev_v2di): New define_insn. -+ (vsx_ld_elemrev_v2df): Likewise. -+ (vsx_ld_elemrev_v4sf): Likewise. -+ (vsx_ld_elemrev_v4si): Likewise. -+ (vsx_ld_elemrev_v8hi): Likewise. -+ (vsx_ld_elemrev_v16qi): Likewise. -+ (vsx_st_elemrev_v2df): Likewise. -+ (vsx_st_elemrev_v2di): Likewise. -+ (vsx_st_elemrev_v4sf): Likewise. -+ (vsx_st_elemrev_v4si): Likewise. -+ (vsx_st_elemrev_v8hi): Likewise. -+ (vsx_st_elemrev_v16qi): Likewise. -+ * doc/extend.texi: Add prototypes for vec_xl and vec_xst. Correct -+ grammar. -+ -+2016-05-30 Richard Biener <rguenther@suse.de> -+ -+ Backport from mainline -+ 2016-05-11 Richard Biener <rguenther@suse.de> -+ -+ PR middle-end/71002 -+ * alias.c (reference_alias_ptr_type): Preserve alias-set zero -+ if the langhook insists on it. -+ * fold-const.c (make_bit_field_ref): Add arg for the original -+ reference and preserve its alias-set. -+ (decode_field_reference): Take exp by reference and adjust it -+ to the original memory reference. -+ (optimize_bit_field_compare): Adjust callers. -+ (fold_truth_andor_1): Likewise. -+ -+ 2016-05-13 Jakub Jelinek <jakub@redhat.com> -+ -+ PR bootstrap/71071 -+ * fold-const.c (fold_checksum_tree): Allow modification -+ of TYPE_ALIAS_SET during folding. -+ -+2016-05-30 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * config/visium/visium.c (visium_split_double_add): Minor tweaks. -+ (visium_expand_copysign): Use gen_int_mode directly. -+ (visium_compute_frame_size): Minor tweaks. -+ -+2016-05-30 Tom de Vries <tom@codesourcery.com> -+ -+ backport: -+ 2016-05-30 Tom de Vries <tom@codesourcery.com> -+ -+ PR tree-optimization/69067 -+ * graphite-isl-ast-to-gimple.c (get_def_bb_for_const): Remove assert. -+ -+2016-05-27 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * config/visium/visium-protos.h (split_double_move): Rename into... -+ (visium_split_double_move): ...this. -+ (visium_split_double_add): Declare. -+ * config/visium/visium.c (split_double_move): Rename into... -+ (visium_split_double_move): ...this. -+ (visium_split_double_add): New function. -+ (visium_expand_copysign): Renumber operands for consistency. -+ * config/visium/visium.md (DImode move splitter): Adjust to renaming. -+ (DFmode move splitter): Likewise. -+ (*addi3_insn): Split by means of visium_split_double_add. -+ (*adddi3_insn_flags): Delete. -+ (*plus_plus_sltu<subst_arith>): New insn. -+ (*subdi3_insn): Split by means of visium_split_double_add. -+ (subdi3_insn_flags): Delete. -+ (*minus_minus_sltu<subst_arith>): New insn. -+ (*negdi2_insn): Split by means of visium_split_double_add. -+ (*negdi2_insn_flags): Delete. -+ -+2016-05-27 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ Backport from mainline r236810. -+ 2016-05-27 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ PR middle-end/71279 -+ * fold-const.c (fold_ternary_loc): Don't fold VEC_COND_EXPR -+ into comparison. -+ -+2016-05-25 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * tree-ssa-phiopt.c (factor_out_conditional_conversion): Remove -+ redundant test and bail out if the type of the new operand is not -+ a GIMPLE register type after stripping a VIEW_CONVERT_EXPR. -+ -+2016-05-24 Martin Sebor <msebor@redhat.com> -+ -+ PR c++/71147 -+ * tree.h (complete_or_array_type_p): New inline function. -+ -+2016-05-24 Jakub Jelinek <jakub@redhat.com> -+ -+ * config/i386/i386.h (TARGET_AVOID_4BYTE_PREFIXES): Define. -+ * config/i386/constraints.md (Yr): Test TARGET_AVOID_4BYTE_PREFIXES -+ rather than X86_TUNE_AVOID_4BYTE_PREFIXES. Use SSE_REGS instead -+ of ALL_SSE_REGS. Return SSE_REGS also when TARGET_AVX. -+ -+2016-05-24 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71257 -+ * tree-vect-stmts.c (vectorizable_simd_clone_call): Handle -+ SIMD_CLONE_ARG_TYPE_LINEAR_REF_CONSTANT_STEP like -+ SIMD_CLONE_ARG_TYPE_LINEAR_CONSTANT_STEP. Add -+ SIMD_CLONE_ARG_TYPE_LINEAR_VAL_CONSTANT_STEP and -+ SIMD_CLONE_ARG_TYPE_LINEAR_UVAL_CONSTANT_STEP cases explicitly. -+ -+2016-05-23 Martin Jambor <mjambor@suse.cz> -+ -+ * hsa-gen.c (gen_hsa_insns_for_switch_stmt): Create an empty -+ default block if a PHI node in the original one would be resized. -+ -+2016-05-23 Martin Jambor <mjambor@suse.cz> -+ -+ PR tree-optimization/70884 -+ * tree-sra.c (initialize_constant_pool_replacements): Do not check -+ should_scalarize_away_bitmap and cannot_scalarize_away_bitmap bits. -+ (sort_and_splice_var_accesses): Do not consider multiple scalar reads -+ of constant pool data as a reason for scalarization. -+ -+2016-05-20 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * config/arm/arm.c (arm_expand_prologue): Set the stack usage to 0 -+ for naked functions. -+ (thumb1_expand_prologue): Likewise. -+ -+2016-05-20 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71210 -+ * gimple-fold.c (gimple_fold_call): Do not remove lhs of noreturn -+ calls if the LHS is variable length or has addressable type. -+ If targets[0]->decl is a noreturn call with void return type and -+ zero arguments, adjust fntype and remove lhs in that case. -+ -+2016-05-20 Uros Bizjak <ubizjak@gmail.com> -+ -+ * sched-deps.c (sched_analyze_2) <case TRAP_IF>: Also -+ force pending loads from memory. -+ -+2016-05-19 Marek Polacek <polacek@redhat.com> -+ -+ Backport from mainline -+ 2016-05-19 Marek Polacek <polacek@redhat.com> -+ -+ PR tree-optimization/71031 -+ * tree-vrp.c (extract_range_from_binary_expr_1): Turn assert into a -+ condition and adjust the code a bit. -+ -+2016-05-19 Martin Jambor <mjambor@suse.cz> -+ -+ PR ipa/70646 -+ * ipa-prop.c (determine_locally_known_aggregate_parts): Bail out early -+ if parameter PARAM_IPA_MAX_AGG_ITEMS is zero. -+ -+2016-05-19 Martin Jambor <mjambor@suse.cz> -+ -+ PR ipa/70646 -+ * ipa-inline.h (condition): New field size. -+ * ipa-inline-analysis.c (add_condition): New parameter SIZE, use it -+ for comaprison and store it into the new condition. -+ (evaluate_conditions_for_known_args): Use condition size to check -+ access sizes for all but CHANGED conditions. -+ (unmodified_parm_1): New parameter size_p, store access size into it. -+ (unmodified_parm): Likewise. -+ (unmodified_parm_or_parm_agg_item): Likewise. -+ (eliminated_by_inlining_prob): Pass NULL to unmodified_parm as size_p. -+ (set_cond_stmt_execution_predicate): Extract access sizes and store -+ them to conditions. -+ (set_switch_stmt_execution_predicate): Likewise. -+ (will_be_nonconstant_expr_predicate): Likewise. -+ (will_be_nonconstant_predicate): Likewise. -+ (inline_read_section): Stream condition size. -+ (inline_write_summary): Likewise. -+ * lto-streamer.h (LTO_minor_version): Bump. -+ -+2016-05-18 Martin Liska <mliska@suse.cz> -+ -+ Backport from mainline -+ 2016-05-18 Martin Liska <mliska@suse.cz> -+ -+ PR fortran/70856 -+ * ipa-icf.c (sem_variable::merge): Set DECL_PT_UID for -+ merged variables. -+ -+2016-05-18 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71100 -+ * cgraph.c (cgraph_edge::redirect_call_stmt_to_callee): Don't drop -+ lhs if it has TREE_ADDRESSABLE type. -+ -+2016-05-18 Uros Bizjak <ubizjak@gmail.com> -+ -+ PR target/71145 -+ * config/alpha/alpha.md (trap): Add (use (reg:DI 29)). -+ (*exception_receiver_1): Return "#" for TARGET_EXPLICIT_RELOCS. -+ -+2016-05-17 Thomas Schwinge <thomas@codesourcery.com> -+ -+ Backport trunk r235748: -+ PR target/70860 -+ * config/nvptx/nvptx.c (nvptx_libcall_value): Handle NULL cfun. -+ (nvptx_function_value): Assert non-NULL cfun. -+ -+2016-05-17 Kyrylo Tkachov <kyrylo.tkachov@arm.com> -+ -+ Backport from mainline -+ 2016-05-17 Kyrylo Tkachov <kyrylo.tkachov@arm.com> -+ -+ PR target/70809 -+ * config/aarch64/aarch64-simd.md (aarch64_vmls<mode>): Delete. -+ -+2016-05-16 Martin Jambor <mjambor@suse.cz> -+ -+ * hsa-gen.c (fillup_for_decl): Increase alignment to natural one. -+ (get_symbol_for_decl): Sorry if a global symbol in under-aligned. -+ -+2016-05-16 Martin Jambor <mjambor@suse.cz> -+ -+ PR hsa/70857 -+ * omp-low.c (grid_expand_target_grid_body): Copy RESULT_DECL of -+ the outlined kernel function. -+ -+2016-05-16 James Norris <jnorris@codesourcery.com> -+ -+ Backport from mainline r236098. -+ 2016-05-10 James Norris <jnorris@codesourcery.com> -+ -+ PR driver/68463 -+ * config/rs6000/sysv4.h (CRTOFFLOADBEGIN): Define. Add crtoffloadbegin.o -+ if offloading is enabled and -fopenacc or -fopenmp is specified. -+ (CRTOFFLOADEND): Likewise. -+ (STARTFILE_LINUX_SPEC): Add CRTOFFLOADBEGIN. -+ (ENDFILE_LINUX_SPEC): Add CRTOFFLOADEND. -+ -+2016-05-16 Alan Modra <amodra@gmail.com> -+ -+ Apply from mainline -+ 2016-05-10 Alan Modra <amodra@gmail.com> -+ PR target/70947 -+ * config/rs6000/rs6000.c (rs6000_expand_split_stack_prologue): Stop -+ regrename modifying insns saving lr before __morestack call. -+ * config/rs6000/rs6000.md (split_stack_return): Similarly for -+ insns restoring lr after __morestack call. -+ -+2016-05-13 Richard Biener <rguenther@suse.de> -+ -+ Backport from mainline -+ 2016-04-27 Richard Biener <rguenther@suse.de> -+ -+ PR ipa/70760 -+ * tree-ssa-structalias.c (find_func_aliases_for_call): Use -+ aggregate_value_p to determine if a function result is -+ returned by reference. -+ -+ 2016-05-06 Richard Biener <rguenther@suse.de> -+ -+ PR middle-end/70931 -+ * dwarf2out.c (native_encode_initializer): Skip zero-sized fields. -+ -+ 2016-05-06 Richard Biener <rguenther@suse.de> -+ -+ PR middle-end/70941 -+ * fold-const.c (split_tree): Always convert to the original type -+ before negating. -+ -+2016-05-12 Martin Liska <mliska@suse.cz> -+ -+ Backport from mainline -+ 2016-05-10 Martin Liska <mliska@suse.cz> -+ -+ * tree-inline.c (remap_dependence_clique): Do not remap -+ debugging statements. -+ -+2016-05-12 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ Backport from mainline r236171. -+ 2016-05-12 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ PR tree-optimization/71006 -+ * tree-vect-loop.c (vect_determine_vectorization_factor): Don't -+ consider COND_EXPR as a mask producer. -+ -+2016-05-12 Kyrylo Tkachov <kyrylo.tkachov@arm.com> -+ -+ Backport from mainline -+ 2016-05-12 Kyrylo Tkachov <kyrylo.tkachov@arm.com> -+ -+ PR target/70830 -+ * config/arm/arm.c (arm_output_multireg_pop): Avoid POP instruction -+ when popping the PC and within an interrupt handler routine. -+ Add missing tab to output of "ldmfd". -+ (output_return_instruction): Output LDMFD with SP update rather -+ than POP when returning from interrupt handler. -+ -+2016-05-11 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ Backport from mainline r236088. -+ 2016-05-10 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ PR middle-end/70877 -+ * tree-chkp.c (chkp_add_bounds_to_call_stmt): Handle -+ calls with type casted fndecl. -+ -+2016-05-11 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ Backport from mainline r236086. -+ 2016-05-10 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ PR tree-optimization/70876 -+ * tree-chkp.c (chkp_find_bounds_1): Support WITH_SIZE_EXPR. -+ * gcc/calls.c (initialize_argument_information): Bind bounds -+ with corresponding args passed by reference. -+ -+2016-05-10 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-05-10 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ PR target/70963 -+ * config/rs6000/vsx.md (vsx_xvcvdpsxds_scale): Generate correct -+ code for a zero scale factor. -+ (vsx_xvcvdpuxds_scale): Likewise. -+ -+2016-05-10 Jakub Jelinek <jakub@redhat.com> -+ -+ Backported from mainline -+ 2016-05-03 Jakub Jelinek <jakub@redhat.com> -+ -+ PR tree-optimization/70916 -+ * tree-vect-patterns.c (vect_recog_mask_conversion_pattern): Give up -+ if COND_EXPR rhs1 is neither SSA_NAME nor COMPARISON_CLASS_P. -+ -+2016-05-10 Yuri Rumyantsev <ysrumyan@gmail.com> -+ -+ Backport from mainline r235962. -+ 2016-05-06 Yuri Rumyantsev <ysrumyan@gmail.com> -+ -+ PR debug/70935 -+ * tree-ssa-loop-unswitch.c (find_loop_guard): Reject guard edge with -+ loop latch destination. -+ -+2016-05-10 Andreas Krebbel <krebbel@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-05-10 Andreas Krebbel <krebbel@linux.vnet.ibm.com> -+ -+ * config/s390/s390.md ("*vec_cmp<insn_cmp>df_cconly") -+ ("*fixuns_truncdfdi2_z13") -+ ("*fixuns_trunc<FP:mode><GPR:mode>2_z196") -+ ("*fix_truncdfdi2_bfp_z13", "*floatunsdidf2_z13") -+ ("*extendsfdf2_z13"): Replace TARGET_Z13 with TARGET_VX. -+ -+2016-05-10 Sebastian Huber <sebastian.huber@embedded-brains.de> -+ -+ Backport from mainline -+ 2016-04-27 Sebastian Huber <sebastian.huber@embedded-brains.de> -+ -+ * config/rtems.h (LIB_SPEC): Add -latomic. -+ -+2016-05-10 Sebastian Huber <sebastian.huber@embedded-brains.de> -+ -+ Backport from mainline -+ 2016-04-27 Joel Sherrill <joel@rtems.org> -+ -+ * config/microblaze/rtems.h: Redefine LINK_SPEC to avoid -+ xilink.ld and flags not relevant to RTEMS. -+ -+2016-05-09 Uros Bizjak <ubizjak@gmail.com> -+ -+ * config/i386/i386.md (absneg splitters with general regs): Use -+ general_reg_operand predicate. -+ (btsq peephole2): Use x86_64_immediate_operand to check if new -+ value is suitable for immediate operand. Generate emitted insn -+ using RTL expressions. -+ (btcq peephole2): Ditto. -+ (btrq peephole2): Ditto. Generate correct immediate operand -+ for AND masking. -+ -+2016-05-07 Tom de Vries <tom@codesourcery.com> -+ -+ backport: -+ 2016-05-07 Tom de Vries <tom@codesourcery.com> -+ -+ PR tree-optimization/70956 -+ * graphite-scop-detection.c (build_cross_bb_scalars_def): Handle NULL -+ def. -+ -+2016-05-06 Marek Polacek <polacek@redhat.com> -+ -+ Backported from mainline -+ 2016-05-06 Marek Polacek <polacek@redhat.com> -+ -+ PR sanitizer/70875 -+ * ubsan.c (get_ubsan_type_info_for_type): Remove assert. -+ -+2016-05-06 Marek Polacek <polacek@redhat.com> -+ -+ Backported from mainline -+ 2016-04-29 Marek Polacek <polacek@redhat.com> -+ Jakub Jelinek <jakub@redhat.com> -+ -+ PR sanitizer/70342 -+ * fold-const.c (tree_single_nonzero_warnv_p): For TARGET_EXPR, use -+ TARGET_EXPR_SLOT as a base. -+ -+2016-05-04 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * tree-ssa-coalesce.c (gimple_can_coalesce_p): Fix reference in head -+ comment. -+ (compute_samebase_partition_bases): Fix typo. -+ -+2016-05-03 Pierre-Marie de Rodat <derodat@adacore.com> -+ -+ * dwarf2out.c (resolve_args_picking_1): Replace the frame_offset -+ occurence with frame_offset_ ones. -+ -+2016-04-28 Jakub Jelinek <jakub@redhat.com> -+ -+ PR target/70858 -+ * config/i386/i386.c (bdesc_special_args): Add | OPTION_MASK_ISA_64BIT -+ to __builtin_ia32_lwpval64 and __builtin_ia32_lwpins64. -+ (bdesc_args): Add | OPTION_MASK_ISA_64BIT to __builtin_ia32_bextr_u64, -+ __builtin_ia32_bextri_u64, __builtin_ia32_bzhi_di, -+ __builtin_ia32_pdep_di and __builtin_ia32_pext_di. -+ -+2016-04-28 Eric Botcazou <ebotcazou@adacore.com> -+ -+ Backport from mainline -+ 2016-04-27 Eric Botcazou <ebotcazou@adacore.com> -+ -+ PR ada/70759 -+ * stor-layout.h (internal_reference_types): Delete. -+ * stor-layout.c (reference_types_internal): Likewise. -+ (internal_reference_types): Likewise. -+ (layout_type) <REFERENCE_TYPE>: Adjust. -+ -+2016-04-27 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-04-25 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ * config/rs6000/rs6000-builtin.def: Correct pasto error for -+ stxvd2x and stxvw4x built-in functions. -+ -+2016-04-27 H.J. Lu <hongjiu.lu@intel.com> -+ -+ Backported from mainline -+ 2016-04-21 H.J. Lu <hongjiu.lu@intel.com> -+ -+ PR target/70750 -+ * config/i386/predicates.md (call_insn_operand): Replace -+ sibcall_memory_operand with memory_operand. -+ -+2016-04-27 Richard Biener <rguenther@suse.de> -+ -+ PR ipa/70785 -+ * tree-ssa-structalias.c (refered_from_nonlocal_fn): New -+ function cummulating used_from_other_partition, externally_visible -+ and force_output from aliases. -+ (refered_from_nonlocal_var): Likewise. -+ (ipa_pta_execute): Use call_for_symbol_and_aliases to cummulate -+ node flags properly. -+ -+2016-04-27 Jakub Jelinek <jakub@redhat.com> -+ -+ Backported from mainline -+ 2016-04-23 Jakub Jelinek <jakub@redhat.com> -+ -+ PR sanitizer/70712 -+ * cfgexpand.c (expand_stack_vars): Fix typo. -+ -+ 2016-04-19 Jakub Jelinek <jakub@redhat.com> -+ -+ PR middle-end/70680 -+ * gimplify.c (gimplify_omp_for): Call omp_notice_variable for -+ implicitly linear or lastprivate iterator on the outer context. -+ -+2016-04-27 Kirill Yukhin <kirill.yukhin@intel.com> -+ -+ PR target/70728 -+ * gcc/config/i386/sse.md (define_insn "<shift_insn><mode>3<mask_name>"): -+ Extract AVX-512BW constraint from AVX. -+ -+2016-04-27 Jakub Jelinek <jakub@redhat.com> -+ -+ * BASE-VER: Set to 6.1.1. -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -@@ -49,7 +2066,7 @@ - constant boolean. - - 2016-04-20 Andrew Pinski <apinski@cavium.com> -- Kyrylo Tkachov <kyrylo.tkachov@arm.com> -+ Kyrylo Tkachov <kyrylo.tkachov@arm.com> - - PR target/64971 - * config/aarch64/aarch64.md (sibcall): Force call -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/DATESTAMP gcc-6-20160721/gcc/DATESTAMP ---- gcc-6.1.0/gcc/DATESTAMP 2016-04-27 00:16:13.000000000 +0000 -+++ gcc-6-20160721/gcc/DATESTAMP 2016-07-21 00:16:15.000000000 +0000 -@@ -1 +1 @@ --20160427 -+20160721 -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ada/ChangeLog gcc-6-20160721/gcc/ada/ChangeLog ---- gcc-6.1.0/gcc/ada/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/gcc/ada/ChangeLog 2016-06-13 08:02:10.000000000 +0000 -@@ -1,3 +1,96 @@ -+2016-06-13 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Deal with -+ PLUS_EXPR in the expression of a renaming. -+ -+2016-06-11 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * gcc-interface/trans.c (Case_Statement_to_gnu): Deal with characters. -+ -+2016-06-11 Pierre-Marie de Rodat <derodat@adacore.com> -+ -+ * gcc-interface/decl.c (gnat_to_gnu_entity): Do not clobber -+ gnat_entity_name with temporary names for XUP and XUT types. -+ -+2016-06-06 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * gcc-interface/utils.c (gnat_internal_attribute_table): Add support -+ for noinline and noclone attributes. -+ (handle_noinline_attribute): New handler. -+ (handle_noclone_attribute): Likewise. -+ -+2016-06-06 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * gcc-interface/utils2.c (build_call_alloc_dealloc): Do not substitute -+ placeholder expressions here but... -+ * gcc-interface/trans.c (gnat_to_gnu) <N_Free_Statement>: ...here. -+ Make an exception to the protection of a CALL_EXPR result with an -+ unconstrained type only in the same cases as Call_to_gnu. -+ -+2016-06-01 Simon Wright <simon@pushface.org> -+ -+ PR ada/71358 -+ * g-comlin.adb (Display_Section_Help): Do not dereference -+ Config.Switches if it's null. -+ (Getopt): Likewise. -+ -+2016-05-31 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * s-osinte-kfreebsd-gnu.ads (clock_getres): Define. -+ (Get_Page_Size): Remove duplicate and return int. -+ -+2016-05-31 Jan Sommer <soja-lists@aries.uberspace.de> -+ -+ PR ada/71317 -+ * s-osinte-rtems.ads (clock_getres): Define. -+ (Get_Page_Size): Remove duplicate and return int. -+ -+2016-05-06 Eric Botcazou <ebotcazou@adacore.com> -+ -+ PR ada/70969 -+ * system-darwin-ppc64.ads: Add pragma No_Elaboration_Code_All. -+ * system-linux-armeb.ads: Likewise. -+ * system-linux-mips64el.ads: Likewise. -+ * system-linux-mips.ads: Likewise. -+ * system-linux-mipsel.ads: Likewise. -+ * system-linux-ppc64.ads: Likewise. -+ * system-linux-sparcv9.ads: Likewise. -+ * system-rtems.ads: Likewise. -+ -+2016-05-04 Samuel Thibault <samuel.thibault@ens-lyon.org> -+ -+ * s-osinte-gnu.ads (Get_Page_Size): Return int and use getpagesize -+ instead of __getpagesize. -+ -+2016-04-28 Eric Botcazou <ebotcazou@adacore.com> -+ -+ PR ada/70900 -+ Backport from mainline -+ 2016-04-18 Ed Schonberg <schonberg@adacore.com> -+ -+ * sem_ch6.adb (Process_Formals): Do not set a delay freeze on -+ a subprogram that returns a class-wide type, if the subprogram -+ is a compilation unit, because otherwise gigi will treat the -+ subprogram as external, leading to link errors. -+ -+2016-05-02 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> -+ -+ * gcc-interface/Makefile.in (install-gcc-specs): Use foreach. -+ Honor DESTDIR. -+ -+2016-04-28 Eric Botcazou <ebotcazou@adacore.com> -+ -+ PR ada/70786 -+ * a-textio.adb (Get_Immediate): Add missing 'not' in expression. -+ -+2016-04-28 Eric Botcazou <ebotcazou@adacore.com> -+ -+ Backport from mainline -+ 2016-04-27 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * gcc-interface/misc.c (gnat_init): Do not call -+ internal_reference_types. -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ada/a-textio.adb gcc-6-20160721/gcc/ada/a-textio.adb ---- gcc-6.1.0/gcc/ada/a-textio.adb 2015-10-16 12:43:21.000000000 +0000 -+++ gcc-6-20160721/gcc/ada/a-textio.adb 2016-04-28 10:58:54.000000000 +0000 -@@ -668,7 +668,7 @@ - Available := True; - - Item := -- (if Is_Start_Of_Encoding (Character'Val (ch), File.WC_Method) -+ (if not Is_Start_Of_Encoding (Character'Val (ch), File.WC_Method) - then Character'Val (ch) - else Get_Upper_Half_Char_Immed (Character'Val (ch), File)); - end if; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ada/g-comlin.adb gcc-6-20160721/gcc/ada/g-comlin.adb ---- gcc-6.1.0/gcc/ada/g-comlin.adb 2015-11-18 10:31:53.000000000 +0000 -+++ gcc-6-20160721/gcc/ada/g-comlin.adb 2016-06-01 07:44:10.000000000 +0000 -@@ -6,7 +6,7 @@ - -- -- - -- B o d y -- - -- -- ---- Copyright (C) 1999-2015, Free Software Foundation, Inc. -- -+-- Copyright (C) 1999-2016, Free Software Foundation, Inc. -- - -- -- - -- GNAT is free software; you can redistribute it and/or modify it under -- - -- terms of the GNU General Public License as published by the Free Soft- -- -@@ -3151,16 +3151,18 @@ - - New_Line; - -- if Section /= "" then -+ if Section /= "" and then Config.Switches /= null then - Put_Line ("Switches after " & Section); - end if; - - -- Compute size of the switches column - -- for S in Config.Switches'Range loop -- Max_Len := Natural'Max -- (Max_Len, Switch_Name (Config.Switches (S), Section)'Length); -- end loop; -+ if Config.Switches /= null then -+ for S in Config.Switches'Range loop -+ Max_Len := Natural'Max -+ (Max_Len, Switch_Name (Config.Switches (S), Section)'Length); -+ end loop; -+ end if; - - if Config.Aliases /= null then - for A in Config.Aliases'Range loop -@@ -3173,25 +3175,27 @@ - - -- Display the switches - -- for S in Config.Switches'Range loop -- declare -- N : constant String := -- Switch_Name (Config.Switches (S), Section); -+ if Config.Switches /= null then -+ for S in Config.Switches'Range loop -+ declare -+ N : constant String := -+ Switch_Name (Config.Switches (S), Section); - -- begin -- if N /= "" then -- Put (" "); -- Put (N); -- Put ((1 .. Max_Len - N'Length + 1 => ' ')); -+ begin -+ if N /= "" then -+ Put (" "); -+ Put (N); -+ Put ((1 .. Max_Len - N'Length + 1 => ' ')); - -- if Config.Switches (S).Help /= null then -- Put (Config.Switches (S).Help.all); -- end if; -+ if Config.Switches (S).Help /= null then -+ Put (Config.Switches (S).Help.all); -+ end if; - -- New_Line; -- end if; -- end; -- end loop; -+ New_Line; -+ end if; -+ end; -+ end loop; -+ end if; - - -- Display the aliases - -@@ -3454,25 +3458,27 @@ - - -- Initialize output values for automatically handled switches - -- for S in Config.Switches'Range loop -- case Config.Switches (S).Typ is -- when Switch_Untyped => -- null; -- Nothing to do -- -- when Switch_Boolean => -- Config.Switches (S).Boolean_Output.all := -- not Config.Switches (S).Boolean_Value; -- -- when Switch_Integer => -- Config.Switches (S).Integer_Output.all := -- Config.Switches (S).Integer_Initial; -- -- when Switch_String => -- if Config.Switches (S).String_Output.all = null then -- Config.Switches (S).String_Output.all := new String'(""); -- end if; -- end case; -- end loop; -+ if Config.Switches /= null then -+ for S in Config.Switches'Range loop -+ case Config.Switches (S).Typ is -+ when Switch_Untyped => -+ null; -- Nothing to do -+ -+ when Switch_Boolean => -+ Config.Switches (S).Boolean_Output.all := -+ not Config.Switches (S).Boolean_Value; -+ -+ when Switch_Integer => -+ Config.Switches (S).Integer_Output.all := -+ Config.Switches (S).Integer_Initial; -+ -+ when Switch_String => -+ if Config.Switches (S).String_Output.all = null then -+ Config.Switches (S).String_Output.all := new String'(""); -+ end if; -+ end case; -+ end loop; -+ end if; - - -- For all sections, and all switches within those sections - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ada/gcc-interface/Makefile.in gcc-6-20160721/gcc/ada/gcc-interface/Makefile.in ---- gcc-6.1.0/gcc/ada/gcc-interface/Makefile.in 2016-04-27 07:39:18.000000000 +0000 -+++ gcc-6-20160721/gcc/ada/gcc-interface/Makefile.in 2016-05-02 13:16:33.000000000 +0000 -@@ -2670,10 +2670,9 @@ - install-gcc-specs: - # Install all the requested GCC spec files. - -- for f in $(GCC_SPEC_FILES); do \ -- $(INSTALL_DATA_DATE) $(srcdir)/ada/$$f \ -- $(libsubdir)/$$(echo $$f|sed -e 's#_[a-zA-Z0-9]*##g'); \ -- done -+ $(foreach f,$(GCC_SPEC_FILES), \ -+ $(INSTALL_DATA_DATE) $(srcdir)/ada/$(f) \ -+ $(DESTDIR)$(libsubdir)/$$(echo $(f)|sed -e 's#_[a-zA-Z0-9]*##g');) - - install-gnatlib: ../stamp-gnatlib-$(RTSDIR) install-gcc-specs - $(RMDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ada/gcc-interface/decl.c gcc-6-20160721/gcc/ada/gcc-interface/decl.c ---- gcc-6.1.0/gcc/ada/gcc-interface/decl.c 2016-04-02 08:56:19.000000000 +0000 -+++ gcc-6-20160721/gcc/ada/gcc-interface/decl.c 2016-06-13 08:02:10.000000000 +0000 -@@ -966,6 +966,7 @@ - && !call_is_atomic_load (inner)) - || TREE_CODE (inner) == ADDR_EXPR - || TREE_CODE (inner) == NULL_EXPR -+ || TREE_CODE (inner) == PLUS_EXPR - || TREE_CODE (inner) == CONSTRUCTOR - || CONSTANT_CLASS_P (inner) - /* We need to detect the case where a temporary is created to -@@ -2321,10 +2322,12 @@ - gnat_name = Packed_Array_Impl_Type (gnat_entity); - else - gnat_name = gnat_entity; -- if (gnat_encodings != DWARF_GNAT_ENCODINGS_MINIMAL) -- gnu_entity_name = create_concat_name (gnat_name, "XUP"); -- create_type_decl (gnu_entity_name, gnu_fat_type, artificial_p, -- debug_info_p, gnat_entity); -+ tree xup_name -+ = (gnat_encodings == DWARF_GNAT_ENCODINGS_MINIMAL) -+ ? get_entity_name (gnat_name) -+ : create_concat_name (gnat_name, "XUP"); -+ create_type_decl (xup_name, gnu_fat_type, artificial_p, debug_info_p, -+ gnat_entity); - - /* Create the type to be designated by thin pointers: a record type for - the array and its template. We used to shift the fields to have the -@@ -2334,11 +2337,11 @@ - Note that GDB can handle standard DWARF information for them, so we - don't have to name them as a GNAT encoding, except if specifically - asked to. */ -- if (gnat_encodings != DWARF_GNAT_ENCODINGS_MINIMAL) -- gnu_entity_name = create_concat_name (gnat_name, "XUT"); -- else -- gnu_entity_name = get_entity_name (gnat_name); -- tem = build_unc_object_type (gnu_template_type, tem, gnu_entity_name, -+ tree xut_name -+ = (gnat_encodings == DWARF_GNAT_ENCODINGS_MINIMAL) -+ ? get_entity_name (gnat_name) -+ : create_concat_name (gnat_name, "XUT"); -+ tem = build_unc_object_type (gnu_template_type, tem, xut_name, - debug_info_p); - - SET_TYPE_UNCONSTRAINED_ARRAY (tem, gnu_type); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ada/gcc-interface/misc.c gcc-6-20160721/gcc/ada/gcc-interface/misc.c ---- gcc-6.1.0/gcc/ada/gcc-interface/misc.c 2016-02-16 18:01:04.000000000 +0000 -+++ gcc-6-20160721/gcc/ada/gcc-interface/misc.c 2016-04-28 10:49:13.000000000 +0000 -@@ -369,9 +369,6 @@ - sbitsize_one_node = sbitsize_int (1); - sbitsize_unit_node = sbitsize_int (BITS_PER_UNIT); - -- /* Show that REFERENCE_TYPEs are internal and should be Pmode. */ -- internal_reference_types (); -- - /* Register our internal error function. */ - global_dc->internal_error = &internal_error_function; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ada/gcc-interface/trans.c gcc-6-20160721/gcc/ada/gcc-interface/trans.c ---- gcc-6.1.0/gcc/ada/gcc-interface/trans.c 2016-03-07 08:46:52.000000000 +0000 -+++ gcc-6-20160721/gcc/ada/gcc-interface/trans.c 2016-06-11 11:55:51.000000000 +0000 -@@ -2483,13 +2483,15 @@ - static tree - Case_Statement_to_gnu (Node_Id gnat_node) - { -- tree gnu_result, gnu_expr, gnu_label; -+ tree gnu_result, gnu_expr, gnu_type, gnu_label; - Node_Id gnat_when; - location_t end_locus; - bool may_fallthru = false; - - gnu_expr = gnat_to_gnu (Expression (gnat_node)); - gnu_expr = convert (get_base_type (TREE_TYPE (gnu_expr)), gnu_expr); -+ gnu_expr = maybe_character_value (gnu_expr); -+ gnu_type = TREE_TYPE (gnu_expr); - - /* We build a SWITCH_EXPR that contains the code with interspersed - CASE_LABEL_EXPRs for each label. */ -@@ -2559,6 +2561,11 @@ - gcc_assert (!gnu_low || TREE_CODE (gnu_low) == INTEGER_CST); - gcc_assert (!gnu_high || TREE_CODE (gnu_high) == INTEGER_CST); - -+ if (gnu_low && TREE_TYPE (gnu_low) != gnu_type) -+ gnu_low = convert (gnu_type, gnu_low); -+ if (gnu_high && TREE_TYPE (gnu_high) != gnu_type) -+ gnu_high = convert (gnu_type, gnu_high); -+ - add_stmt_with_node (build_case_label (gnu_low, gnu_high, label), - gnat_choice); - choices_added_p = true; -@@ -2590,8 +2597,8 @@ - /* Now emit a definition of the label the cases branch to, if any. */ - if (may_fallthru) - add_stmt (build1 (LABEL_EXPR, void_type_node, gnu_label)); -- gnu_result = build3 (SWITCH_EXPR, TREE_TYPE (gnu_expr), gnu_expr, -- end_stmt_group (), NULL_TREE); -+ gnu_result -+ = build3 (SWITCH_EXPR, gnu_type, gnu_expr, end_stmt_group (), NULL_TREE); - - return gnu_result; - } -@@ -7635,10 +7642,11 @@ - else - gnu_actual_obj_type = gnu_obj_type; - -+ tree gnu_size = TYPE_SIZE_UNIT (gnu_actual_obj_type); -+ gnu_size = SUBSTITUTE_PLACEHOLDER_IN_EXPR (gnu_size, gnu_ptr); -+ - gnu_result -- = build_call_alloc_dealloc (gnu_ptr, -- TYPE_SIZE_UNIT (gnu_actual_obj_type), -- gnu_obj_type, -+ = build_call_alloc_dealloc (gnu_ptr, gnu_size, gnu_obj_type, - Procedure_To_Call (gnat_node), - Storage_Pool (gnat_node), - gnat_node); -@@ -7719,16 +7727,22 @@ - N_Raise_Constraint_Error)); - } - -- /* If the result has side-effects and is of an unconstrained type, make a -- SAVE_EXPR so that we can be sure it will only be referenced once. But -- this is useless for a call to a function that returns an unconstrained -- type with default discriminant, as we cannot compute the size of the -- actual returned object. We must do this before any conversions. */ -+ /* If the result has side-effects and is of an unconstrained type, protect -+ the expression in case it will be referenced multiple times, i.e. for -+ its value and to compute the size of an object. But do it neither for -+ an object nor a renaming declaration, nor a return statement of a call -+ to a function that returns an unconstrained record type with default -+ discriminant, because there is no size to be computed in these cases -+ and this will create a useless temporary. We must do this before any -+ conversions. */ - if (TREE_SIDE_EFFECTS (gnu_result) -- && !(TREE_CODE (gnu_result) == CALL_EXPR -- && type_is_padding_self_referential (TREE_TYPE (gnu_result))) - && (TREE_CODE (gnu_result_type) == UNCONSTRAINED_ARRAY_TYPE -- || CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_result_type)))) -+ || CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_result_type))) -+ && !(TREE_CODE (gnu_result) == CALL_EXPR -+ && type_is_padding_self_referential (TREE_TYPE (gnu_result)) -+ && (Nkind (Parent (gnat_node)) == N_Object_Declaration -+ || Nkind (Parent (gnat_node)) == N_Object_Renaming_Declaration -+ || Nkind (Parent (gnat_node)) == N_Simple_Return_Statement))) - gnu_result = gnat_protect_expr (gnu_result); - - /* Now convert the result to the result type, unless we are in one of the -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ada/gcc-interface/utils.c gcc-6-20160721/gcc/ada/gcc-interface/utils.c ---- gcc-6.1.0/gcc/ada/gcc-interface/utils.c 2016-02-29 15:30:08.000000000 +0000 -+++ gcc-6-20160721/gcc/ada/gcc-interface/utils.c 2016-06-06 09:51:43.000000000 +0000 -@@ -90,6 +90,8 @@ - static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *); - static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *); - static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *); -+static tree handle_noinline_attribute (tree *, tree, tree, int, bool *); -+static tree handle_noclone_attribute (tree *, tree, tree, int, bool *); - static tree handle_leaf_attribute (tree *, tree, tree, int, bool *); - static tree handle_always_inline_attribute (tree *, tree, tree, int, bool *); - static tree handle_malloc_attribute (tree *, tree, tree, int, bool *); -@@ -121,6 +123,10 @@ - false }, - { "noreturn", 0, 0, true, false, false, handle_noreturn_attribute, - false }, -+ { "noinline", 0, 0, true, false, false, handle_noinline_attribute, -+ false }, -+ { "noclone", 0, 0, true, false, false, handle_noclone_attribute, -+ false }, - { "leaf", 0, 0, true, false, false, handle_leaf_attribute, - false }, - { "always_inline",0, 0, true, false, false, handle_always_inline_attribute, -@@ -5971,6 +5977,51 @@ - *no_add_attrs = true; - } - -+ return NULL_TREE; -+} -+ -+/* Handle a "noinline" attribute; arguments as in -+ struct attribute_spec.handler. */ -+ -+static tree -+handle_noinline_attribute (tree *node, tree name, -+ tree ARG_UNUSED (args), -+ int ARG_UNUSED (flags), bool *no_add_attrs) -+{ -+ if (TREE_CODE (*node) == FUNCTION_DECL) -+ { -+ if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (*node))) -+ { -+ warning (OPT_Wattributes, "%qE attribute ignored due to conflict " -+ "with attribute %qs", name, "always_inline"); -+ *no_add_attrs = true; -+ } -+ else -+ DECL_UNINLINABLE (*node) = 1; -+ } -+ else -+ { -+ warning (OPT_Wattributes, "%qE attribute ignored", name); -+ *no_add_attrs = true; -+ } -+ -+ return NULL_TREE; -+} -+ -+/* Handle a "noclone" attribute; arguments as in -+ struct attribute_spec.handler. */ -+ -+static tree -+handle_noclone_attribute (tree *node, tree name, -+ tree ARG_UNUSED (args), -+ int ARG_UNUSED (flags), bool *no_add_attrs) -+{ -+ if (TREE_CODE (*node) != FUNCTION_DECL) -+ { -+ warning (OPT_Wattributes, "%qE attribute ignored", name); -+ *no_add_attrs = true; -+ } -+ - return NULL_TREE; - } - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ada/gcc-interface/utils2.c gcc-6-20160721/gcc/ada/gcc-interface/utils2.c ---- gcc-6.1.0/gcc/ada/gcc-interface/utils2.c 2016-02-29 09:02:46.000000000 +0000 -+++ gcc-6-20160721/gcc/ada/gcc-interface/utils2.c 2016-06-06 09:43:59.000000000 +0000 -@@ -2266,8 +2266,6 @@ - Entity_Id gnat_proc, Entity_Id gnat_pool, - Node_Id gnat_node) - { -- gnu_size = SUBSTITUTE_PLACEHOLDER_IN_EXPR (gnu_size, gnu_obj); -- - /* Explicit proc to call ? This one is assumed to deal with the type - alignment constraints. */ - if (Present (gnat_proc)) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ada/s-osinte-gnu.ads gcc-6-20160721/gcc/ada/s-osinte-gnu.ads ---- gcc-6.1.0/gcc/ada/s-osinte-gnu.ads 2016-04-27 07:39:18.000000000 +0000 -+++ gcc-6-20160721/gcc/ada/s-osinte-gnu.ads 2016-05-04 19:14:17.000000000 +0000 -@@ -344,10 +344,9 @@ - -- returns the stack base of the specified thread. Only call this function - -- when Stack_Base_Available is True. - -- -- From: /usr/include/i386-gnu/bits/shm.h __getpagesize or getpagesize?? -- function Get_Page_Size return size_t; -- function Get_Page_Size return Address; -- pragma Import (C, Get_Page_Size, "__getpagesize"); -+ -- From: /usr/include/i386-gnu/bits/shm.h -+ function Get_Page_Size return int; -+ pragma Import (C, Get_Page_Size, "getpagesize"); - -- Returns the size of a page - - -- From /usr/include/i386-gnu/bits/mman.h -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ada/s-osinte-kfreebsd-gnu.ads gcc-6-20160721/gcc/ada/s-osinte-kfreebsd-gnu.ads ---- gcc-6.1.0/gcc/ada/s-osinte-kfreebsd-gnu.ads 2015-12-06 15:28:16.000000000 +0000 -+++ gcc-6-20160721/gcc/ada/s-osinte-kfreebsd-gnu.ads 2016-05-31 18:59:45.000000000 +0000 -@@ -7,7 +7,7 @@ - -- S p e c -- - -- -- - -- Copyright (C) 1991-1994, Florida State University -- ---- Copyright (C) 1995-2015, Free Software Foundation, Inc. -- -+-- Copyright (C) 1995-2016, Free Software Foundation, Inc. -- - -- -- - -- GNAT is free software; you can redistribute it and/or modify it under -- - -- terms of the GNU General Public License as published by the Free Soft- -- -@@ -216,6 +216,11 @@ - return int; - pragma Import (C, clock_gettime, "clock_gettime"); - -+ function clock_getres -+ (clock_id : clockid_t; -+ res : access timespec) return int; -+ pragma Import (C, clock_getres, "clock_getres"); -+ - function To_Duration (TS : timespec) return Duration; - pragma Inline (To_Duration); - -@@ -330,8 +335,7 @@ - -- returns the stack base of the specified thread. Only call this function - -- when Stack_Base_Available is True. - -- function Get_Page_Size return size_t; -- function Get_Page_Size return Address; -+ function Get_Page_Size return int; - pragma Import (C, Get_Page_Size, "getpagesize"); - -- Returns the size of a page - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ada/s-osinte-rtems.ads gcc-6-20160721/gcc/ada/s-osinte-rtems.ads ---- gcc-6.1.0/gcc/ada/s-osinte-rtems.ads 2015-12-02 07:09:41.000000000 +0000 -+++ gcc-6-20160721/gcc/ada/s-osinte-rtems.ads 2016-05-31 18:59:45.000000000 +0000 -@@ -6,7 +6,7 @@ - -- -- - -- S p e c -- - -- -- ---- Copyright (C) 1997-2011 Free Software Foundation, Inc. -- -+-- Copyright (C) 1997-2016 Free Software Foundation, Inc. -- - -- -- - -- GNARL is free software; you can redistribute it and/or modify it under -- - -- terms of the GNU General Public License as published by the Free Soft- -- -@@ -188,6 +188,11 @@ - tp : access timespec) return int; - pragma Import (C, clock_gettime, "clock_gettime"); - -+ function clock_getres -+ (clock_id : clockid_t; -+ res : access timespec) return int; -+ pragma Import (C, clock_getres, "clock_getres"); -+ - function To_Duration (TS : timespec) return Duration; - pragma Inline (To_Duration); - -@@ -291,8 +296,7 @@ - -- These two functions are only needed to share s-taprop.adb with - -- FSU threads. - -- function Get_Page_Size return size_t; -- function Get_Page_Size return Address; -+ function Get_Page_Size return int; - pragma Import (C, Get_Page_Size, "getpagesize"); - -- Returns the size of a page - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ada/sem_ch6.adb gcc-6-20160721/gcc/ada/sem_ch6.adb ---- gcc-6.1.0/gcc/ada/sem_ch6.adb 2015-11-24 09:22:24.000000000 +0000 -+++ gcc-6-20160721/gcc/ada/sem_ch6.adb 2016-05-02 20:33:47.000000000 +0000 -@@ -10415,10 +10415,12 @@ - Analyze_Return_Type (Related_Nod); - - -- If return type is class-wide, subprogram freezing may be -- -- delayed as well. -+ -- delayed as well, unless the declaration is a compilation unit -+ -- in which case the freeze node would appear too late. - - if Is_Class_Wide_Type (Etype (Current_Scope)) - and then not Is_Thunk (Current_Scope) -+ and then not Is_Compilation_Unit (Current_Scope) - and then Nkind (Unit_Declaration_Node (Current_Scope)) = - N_Subprogram_Declaration - then -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ada/system-darwin-ppc64.ads gcc-6-20160721/gcc/ada/system-darwin-ppc64.ads ---- gcc-6.1.0/gcc/ada/system-darwin-ppc64.ads 2015-11-23 11:31:24.000000000 +0000 -+++ gcc-6-20160721/gcc/ada/system-darwin-ppc64.ads 2016-05-06 09:11:56.000000000 +0000 -@@ -7,7 +7,7 @@ - -- S p e c -- - -- (Darwin/PPC64 Version) -- - -- -- ---- Copyright (C) 2011-2015, Free Software Foundation, Inc. -- -+-- Copyright (C) 2011-2016, Free Software Foundation, Inc. -- - -- -- - -- This specification is derived from the Ada Reference Manual for use with -- - -- GNAT. The copyright notice above, and the license provisions that follow -- -@@ -40,6 +40,9 @@ - -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada - -- 2005, this is Pure in any case (AI-362). - -+ pragma No_Elaboration_Code_All; -+ -- Allow the use of that restriction in units that WITH this unit -+ - type Name is (SYSTEM_NAME_GNAT); - System_Name : constant Name := SYSTEM_NAME_GNAT; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ada/system-linux-armeb.ads gcc-6-20160721/gcc/ada/system-linux-armeb.ads ---- gcc-6.1.0/gcc/ada/system-linux-armeb.ads 2015-11-23 11:31:24.000000000 +0000 -+++ gcc-6-20160721/gcc/ada/system-linux-armeb.ads 2016-05-06 09:11:56.000000000 +0000 -@@ -40,6 +40,9 @@ - -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada - -- 2005, this is Pure in any case (AI-362). - -+ pragma No_Elaboration_Code_All; -+ -- Allow the use of that restriction in units that WITH this unit -+ - type Name is (SYSTEM_NAME_GNAT); - System_Name : constant Name := SYSTEM_NAME_GNAT; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ada/system-linux-mips.ads gcc-6-20160721/gcc/ada/system-linux-mips.ads ---- gcc-6.1.0/gcc/ada/system-linux-mips.ads 2015-11-23 11:31:24.000000000 +0000 -+++ gcc-6-20160721/gcc/ada/system-linux-mips.ads 2016-05-06 09:11:56.000000000 +0000 -@@ -7,7 +7,7 @@ - -- S p e c -- - -- (GNU-Linux/MIPS Version) -- - -- -- ---- Copyright (C) 1992-2015, Free Software Foundation, Inc. -- -+-- Copyright (C) 1992-2016, Free Software Foundation, Inc. -- - -- -- - -- This specification is derived from the Ada Reference Manual for use with -- - -- GNAT. The copyright notice above, and the license provisions that follow -- -@@ -40,6 +40,9 @@ - -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada - -- 2005, this is Pure in any case (AI-362). - -+ pragma No_Elaboration_Code_All; -+ -- Allow the use of that restriction in units that WITH this unit -+ - type Name is (SYSTEM_NAME_GNAT); - System_Name : constant Name := SYSTEM_NAME_GNAT; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ada/system-linux-mips64el.ads gcc-6-20160721/gcc/ada/system-linux-mips64el.ads ---- gcc-6.1.0/gcc/ada/system-linux-mips64el.ads 2015-11-23 11:31:24.000000000 +0000 -+++ gcc-6-20160721/gcc/ada/system-linux-mips64el.ads 2016-05-06 09:11:56.000000000 +0000 -@@ -7,7 +7,7 @@ - -- S p e c -- - -- (GNU-Linux/MIPS64EL Version) -- - -- -- ---- Copyright (C) 1992-2015, Free Software Foundation, Inc. -- -+-- Copyright (C) 1992-2016, Free Software Foundation, Inc. -- - -- -- - -- This specification is derived from the Ada Reference Manual for use with -- - -- GNAT. The copyright notice above, and the license provisions that follow -- -@@ -40,6 +40,9 @@ - -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada - -- 2005, this is Pure in any case (AI-362). - -+ pragma No_Elaboration_Code_All; -+ -- Allow the use of that restriction in units that WITH this unit -+ - type Name is (SYSTEM_NAME_GNAT); - System_Name : constant Name := SYSTEM_NAME_GNAT; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ada/system-linux-mipsel.ads gcc-6-20160721/gcc/ada/system-linux-mipsel.ads ---- gcc-6.1.0/gcc/ada/system-linux-mipsel.ads 2015-11-23 11:31:24.000000000 +0000 -+++ gcc-6-20160721/gcc/ada/system-linux-mipsel.ads 2016-05-06 09:11:56.000000000 +0000 -@@ -7,7 +7,7 @@ - -- S p e c -- - -- (GNU-Linux/MIPSEL Version) -- - -- -- ---- Copyright (C) 1992-2015, Free Software Foundation, Inc. -- -+-- Copyright (C) 1992-2016, Free Software Foundation, Inc. -- - -- -- - -- This specification is derived from the Ada Reference Manual for use with -- - -- GNAT. The copyright notice above, and the license provisions that follow -- -@@ -40,6 +40,9 @@ - -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada - -- 2005, this is Pure in any case (AI-362). - -+ pragma No_Elaboration_Code_All; -+ -- Allow the use of that restriction in units that WITH this unit -+ - type Name is (SYSTEM_NAME_GNAT); - System_Name : constant Name := SYSTEM_NAME_GNAT; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ada/system-linux-ppc64.ads gcc-6-20160721/gcc/ada/system-linux-ppc64.ads ---- gcc-6.1.0/gcc/ada/system-linux-ppc64.ads 2015-11-23 11:31:24.000000000 +0000 -+++ gcc-6-20160721/gcc/ada/system-linux-ppc64.ads 2016-05-06 09:11:56.000000000 +0000 -@@ -7,7 +7,7 @@ - -- S p e c -- - -- (GNU-Linux/PPC64 Version) -- - -- -- ---- Copyright (C) 1992-2015, Free Software Foundation, Inc. -- -+-- Copyright (C) 1992-2016, Free Software Foundation, Inc. -- - -- -- - -- This specification is derived from the Ada Reference Manual for use with -- - -- GNAT. The copyright notice above, and the license provisions that follow -- -@@ -40,6 +40,9 @@ - -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada - -- 2005, this is Pure in any case (AI-362). - -+ pragma No_Elaboration_Code_All; -+ -- Allow the use of that restriction in units that WITH this unit -+ - type Name is (SYSTEM_NAME_GNAT); - System_Name : constant Name := SYSTEM_NAME_GNAT; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ada/system-linux-sparcv9.ads gcc-6-20160721/gcc/ada/system-linux-sparcv9.ads ---- gcc-6.1.0/gcc/ada/system-linux-sparcv9.ads 2015-11-23 11:31:24.000000000 +0000 -+++ gcc-6-20160721/gcc/ada/system-linux-sparcv9.ads 2016-05-06 09:11:56.000000000 +0000 -@@ -7,7 +7,7 @@ - -- S p e c -- - -- (GNU/Linux-SPARCV9 Version) -- - -- -- ---- Copyright (C) 1992-2015, Free Software Foundation, Inc. -- -+-- Copyright (C) 1992-2016, Free Software Foundation, Inc. -- - -- -- - -- This specification is derived from the Ada Reference Manual for use with -- - -- GNAT. The copyright notice above, and the license provisions that follow -- -@@ -40,6 +40,9 @@ - -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada - -- 2005, this is Pure in any case (AI-362). - -+ pragma No_Elaboration_Code_All; -+ -- Allow the use of that restriction in units that WITH this unit -+ - type Name is (SYSTEM_NAME_GNAT); - System_Name : constant Name := SYSTEM_NAME_GNAT; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ada/system-rtems.ads gcc-6-20160721/gcc/ada/system-rtems.ads ---- gcc-6.1.0/gcc/ada/system-rtems.ads 2015-11-23 11:31:24.000000000 +0000 -+++ gcc-6-20160721/gcc/ada/system-rtems.ads 2016-05-06 09:11:56.000000000 +0000 -@@ -7,7 +7,7 @@ - -- S p e c -- - -- (Compiler Version) -- - -- -- ---- Copyright (C) 1992-2015 Free Software Foundation, Inc. -- -+-- Copyright (C) 1992-2016 Free Software Foundation, Inc. -- - -- -- - -- This specification is derived from the Ada Reference Manual for use with -- - -- GNAT. The copyright notice above, and the license provisions that follow -- -@@ -44,6 +44,9 @@ - -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada - -- 2005, this is Pure in any case (AI-362). - -+ pragma No_Elaboration_Code_All; -+ -- Allow the use of that restriction in units that WITH this unit -+ - type Name is (SYSTEM_NAME_GNAT); - System_Name : constant Name := SYSTEM_NAME_GNAT; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/alias.c gcc-6-20160721/gcc/alias.c ---- gcc-6.1.0/gcc/alias.c 2016-04-04 09:30:16.000000000 +0000 -+++ gcc-6-20160721/gcc/alias.c 2016-05-30 14:00:18.000000000 +0000 -@@ -769,6 +769,10 @@ - tree - reference_alias_ptr_type (tree t) - { -+ /* If the frontend assigns this alias-set zero, preserve that. */ -+ if (lang_hooks.get_alias_set (t) == 0) -+ return ptr_type_node; -+ - tree ptype = reference_alias_ptr_type_1 (&t); - /* If there is a given pointer type for aliasing purposes, return it. */ - if (ptype != NULL_TREE) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/asan.c gcc-6-20160721/gcc/asan.c ---- gcc-6.1.0/gcc/asan.c 2016-04-08 10:46:13.000000000 +0000 -+++ gcc-6-20160721/gcc/asan.c 2016-07-21 16:18:46.000000000 +0000 -@@ -2159,6 +2159,9 @@ - tree - asan_dynamic_init_call (bool after_p) - { -+ if (shadow_ptr_types[0] == NULL_TREE) -+ asan_init_shadow_ptr_types (); -+ - tree fn = builtin_decl_implicit (after_p - ? BUILT_IN_ASAN_AFTER_DYNAMIC_INIT - : BUILT_IN_ASAN_BEFORE_DYNAMIC_INIT); -@@ -2168,8 +2171,6 @@ - pretty_printer module_name_pp; - pp_string (&module_name_pp, main_input_filename); - -- if (shadow_ptr_types[0] == NULL_TREE) -- asan_init_shadow_ptr_types (); - module_name_cst = asan_pp_string (&module_name_pp); - module_name_cst = fold_convert (const_ptr_type_node, - module_name_cst); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/c/ChangeLog gcc-6-20160721/gcc/c/ChangeLog ---- gcc-6.1.0/gcc/c/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/gcc/c/ChangeLog 2016-07-02 10:22:11.000000000 +0000 -@@ -1,3 +1,44 @@ -+2016-07-02 Jakub Jelinek <jakub@redhat.com> -+ -+ Backported from mainline -+ 2016-06-29 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c/71685 -+ * c-typeck.c (c_build_qualified_type): Don't clear -+ C_TYPE_INCOMPLETE_VARS for the main variant. -+ -+2016-06-10 Thomas Schwinge <thomas@codesourcery.com> -+ -+ PR c/71381 -+ Backport from trunk r237290: -+ * c-parser.c (c_parser_omp_variable_list) <OMP_CLAUSE__CACHE_>: -+ Loosen checking. -+ -+2016-05-30 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71349 -+ * c-parser.c (c_parser_omp_for): Don't disallow nowait clause -+ when combined with target construct. -+ -+2016-05-19 David Malcolm <dmalcolm@redhat.com> -+ -+ Backport from trunk r236488. -+ PR c/71171 -+ * c-parser.c (c_parser_generic_selection): Use c_expr::set_error -+ in error-handling. -+ (c_parser_postfix_expression): Likewise. -+ * c-tree.h (c_expr::set_error): New method. -+ * c-typeck.c (parser_build_binary_op): In error-handling, ensure -+ that result's range is initialized. -+ -+2016-04-29 Cesar Philippidis <cesar@codesourcery.com> -+ -+ PR middle-end/70626 -+ * c-parser.c (c_parser_oacc_loop): Don't augment mask with -+ OACC_LOOP_CLAUSE_MASK. -+ (c_parser_oacc_kernels_parallel): Update call to -+ c_oacc_split_loop_clauses. -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/c/c-parser.c gcc-6-20160721/gcc/c/c-parser.c ---- gcc-6.1.0/gcc/c/c-parser.c 2016-04-15 12:24:18.000000000 +0000 -+++ gcc-6-20160721/gcc/c/c-parser.c 2016-06-10 09:46:04.000000000 +0000 -@@ -7185,7 +7185,7 @@ - - error_expr.original_code = ERROR_MARK; - error_expr.original_type = NULL; -- error_expr.value = error_mark_node; -+ error_expr.set_error (); - matched_assoc.type_location = UNKNOWN_LOCATION; - matched_assoc.type = NULL_TREE; - matched_assoc.expression = error_expr; -@@ -7496,13 +7496,13 @@ - gcc_assert (c_dialect_objc ()); - if (!c_parser_require (parser, CPP_DOT, "expected %<.%>")) - { -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - if (c_parser_next_token_is_not (parser, CPP_NAME)) - { - c_parser_error (parser, "expected identifier"); -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - c_token *component_tok = c_parser_peek_token (parser); -@@ -7516,7 +7516,7 @@ - } - default: - c_parser_error (parser, "expected expression"); -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - break; -@@ -7538,7 +7538,7 @@ - parser->error = true; - c_parser_skip_until_found (parser, CPP_CLOSE_BRACE, NULL); - c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL); -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - stmt = c_begin_stmt_expr (); -@@ -7567,7 +7567,7 @@ - "expected %<)%>"); - if (type_name == NULL) - { -- expr.value = error_mark_node; -+ expr.set_error (); - } - else - expr = c_parser_postfix_expression_after_paren_type (parser, -@@ -7627,7 +7627,7 @@ - c_parser_consume_token (parser); - if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>")) - { -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - e1 = c_parser_expr_no_commas (parser, NULL); -@@ -7636,7 +7636,7 @@ - if (!c_parser_require (parser, CPP_COMMA, "expected %<,%>")) - { - c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL); -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - loc = c_parser_peek_token (parser)->location; -@@ -7646,7 +7646,7 @@ - "expected %<)%>"); - if (t1 == NULL) - { -- expr.value = error_mark_node; -+ expr.set_error (); - } - else - { -@@ -7668,7 +7668,7 @@ - c_parser_consume_token (parser); - if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>")) - { -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - t1 = c_parser_type_name (parser); -@@ -7679,7 +7679,7 @@ - if (parser->error) - { - c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL); -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - -@@ -7768,7 +7768,7 @@ - &cexpr_list, true, - &close_paren_loc)) - { -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - -@@ -7776,7 +7776,7 @@ - { - error_at (loc, "wrong number of arguments to " - "%<__builtin_choose_expr%>"); -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - -@@ -7801,25 +7801,25 @@ - c_parser_consume_token (parser); - if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>")) - { -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - t1 = c_parser_type_name (parser); - if (t1 == NULL) - { -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - if (!c_parser_require (parser, CPP_COMMA, "expected %<,%>")) - { - c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL); -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - t2 = c_parser_type_name (parser); - if (t2 == NULL) - { -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - { -@@ -7831,7 +7831,7 @@ - e2 = groktypename (t2, NULL, NULL); - if (e1 == error_mark_node || e2 == error_mark_node) - { -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - -@@ -7856,14 +7856,14 @@ - &cexpr_list, false, - &close_paren_loc)) - { -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - if (vec_safe_length (cexpr_list) != 2) - { - error_at (loc, "wrong number of arguments to " - "%<__builtin_call_with_static_chain%>"); -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - -@@ -7898,7 +7898,7 @@ - &cexpr_list, false, - &close_paren_loc)) - { -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - -@@ -7906,7 +7906,7 @@ - { - error_at (loc, "wrong number of arguments to " - "%<__builtin_complex%>"); -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - -@@ -7928,7 +7928,7 @@ - { - error_at (loc, "%<__builtin_complex%> operand " - "not of real binary floating-point type"); -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - if (TYPE_MAIN_VARIANT (TREE_TYPE (e1_p->value)) -@@ -7936,7 +7936,7 @@ - { - error_at (loc, - "%<__builtin_complex%> operands of different types"); -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - pedwarn_c90 (loc, OPT_Wpedantic, -@@ -7962,7 +7962,7 @@ - &cexpr_list, false, - &close_paren_loc)) - { -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - -@@ -7985,7 +7985,7 @@ - { - error_at (loc, "wrong number of arguments to " - "%<__builtin_shuffle%>"); -- expr.value = error_mark_node; -+ expr.set_error (); - } - set_c_expr_source_range (&expr, loc, close_paren_loc); - break; -@@ -7995,7 +7995,7 @@ - c_parser_consume_token (parser); - if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>")) - { -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - { -@@ -8012,14 +8012,14 @@ - c_parser_consume_token (parser); - if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>")) - { -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - if (c_parser_next_token_is_not (parser, CPP_NAME)) - { - c_parser_error (parser, "expected identifier"); - c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL); -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - { -@@ -8038,13 +8038,13 @@ - c_parser_consume_token (parser); - if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>")) - { -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - t1 = c_parser_type_name (parser); - if (t1 == NULL) - { -- expr.value = error_mark_node; -+ expr.set_error (); - c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL); - break; - } -@@ -8067,7 +8067,7 @@ - error_at (loc, "-fcilkplus must be enabled to use " - "%<_Cilk_spawn%>"); - expr = c_parser_cast_expression (parser, NULL); -- expr.value = error_mark_node; -+ expr.set_error (); - } - else if (c_parser_peek_token (parser)->keyword == RID_CILK_SPAWN) - { -@@ -8086,7 +8086,7 @@ - break; - default: - c_parser_error (parser, "expected expression"); -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - break; -@@ -8107,7 +8107,7 @@ - /* Else fall through to report error. */ - default: - c_parser_error (parser, "expected expression"); -- expr.value = error_mark_node; -+ expr.set_error (); - break; - } - return c_parser_postfix_expression_after_primary -@@ -8325,7 +8325,7 @@ - else - { - c_parser_error (parser, "expected identifier"); -- expr.value = error_mark_node; -+ expr.set_error (); - expr.original_code = ERROR_MARK; - expr.original_type = NULL; - return expr; -@@ -8357,7 +8357,7 @@ - else - { - c_parser_error (parser, "expected identifier"); -- expr.value = error_mark_node; -+ expr.set_error (); - expr.original_code = ERROR_MARK; - expr.original_type = NULL; - return expr; -@@ -10595,6 +10595,8 @@ - switch (kind) - { - case OMP_CLAUSE__CACHE_: -+ /* The OpenACC cache directive explicitly only allows "array -+ elements or subarrays". */ - if (c_parser_peek_token (parser)->type != CPP_OPEN_SQUARE) - { - c_parser_error (parser, "expected %<[%>"); -@@ -10657,25 +10659,6 @@ - break; - } - -- if (kind == OMP_CLAUSE__CACHE_) -- { -- if (TREE_CODE (low_bound) != INTEGER_CST -- && !TREE_READONLY (low_bound)) -- { -- error_at (clause_loc, -- "%qD is not a constant", low_bound); -- t = error_mark_node; -- } -- -- if (TREE_CODE (length) != INTEGER_CST -- && !TREE_READONLY (length)) -- { -- error_at (clause_loc, -- "%qD is not a constant", length); -- t = error_mark_node; -- } -- } -- - t = tree_cons (low_bound, length, t); - } - break; -@@ -13822,6 +13805,8 @@ - c_parser_oacc_loop (location_t loc, c_parser *parser, char *p_name, - omp_clause_mask mask, tree *cclauses, bool *if_p) - { -+ bool is_parallel = ((mask >> PRAGMA_OACC_CLAUSE_REDUCTION) & 1) == 1; -+ - strcat (p_name, " loop"); - mask |= OACC_LOOP_CLAUSE_MASK; - -@@ -13829,7 +13814,7 @@ - cclauses == NULL); - if (cclauses) - { -- clauses = c_oacc_split_loop_clauses (clauses, cclauses); -+ clauses = c_oacc_split_loop_clauses (clauses, cclauses, is_parallel); - if (*cclauses) - *cclauses = c_finish_omp_clauses (*cclauses, false); - if (clauses) -@@ -13924,8 +13909,6 @@ - if (strcmp (p, "loop") == 0) - { - c_parser_consume_token (parser); -- mask |= OACC_LOOP_CLAUSE_MASK; -- - tree block = c_begin_omp_parallel (); - tree clauses; - c_parser_oacc_loop (loc, parser, p_name, mask, &clauses, if_p); -@@ -15094,7 +15077,9 @@ - - strcat (p_name, " for"); - mask |= OMP_FOR_CLAUSE_MASK; -- if (cclauses) -+ /* parallel for{, simd} disallows nowait clause, but for -+ target {teams distribute ,}parallel for{, simd} it should be accepted. */ -+ if (cclauses && (mask & (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_MAP)) == 0) - mask &= ~(OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_NOWAIT); - /* Composite distribute parallel for{, simd} disallows ordered clause. */ - if ((mask & (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_DIST_SCHEDULE)) != 0) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/c/c-tree.h gcc-6-20160721/gcc/c/c-tree.h ---- gcc-6.1.0/gcc/c/c-tree.h 2016-04-13 16:00:52.000000000 +0000 -+++ gcc-6-20160721/gcc/c/c-tree.h 2016-05-19 20:33:51.000000000 +0000 -@@ -143,6 +143,15 @@ - of this expression. */ - location_t get_start () const { return src_range.m_start; } - location_t get_finish () const { return src_range.m_finish; } -+ -+ /* Set the value to error_mark_node whilst ensuring that src_range -+ is initialized. */ -+ void set_error () -+ { -+ value = error_mark_node; -+ src_range.m_start = UNKNOWN_LOCATION; -+ src_range.m_finish = UNKNOWN_LOCATION; -+ } - }; - - /* Type alias for struct c_expr. This allows to use the structure -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/c/c-typeck.c gcc-6-20160721/gcc/c/c-typeck.c ---- gcc-6.1.0/gcc/c/c-typeck.c 2016-04-15 14:46:06.000000000 +0000 -+++ gcc-6-20160721/gcc/c/c-typeck.c 2016-07-02 10:22:11.000000000 +0000 -@@ -3530,7 +3530,12 @@ - result.original_type = NULL; - - if (TREE_CODE (result.value) == ERROR_MARK) -- return result; -+ { -+ set_c_expr_source_range (&result, -+ arg1.get_start (), -+ arg2.get_finish ()); -+ return result; -+ } - - if (location != UNKNOWN_LOCATION) - protected_set_expr_location (result.value, location); -@@ -13533,7 +13538,8 @@ - : build_qualified_type (type, type_quals)); - /* A variant type does not inherit the list of incomplete vars from the - type main variant. */ -- if (RECORD_OR_UNION_TYPE_P (var_type)) -+ if (RECORD_OR_UNION_TYPE_P (var_type) -+ && TYPE_MAIN_VARIANT (var_type) != var_type) - C_TYPE_INCOMPLETE_VARS (var_type) = 0; - return var_type; - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/c-family/ChangeLog gcc-6-20160721/gcc/c-family/ChangeLog ---- gcc-6.1.0/gcc/c-family/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/gcc/c-family/ChangeLog 2016-07-05 17:55:36.000000000 +0000 -@@ -1,3 +1,37 @@ -+2016-07-05 Markus Trippelsdorf <markus@trippelsdorf.de> -+ -+ PR c++/71214 -+ * c-cppbuiltin.c (c_cpp_builtins): Define __cpp_rvalue_references. -+ -+2016-06-14 Jakub Jelinek <jakub@redhat.com> -+ -+ Backported from mainline -+ 2016-06-10 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c/68657 -+ * c.opt (Wpsabi): Add Warning flag. -+ -+2016-06-13 Jakub Jelinek <jakub@redhat.com> -+ -+ PR sanitizer/71498 -+ * c-gimplify.c (ubsan_walk_array_refs_r): Set *walk_subtrees = 0 on -+ all BIND_EXPRs, and on all BIND_EXPRs recurse also on BIND_EXPR_BODY. -+ -+2016-05-30 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71349 -+ * c-omp.c (c_omp_split_clauses): Put OMP_CLAUSE_DEPEND to -+ C_OMP_CLAUSE_SPLIT_TARGET. Put OMP_CLAUSE_NOWAIT to -+ C_OMP_CLAUSE_SPLIT_TARGET if combined with target construct, -+ instead of C_OMP_CLAUSE_SPLIT_FOR. -+ -+2016-04-29 Cesar Philippidis <cesar@codesourcery.com> -+ -+ PR middle-end/70626 -+ * c-common.h (c_oacc_split_loop_clauses): Add boolean argument. -+ * c-omp.c (c_oacc_split_loop_clauses): Use it to duplicate -+ reduction clauses in acc parallel loops. -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/c-family/c-common.h gcc-6-20160721/gcc/c-family/c-common.h ---- gcc-6.1.0/gcc/c-family/c-common.h 2016-01-27 17:17:23.000000000 +0000 -+++ gcc-6-20160721/gcc/c-family/c-common.h 2016-04-29 17:37:55.000000000 +0000 -@@ -1276,7 +1276,7 @@ - extern bool c_omp_check_loop_iv_exprs (location_t, tree, tree, tree, tree, - walk_tree_lh); - extern tree c_finish_oacc_wait (location_t, tree, tree); --extern tree c_oacc_split_loop_clauses (tree, tree *); -+extern tree c_oacc_split_loop_clauses (tree, tree *, bool); - extern void c_omp_split_clauses (location_t, enum tree_code, omp_clause_mask, - tree, tree *); - extern tree c_omp_declare_simd_clauses_to_numbers (tree, tree); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/c-family/c-cppbuiltin.c gcc-6-20160721/gcc/c-family/c-cppbuiltin.c ---- gcc-6.1.0/gcc/c-family/c-cppbuiltin.c 2016-04-20 13:24:29.000000000 +0000 -+++ gcc-6-20160721/gcc/c-family/c-cppbuiltin.c 2016-07-05 17:55:36.000000000 +0000 -@@ -848,6 +848,7 @@ - cpp_define (pfile, "__cpp_decltype=200707"); - cpp_define (pfile, "__cpp_attributes=200809"); - cpp_define (pfile, "__cpp_rvalue_reference=200610"); -+ cpp_define (pfile, "__cpp_rvalue_references=200610"); - cpp_define (pfile, "__cpp_variadic_templates=200704"); - cpp_define (pfile, "__cpp_initializer_lists=200806"); - cpp_define (pfile, "__cpp_delegating_constructors=200604"); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/c-family/c-gimplify.c gcc-6-20160721/gcc/c-family/c-gimplify.c ---- gcc-6.1.0/gcc/c-family/c-gimplify.c 2016-01-27 17:17:23.000000000 +0000 -+++ gcc-6-20160721/gcc/c-family/c-gimplify.c 2016-06-13 21:08:36.000000000 +0000 -@@ -67,23 +67,23 @@ - { - hash_set<tree> *pset = (hash_set<tree> *) data; - -- /* Since walk_tree doesn't call the callback function on the decls -- in BIND_EXPR_VARS, we have to walk them manually. */ - if (TREE_CODE (*tp) == BIND_EXPR) - { -+ /* Since walk_tree doesn't call the callback function on the decls -+ in BIND_EXPR_VARS, we have to walk them manually, so we can avoid -+ instrumenting DECL_INITIAL of TREE_STATIC vars. */ -+ *walk_subtrees = 0; - for (tree decl = BIND_EXPR_VARS (*tp); decl; decl = DECL_CHAIN (decl)) - { - if (TREE_STATIC (decl)) -- { -- *walk_subtrees = 0; -- continue; -- } -+ continue; - walk_tree (&DECL_INITIAL (decl), ubsan_walk_array_refs_r, pset, - pset); - walk_tree (&DECL_SIZE (decl), ubsan_walk_array_refs_r, pset, pset); - walk_tree (&DECL_SIZE_UNIT (decl), ubsan_walk_array_refs_r, pset, - pset); - } -+ walk_tree (&BIND_EXPR_BODY (*tp), ubsan_walk_array_refs_r, pset, pset); - } - else if (TREE_CODE (*tp) == ADDR_EXPR - && TREE_CODE (TREE_OPERAND (*tp, 0)) == ARRAY_REF) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/c-family/c-omp.c gcc-6-20160721/gcc/c-family/c-omp.c ---- gcc-6.1.0/gcc/c-family/c-omp.c 2016-01-18 14:48:26.000000000 +0000 -+++ gcc-6-20160721/gcc/c-family/c-omp.c 2016-05-30 21:40:04.000000000 +0000 -@@ -861,9 +861,10 @@ - #pragma acc parallel loop */ - - tree --c_oacc_split_loop_clauses (tree clauses, tree *not_loop_clauses) -+c_oacc_split_loop_clauses (tree clauses, tree *not_loop_clauses, -+ bool is_parallel) - { -- tree next, loop_clauses; -+ tree next, loop_clauses, nc; - - loop_clauses = *not_loop_clauses = NULL_TREE; - for (; clauses ; clauses = next) -@@ -882,7 +883,23 @@ - case OMP_CLAUSE_SEQ: - case OMP_CLAUSE_INDEPENDENT: - case OMP_CLAUSE_PRIVATE: -+ OMP_CLAUSE_CHAIN (clauses) = loop_clauses; -+ loop_clauses = clauses; -+ break; -+ -+ /* Reductions must be duplicated on both constructs. */ - case OMP_CLAUSE_REDUCTION: -+ if (is_parallel) -+ { -+ nc = build_omp_clause (OMP_CLAUSE_LOCATION (clauses), -+ OMP_CLAUSE_REDUCTION); -+ OMP_CLAUSE_DECL (nc) = OMP_CLAUSE_DECL (clauses); -+ OMP_CLAUSE_REDUCTION_CODE (nc) -+ = OMP_CLAUSE_REDUCTION_CODE (clauses); -+ OMP_CLAUSE_CHAIN (nc) = *not_loop_clauses; -+ *not_loop_clauses = nc; -+ } -+ - OMP_CLAUSE_CHAIN (clauses) = loop_clauses; - loop_clauses = clauses; - break; -@@ -966,6 +983,7 @@ - case OMP_CLAUSE_MAP: - case OMP_CLAUSE_IS_DEVICE_PTR: - case OMP_CLAUSE_DEFAULTMAP: -+ case OMP_CLAUSE_DEPEND: - s = C_OMP_CLAUSE_SPLIT_TARGET; - break; - case OMP_CLAUSE_NUM_TEAMS: -@@ -981,7 +999,6 @@ - s = C_OMP_CLAUSE_SPLIT_PARALLEL; - break; - case OMP_CLAUSE_ORDERED: -- case OMP_CLAUSE_NOWAIT: - s = C_OMP_CLAUSE_SPLIT_FOR; - break; - case OMP_CLAUSE_SCHEDULE: -@@ -1316,6 +1333,18 @@ - else - s = C_OMP_CLAUSE_SPLIT_FOR; - break; -+ case OMP_CLAUSE_NOWAIT: -+ /* Nowait clause is allowed on target, for and sections, but -+ is not allowed on parallel for or parallel sections. Therefore, -+ put it on target construct if present, because that can only -+ be combined with parallel for{, simd} and not with for{, simd}, -+ otherwise to the worksharing construct. */ -+ if ((mask & (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_MAP)) -+ != 0) -+ s = C_OMP_CLAUSE_SPLIT_TARGET; -+ else -+ s = C_OMP_CLAUSE_SPLIT_FOR; -+ break; - default: - gcc_unreachable (); - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/c-family/c.opt gcc-6-20160721/gcc/c-family/c.opt ---- gcc-6.1.0/gcc/c-family/c.opt 2016-03-23 17:51:56.000000000 +0000 -+++ gcc-6-20160721/gcc/c-family/c.opt 2016-06-14 14:44:28.000000000 +0000 -@@ -265,7 +265,7 @@ - Warn if a subobject has an abi_tag attribute that the complete object type does not have. - - Wpsabi --C ObjC C++ ObjC++ LTO Var(warn_psabi) Init(1) Undocumented LangEnabledBy(C ObjC C++ ObjC++,Wabi) -+C ObjC C++ ObjC++ LTO Var(warn_psabi) Init(1) Warning Undocumented LangEnabledBy(C ObjC C++ ObjC++,Wabi) - - Waddress - C ObjC C++ ObjC++ Var(warn_address) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/calls.c gcc-6-20160721/gcc/calls.c ---- gcc-6.1.0/gcc/calls.c 2016-03-18 15:31:18.000000000 +0000 -+++ gcc-6-20160721/gcc/calls.c 2016-05-11 09:51:49.000000000 +0000 -@@ -1188,6 +1188,7 @@ - j--; - } - } -+ argpos = 0; - FOR_EACH_CALL_EXPR_ARG (arg, iter, exp) - { - tree argtype = TREE_TYPE (arg); -@@ -1206,6 +1207,14 @@ - chkp_find_bound_slots (argtype, slots); - } - } -+ else if (CALL_WITH_BOUNDS_P (exp) -+ && pass_by_reference (NULL, TYPE_MODE (argtype), argtype, -+ argpos < n_named_args)) -+ { -+ if (slots) -+ BITMAP_FREE (slots); -+ ptr_arg = j; -+ } - else if (POINTER_BOUNDS_TYPE_P (argtype)) - { - /* We expect bounds in instrumented calls only. -@@ -1249,6 +1258,7 @@ - else - args[j].tree_value = arg; - j--; -+ argpos++; - } - - if (slots) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cfgexpand.c gcc-6-20160721/gcc/cfgexpand.c ---- gcc-6.1.0/gcc/cfgexpand.c 2016-04-14 16:23:06.000000000 +0000 -+++ gcc-6-20160721/gcc/cfgexpand.c 2016-04-27 12:23:50.000000000 +0000 -@@ -1137,7 +1137,7 @@ - HOST_WIDE_INT prev_offset - = align_base (frame_offset, - MAX (alignb, ASAN_RED_ZONE_SIZE), -- FRAME_GROWS_DOWNWARD); -+ !FRAME_GROWS_DOWNWARD); - tree repr_decl = NULL_TREE; - offset - = alloc_stack_frame_space (stack_vars[i].size -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cfgrtl.c gcc-6-20160721/gcc/cfgrtl.c ---- gcc-6.1.0/gcc/cfgrtl.c 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/cfgrtl.c 2016-07-19 19:55:54.000000000 +0000 -@@ -572,8 +572,10 @@ - { - rtx_insn *insn; - -- if (bb == EXIT_BLOCK_PTR_FOR_FN (cfun) || bb == ENTRY_BLOCK_PTR_FOR_FN (cfun) -- || !single_succ_p (bb)) -+ if (bb == EXIT_BLOCK_PTR_FOR_FN (cfun) -+ || bb == ENTRY_BLOCK_PTR_FOR_FN (cfun) -+ || !single_succ_p (bb) -+ || (single_succ_edge (bb)->flags & EDGE_FAKE) != 0) - return false; - - for (insn = BB_HEAD (bb); insn != BB_END (bb); insn = NEXT_INSN (insn)) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cgraph.c gcc-6-20160721/gcc/cgraph.c ---- gcc-6.1.0/gcc/cgraph.c 2016-03-18 09:17:23.000000000 +0000 -+++ gcc-6-20160721/gcc/cgraph.c 2016-06-03 08:27:40.000000000 +0000 -@@ -1504,10 +1504,21 @@ - update_stmt_fn (DECL_STRUCT_FUNCTION (e->caller->decl), new_stmt); - } - -+ /* If changing the call to __cxa_pure_virtual or similar noreturn function, -+ adjust gimple_call_fntype too. */ -+ if (gimple_call_noreturn_p (new_stmt) -+ && VOID_TYPE_P (TREE_TYPE (TREE_TYPE (e->callee->decl))) -+ && TYPE_ARG_TYPES (TREE_TYPE (e->callee->decl)) -+ && (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (e->callee->decl))) -+ == void_type_node)) -+ gimple_call_set_fntype (new_stmt, TREE_TYPE (e->callee->decl)); -+ - /* If the call becomes noreturn, remove the LHS if possible. */ - if (lhs - && (gimple_call_flags (new_stmt) & ECF_NORETURN) -- && TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (lhs))) == INTEGER_CST) -+ && (VOID_TYPE_P (TREE_TYPE (gimple_call_fntype (new_stmt))) -+ || (TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (lhs))) == INTEGER_CST -+ && !TREE_ADDRESSABLE (TREE_TYPE (lhs))))) - { - if (TREE_CODE (lhs) == SSA_NAME) - { -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/aarch64/aarch64-simd-builtins.def gcc-6-20160721/gcc/config/aarch64/aarch64-simd-builtins.def ---- gcc-6.1.0/gcc/config/aarch64/aarch64-simd-builtins.def 2016-01-15 17:50:01.000000000 +0000 -+++ gcc-6-20160721/gcc/config/aarch64/aarch64-simd-builtins.def 2016-07-08 15:41:31.000000000 +0000 -@@ -244,13 +244,17 @@ - /* Implemented by <maxmin><mode>3. - smax variants map to fmaxnm, - smax_nan variants map to fmax. */ -- BUILTIN_VDQIF (BINOP, smax, 3) -- BUILTIN_VDQIF (BINOP, smin, 3) -+ BUILTIN_VDQ_BHSI (BINOP, smax, 3) -+ BUILTIN_VDQ_BHSI (BINOP, smin, 3) - BUILTIN_VDQ_BHSI (BINOP, umax, 3) - BUILTIN_VDQ_BHSI (BINOP, umin, 3) - BUILTIN_VDQF (BINOP, smax_nan, 3) - BUILTIN_VDQF (BINOP, smin_nan, 3) - -+ /* Implemented by <fmaxmin><mode>3. */ -+ BUILTIN_VDQF (BINOP, fmax, 3) -+ BUILTIN_VDQF (BINOP, fmin, 3) -+ - /* Implemented by aarch64_<maxmin_uns>p<mode>. */ - BUILTIN_VDQ_BHSI (BINOP, smaxp, 0) - BUILTIN_VDQ_BHSI (BINOP, sminp, 0) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/aarch64/aarch64-simd.md gcc-6-20160721/gcc/config/aarch64/aarch64-simd.md ---- gcc-6.1.0/gcc/config/aarch64/aarch64-simd.md 2016-02-26 23:41:53.000000000 +0000 -+++ gcc-6-20160721/gcc/config/aarch64/aarch64-simd.md 2016-05-17 13:08:01.000000000 +0000 -@@ -1919,16 +1919,6 @@ - } - ) - --(define_insn "aarch64_vmls<mode>" -- [(set (match_operand:VDQF 0 "register_operand" "=w") -- (minus:VDQF (match_operand:VDQF 1 "register_operand" "0") -- (mult:VDQF (match_operand:VDQF 2 "register_operand" "w") -- (match_operand:VDQF 3 "register_operand" "w"))))] -- "TARGET_SIMD" -- "fmls\\t%0.<Vtype>, %2.<Vtype>, %3.<Vtype>" -- [(set_attr "type" "neon_fp_mla_<Vetype>_scalar<q>")] --) -- - ;; FP Max/Min - ;; Max/Min are introduced by idiom recognition by GCC's mid-end. An - ;; expression like: -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/aarch64/arm_neon.h gcc-6-20160721/gcc/config/aarch64/arm_neon.h ---- gcc-6.1.0/gcc/config/aarch64/arm_neon.h 2016-01-25 11:32:07.000000000 +0000 -+++ gcc-6-20160721/gcc/config/aarch64/arm_neon.h 2016-07-08 15:41:31.000000000 +0000 -@@ -17856,19 +17856,19 @@ - __extension__ static __inline float32x2_t __attribute__ ((__always_inline__)) - vmaxnm_f32 (float32x2_t __a, float32x2_t __b) - { -- return __builtin_aarch64_smaxv2sf (__a, __b); -+ return __builtin_aarch64_fmaxv2sf (__a, __b); - } - - __extension__ static __inline float32x4_t __attribute__ ((__always_inline__)) - vmaxnmq_f32 (float32x4_t __a, float32x4_t __b) - { -- return __builtin_aarch64_smaxv4sf (__a, __b); -+ return __builtin_aarch64_fmaxv4sf (__a, __b); - } - - __extension__ static __inline float64x2_t __attribute__ ((__always_inline__)) - vmaxnmq_f64 (float64x2_t __a, float64x2_t __b) - { -- return __builtin_aarch64_smaxv2df (__a, __b); -+ return __builtin_aarch64_fmaxv2df (__a, __b); - } - - /* vmaxv */ -@@ -18086,19 +18086,19 @@ - __extension__ static __inline float32x2_t __attribute__ ((__always_inline__)) - vminnm_f32 (float32x2_t __a, float32x2_t __b) - { -- return __builtin_aarch64_sminv2sf (__a, __b); -+ return __builtin_aarch64_fminv2sf (__a, __b); - } - - __extension__ static __inline float32x4_t __attribute__ ((__always_inline__)) - vminnmq_f32 (float32x4_t __a, float32x4_t __b) - { -- return __builtin_aarch64_sminv4sf (__a, __b); -+ return __builtin_aarch64_fminv4sf (__a, __b); - } - - __extension__ static __inline float64x2_t __attribute__ ((__always_inline__)) - vminnmq_f64 (float64x2_t __a, float64x2_t __b) - { -- return __builtin_aarch64_sminv2df (__a, __b); -+ return __builtin_aarch64_fminv2df (__a, __b); - } - - /* vminv */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/alpha/alpha.md gcc-6-20160721/gcc/config/alpha/alpha.md ---- gcc-6.1.0/gcc/config/alpha/alpha.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/alpha/alpha.md 2016-05-18 19:39:49.000000000 +0000 -@@ -3738,7 +3738,8 @@ - - ;; BUGCHK is documented common to OSF/1 and VMS PALcode. - (define_insn "trap" -- [(trap_if (const_int 1) (const_int 0))] -+ [(trap_if (const_int 1) (const_int 0)) -+ (use (reg:DI 29))] - "" - "call_pal 0x81" - [(set_attr "type" "callpal")]) -@@ -5157,7 +5158,7 @@ - "TARGET_ABI_OSF" - { - if (TARGET_EXPLICIT_RELOCS) -- return "ldah $29,0($26)\t\t!gpdisp!%*\;lda $29,0($29)\t\t!gpdisp!%*"; -+ return "#"; - else - return "ldgp $29,0($26)"; - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/arm/arm-builtins.c gcc-6-20160721/gcc/config/arm/arm-builtins.c ---- gcc-6.1.0/gcc/config/arm/arm-builtins.c 2016-01-21 09:52:46.000000000 +0000 -+++ gcc-6-20160721/gcc/config/arm/arm-builtins.c 2016-05-31 08:29:39.000000000 +0000 -@@ -2861,6 +2861,10 @@ - int in_n, out_n; - bool out_unsigned_p = TYPE_UNSIGNED (type_out); - -+ /* Can't provide any vectorized builtins when we can't use NEON. */ -+ if (!TARGET_NEON) -+ return NULL_TREE; -+ - if (TREE_CODE (type_out) != VECTOR_TYPE - || TREE_CODE (type_in) != VECTOR_TYPE) - return NULL_TREE; -@@ -2875,7 +2879,7 @@ - NULL_TREE is returned if no such builtin is available. */ - #undef ARM_CHECK_BUILTIN_MODE - #define ARM_CHECK_BUILTIN_MODE(C) \ -- (TARGET_NEON && TARGET_FPU_ARMV8 \ -+ (TARGET_FPU_ARMV8 \ - && flag_unsafe_math_optimizations \ - && ARM_CHECK_BUILTIN_MODE_1 (C)) - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/arm/arm.c gcc-6-20160721/gcc/config/arm/arm.c ---- gcc-6.1.0/gcc/config/arm/arm.c 2016-03-30 12:48:42.000000000 +0000 -+++ gcc-6-20160721/gcc/config/arm/arm.c 2016-07-01 07:40:37.000000000 +0000 -@@ -6704,7 +6704,7 @@ - - /* The PIC register is live on entry to VxWorks PLT entries, so we - must make the call before restoring the PIC register. */ -- if (TARGET_VXWORKS_RTP && flag_pic && !targetm.binds_local_p (decl)) -+ if (TARGET_VXWORKS_RTP && flag_pic && decl && !targetm.binds_local_p (decl)) - return false; - - /* If we are interworking and the function is not declared static -@@ -17755,6 +17755,7 @@ - int num_saves = XVECLEN (operands[0], 0); - unsigned int regno; - unsigned int regno_base = REGNO (operands[1]); -+ bool interrupt_p = IS_INTERRUPT (arm_current_func_type ()); - - offset = 0; - offset += update ? 1 : 0; -@@ -17772,20 +17773,16 @@ - } - - conditional = reverse ? "%?%D0" : "%?%d0"; -- if ((regno_base == SP_REGNUM) && update) -- { -- sprintf (pattern, "pop%s\t{", conditional); -- } -+ /* Can't use POP if returning from an interrupt. */ -+ if ((regno_base == SP_REGNUM) && update && !(interrupt_p && return_pc)) -+ sprintf (pattern, "pop%s\t{", conditional); - else - { - /* Output ldmfd when the base register is SP, otherwise output ldmia. - It's just a convention, their semantics are identical. */ - if (regno_base == SP_REGNUM) -- /* update is never true here, hence there is no need to handle -- pop here. */ -- sprintf (pattern, "ldmfd%s", conditional); -- -- if (update) -+ sprintf (pattern, "ldmfd%s\t", conditional); -+ else if (update) - sprintf (pattern, "ldmia%s\t", conditional); - else - sprintf (pattern, "ldm%s\t", conditional); -@@ -17811,7 +17808,7 @@ - - strcat (pattern, "}"); - -- if (IS_INTERRUPT (arm_current_func_type ()) && return_pc) -+ if (interrupt_p && return_pc) - strcat (pattern, "^"); - - output_asm_insn (pattern, &cond); -@@ -19622,8 +19619,12 @@ - sprintf (instr, "ldmfd%s\t%%|sp, {", conditional); - } - } -+ /* For interrupt returns we have to use an LDM rather than -+ a POP so that we can use the exception return variant. */ -+ else if (IS_INTERRUPT (func_type)) -+ sprintf (instr, "ldmfd%s\t%%|sp!, {", conditional); - else -- sprintf (instr, "pop%s\t{", conditional); -+ sprintf (instr, "pop%s\t{", conditional); - - p = instr + strlen (instr); - -@@ -21461,7 +21462,11 @@ - - /* Naked functions don't have prologues. */ - if (IS_NAKED (func_type)) -- return; -+ { -+ if (flag_stack_usage_info) -+ current_function_static_stack_size = 0; -+ return; -+ } - - /* Make a copy of c_f_p_a_s as we may need to modify it locally. */ - args_to_push = crtl->args.pretend_args_size; -@@ -24715,7 +24720,11 @@ - - /* Naked functions don't have prologues. */ - if (IS_NAKED (func_type)) -- return; -+ { -+ if (flag_stack_usage_info) -+ current_function_static_stack_size = 0; -+ return; -+ } - - if (IS_INTERRUPT (func_type)) - { -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/arm/freebsd.h gcc-6-20160721/gcc/config/arm/freebsd.h ---- gcc-6.1.0/gcc/config/arm/freebsd.h 2016-01-07 20:35:53.000000000 +0000 -+++ gcc-6-20160721/gcc/config/arm/freebsd.h 2016-06-15 19:17:15.000000000 +0000 -@@ -120,6 +120,9 @@ - #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm9 - #endif - -+/* FreeBSD 10 does not support unaligned access for armv6 and up. -+ Unaligned access support was added in FreeBSD 11. */ -+#if FBSD_MAJOR < 11 - #define SUBTARGET_OVERRIDE_INTERNAL_OPTIONS \ - do { \ - if (opts_set->x_unaligned_access == 1) \ -@@ -127,6 +130,7 @@ - if (opts->x_unaligned_access) \ - opts->x_unaligned_access = 0; \ - } while (0) -+#endif - - #undef MAX_SYNC_LIBFUNC_SIZE - #define MAX_SYNC_LIBFUNC_SIZE 4 /* UNITS_PER_WORD not defined yet. */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/avr/avr.c gcc-6-20160721/gcc/config/avr/avr.c ---- gcc-6.1.0/gcc/config/avr/avr.c 2016-02-02 16:01:45.000000000 +0000 -+++ gcc-6-20160721/gcc/config/avr/avr.c 2016-07-06 13:53:36.000000000 +0000 -@@ -9721,7 +9721,9 @@ - { - const char *sname = ACONCAT ((new_prefix, - name + strlen (old_prefix), NULL)); -- return get_section (sname, sect->common.flags, sect->named.decl); -+ return get_section (sname, -+ sect->common.flags & ~SECTION_DECLARED, -+ sect->named.decl); - } - } - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/avr/avr.md gcc-6-20160721/gcc/config/avr/avr.md ---- gcc-6.1.0/gcc/config/avr/avr.md 2016-03-15 16:21:49.000000000 +0000 -+++ gcc-6-20160721/gcc/config/avr/avr.md 2016-06-21 10:23:08.000000000 +0000 -@@ -641,6 +641,22 @@ - if (avr_mem_flash_p (dest)) - DONE; - -+ if (QImode == <MODE>mode -+ && SUBREG_P (src) -+ && CONSTANT_ADDRESS_P (SUBREG_REG (src)) -+ && can_create_pseudo_p()) -+ { -+ // store_bitfield may want to store a SYMBOL_REF or CONST in a -+ // structure that's represented as PSImode. As the upper 16 bits -+ // of PSImode cannot be expressed as an HImode subreg, the rhs is -+ // decomposed into QImode (word_mode) subregs of SYMBOL_REF, -+ // CONST or LABEL_REF; cf. PR71103. -+ -+ rtx const_addr = SUBREG_REG (src); -+ operands[1] = src = copy_rtx (src); -+ SUBREG_REG (src) = copy_to_mode_reg (GET_MODE (const_addr), const_addr); -+ } -+ - /* One of the operands has to be in a register. */ - if (!register_operand (dest, <MODE>mode) - && !reg_or_0_operand (src, <MODE>mode)) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/avr/gen-avr-mmcu-specs.c gcc-6-20160721/gcc/config/avr/gen-avr-mmcu-specs.c ---- gcc-6.1.0/gcc/config/avr/gen-avr-mmcu-specs.c 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/avr/gen-avr-mmcu-specs.c 2016-06-21 10:39:59.000000000 +0000 -@@ -27,7 +27,7 @@ - - #include "avr-devices.c" - --// Get rid of "defaults.h". We just need tm.h for `WITH_AVRLIBS' and -+// Get rid of "defaults.h". We just need tm.h for `WITH_AVRLIBC' and - // and `WITH_RTEMS'. */ - #define GCC_DEFAULTS_H - -@@ -242,12 +242,13 @@ - fprintf (f, "*link_data_start:\n"); - if (mcu->data_section_start - != arch->default_data_section_start) -- fprintf (f, "\t-Tdata 0x%lX", 0x800000UL + mcu->data_section_start); -+ fprintf (f, "\t%%{!Tdata:-Tdata 0x%lX}", -+ 0x800000UL + mcu->data_section_start); - fprintf (f, "\n\n"); - - fprintf (f, "*link_text_start:\n"); - if (mcu->text_section_start != 0x0) -- fprintf (f, "\t-Ttext 0x%lX", 0UL + mcu->text_section_start); -+ fprintf (f, "\t%%{!Ttext:-Ttext 0x%lX}", 0UL + mcu->text_section_start); - fprintf (f, "\n\n"); - } - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/darwin.h gcc-6-20160721/gcc/config/darwin.h ---- gcc-6.1.0/gcc/config/darwin.h 2016-04-08 13:47:37.000000000 +0000 -+++ gcc-6-20160721/gcc/config/darwin.h 2016-06-15 11:12:40.000000000 +0000 -@@ -179,6 +179,7 @@ - %{L*} %(link_libgcc) %o %{fprofile-arcs|fprofile-generate*|coverage:-lgcov} \ - %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1): \ - %{static|static-libgcc|static-libstdc++|static-libgfortran: libgomp.a%s; : -lgomp } } \ -+ %{fcilkplus:%:include(libcilkrts.spec)%(link_cilkrts)} \ - %{fgnu-tm: \ - %{static|static-libgcc|static-libstdc++|static-libgfortran: libitm.a%s; : -litm } } \ - %{!nostdlib:%{!nodefaultlibs:\ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/i386/constraints.md gcc-6-20160721/gcc/config/i386/constraints.md ---- gcc-6.1.0/gcc/config/i386/constraints.md 2016-01-29 18:47:17.000000000 +0000 -+++ gcc-6-20160721/gcc/config/i386/constraints.md 2016-05-25 08:04:09.000000000 +0000 -@@ -141,8 +141,12 @@ - "(ix86_fpmath & FPMATH_387) ? FLOAT_REGS : NO_REGS" - "@internal Any x87 register when 80387 FP arithmetic is enabled.") - -+;; Yr constraint is meant to be used in noavx contexts only, for VEX and EVEX -+;; the lower register numbers need the same instruction sizes as any other. -+;; In case Yr constraint is misused, try to limit the damage, by treating -+;; it as x constraint in avx mode, not v constraint. - (define_register_constraint "Yr" -- "TARGET_SSE ? (X86_TUNE_AVOID_4BYTE_PREFIXES ? NO_REX_SSE_REGS : ALL_SSE_REGS) : NO_REGS" -+ "TARGET_SSE ? ((TARGET_AVOID_4BYTE_PREFIXES && !TARGET_AVX) ? NO_REX_SSE_REGS : SSE_REGS) : NO_REGS" - "@internal Lower SSE register when avoiding REX prefix and all SSE registers otherwise.") - - ;; We use the B prefix to denote any number of internal operands: -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/i386/driver-i386.c gcc-6-20160721/gcc/config/i386/driver-i386.c ---- gcc-6.1.0/gcc/config/i386/driver-i386.c 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/i386/driver-i386.c 2016-06-05 15:45:44.000000000 +0000 -@@ -637,33 +637,27 @@ - } - else if (vendor == signature_CENTAUR_ebx) - { -- if (arch) -+ processor = PROCESSOR_GENERIC; -+ -+ switch (family) - { -- switch (family) -- { -- case 6: -- if (model > 9) -- /* Use the default detection procedure. */ -- processor = PROCESSOR_GENERIC; -- else if (model == 9) -- cpu = "c3-2"; -- else if (model >= 6) -- cpu = "c3"; -- else -- processor = PROCESSOR_GENERIC; -- break; -- case 5: -- if (has_3dnow) -- cpu = "winchip2"; -- else if (has_mmx) -- cpu = "winchip2-c6"; -- else -- processor = PROCESSOR_GENERIC; -- break; -- default: -- /* We have no idea. */ -- processor = PROCESSOR_GENERIC; -- } -+ default: -+ /* We have no idea. */ -+ break; -+ -+ case 5: -+ if (has_3dnow || has_mmx) -+ processor = PROCESSOR_I486; -+ break; -+ -+ case 6: -+ if (model > 9 || has_longmode) -+ /* Use the default detection procedure. */ -+ ; -+ else if (model == 9) -+ processor = PROCESSOR_PENTIUMPRO; -+ else if (model >= 6) -+ processor = PROCESSOR_I486; - } - } - else -@@ -694,7 +688,18 @@ - /* Default. */ - break; - case PROCESSOR_I486: -- cpu = "i486"; -+ if (arch && vendor == signature_CENTAUR_ebx) -+ { -+ if (model >= 6) -+ cpu = "c3"; -+ else if (has_3dnow) -+ cpu = "winchip2"; -+ else -+ /* Assume WinChip C6. */ -+ cpu = "winchip-c6"; -+ } -+ else -+ cpu = "i486"; - break; - case PROCESSOR_PENTIUM: - if (arch && has_mmx) -@@ -817,8 +822,13 @@ - /* It is Pentium M. */ - cpu = "pentium-m"; - else if (has_sse) -- /* It is Pentium III. */ -- cpu = "pentium3"; -+ { -+ if (vendor == signature_CENTAUR_ebx) -+ cpu = "c3-2"; -+ else -+ /* It is Pentium III. */ -+ cpu = "pentium3"; -+ } - else if (has_mmx) - /* It is Pentium II. */ - cpu = "pentium2"; -@@ -902,6 +912,11 @@ - else - cpu = "prescott"; - } -+ else if (has_longmode) -+ /* Perhaps some emulator? Assume x86-64, otherwise gcc -+ -march=native would be unusable for 64-bit compilations, -+ as all the CPUs below are 32-bit only. */ -+ cpu = "x86-64"; - else if (has_sse2) - cpu = "pentium4"; - else if (has_cmov) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/i386/i386-builtin-types.def gcc-6-20160721/gcc/config/i386/i386-builtin-types.def ---- gcc-6.1.0/gcc/config/i386/i386-builtin-types.def 2015-09-04 08:54:14.000000000 +0000 -+++ gcc-6-20160721/gcc/config/i386/i386-builtin-types.def 2016-06-08 13:06:24.000000000 +0000 -@@ -292,6 +292,7 @@ - DEF_FUNCTION_TYPE (V8DF, V2DF) - DEF_FUNCTION_TYPE (V16SI, V4SI) - DEF_FUNCTION_TYPE (V16SI, V8SI) -+DEF_FUNCTION_TYPE (V16SI, V16SF) - DEF_FUNCTION_TYPE (V16SI, V16SI, V16SI, UHI) - DEF_FUNCTION_TYPE (V8DI, V8DI, V8DI, UQI) - DEF_FUNCTION_TYPE (V8DI, PV8DI) -@@ -1035,14 +1036,17 @@ - - DEF_FUNCTION_TYPE_ALIAS (V2DF_FTYPE_V2DF, ROUND) - DEF_FUNCTION_TYPE_ALIAS (V4DF_FTYPE_V4DF, ROUND) -+DEF_FUNCTION_TYPE_ALIAS (V8DF_FTYPE_V8DF, ROUND) - DEF_FUNCTION_TYPE_ALIAS (V4SF_FTYPE_V4SF, ROUND) - DEF_FUNCTION_TYPE_ALIAS (V8SF_FTYPE_V8SF, ROUND) -+DEF_FUNCTION_TYPE_ALIAS (V16SF_FTYPE_V16SF, ROUND) - - DEF_FUNCTION_TYPE_ALIAS (V4SI_FTYPE_V2DF_V2DF, ROUND) - DEF_FUNCTION_TYPE_ALIAS (V8SI_FTYPE_V4DF_V4DF, ROUND) - DEF_FUNCTION_TYPE_ALIAS (V16SI_FTYPE_V8DF_V8DF, ROUND) - DEF_FUNCTION_TYPE_ALIAS (V4SI_FTYPE_V4SF, ROUND) - DEF_FUNCTION_TYPE_ALIAS (V8SI_FTYPE_V8SF, ROUND) -+DEF_FUNCTION_TYPE_ALIAS (V16SI_FTYPE_V16SF, ROUND) - - DEF_FUNCTION_TYPE_ALIAS (INT_FTYPE_V2DF_V2DF, PTEST) - DEF_FUNCTION_TYPE_ALIAS (INT_FTYPE_V2DI_V2DI, PTEST) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/i386/i386.c gcc-6-20160721/gcc/config/i386/i386.c ---- gcc-6.1.0/gcc/config/i386/i386.c 2016-04-15 13:35:12.000000000 +0000 -+++ gcc-6-20160721/gcc/config/i386/i386.c 2016-07-02 10:21:24.000000000 +0000 -@@ -18787,12 +18787,29 @@ - of the register, once we have that information we may be able - to handle some of them more efficiently. */ - if (can_create_pseudo_p () -- && register_operand (op0, mode) - && (CONSTANT_P (op1) - || (SUBREG_P (op1) - && CONSTANT_P (SUBREG_REG (op1)))) -- && !standard_sse_constant_p (op1)) -- op1 = validize_mem (force_const_mem (mode, op1)); -+ && ((register_operand (op0, mode) -+ && !standard_sse_constant_p (op1)) -+ /* ix86_expand_vector_move_misalign() does not like constants. */ -+ || (SSE_REG_MODE_P (mode) -+ && MEM_P (op0) -+ && MEM_ALIGN (op0) < align))) -+ { -+ if (SUBREG_P (op1)) -+ { -+ machine_mode imode = GET_MODE (SUBREG_REG (op1)); -+ rtx r = force_const_mem (imode, SUBREG_REG (op1)); -+ if (r) -+ r = validize_mem (r); -+ else -+ r = force_reg (imode, SUBREG_REG (op1)); -+ op1 = simplify_gen_subreg (mode, r, imode, SUBREG_BYTE (op1)); -+ } -+ else -+ op1 = validize_mem (force_const_mem (mode, op1)); -+ } - - /* We need to check memory alignment for SSE mode since attribute - can make operands unaligned. */ -@@ -18803,13 +18820,8 @@ - { - rtx tmp[2]; - -- /* ix86_expand_vector_move_misalign() does not like constants ... */ -- if (CONSTANT_P (op1) -- || (SUBREG_P (op1) -- && CONSTANT_P (SUBREG_REG (op1)))) -- op1 = validize_mem (force_const_mem (mode, op1)); -- -- /* ... nor both arguments in memory. */ -+ /* ix86_expand_vector_move_misalign() does not like both -+ arguments in memory. */ - if (!register_operand (op0, mode) - && !register_operand (op1, mode)) - op1 = force_reg (mode, op1); -@@ -18895,7 +18907,7 @@ - m = adjust_address (op0, mode, 0); - emit_insn (extract (m, op1, const0_rtx)); - m = adjust_address (op0, mode, 16); -- emit_insn (extract (m, op1, const1_rtx)); -+ emit_insn (extract (m, copy_rtx (op1), const1_rtx)); - } - else - emit_insn (store_unaligned (op0, op1)); -@@ -19203,7 +19215,7 @@ - m = adjust_address (op0, V2SFmode, 0); - emit_insn (gen_sse_storelps (m, op1)); - m = adjust_address (op0, V2SFmode, 8); -- emit_insn (gen_sse_storehps (m, op1)); -+ emit_insn (gen_sse_storehps (m, copy_rtx (op1))); - } - } - } -@@ -23027,17 +23039,33 @@ - switch (code) - { - case EQ: -- return 0x08; -+ return 0x00; - case NE: - return 0x04; - case GT: -- return 0x16; -+ return 0x0e; - case LE: -- return 0x1a; -+ return 0x02; - case GE: -- return 0x15; -+ return 0x0d; - case LT: -- return 0x19; -+ return 0x01; -+ case UNLE: -+ return 0x0a; -+ case UNLT: -+ return 0x09; -+ case UNGE: -+ return 0x05; -+ case UNGT: -+ return 0x06; -+ case UNEQ: -+ return 0x18; -+ case LTGT: -+ return 0x0c; -+ case ORDERED: -+ return 0x07; -+ case UNORDERED: -+ return 0x03; - default: - gcc_unreachable (); - } -@@ -30686,7 +30714,7 @@ - IX86_BUILTIN_CVTPD2PS512, - IX86_BUILTIN_CVTPD2UDQ512, - IX86_BUILTIN_CVTPH2PS512, -- IX86_BUILTIN_CVTPS2DQ512, -+ IX86_BUILTIN_CVTPS2DQ512_MASK, - IX86_BUILTIN_CVTPS2PD512, - IX86_BUILTIN_CVTPS2PH512, - IX86_BUILTIN_CVTPS2UDQ512, -@@ -32126,14 +32154,25 @@ - IX86_BUILTIN_COPYSIGNQ, - - /* Vectorizer support builtins. */ -- IX86_BUILTIN_CEILPD_VEC_PACK_SFIX512, - IX86_BUILTIN_CPYSGNPS, - IX86_BUILTIN_CPYSGNPD, - IX86_BUILTIN_CPYSGNPS256, - IX86_BUILTIN_CPYSGNPS512, - IX86_BUILTIN_CPYSGNPD256, - IX86_BUILTIN_CPYSGNPD512, -+ IX86_BUILTIN_FLOORPS512, -+ IX86_BUILTIN_FLOORPD512, -+ IX86_BUILTIN_CEILPS512, -+ IX86_BUILTIN_CEILPD512, -+ IX86_BUILTIN_TRUNCPS512, -+ IX86_BUILTIN_TRUNCPD512, -+ IX86_BUILTIN_CVTPS2DQ512, -+ IX86_BUILTIN_VEC_PACK_SFIX512, -+ IX86_BUILTIN_FLOORPS_SFIX512, - IX86_BUILTIN_FLOORPD_VEC_PACK_SFIX512, -+ IX86_BUILTIN_CEILPS_SFIX512, -+ IX86_BUILTIN_CEILPD_VEC_PACK_SFIX512, -+ IX86_BUILTIN_ROUNDPS_AZ_SFIX512, - IX86_BUILTIN_ROUNDPD_AZ_VEC_PACK_SFIX512, - - -@@ -32787,9 +32826,9 @@ - { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_llwpcb, "__builtin_ia32_llwpcb", IX86_BUILTIN_LLWPCB, UNKNOWN, (int) VOID_FTYPE_PVOID }, - { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_slwpcb, "__builtin_ia32_slwpcb", IX86_BUILTIN_SLWPCB, UNKNOWN, (int) PVOID_FTYPE_VOID }, - { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_lwpvalsi3, "__builtin_ia32_lwpval32", IX86_BUILTIN_LWPVAL32, UNKNOWN, (int) VOID_FTYPE_UINT_UINT_UINT }, -- { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_lwpvaldi3, "__builtin_ia32_lwpval64", IX86_BUILTIN_LWPVAL64, UNKNOWN, (int) VOID_FTYPE_UINT64_UINT_UINT }, -+ { OPTION_MASK_ISA_LWP | OPTION_MASK_ISA_64BIT, CODE_FOR_lwp_lwpvaldi3, "__builtin_ia32_lwpval64", IX86_BUILTIN_LWPVAL64, UNKNOWN, (int) VOID_FTYPE_UINT64_UINT_UINT }, - { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_lwpinssi3, "__builtin_ia32_lwpins32", IX86_BUILTIN_LWPINS32, UNKNOWN, (int) UCHAR_FTYPE_UINT_UINT_UINT }, -- { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_lwpinsdi3, "__builtin_ia32_lwpins64", IX86_BUILTIN_LWPINS64, UNKNOWN, (int) UCHAR_FTYPE_UINT64_UINT_UINT }, -+ { OPTION_MASK_ISA_LWP | OPTION_MASK_ISA_64BIT, CODE_FOR_lwp_lwpinsdi3, "__builtin_ia32_lwpins64", IX86_BUILTIN_LWPINS64, UNKNOWN, (int) UCHAR_FTYPE_UINT64_UINT_UINT }, - - /* FSGSBASE */ - { OPTION_MASK_ISA_FSGSBASE | OPTION_MASK_ISA_64BIT, CODE_FOR_rdfsbasesi, "__builtin_ia32_rdfsbase32", IX86_BUILTIN_RDFSBASE32, UNKNOWN, (int) UNSIGNED_FTYPE_VOID }, -@@ -33724,12 +33763,12 @@ - - /* BMI */ - { OPTION_MASK_ISA_BMI, CODE_FOR_bmi_bextr_si, "__builtin_ia32_bextr_u32", IX86_BUILTIN_BEXTR32, UNKNOWN, (int) UINT_FTYPE_UINT_UINT }, -- { OPTION_MASK_ISA_BMI, CODE_FOR_bmi_bextr_di, "__builtin_ia32_bextr_u64", IX86_BUILTIN_BEXTR64, UNKNOWN, (int) UINT64_FTYPE_UINT64_UINT64 }, -+ { OPTION_MASK_ISA_BMI | OPTION_MASK_ISA_64BIT, CODE_FOR_bmi_bextr_di, "__builtin_ia32_bextr_u64", IX86_BUILTIN_BEXTR64, UNKNOWN, (int) UINT64_FTYPE_UINT64_UINT64 }, - { OPTION_MASK_ISA_BMI, CODE_FOR_ctzhi2, "__builtin_ctzs", IX86_BUILTIN_CTZS, UNKNOWN, (int) UINT16_FTYPE_UINT16 }, - - /* TBM */ - { OPTION_MASK_ISA_TBM, CODE_FOR_tbm_bextri_si, "__builtin_ia32_bextri_u32", IX86_BUILTIN_BEXTRI32, UNKNOWN, (int) UINT_FTYPE_UINT_UINT }, -- { OPTION_MASK_ISA_TBM, CODE_FOR_tbm_bextri_di, "__builtin_ia32_bextri_u64", IX86_BUILTIN_BEXTRI64, UNKNOWN, (int) UINT64_FTYPE_UINT64_UINT64 }, -+ { OPTION_MASK_ISA_TBM | OPTION_MASK_ISA_64BIT, CODE_FOR_tbm_bextri_di, "__builtin_ia32_bextri_u64", IX86_BUILTIN_BEXTRI64, UNKNOWN, (int) UINT64_FTYPE_UINT64_UINT64 }, - - /* F16C */ - { OPTION_MASK_ISA_F16C, CODE_FOR_vcvtph2ps, "__builtin_ia32_vcvtph2ps", IX86_BUILTIN_CVTPH2PS, UNKNOWN, (int) V4SF_FTYPE_V8HI }, -@@ -33739,11 +33778,11 @@ - - /* BMI2 */ - { OPTION_MASK_ISA_BMI2, CODE_FOR_bmi2_bzhi_si3, "__builtin_ia32_bzhi_si", IX86_BUILTIN_BZHI32, UNKNOWN, (int) UINT_FTYPE_UINT_UINT }, -- { OPTION_MASK_ISA_BMI2, CODE_FOR_bmi2_bzhi_di3, "__builtin_ia32_bzhi_di", IX86_BUILTIN_BZHI64, UNKNOWN, (int) UINT64_FTYPE_UINT64_UINT64 }, -+ { OPTION_MASK_ISA_BMI2 | OPTION_MASK_ISA_64BIT, CODE_FOR_bmi2_bzhi_di3, "__builtin_ia32_bzhi_di", IX86_BUILTIN_BZHI64, UNKNOWN, (int) UINT64_FTYPE_UINT64_UINT64 }, - { OPTION_MASK_ISA_BMI2, CODE_FOR_bmi2_pdep_si3, "__builtin_ia32_pdep_si", IX86_BUILTIN_PDEP32, UNKNOWN, (int) UINT_FTYPE_UINT_UINT }, -- { OPTION_MASK_ISA_BMI2, CODE_FOR_bmi2_pdep_di3, "__builtin_ia32_pdep_di", IX86_BUILTIN_PDEP64, UNKNOWN, (int) UINT64_FTYPE_UINT64_UINT64 }, -+ { OPTION_MASK_ISA_BMI2 | OPTION_MASK_ISA_64BIT, CODE_FOR_bmi2_pdep_di3, "__builtin_ia32_pdep_di", IX86_BUILTIN_PDEP64, UNKNOWN, (int) UINT64_FTYPE_UINT64_UINT64 }, - { OPTION_MASK_ISA_BMI2, CODE_FOR_bmi2_pext_si3, "__builtin_ia32_pext_si", IX86_BUILTIN_PEXT32, UNKNOWN, (int) UINT_FTYPE_UINT_UINT }, -- { OPTION_MASK_ISA_BMI2, CODE_FOR_bmi2_pext_di3, "__builtin_ia32_pext_di", IX86_BUILTIN_PEXT64, UNKNOWN, (int) UINT64_FTYPE_UINT64_UINT64 }, -+ { OPTION_MASK_ISA_BMI2 | OPTION_MASK_ISA_64BIT, CODE_FOR_bmi2_pext_di3, "__builtin_ia32_pext_di", IX86_BUILTIN_PEXT64, UNKNOWN, (int) UINT64_FTYPE_UINT64_UINT64 }, - - /* AVX512F */ - { OPTION_MASK_ISA_AVX512F, CODE_FOR_avx512f_si512_256si, "__builtin_ia32_si512_256si", IX86_BUILTIN_SI512_SI256, UNKNOWN, (int) V16SI_FTYPE_V8SI }, -@@ -33948,6 +33987,17 @@ - { OPTION_MASK_ISA_AVX512F, CODE_FOR_avx512f_sqrtv8df2, "__builtin_ia32_sqrtpd512", IX86_BUILTIN_SQRTPD512, UNKNOWN, (int) V8DF_FTYPE_V8DF }, - { OPTION_MASK_ISA_AVX512F, CODE_FOR_sqrtv16sf2, "__builtin_ia32_sqrtps512", IX86_BUILTIN_SQRTPS_NR512, UNKNOWN, (int) V16SF_FTYPE_V16SF }, - { OPTION_MASK_ISA_AVX512ER, CODE_FOR_avx512er_exp2v16sf, "__builtin_ia32_exp2ps", IX86_BUILTIN_EXP2PS, UNKNOWN, (int) V16SF_FTYPE_V16SF }, -+ { OPTION_MASK_ISA_AVX512F, CODE_FOR_avx512f_roundps512, "__builtin_ia32_floorps512", IX86_BUILTIN_FLOORPS512, (enum rtx_code) ROUND_FLOOR, (int) V16SF_FTYPE_V16SF_ROUND }, -+ { OPTION_MASK_ISA_AVX512F, CODE_FOR_avx512f_roundps512, "__builtin_ia32_ceilps512", IX86_BUILTIN_CEILPS512, (enum rtx_code) ROUND_CEIL, (int) V16SF_FTYPE_V16SF_ROUND }, -+ { OPTION_MASK_ISA_AVX512F, CODE_FOR_avx512f_roundps512, "__builtin_ia32_truncps512", IX86_BUILTIN_TRUNCPS512, (enum rtx_code) ROUND_TRUNC, (int) V16SF_FTYPE_V16SF_ROUND }, -+ { OPTION_MASK_ISA_AVX512F, CODE_FOR_avx512f_roundpd512, "__builtin_ia32_floorpd512", IX86_BUILTIN_FLOORPD512, (enum rtx_code) ROUND_FLOOR, (int) V8DF_FTYPE_V8DF_ROUND }, -+ { OPTION_MASK_ISA_AVX512F, CODE_FOR_avx512f_roundpd512, "__builtin_ia32_ceilpd512", IX86_BUILTIN_CEILPD512, (enum rtx_code) ROUND_CEIL, (int) V8DF_FTYPE_V8DF_ROUND }, -+ { OPTION_MASK_ISA_AVX512F, CODE_FOR_avx512f_roundpd512, "__builtin_ia32_truncpd512", IX86_BUILTIN_TRUNCPD512, (enum rtx_code) ROUND_TRUNC, (int) V8DF_FTYPE_V8DF_ROUND }, -+ { OPTION_MASK_ISA_AVX512F, CODE_FOR_avx512f_fix_notruncv16sfv16si, "__builtin_ia32_cvtps2dq512", IX86_BUILTIN_CVTPS2DQ512, UNKNOWN, (int) V16SI_FTYPE_V16SF }, -+ { OPTION_MASK_ISA_AVX512F, CODE_FOR_avx512f_vec_pack_sfix_v8df, "__builtin_ia32_vec_pack_sfix512", IX86_BUILTIN_VEC_PACK_SFIX512, UNKNOWN, (int) V16SI_FTYPE_V8DF_V8DF }, -+ { OPTION_MASK_ISA_AVX512F, CODE_FOR_roundv16sf2_sfix, "__builtin_ia32_roundps_az_sfix512", IX86_BUILTIN_ROUNDPS_AZ_SFIX512, UNKNOWN, (int) V16SI_FTYPE_V16SF }, -+ { OPTION_MASK_ISA_AVX512F, CODE_FOR_avx512f_roundps512_sfix, "__builtin_ia32_floorps_sfix512", IX86_BUILTIN_FLOORPS_SFIX512, (enum rtx_code) ROUND_FLOOR, (int) V16SI_FTYPE_V16SF_ROUND }, -+ { OPTION_MASK_ISA_AVX512F, CODE_FOR_avx512f_roundps512_sfix, "__builtin_ia32_ceilps_sfix512", IX86_BUILTIN_CEILPS_SFIX512, (enum rtx_code) ROUND_CEIL, (int) V16SI_FTYPE_V16SF_ROUND }, - { OPTION_MASK_ISA_AVX512F, CODE_FOR_roundv8df2_vec_pack_sfix, "__builtin_ia32_roundpd_az_vec_pack_sfix512", IX86_BUILTIN_ROUNDPD_AZ_VEC_PACK_SFIX512, UNKNOWN, (int) V16SI_FTYPE_V8DF_V8DF }, - { OPTION_MASK_ISA_AVX512F, CODE_FOR_avx512f_roundpd_vec_pack_sfix512, "__builtin_ia32_floorpd_vec_pack_sfix512", IX86_BUILTIN_FLOORPD_VEC_PACK_SFIX512, (enum rtx_code) ROUND_FLOOR, (int) V16SI_FTYPE_V8DF_V8DF_ROUND }, - { OPTION_MASK_ISA_AVX512F, CODE_FOR_avx512f_roundpd_vec_pack_sfix512, "__builtin_ia32_ceilpd_vec_pack_sfix512", IX86_BUILTIN_CEILPD_VEC_PACK_SFIX512, (enum rtx_code) ROUND_CEIL, (int) V16SI_FTYPE_V8DF_V8DF_ROUND }, -@@ -34864,7 +34914,7 @@ - { OPTION_MASK_ISA_AVX512F, CODE_FOR_avx512f_cvtpd2ps512_mask_round, "__builtin_ia32_cvtpd2ps512_mask", IX86_BUILTIN_CVTPD2PS512, UNKNOWN, (int) V8SF_FTYPE_V8DF_V8SF_QI_INT }, - { OPTION_MASK_ISA_AVX512F, CODE_FOR_ufix_notruncv8dfv8si2_mask_round, "__builtin_ia32_cvtpd2udq512_mask", IX86_BUILTIN_CVTPD2UDQ512, UNKNOWN, (int) V8SI_FTYPE_V8DF_V8SI_QI_INT }, - { OPTION_MASK_ISA_AVX512F, CODE_FOR_avx512f_vcvtph2ps512_mask_round, "__builtin_ia32_vcvtph2ps512_mask", IX86_BUILTIN_CVTPH2PS512, UNKNOWN, (int) V16SF_FTYPE_V16HI_V16SF_HI_INT }, -- { OPTION_MASK_ISA_AVX512F, CODE_FOR_avx512f_fix_notruncv16sfv16si_mask_round, "__builtin_ia32_cvtps2dq512_mask", IX86_BUILTIN_CVTPS2DQ512, UNKNOWN, (int) V16SI_FTYPE_V16SF_V16SI_HI_INT }, -+ { OPTION_MASK_ISA_AVX512F, CODE_FOR_avx512f_fix_notruncv16sfv16si_mask_round, "__builtin_ia32_cvtps2dq512_mask", IX86_BUILTIN_CVTPS2DQ512_MASK, UNKNOWN, (int) V16SI_FTYPE_V16SF_V16SI_HI_INT }, - { OPTION_MASK_ISA_AVX512F, CODE_FOR_avx512f_cvtps2pd512_mask_round, "__builtin_ia32_cvtps2pd512_mask", IX86_BUILTIN_CVTPS2PD512, UNKNOWN, (int) V8DF_FTYPE_V8SF_V8DF_QI_INT }, - { OPTION_MASK_ISA_AVX512F, CODE_FOR_avx512f_ufix_notruncv16sfv16si_mask_round, "__builtin_ia32_cvtps2udq512_mask", IX86_BUILTIN_CVTPS2UDQ512, UNKNOWN, (int) V16SI_FTYPE_V16SF_V16SI_HI_INT }, - { OPTION_MASK_ISA_AVX512F, CODE_FOR_sse2_cvtsd2ss_round, "__builtin_ia32_cvtsd2ss_round", IX86_BUILTIN_CVTSD2SS_ROUND, UNKNOWN, (int) V4SF_FTYPE_V4SF_V2DF_INT }, -@@ -38441,10 +38491,13 @@ - { - case V2DF_FTYPE_V2DF_ROUND: - case V4DF_FTYPE_V4DF_ROUND: -+ case V8DF_FTYPE_V8DF_ROUND: - case V4SF_FTYPE_V4SF_ROUND: - case V8SF_FTYPE_V8SF_ROUND: -+ case V16SF_FTYPE_V16SF_ROUND: - case V4SI_FTYPE_V4SF_ROUND: - case V8SI_FTYPE_V8SF_ROUND: -+ case V16SI_FTYPE_V16SF_ROUND: - return ix86_expand_sse_round (d, exp, target); - case V4SI_FTYPE_V2DF_V2DF_ROUND: - case V8SI_FTYPE_V4DF_V4DF_ROUND: -@@ -38558,6 +38611,7 @@ - case V16SI_FTYPE_V8SI: - case V16SF_FTYPE_V4SF: - case V16SI_FTYPE_V4SI: -+ case V16SI_FTYPE_V16SF: - case V16SF_FTYPE_V16SF: - case V8DI_FTYPE_UQI: - case V8DF_FTYPE_V4DF: -@@ -42263,6 +42317,8 @@ - return ix86_get_builtin (IX86_BUILTIN_FLOORPS_SFIX); - else if (out_n == 8 && in_n == 8) - return ix86_get_builtin (IX86_BUILTIN_FLOORPS_SFIX256); -+ else if (out_n == 16 && in_n == 16) -+ return ix86_get_builtin (IX86_BUILTIN_FLOORPS_SFIX512); - } - break; - -@@ -42288,6 +42344,8 @@ - return ix86_get_builtin (IX86_BUILTIN_CEILPS_SFIX); - else if (out_n == 8 && in_n == 8) - return ix86_get_builtin (IX86_BUILTIN_CEILPS_SFIX256); -+ else if (out_n == 16 && in_n == 16) -+ return ix86_get_builtin (IX86_BUILTIN_CEILPS_SFIX512); - } - break; - -@@ -42300,6 +42358,8 @@ - return ix86_get_builtin (IX86_BUILTIN_VEC_PACK_SFIX); - else if (out_n == 8 && in_n == 4) - return ix86_get_builtin (IX86_BUILTIN_VEC_PACK_SFIX256); -+ else if (out_n == 16 && in_n == 8) -+ return ix86_get_builtin (IX86_BUILTIN_VEC_PACK_SFIX512); - } - if (out_mode == SImode && in_mode == SFmode) - { -@@ -42307,6 +42367,8 @@ - return ix86_get_builtin (IX86_BUILTIN_CVTPS2DQ); - else if (out_n == 8 && in_n == 8) - return ix86_get_builtin (IX86_BUILTIN_CVTPS2DQ256); -+ else if (out_n == 16 && in_n == 16) -+ return ix86_get_builtin (IX86_BUILTIN_CVTPS2DQ512); - } - break; - -@@ -42332,6 +42394,8 @@ - return ix86_get_builtin (IX86_BUILTIN_ROUNDPS_AZ_SFIX); - else if (out_n == 8 && in_n == 8) - return ix86_get_builtin (IX86_BUILTIN_ROUNDPS_AZ_SFIX256); -+ else if (out_n == 16 && in_n == 16) -+ return ix86_get_builtin (IX86_BUILTIN_ROUNDPS_AZ_SFIX512); - } - break; - -@@ -42346,6 +42410,8 @@ - return ix86_get_builtin (IX86_BUILTIN_FLOORPD); - else if (out_n == 4 && in_n == 4) - return ix86_get_builtin (IX86_BUILTIN_FLOORPD256); -+ else if (out_n == 8 && in_n == 8) -+ return ix86_get_builtin (IX86_BUILTIN_FLOORPD512); - } - if (out_mode == SFmode && in_mode == SFmode) - { -@@ -42353,6 +42419,8 @@ - return ix86_get_builtin (IX86_BUILTIN_FLOORPS); - else if (out_n == 8 && in_n == 8) - return ix86_get_builtin (IX86_BUILTIN_FLOORPS256); -+ else if (out_n == 16 && in_n == 16) -+ return ix86_get_builtin (IX86_BUILTIN_FLOORPS512); - } - break; - -@@ -42367,6 +42435,8 @@ - return ix86_get_builtin (IX86_BUILTIN_CEILPD); - else if (out_n == 4 && in_n == 4) - return ix86_get_builtin (IX86_BUILTIN_CEILPD256); -+ else if (out_n == 8 && in_n == 8) -+ return ix86_get_builtin (IX86_BUILTIN_CEILPD512); - } - if (out_mode == SFmode && in_mode == SFmode) - { -@@ -42374,6 +42444,8 @@ - return ix86_get_builtin (IX86_BUILTIN_CEILPS); - else if (out_n == 8 && in_n == 8) - return ix86_get_builtin (IX86_BUILTIN_CEILPS256); -+ else if (out_n == 16 && in_n == 16) -+ return ix86_get_builtin (IX86_BUILTIN_CEILPS512); - } - break; - -@@ -42388,6 +42460,8 @@ - return ix86_get_builtin (IX86_BUILTIN_TRUNCPD); - else if (out_n == 4 && in_n == 4) - return ix86_get_builtin (IX86_BUILTIN_TRUNCPD256); -+ else if (out_n == 8 && in_n == 8) -+ return ix86_get_builtin (IX86_BUILTIN_TRUNCPD512); - } - if (out_mode == SFmode && in_mode == SFmode) - { -@@ -42395,6 +42469,8 @@ - return ix86_get_builtin (IX86_BUILTIN_TRUNCPS); - else if (out_n == 8 && in_n == 8) - return ix86_get_builtin (IX86_BUILTIN_TRUNCPS256); -+ else if (out_n == 16 && in_n == 16) -+ return ix86_get_builtin (IX86_BUILTIN_TRUNCPS512); - } - break; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/i386/i386.h gcc-6-20160721/gcc/config/i386/i386.h ---- gcc-6.1.0/gcc/config/i386/i386.h 2016-03-30 03:57:30.000000000 +0000 -+++ gcc-6-20160721/gcc/config/i386/i386.h 2016-05-25 08:04:09.000000000 +0000 -@@ -465,6 +465,8 @@ - ix86_tune_features[X86_TUNE_SLOW_PSHUFB] - #define TARGET_VECTOR_PARALLEL_EXECUTION \ - ix86_tune_features[X86_TUNE_VECTOR_PARALLEL_EXECUTION] -+#define TARGET_AVOID_4BYTE_PREFIXES \ -+ ix86_tune_features[X86_TUNE_AVOID_4BYTE_PREFIXES] - #define TARGET_FUSE_CMP_AND_BRANCH_32 \ - ix86_tune_features[X86_TUNE_FUSE_CMP_AND_BRANCH_32] - #define TARGET_FUSE_CMP_AND_BRANCH_64 \ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/i386/i386.md gcc-6-20160721/gcc/config/i386/i386.md ---- gcc-6.1.0/gcc/config/i386/i386.md 2016-04-15 13:35:12.000000000 +0000 -+++ gcc-6-20160721/gcc/config/i386/i386.md 2016-06-16 09:29:24.000000000 +0000 -@@ -9332,7 +9332,7 @@ - }) - - (define_split -- [(set (match_operand:SF 0 "register_operand") -+ [(set (match_operand:SF 0 "general_reg_operand") - (match_operator:SF 1 "absneg_operator" [(match_dup 0)])) - (use (match_operand:V4SF 2)) - (clobber (reg:CC FLAGS_REG))] -@@ -9356,7 +9356,7 @@ - }) - - (define_split -- [(set (match_operand:DF 0 "register_operand") -+ [(set (match_operand:DF 0 "general_reg_operand") - (match_operator:DF 1 "absneg_operator" [(match_dup 0)])) - (use (match_operand 2)) - (clobber (reg:CC FLAGS_REG))] -@@ -9394,7 +9394,7 @@ - }) - - (define_split -- [(set (match_operand:XF 0 "register_operand") -+ [(set (match_operand:XF 0 "general_reg_operand") - (match_operator:XF 1 "absneg_operator" [(match_dup 0)])) - (use (match_operand 2)) - (clobber (reg:CC FLAGS_REG))] -@@ -11078,20 +11078,19 @@ - (const_int 1)) - (clobber (reg:CC FLAGS_REG))])] - "TARGET_64BIT && !TARGET_USE_BT" -- [(const_int 0)] -+ [(parallel [(set (match_dup 0) -+ (ior:DI (match_dup 0) (match_dup 3))) -+ (clobber (reg:CC FLAGS_REG))])] - { - int i = INTVAL (operands[1]); - -- rtx op1 = gen_int_mode (HOST_WIDE_INT_1U << i, DImode); -+ operands[3] = gen_int_mode (HOST_WIDE_INT_1U << i, DImode); - -- if (i >= 31) -+ if (!x86_64_immediate_operand (operands[3], DImode)) - { -- emit_move_insn (operands[2], op1); -- op1 = operands[2]; -+ emit_move_insn (operands[2], operands[3]); -+ operands[3] = operands[2]; - } -- -- emit_insn (gen_iordi3 (operands[0], operands[0], op1)); -- DONE; - }) - - (define_peephole2 -@@ -11103,20 +11102,19 @@ - (const_int 0)) - (clobber (reg:CC FLAGS_REG))])] - "TARGET_64BIT && !TARGET_USE_BT" -- [(const_int 0)] -+ [(parallel [(set (match_dup 0) -+ (and:DI (match_dup 0) (match_dup 3))) -+ (clobber (reg:CC FLAGS_REG))])] - { - int i = INTVAL (operands[1]); - -- rtx op1 = gen_int_mode (HOST_WIDE_INT_1U << i, DImode); -+ operands[3] = gen_int_mode (~(HOST_WIDE_INT_1U << i), DImode); - -- if (i >= 32) -+ if (!x86_64_immediate_operand (operands[3], DImode)) - { -- emit_move_insn (operands[2], op1); -- op1 = operands[2]; -+ emit_move_insn (operands[2], operands[3]); -+ operands[3] = operands[2]; - } -- -- emit_insn (gen_anddi3 (operands[0], operands[0], op1)); -- DONE; - }) - - (define_peephole2 -@@ -11129,20 +11127,19 @@ - (match_dup 0) (const_int 1) (match_dup 1)))) - (clobber (reg:CC FLAGS_REG))])] - "TARGET_64BIT && !TARGET_USE_BT" -- [(const_int 0)] -+ [(parallel [(set (match_dup 0) -+ (xor:DI (match_dup 0) (match_dup 3))) -+ (clobber (reg:CC FLAGS_REG))])] - { - int i = INTVAL (operands[1]); - -- rtx op1 = gen_int_mode (HOST_WIDE_INT_1U << i, DImode); -+ operands[3] = gen_int_mode (HOST_WIDE_INT_1U << i, DImode); - -- if (i >= 31) -+ if (!x86_64_immediate_operand (operands[3], DImode)) - { -- emit_move_insn (operands[2], op1); -- op1 = operands[2]; -+ emit_move_insn (operands[2], operands[3]); -+ operands[3] = operands[2]; - } -- -- emit_insn (gen_xordi3 (operands[0], operands[0], op1)); -- DONE; - }) - - (define_insn "*bt<mode>" -@@ -11859,8 +11856,7 @@ - "(peep2_reg_dead_p (3, operands[1]) - || operands_match_p (operands[1], operands[3])) - && ! reg_overlap_mentioned_p (operands[3], operands[0]) -- && ! (GET_CODE (operands[4]) == CLOBBER -- && reg_mentioned_p (operands[3], operands[4]))" -+ && ! reg_set_p (operands[3], operands[4])" - [(parallel [(set (match_dup 5) (match_dup 0)) - (match_dup 4)]) - (set (strict_low_part (match_dup 6)) -@@ -11904,8 +11900,7 @@ - "(peep2_reg_dead_p (3, operands[1]) - || operands_match_p (operands[1], operands[3])) - && ! reg_overlap_mentioned_p (operands[3], operands[0]) -- && ! (GET_CODE (operands[4]) == CLOBBER -- && reg_mentioned_p (operands[3], operands[4]))" -+ && ! reg_set_p (operands[3], operands[4])" - [(parallel [(set (match_dup 5) (match_dup 0)) - (match_dup 4)]) - (set (strict_low_part (match_dup 6)) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/i386/predicates.md gcc-6-20160721/gcc/config/i386/predicates.md ---- gcc-6.1.0/gcc/config/i386/predicates.md 2016-01-05 20:19:16.000000000 +0000 -+++ gcc-6-20160721/gcc/config/i386/predicates.md 2016-04-27 13:35:03.000000000 +0000 -@@ -637,7 +637,7 @@ - (op, mode == VOIDmode ? mode : Pmode)") - (match_operand 0 "call_register_no_elim_operand") - (ior (and (not (match_test "TARGET_X32")) -- (match_operand 0 "sibcall_memory_operand")) -+ (match_operand 0 "memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode") - (match_operand 0 "GOT_memory_operand"))))) - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/i386/sse.md gcc-6-20160721/gcc/config/i386/sse.md ---- gcc-6.1.0/gcc/config/i386/sse.md 2016-04-15 15:53:01.000000000 +0000 -+++ gcc-6-20160721/gcc/config/i386/sse.md 2016-06-08 13:06:24.000000000 +0000 -@@ -4488,7 +4488,7 @@ - (set_attr "prefix" "maybe_vex") - (set_attr "mode" "<sseinsnmode>")]) - --(define_insn "<mask_codefor>avx512f_fix_notruncv16sfv16si<mask_name><round_name>" -+(define_insn "avx512f_fix_notruncv16sfv16si<mask_name><round_name>" - [(set (match_operand:V16SI 0 "register_operand" "=v") - (unspec:V16SI - [(match_operand:V16SF 1 "<round_nimm_predicate>" "<round_constraint>")] -@@ -5046,7 +5046,7 @@ - (set_attr "ssememalign" "64") - (set_attr "mode" "V2DF")]) - --(define_insn "<mask_codefor>avx512f_cvtpd2dq512<mask_name><round_name>" -+(define_insn "avx512f_cvtpd2dq512<mask_name><round_name>" - [(set (match_operand:V8SI 0 "register_operand" "=v") - (unspec:V8SI - [(match_operand:V8DF 1 "<round_nimm_predicate>" "<round_constraint>")] -@@ -6006,6 +6006,23 @@ - DONE; - }) - -+(define_expand "avx512f_vec_pack_sfix_v8df" -+ [(match_operand:V16SI 0 "register_operand") -+ (match_operand:V8DF 1 "nonimmediate_operand") -+ (match_operand:V8DF 2 "nonimmediate_operand")] -+ "TARGET_AVX512F" -+{ -+ rtx r1, r2; -+ -+ r1 = gen_reg_rtx (V8SImode); -+ r2 = gen_reg_rtx (V8SImode); -+ -+ emit_insn (gen_avx512f_cvtpd2dq512 (r1, operands[1])); -+ emit_insn (gen_avx512f_cvtpd2dq512 (r2, operands[2])); -+ emit_insn (gen_avx_vec_concatv16si (operands[0], r1, r2)); -+ DONE; -+}) -+ - (define_expand "vec_pack_sfix_v4df" - [(match_operand:V8SI 0 "register_operand") - (match_operand:V4DF 1 "nonimmediate_operand") -@@ -10566,22 +10583,23 @@ - (set_attr "mode" "<sseinsnmode>")]) - - (define_insn "<shift_insn><mode>3<mask_name>" -- [(set (match_operand:VI48_AVX2 0 "register_operand" "=x,v") -+ [(set (match_operand:VI48_AVX2 0 "register_operand" "=x,x,v") - (any_lshift:VI48_AVX2 -- (match_operand:VI48_AVX2 1 "register_operand" "0,v") -- (match_operand:SI 2 "nonmemory_operand" "xN,vN")))] -+ (match_operand:VI48_AVX2 1 "register_operand" "0,x,v") -+ (match_operand:SI 2 "nonmemory_operand" "xN,xN,vN")))] - "TARGET_SSE2 && <mask_mode512bit_condition>" - "@ - p<vshift><ssemodesuffix>\t{%2, %0|%0, %2} -- vp<vshift><ssemodesuffix>\t{%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2}" -- [(set_attr "isa" "noavx,avx") -+ vp<vshift><ssemodesuffix>\t{%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2} -+ vp<vshift><ssemodesuffix>\t{%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2}" -+ [(set_attr "isa" "noavx,avx,avx512bw") - (set_attr "type" "sseishft") - (set (attr "length_immediate") - (if_then_else (match_operand 2 "const_int_operand") - (const_string "1") - (const_string "0"))) -- (set_attr "prefix_data16" "1,*") -- (set_attr "prefix" "orig,vex") -+ (set_attr "prefix_data16" "1,*,*") -+ (set_attr "prefix" "orig,vex,evex") - (set_attr "mode" "<sseinsnmode>")]) - - (define_insn "<shift_insn><mode>3<mask_name>" -@@ -15246,13 +15264,25 @@ - DONE; - }) - --(define_expand "avx512f_roundpd512" -- [(match_operand:V8DF 0 "register_operand") -- (match_operand:V8DF 1 "nonimmediate_operand") -+(define_expand "avx512f_round<castmode>512" -+ [(match_operand:VF_512 0 "register_operand") -+ (match_operand:VF_512 1 "nonimmediate_operand") -+ (match_operand:SI 2 "const_0_to_15_operand")] -+ "TARGET_AVX512F" -+{ -+ emit_insn (gen_avx512f_rndscale<mode> (operands[0], operands[1], operands[2])); -+ DONE; -+}) -+ -+(define_expand "avx512f_roundps512_sfix" -+ [(match_operand:V16SI 0 "register_operand") -+ (match_operand:V16SF 1 "nonimmediate_operand") - (match_operand:SI 2 "const_0_to_15_operand")] - "TARGET_AVX512F" - { -- emit_insn (gen_avx512f_rndscalev8df (operands[0], operands[1], operands[2])); -+ rtx tmp = gen_reg_rtx (V16SFmode); -+ emit_insn (gen_avx512f_rndscalev16sf (tmp, operands[1], operands[2])); -+ emit_insn (gen_fix_truncv16sfv16si2 (operands[0], tmp)); - DONE; - }) - -@@ -15352,7 +15382,7 @@ - - (define_expand "round<mode>2_sfix" - [(match_operand:<sseintvecmode> 0 "register_operand") -- (match_operand:VF1_128_256 1 "register_operand")] -+ (match_operand:VF1 1 "register_operand")] - "TARGET_ROUND && !flag_trapping_math" - { - rtx tmp = gen_reg_rtx (<MODE>mode); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/microblaze/rtems.h gcc-6-20160721/gcc/config/microblaze/rtems.h ---- gcc-6.1.0/gcc/config/microblaze/rtems.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/microblaze/rtems.h 2016-05-10 07:00:22.000000000 +0000 -@@ -23,3 +23,10 @@ - builtin_define( "__rtems__" ); \ - builtin_assert( "system=rtems" ); \ - } while (0) -+ -+/* Redefine to include only items relevant for RTEMS */ -+#undef LINK_SPEC -+#define LINK_SPEC "%{shared:-shared} -N -relax \ -+ %{mbig-endian:-EB --oformat=elf32-microblaze} \ -+ %{mlittle-endian:-EL --oformat=elf32-microblazeel} \ -+ %{mxl-gp-opt:%{G*}} %{!mxl-gp-opt: -G 0}" -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/nvptx/nvptx.c gcc-6-20160721/gcc/config/nvptx/nvptx.c ---- gcc-6.1.0/gcc/config/nvptx/nvptx.c 2016-03-21 15:31:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/nvptx/nvptx.c 2016-05-17 16:08:37.000000000 +0000 -@@ -483,7 +483,7 @@ - static rtx - nvptx_libcall_value (machine_mode mode, const_rtx) - { -- if (!cfun->machine->doing_call) -+ if (!cfun || !cfun->machine->doing_call) - /* Pretend to return in a hard reg for early uses before pseudos can be - generated. */ - return gen_rtx_REG (mode, NVPTX_RETURN_REGNUM); -@@ -502,6 +502,7 @@ - - if (outgoing) - { -+ gcc_assert (cfun); - cfun->machine->return_mode = mode; - return gen_rtx_REG (mode, NVPTX_RETURN_REGNUM); - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/pa/pa.c gcc-6-20160721/gcc/config/pa/pa.c ---- gcc-6.1.0/gcc/config/pa/pa.c 2016-01-12 01:35:23.000000000 +0000 -+++ gcc-6-20160721/gcc/config/pa/pa.c 2016-07-20 22:35:50.000000000 +0000 -@@ -4541,63 +4541,78 @@ - lcla2 and load_offset_label_address insn patterns. */ - rtx reg = gen_reg_rtx (SImode); - rtx_code_label *label_rtx = gen_label_rtx (); -- rtx begin_label_rtx; -+ rtx mcount = gen_rtx_MEM (Pmode, gen_rtx_SYMBOL_REF (Pmode, "_mcount")); -+ int reg_parm_stack_space = REG_PARM_STACK_SPACE (NULL_TREE); -+ rtx arg_bytes, begin_label_rtx; - rtx_insn *call_insn; - char begin_label_name[16]; -+ bool use_mcount_pcrel_call; -+ -+ /* If we can reach _mcount with a pc-relative call, we can optimize -+ loading the address of the current function. This requires linker -+ long branch stub support. */ -+ if (!TARGET_PORTABLE_RUNTIME -+ && !TARGET_LONG_CALLS -+ && (TARGET_SOM || flag_function_sections)) -+ use_mcount_pcrel_call = TRUE; -+ else -+ use_mcount_pcrel_call = FALSE; - - ASM_GENERATE_INTERNAL_LABEL (begin_label_name, FUNC_BEGIN_PROLOG_LABEL, - label_no); - begin_label_rtx = gen_rtx_SYMBOL_REF (SImode, ggc_strdup (begin_label_name)); - -- if (TARGET_64BIT) -- emit_move_insn (arg_pointer_rtx, -- gen_rtx_PLUS (word_mode, virtual_outgoing_args_rtx, -- GEN_INT (64))); -- - emit_move_insn (gen_rtx_REG (word_mode, 26), gen_rtx_REG (word_mode, 2)); - -- /* The address of the function is loaded into %r25 with an instruction- -- relative sequence that avoids the use of relocations. The sequence -- is split so that the load_offset_label_address instruction can -- occupy the delay slot of the call to _mcount. */ -- if (TARGET_PA_20) -- emit_insn (gen_lcla2 (reg, label_rtx)); -- else -- emit_insn (gen_lcla1 (reg, label_rtx)); -- -- emit_insn (gen_load_offset_label_address (gen_rtx_REG (SImode, 25), -- reg, begin_label_rtx, label_rtx)); -- --#if !NO_DEFERRED_PROFILE_COUNTERS -- { -- rtx count_label_rtx, addr, r24; -- char count_label_name[16]; -- -- funcdef_nos.safe_push (label_no); -- ASM_GENERATE_INTERNAL_LABEL (count_label_name, "LP", label_no); -- count_label_rtx = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (count_label_name)); -- -- addr = force_reg (Pmode, count_label_rtx); -- r24 = gen_rtx_REG (Pmode, 24); -- emit_move_insn (r24, addr); -- -- call_insn = -- emit_call_insn (gen_call (gen_rtx_MEM (Pmode, -- gen_rtx_SYMBOL_REF (Pmode, -- "_mcount")), -- GEN_INT (TARGET_64BIT ? 24 : 12))); -- -- use_reg (&CALL_INSN_FUNCTION_USAGE (call_insn), r24); -- } --#else -- -- call_insn = -- emit_call_insn (gen_call (gen_rtx_MEM (Pmode, -- gen_rtx_SYMBOL_REF (Pmode, -- "_mcount")), -- GEN_INT (TARGET_64BIT ? 16 : 8))); -+ if (!use_mcount_pcrel_call) -+ { -+ /* The address of the function is loaded into %r25 with an instruction- -+ relative sequence that avoids the use of relocations. The sequence -+ is split so that the load_offset_label_address instruction can -+ occupy the delay slot of the call to _mcount. */ -+ if (TARGET_PA_20) -+ emit_insn (gen_lcla2 (reg, label_rtx)); -+ else -+ emit_insn (gen_lcla1 (reg, label_rtx)); -+ -+ emit_insn (gen_load_offset_label_address (gen_rtx_REG (SImode, 25), -+ reg, -+ begin_label_rtx, -+ label_rtx)); -+ } -+ -+ if (!NO_DEFERRED_PROFILE_COUNTERS) -+ { -+ rtx count_label_rtx, addr, r24; -+ char count_label_name[16]; -+ -+ funcdef_nos.safe_push (label_no); -+ ASM_GENERATE_INTERNAL_LABEL (count_label_name, "LP", label_no); -+ count_label_rtx = gen_rtx_SYMBOL_REF (Pmode, -+ ggc_strdup (count_label_name)); -+ -+ addr = force_reg (Pmode, count_label_rtx); -+ r24 = gen_rtx_REG (Pmode, 24); -+ emit_move_insn (r24, addr); -+ -+ arg_bytes = GEN_INT (TARGET_64BIT ? 24 : 12); -+ if (use_mcount_pcrel_call) -+ call_insn = emit_call_insn (gen_call_mcount (mcount, arg_bytes, -+ begin_label_rtx)); -+ else -+ call_insn = emit_call_insn (gen_call (mcount, arg_bytes)); - --#endif -+ use_reg (&CALL_INSN_FUNCTION_USAGE (call_insn), r24); -+ } -+ else -+ { -+ arg_bytes = GEN_INT (TARGET_64BIT ? 16 : 8); -+ if (use_mcount_pcrel_call) -+ call_insn = emit_call_insn (gen_call_mcount (mcount, arg_bytes, -+ begin_label_rtx)); -+ else -+ call_insn = emit_call_insn (gen_call (mcount, arg_bytes)); -+ } - - use_reg (&CALL_INSN_FUNCTION_USAGE (call_insn), gen_rtx_REG (SImode, 25)); - use_reg (&CALL_INSN_FUNCTION_USAGE (call_insn), gen_rtx_REG (SImode, 26)); -@@ -4605,6 +4620,10 @@ - /* Indicate the _mcount call cannot throw, nor will it execute a - non-local goto. */ - make_reg_eh_region_note_nothrow_nononlocal (call_insn); -+ -+ /* Allocate space for fixed arguments. */ -+ if (reg_parm_stack_space > crtl->outgoing_args_size) -+ crtl->outgoing_args_size = reg_parm_stack_space; - } - - /* Fetch the return address for the frame COUNT steps up from -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/pa/pa.md gcc-6-20160721/gcc/config/pa/pa.md ---- gcc-6.1.0/gcc/config/pa/pa.md 2016-03-25 00:59:02.000000000 +0000 -+++ gcc-6-20160721/gcc/config/pa/pa.md 2016-07-20 22:35:50.000000000 +0000 -@@ -8216,6 +8216,170 @@ - (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 12)] - (symbol_ref "pa_attr_length_indirect_call (insn)")))]) - -+/* Expand special pc-relative call to _mcount. */ -+ -+(define_expand "call_mcount" -+ [(parallel [(call (match_operand:SI 0 "" "") -+ (match_operand 1 "" "")) -+ (set (reg:SI 25) -+ (plus:SI (reg:SI 2) -+ (minus:SI (match_operand 2 "" "") -+ (plus:SI (pc) (const_int 4))))) -+ (clobber (reg:SI 2))])] -+ "!TARGET_PORTABLE_RUNTIME" -+ " -+{ -+ rtx op = XEXP (operands[0], 0); -+ rtx nb = operands[1]; -+ rtx lab = operands[2]; -+ -+ if (TARGET_64BIT) -+ { -+ rtx r4 = gen_rtx_REG (word_mode, 4); -+ emit_move_insn (arg_pointer_rtx, -+ gen_rtx_PLUS (word_mode, virtual_outgoing_args_rtx, -+ GEN_INT (64))); -+ emit_call_insn (gen_call_mcount_64bit (op, nb, lab, r4)); -+ } -+ else -+ { -+ if (flag_pic) -+ { -+ rtx r4 = gen_rtx_REG (word_mode, 4); -+ emit_call_insn (gen_call_mcount_pic (op, nb, lab, r4)); -+ } -+ else -+ emit_call_insn (gen_call_mcount_nonpic (op, nb, lab)); -+ } -+ -+ DONE; -+}") -+ -+(define_insn "call_mcount_nonpic" -+ [(call (mem:SI (match_operand 0 "call_operand_address" "")) -+ (match_operand 1 "" "i")) -+ (set (reg:SI 25) -+ (plus:SI (reg:SI 2) -+ (minus:SI (match_operand 2 "" "") -+ (plus:SI (pc) (const_int 4))))) -+ (clobber (reg:SI 2))] -+ "!TARGET_PORTABLE_RUNTIME && !TARGET_64BIT" -+ "* -+{ -+ pa_output_arg_descriptor (insn); -+ return \"{bl|b,l} %0,%%r2\;ldo %2-.-4(%%r2),%%r25\"; -+}" -+ [(set_attr "type" "multi") -+ (set_attr "length" "8")]) -+ -+(define_insn "call_mcount_pic" -+ [(call (mem:SI (match_operand 0 "call_operand_address" "")) -+ (match_operand 1 "" "i")) -+ (set (reg:SI 25) -+ (plus:SI (reg:SI 2) -+ (minus:SI (match_operand 2 "" "") -+ (plus:SI (pc) (const_int 4))))) -+ (clobber (reg:SI 2)) -+ (clobber (match_operand 3)) -+ (use (reg:SI 19))] -+ "!TARGET_PORTABLE_RUNTIME && !TARGET_64BIT" -+ "#") -+ -+(define_split -+ [(parallel [(call (mem:SI (match_operand 0 "call_operand_address" "")) -+ (match_operand 1 "" "")) -+ (set (reg:SI 25) -+ (plus:SI (reg:SI 2) -+ (minus:SI (match_operand 2 "" "") -+ (plus:SI (pc) (const_int 4))))) -+ (clobber (reg:SI 2)) -+ (clobber (match_operand 3)) -+ (use (reg:SI 19))])] -+ "!TARGET_PORTABLE_RUNTIME && !TARGET_64BIT && reload_completed" -+ [(set (match_dup 3) (reg:SI 19)) -+ (parallel [(call (mem:SI (match_dup 0)) -+ (match_dup 1)) -+ (set (reg:SI 25) -+ (plus:SI (reg:SI 2) -+ (minus:SI (match_dup 2) -+ (plus:SI (pc) (const_int 4))))) -+ (clobber (reg:SI 2)) -+ (use (reg:SI 19))]) -+ (set (reg:SI 19) (match_dup 3))] -+ "") -+ -+(define_insn "*call_mcount_pic_post_reload" -+ [(call (mem:SI (match_operand 0 "call_operand_address" "")) -+ (match_operand 1 "" "i")) -+ (set (reg:SI 25) -+ (plus:SI (reg:SI 2) -+ (minus:SI (match_operand 2 "" "") -+ (plus:SI (pc) (const_int 4))))) -+ (clobber (reg:SI 2)) -+ (use (reg:SI 19))] -+ "!TARGET_PORTABLE_RUNTIME && !TARGET_64BIT" -+ "* -+{ -+ pa_output_arg_descriptor (insn); -+ return \"{bl|b,l} %0,%%r2\;ldo %2-.-4(%%r2),%%r25\"; -+}" -+ [(set_attr "type" "multi") -+ (set_attr "length" "8")]) -+ -+(define_insn "call_mcount_64bit" -+ [(call (mem:SI (match_operand 0 "call_operand_address" "")) -+ (match_operand 1 "" "i")) -+ (set (reg:SI 25) -+ (plus:SI (reg:SI 2) -+ (minus:SI (match_operand 2 "" "") -+ (plus:SI (pc) (const_int 4))))) -+ (clobber (reg:DI 2)) -+ (clobber (match_operand 3)) -+ (use (reg:DI 27)) -+ (use (reg:DI 29))] -+ "TARGET_64BIT" -+ "#") -+ -+(define_split -+ [(parallel [(call (mem:SI (match_operand 0 "call_operand_address" "")) -+ (match_operand 1 "" "")) -+ (set (reg:SI 25) -+ (plus:SI (reg:SI 2) -+ (minus:SI (match_operand 2 "" "") -+ (plus:SI (pc) (const_int 4))))) -+ (clobber (reg:DI 2)) -+ (clobber (match_operand 3)) -+ (use (reg:DI 27)) -+ (use (reg:DI 29))])] -+ "TARGET_64BIT && reload_completed" -+ [(set (match_dup 3) (reg:DI 27)) -+ (parallel [(call (mem:SI (match_dup 0)) -+ (match_dup 1)) -+ (set (reg:SI 25) -+ (plus:SI (reg:SI 2) -+ (minus:SI (match_dup 2) -+ (plus:SI (pc) (const_int 4))))) -+ (clobber (reg:DI 2)) -+ (use (reg:DI 27)) -+ (use (reg:DI 29))]) -+ (set (reg:DI 27) (match_dup 3))] -+ "") -+ -+(define_insn "*call_mcount_64bit_post_reload" -+ [(call (mem:SI (match_operand 0 "call_operand_address" "")) -+ (match_operand 1 "" "i")) -+ (set (reg:SI 25) -+ (plus:SI (reg:SI 2) -+ (minus:SI (match_operand 2 "" "") -+ (plus:SI (pc) (const_int 4))))) -+ (clobber (reg:DI 2)) -+ (use (reg:DI 27)) -+ (use (reg:DI 29))] -+ "TARGET_64BIT" -+ "{bl|b,l} %0,%%r2\;ldo %2-.-4(%%r2),%%r25" -+ [(set_attr "type" "multi") -+ (set_attr "length" "8")]) -+ - ;; Call subroutine returning any type. - - (define_expand "untyped_call" -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/40x.md gcc-6-20160721/gcc/config/rs6000/40x.md ---- gcc-6.1.0/gcc/config/rs6000/40x.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/40x.md 2016-07-05 19:19:42.000000000 +0000 -@@ -119,6 +119,6 @@ - "bpu_40x") - - (define_insn_reservation "ppc405-float" 11 -- (and (eq_attr "type" "fpload,fpstore,fpcompare,fp,dmul,sdiv,ddiv") -+ (and (eq_attr "type" "fpload,fpstore,fpcompare,fp,fpsimple,dmul,sdiv,ddiv") - (eq_attr "cpu" "ppc405")) - "fpu_405*10") -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/440.md gcc-6-20160721/gcc/config/rs6000/440.md ---- gcc-6.1.0/gcc/config/rs6000/440.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/440.md 2016-07-05 19:19:42.000000000 +0000 -@@ -107,7 +107,7 @@ - "ppc440_issue,ppc440_f_pipe+ppc440_i_pipe") - - (define_insn_reservation "ppc440-fp" 5 -- (and (eq_attr "type" "fp,dmul") -+ (and (eq_attr "type" "fp,fpsimple,dmul") - (eq_attr "cpu" "ppc440")) - "ppc440_issue,ppc440_f_pipe") - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/476.md gcc-6-20160721/gcc/config/rs6000/476.md ---- gcc-6.1.0/gcc/config/rs6000/476.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/476.md 2016-07-05 19:19:42.000000000 +0000 -@@ -124,7 +124,7 @@ - ppc476_f_pipe+ppc476_i_pipe") - - (define_insn_reservation "ppc476-fp" 6 -- (and (eq_attr "type" "fp,dmul") -+ (and (eq_attr "type" "fp,fpsimple,dmul") - (eq_attr "cpu" "ppc476")) - "ppc476_issue_fp,\ - ppc476_f_pipe") -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/601.md gcc-6-20160721/gcc/config/rs6000/601.md ---- gcc-6.1.0/gcc/config/rs6000/601.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/601.md 2016-07-05 19:19:42.000000000 +0000 -@@ -86,7 +86,7 @@ - "(fpu_ppc601+iu_ppc601*2),nothing*2,bpu_ppc601") - - (define_insn_reservation "ppc601-fp" 4 -- (and (eq_attr "type" "fp") -+ (and (eq_attr "type" "fp,fpsimple") - (eq_attr "cpu" "ppc601")) - "fpu_ppc601") - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/603.md gcc-6-20160721/gcc/config/rs6000/603.md ---- gcc-6.1.0/gcc/config/rs6000/603.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/603.md 2016-07-05 19:19:42.000000000 +0000 -@@ -105,7 +105,7 @@ - "(fpu_603+iu_603*2),bpu_603") - - (define_insn_reservation "ppc603-fp" 3 -- (and (eq_attr "type" "fp") -+ (and (eq_attr "type" "fp,fpsimple") - (eq_attr "cpu" "ppc603")) - "fpu_603") - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/6xx.md gcc-6-20160721/gcc/config/rs6000/6xx.md ---- gcc-6.1.0/gcc/config/rs6000/6xx.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/6xx.md 2016-07-05 19:19:42.000000000 +0000 -@@ -160,7 +160,7 @@ - "fpu_6xx") - - (define_insn_reservation "ppc604-fp" 3 -- (and (eq_attr "type" "fp") -+ (and (eq_attr "type" "fp,fpsimple") - (eq_attr "cpu" "ppc604,ppc604e,ppc620")) - "fpu_6xx") - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/7450.md gcc-6-20160721/gcc/config/rs6000/7450.md ---- gcc-6.1.0/gcc/config/rs6000/7450.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/7450.md 2016-07-05 19:19:42.000000000 +0000 -@@ -120,7 +120,7 @@ - "ppc7450_du,fpu_7450") - - (define_insn_reservation "ppc7450-fp" 5 -- (and (eq_attr "type" "fp,dmul") -+ (and (eq_attr "type" "fp,fpsimple,dmul") - (eq_attr "cpu" "ppc7450")) - "ppc7450_du,fpu_7450") - -@@ -162,7 +162,7 @@ - - ;; Altivec - (define_insn_reservation "ppc7450-vecsimple" 1 -- (and (eq_attr "type" "vecsimple") -+ (and (eq_attr "type" "vecsimple,veclogical,vecmove") - (eq_attr "cpu" "ppc7450")) - "ppc7450_du,ppc7450_vec_du,vecsmpl_7450") - -@@ -172,7 +172,7 @@ - "ppc7450_du,ppc7450_vec_du,veccmplx_7450") - - (define_insn_reservation "ppc7450-veccmp" 2 -- (and (eq_attr "type" "veccmp") -+ (and (eq_attr "type" "veccmp,veccmpfx") - (eq_attr "cpu" "ppc7450")) - "ppc7450_du,ppc7450_vec_du,veccmplx_7450") - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/7xx.md gcc-6-20160721/gcc/config/rs6000/7xx.md ---- gcc-6.1.0/gcc/config/rs6000/7xx.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/7xx.md 2016-07-05 19:19:42.000000000 +0000 -@@ -113,7 +113,7 @@ - "ppc750_du,fpu_7xx") - - (define_insn_reservation "ppc750-fp" 3 -- (and (eq_attr "type" "fp") -+ (and (eq_attr "type" "fp,fpsimple") - (eq_attr "cpu" "ppc750,ppc7400")) - "ppc750_du,fpu_7xx") - -@@ -165,7 +165,7 @@ - - ;; Altivec - (define_insn_reservation "ppc7400-vecsimple" 1 -- (and (eq_attr "type" "vecsimple,veccmp") -+ (and (eq_attr "type" "vecsimple,veclogical,vecmove,veccmp,veccmpfx") - (eq_attr "cpu" "ppc7400")) - "ppc750_du,ppc7400_vec_du,veccmplx_7xx") - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/8540.md gcc-6-20160721/gcc/config/rs6000/8540.md ---- gcc-6.1.0/gcc/config/rs6000/8540.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/8540.md 2016-07-05 19:19:42.000000000 +0000 -@@ -190,7 +190,7 @@ - - ;; Simple vector - (define_insn_reservation "ppc8540_simple_vector" 1 -- (and (eq_attr "type" "vecsimple") -+ (and (eq_attr "type" "vecsimple,veclogical,vecmove") - (eq_attr "cpu" "ppc8540,ppc8548")) - "ppc8540_decode,ppc8540_issue+ppc8540_su1_stage0+ppc8540_retire") - -@@ -202,7 +202,7 @@ - - ;; Vector compare - (define_insn_reservation "ppc8540_vector_compare" 1 -- (and (eq_attr "type" "veccmp") -+ (and (eq_attr "type" "veccmp,veccmpfx") - (eq_attr "cpu" "ppc8540,ppc8548")) - "ppc8540_decode,ppc8540_issue+ppc8540_su1_stage0+ppc8540_retire") - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/a2.md gcc-6-20160721/gcc/config/rs6000/a2.md ---- gcc-6.1.0/gcc/config/rs6000/a2.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/a2.md 2016-07-05 19:19:42.000000000 +0000 -@@ -81,7 +81,7 @@ - - ;; D.8.1 - (define_insn_reservation "ppca2-fp" 6 -- (and (eq_attr "type" "fp") ;; Ignore fpsimple insn types (SPE only). -+ (and (eq_attr "type" "fp,fpsimple") - (eq_attr "cpu" "ppca2")) - "axu") - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/altivec.h gcc-6-20160721/gcc/config/rs6000/altivec.h ---- gcc-6.1.0/gcc/config/rs6000/altivec.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/altivec.h 2016-07-01 15:08:18.000000000 +0000 -@@ -327,8 +327,8 @@ - #define vec_sqrt __builtin_vec_sqrt - #define vec_vsx_ld __builtin_vec_vsx_ld - #define vec_vsx_st __builtin_vec_vsx_st --#define vec_xl __builtin_vec_vsx_ld --#define vec_xst __builtin_vec_vsx_st -+#define vec_xl __builtin_vec_xl -+#define vec_xst __builtin_vec_xst - - /* Note, xxsldi and xxpermdi were added as __builtin_vsx_<xxx> functions - instead of __builtin_vec_<xxx> */ -@@ -384,6 +384,31 @@ - #define vec_vupklsw __builtin_vec_vupklsw - #endif - -+#ifdef _ARCH_PWR9 -+/* Vector additions added in ISA 3.0. */ -+#define vec_vctz __builtin_vec_vctz -+#define vec_cntlz __builtin_vec_vctz -+#define vec_vctzb __builtin_vec_vctzb -+#define vec_vctzd __builtin_vec_vctzd -+#define vec_vctzh __builtin_vec_vctzh -+#define vec_vctzw __builtin_vec_vctzw -+#define vec_vprtyb __builtin_vec_vprtyb -+#define vec_vprtybd __builtin_vec_vprtybd -+#define vec_vprtybw __builtin_vec_vprtybw -+ -+#ifdef _ARCH_PPC64 -+#define vec_vprtybq __builtin_vec_vprtybq -+#endif -+ -+#define vec_slv __builtin_vec_vslv -+#define vec_srv __builtin_vec_vsrv -+ -+#define vec_absd __builtin_vec_vadu -+#define vec_absdb __builtin_vec_vadub -+#define vec_absdh __builtin_vec_vaduh -+#define vec_absdw __builtin_vec_vaduw -+#endif -+ - /* Predicates. - For C++, we use templates in order to allow non-parenthesized arguments. - For C, instead, we use macros since non-parenthesized arguments were -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/altivec.md gcc-6-20160721/gcc/config/rs6000/altivec.md ---- gcc-6.1.0/gcc/config/rs6000/altivec.md 2016-02-17 16:23:55.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/altivec.md 2016-07-12 18:12:11.000000000 +0000 -@@ -58,6 +58,7 @@ - UNSPEC_VSUM2SWS - UNSPEC_VSUMSWS - UNSPEC_VPERM -+ UNSPEC_VPERMR - UNSPEC_VPERM_UNS - UNSPEC_VRFIN - UNSPEC_VCFUX -@@ -73,6 +74,9 @@ - UNSPEC_VUNPACK_LO_SIGN_DIRECT - UNSPEC_VUPKHPX - UNSPEC_VUPKLPX -+ UNSPEC_DARN -+ UNSPEC_DARN_32 -+ UNSPEC_DARN_RAW - UNSPEC_DST - UNSPEC_DSTT - UNSPEC_DSTST -@@ -110,6 +114,9 @@ - UNSPEC_STVLXL - UNSPEC_STVRX - UNSPEC_STVRXL -+ UNSPEC_VSLV -+ UNSPEC_VSRV -+ UNSPEC_VADU - UNSPEC_VMULWHUB - UNSPEC_VMULWLUB - UNSPEC_VMULWHSB -@@ -189,6 +196,13 @@ - (KF "FLOAT128_VECTOR_P (KFmode)") - (TF "FLOAT128_VECTOR_P (TFmode)")]) - -+;; Specific iterator for parity which does not have a byte/half-word form, but -+;; does have a quad word form -+(define_mode_iterator VParity [V4SI -+ V2DI -+ V1TI -+ (TI "TARGET_VSX_TIMODE")]) -+ - (define_mode_attr VI_char [(V2DI "d") (V4SI "w") (V8HI "h") (V16QI "b")]) - (define_mode_attr VI_scalar [(V2DI "DI") (V4SI "SI") (V8HI "HI") (V16QI "QI")]) - (define_mode_attr VI_unit [(V16QI "VECTOR_UNIT_ALTIVEC_P (V16QImode)") -@@ -203,6 +217,9 @@ - (define_mode_attr VP_small_lc [(V2DI "v4si") (V4SI "v8hi") (V8HI "v16qi")]) - (define_mode_attr VU_char [(V2DI "w") (V4SI "h") (V8HI "b")]) - -+;; Vector negate -+(define_mode_iterator VNEG [V4SI V2DI]) -+ - ;; Vector move instructions. - (define_insn "*altivec_mov<mode>" - [(set (match_operand:VM2 0 "nonimmediate_operand" "=Z,v,v,*Y,*r,*r,v,v,*r") -@@ -225,7 +242,7 @@ - default: gcc_unreachable (); - } - } -- [(set_attr "type" "vecstore,vecload,vecsimple,store,load,*,vecsimple,*,*") -+ [(set_attr "type" "vecstore,vecload,veclogical,store,load,*,veclogical,*,*") - (set_attr "length" "4,4,4,20,20,20,4,8,32")]) - - ;; Unlike other altivec moves, allow the GPRs, since a normal use of TImode -@@ -251,7 +268,7 @@ - default: gcc_unreachable (); - } - } -- [(set_attr "type" "vecstore,vecload,vecsimple,store,load,*,vecsimple,*")]) -+ [(set_attr "type" "vecstore,vecload,veclogical,store,load,*,veclogical,*")]) - - ;; Load up a vector with the most significant bit set by loading up -1 and - ;; doing a shift left -@@ -586,7 +603,7 @@ - (match_operand:VI2 2 "altivec_register_operand" "v")))] - "<VI_unit>" - "vcmpequ<VI_char> %0,%1,%2" -- [(set_attr "type" "veccmp")]) -+ [(set_attr "type" "veccmpfx")]) - - (define_insn "*altivec_gt<mode>" - [(set (match_operand:VI2 0 "altivec_register_operand" "=v") -@@ -594,7 +611,7 @@ - (match_operand:VI2 2 "altivec_register_operand" "v")))] - "<VI_unit>" - "vcmpgts<VI_char> %0,%1,%2" -- [(set_attr "type" "veccmp")]) -+ [(set_attr "type" "veccmpfx")]) - - (define_insn "*altivec_gtu<mode>" - [(set (match_operand:VI2 0 "altivec_register_operand" "=v") -@@ -602,7 +619,7 @@ - (match_operand:VI2 2 "altivec_register_operand" "v")))] - "<VI_unit>" - "vcmpgtu<VI_char> %0,%1,%2" -- [(set_attr "type" "veccmp")]) -+ [(set_attr "type" "veccmpfx")]) - - (define_insn "*altivec_eqv4sf" - [(set (match_operand:V4SF 0 "altivec_register_operand" "=v") -@@ -637,7 +654,7 @@ - (match_operand:VM 3 "altivec_register_operand" "v")))] - "VECTOR_MEM_ALTIVEC_P (<MODE>mode)" - "vsel %0,%3,%2,%1" -- [(set_attr "type" "vecperm")]) -+ [(set_attr "type" "vecmove")]) - - (define_insn "*altivec_vsel<mode>_uns" - [(set (match_operand:VM 0 "altivec_register_operand" "=v") -@@ -648,7 +665,7 @@ - (match_operand:VM 3 "altivec_register_operand" "v")))] - "VECTOR_MEM_ALTIVEC_P (<MODE>mode)" - "vsel %0,%3,%2,%1" -- [(set_attr "type" "vecperm")]) -+ [(set_attr "type" "vecmove")]) - - ;; Fused multiply add. - -@@ -1617,6 +1634,24 @@ - "vslo %0,%1,%2" - [(set_attr "type" "vecperm")]) - -+(define_insn "vslv" -+ [(set (match_operand:V16QI 0 "register_operand" "=v") -+ (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v") -+ (match_operand:V16QI 2 "register_operand" "v")] -+ UNSPEC_VSLV))] -+ "TARGET_P9_VECTOR" -+ "vslv %0,%1,%2" -+ [(set_attr "type" "vecsimple")]) -+ -+(define_insn "vsrv" -+ [(set (match_operand:V16QI 0 "register_operand" "=v") -+ (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v") -+ (match_operand:V16QI 2 "register_operand" "v")] -+ UNSPEC_VSRV))] -+ "TARGET_P9_VECTOR" -+ "vsrv %0,%1,%2" -+ [(set_attr "type" "vecsimple")]) -+ - (define_insn "*altivec_vsl<VI_char>" - [(set (match_operand:VI2 0 "register_operand" "=v") - (ashift:VI2 (match_operand:VI2 1 "register_operand" "v") -@@ -1949,32 +1984,30 @@ - - ;; Slightly prefer vperm, since the target does not overlap the source - (define_insn "*altivec_vperm_<mode>_internal" -- [(set (match_operand:VM 0 "register_operand" "=v,?wo,?&wo") -- (unspec:VM [(match_operand:VM 1 "register_operand" "v,0,wo") -- (match_operand:VM 2 "register_operand" "v,wo,wo") -- (match_operand:V16QI 3 "register_operand" "v,wo,wo")] -+ [(set (match_operand:VM 0 "register_operand" "=v,?wo") -+ (unspec:VM [(match_operand:VM 1 "register_operand" "v,wo") -+ (match_operand:VM 2 "register_operand" "v,0") -+ (match_operand:V16QI 3 "register_operand" "v,wo")] - UNSPEC_VPERM))] - "TARGET_ALTIVEC" - "@ - vperm %0,%1,%2,%3 -- xxperm %x0,%x2,%x3 -- xxlor %x0,%x1,%x1\t\t# xxperm fusion\;xxperm %x0,%x2,%x3" -+ xxperm %x0,%x1,%x3" - [(set_attr "type" "vecperm") -- (set_attr "length" "4,4,8")]) -+ (set_attr "length" "4")]) - - (define_insn "altivec_vperm_v8hiv16qi" -- [(set (match_operand:V16QI 0 "register_operand" "=v,?wo,?&wo") -- (unspec:V16QI [(match_operand:V8HI 1 "register_operand" "v,0,wo") -- (match_operand:V8HI 2 "register_operand" "v,wo,wo") -- (match_operand:V16QI 3 "register_operand" "v,wo,wo")] -+ [(set (match_operand:V16QI 0 "register_operand" "=v,?wo") -+ (unspec:V16QI [(match_operand:V8HI 1 "register_operand" "v,wo") -+ (match_operand:V8HI 2 "register_operand" "v,0") -+ (match_operand:V16QI 3 "register_operand" "v,wo")] - UNSPEC_VPERM))] - "TARGET_ALTIVEC" - "@ - vperm %0,%1,%2,%3 -- xxperm %x0,%x2,%x3 -- xxlor %x0,%x1,%x1\t\t# xxperm fusion\;xxperm %x0,%x2,%x3" -+ xxperm %x0,%x1,%x3" - [(set_attr "type" "vecperm") -- (set_attr "length" "4,4,8")]) -+ (set_attr "length" "4")]) - - (define_expand "altivec_vperm_<mode>_uns" - [(set (match_operand:VM 0 "register_operand" "") -@@ -1992,18 +2025,17 @@ - }) - - (define_insn "*altivec_vperm_<mode>_uns_internal" -- [(set (match_operand:VM 0 "register_operand" "=v,?wo,?&wo") -- (unspec:VM [(match_operand:VM 1 "register_operand" "v,0,wo") -- (match_operand:VM 2 "register_operand" "v,wo,wo") -- (match_operand:V16QI 3 "register_operand" "v,wo,wo")] -+ [(set (match_operand:VM 0 "register_operand" "=v,?wo") -+ (unspec:VM [(match_operand:VM 1 "register_operand" "v,wo") -+ (match_operand:VM 2 "register_operand" "v,0") -+ (match_operand:V16QI 3 "register_operand" "v,wo")] - UNSPEC_VPERM_UNS))] - "TARGET_ALTIVEC" - "@ - vperm %0,%1,%2,%3 -- xxperm %x0,%x2,%x3 -- xxlor %x0,%x1,%x1\t\t# xxperm fusion\;xxperm %x0,%x2,%x3" -+ xxperm %x0,%x1,%x3" - [(set_attr "type" "vecperm") -- (set_attr "length" "4,4,8")]) -+ (set_attr "length" "4")]) - - (define_expand "vec_permv16qi" - [(set (match_operand:V16QI 0 "register_operand" "") -@@ -2032,6 +2064,19 @@ - FAIL; - }) - -+(define_insn "*altivec_vpermr_<mode>_internal" -+ [(set (match_operand:VM 0 "register_operand" "=v,?wo") -+ (unspec:VM [(match_operand:VM 1 "register_operand" "v,wo") -+ (match_operand:VM 2 "register_operand" "v,0") -+ (match_operand:V16QI 3 "register_operand" "v,wo")] -+ UNSPEC_VPERMR))] -+ "TARGET_P9_VECTOR" -+ "@ -+ vpermr %0,%2,%1,%3 -+ xxpermr %x0,%x1,%x3" -+ [(set_attr "type" "vecperm") -+ (set_attr "length" "4")]) -+ - (define_insn "altivec_vrfip" ; ceil - [(set (match_operand:V4SF 0 "register_operand" "=v") - (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] -@@ -2238,7 +2283,7 @@ - (match_dup 2)))] - "<VI_unit>" - "vcmpequ<VI_char>. %0,%1,%2" -- [(set_attr "type" "veccmp")]) -+ [(set_attr "type" "veccmpfx")]) - - (define_insn "*altivec_vcmpgts<VI_char>_p" - [(set (reg:CC 74) -@@ -2250,7 +2295,7 @@ - (match_dup 2)))] - "<VI_unit>" - "vcmpgts<VI_char>. %0,%1,%2" -- [(set_attr "type" "veccmp")]) -+ [(set_attr "type" "veccmpfx")]) - - (define_insn "*altivec_vcmpgtu<VI_char>_p" - [(set (reg:CC 74) -@@ -2262,7 +2307,7 @@ - (match_dup 2)))] - "<VI_unit>" - "vcmpgtu<VI_char>. %0,%1,%2" -- [(set_attr "type" "veccmp")]) -+ [(set_attr "type" "veccmpfx")]) - - (define_insn "*altivec_vcmpeqfp_p" - [(set (reg:CC 74) -@@ -2690,20 +2735,28 @@ - DONE; - }) - -+(define_insn "*p9_neg<mode>2" -+ [(set (match_operand:VNEG 0 "altivec_register_operand" "=v") -+ (neg:VNEG (match_operand:VNEG 1 "altivec_register_operand" "v")))] -+ "TARGET_P9_VECTOR" -+ "vneg<VI_char> %0,%1" -+ [(set_attr "type" "vecsimple")]) -+ - (define_expand "neg<mode>2" -- [(use (match_operand:VI 0 "register_operand" "")) -- (use (match_operand:VI 1 "register_operand" ""))] -- "TARGET_ALTIVEC" -- " -+ [(set (match_operand:VI2 0 "register_operand" "") -+ (neg:VI2 (match_operand:VI2 1 "register_operand" "")))] -+ "<VI_unit>" - { -- rtx vzero; -+ if (!TARGET_P9_VECTOR || (<MODE>mode != V4SImode && <MODE>mode != V2DImode)) -+ { -+ rtx vzero; - -- vzero = gen_reg_rtx (GET_MODE (operands[0])); -- emit_insn (gen_altivec_vspltis<VI_char> (vzero, const0_rtx)); -- emit_insn (gen_sub<mode>3 (operands[0], vzero, operands[1])); -- -- DONE; --}") -+ vzero = gen_reg_rtx (GET_MODE (operands[0])); -+ emit_move_insn (vzero, CONST0_RTX (<MODE>mode)); -+ emit_insn (gen_sub<mode>3 (operands[0], vzero, operands[1])); -+ DONE; -+ } -+}) - - (define_expand "udot_prod<mode>" - [(set (match_operand:V4SI 0 "register_operand" "=v") -@@ -2791,32 +2844,30 @@ - "") - - (define_insn "vperm_v8hiv4si" -- [(set (match_operand:V4SI 0 "register_operand" "=v,?wo,?&wo") -- (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v,0,wo") -- (match_operand:V4SI 2 "register_operand" "v,wo,wo") -- (match_operand:V16QI 3 "register_operand" "v,wo,wo")] -+ [(set (match_operand:V4SI 0 "register_operand" "=v,?wo") -+ (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v,wo") -+ (match_operand:V4SI 2 "register_operand" "v,0") -+ (match_operand:V16QI 3 "register_operand" "v,wo")] - UNSPEC_VPERMSI))] - "TARGET_ALTIVEC" - "@ - vperm %0,%1,%2,%3 -- xxperm %x0,%x2,%x3 -- xxlor %x0,%x1,%x1\t\t# xxperm fusion\;xxperm %x0,%x2,%x3" -+ xxperm %x0,%x1,%x3" - [(set_attr "type" "vecperm") -- (set_attr "length" "4,4,8")]) -+ (set_attr "length" "4")]) - - (define_insn "vperm_v16qiv8hi" -- [(set (match_operand:V8HI 0 "register_operand" "=v,?wo,?&wo") -- (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v,0,wo") -- (match_operand:V8HI 2 "register_operand" "v,wo,wo") -- (match_operand:V16QI 3 "register_operand" "v,wo,wo")] -+ [(set (match_operand:V8HI 0 "register_operand" "=v,?wo") -+ (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v,wo") -+ (match_operand:V8HI 2 "register_operand" "v,0") -+ (match_operand:V16QI 3 "register_operand" "v,wo")] - UNSPEC_VPERMHI))] - "TARGET_ALTIVEC" - "@ - vperm %0,%1,%2,%3 -- xxperm %x0,%x2,%x3 -- xxlor %x0,%x1,%x1\t\t# xxperm fusion\;xxperm %x0,%x2,%x3" -+ xxperm %x0,%x1,%x3" - [(set_attr "type" "vecperm") -- (set_attr "length" "4,4,8")]) -+ (set_attr "length" "4")]) - - - (define_expand "vec_unpacku_hi_v16qi" -@@ -3353,7 +3404,7 @@ - }") - - --;; Power8 vector instructions encoded as Altivec instructions -+;; Power8/power9 vector instructions encoded as Altivec instructions - - ;; Vector count leading zeros - (define_insn "*p8v_clz<mode>2" -@@ -3364,6 +3415,33 @@ - [(set_attr "length" "4") - (set_attr "type" "vecsimple")]) - -+;; Vector absolute difference unsigned -+(define_expand "vadu<mode>3" -+ [(set (match_operand:VI 0 "register_operand") -+ (unspec:VI [(match_operand:VI 1 "register_operand") -+ (match_operand:VI 2 "register_operand")] -+ UNSPEC_VADU))] -+ "TARGET_P9_VECTOR") -+ -+;; Vector absolute difference unsigned -+(define_insn "*p9_vadu<mode>3" -+ [(set (match_operand:VI 0 "register_operand" "=v") -+ (unspec:VI [(match_operand:VI 1 "register_operand" "v") -+ (match_operand:VI 2 "register_operand" "v")] -+ UNSPEC_VADU))] -+ "TARGET_P9_VECTOR" -+ "vabsdu<wd> %0,%1,%2" -+ [(set_attr "type" "vecsimple")]) -+ -+;; Vector count trailing zeros -+(define_insn "*p9v_ctz<mode>2" -+ [(set (match_operand:VI2 0 "register_operand" "=v") -+ (ctz:VI2 (match_operand:VI2 1 "register_operand" "v")))] -+ "TARGET_P9_VECTOR" -+ "vctz<wd> %0,%1" -+ [(set_attr "length" "4") -+ (set_attr "type" "vecsimple")]) -+ - ;; Vector population count - (define_insn "*p8v_popcount<mode>2" - [(set (match_operand:VI2 0 "register_operand" "=v") -@@ -3373,6 +3451,15 @@ - [(set_attr "length" "4") - (set_attr "type" "vecsimple")]) - -+;; Vector parity -+(define_insn "*p9v_parity<mode>2" -+ [(set (match_operand:VParity 0 "register_operand" "=v") -+ (parity:VParity (match_operand:VParity 1 "register_operand" "v")))] -+ "TARGET_P9_VECTOR" -+ "vprtyb<wd> %0,%1" -+ [(set_attr "length" "4") -+ (set_attr "type" "vecsimple")]) -+ - ;; Vector Gather Bits by Bytes by Doubleword - (define_insn "p8v_vgbbd" - [(set (match_operand:V16QI 0 "register_operand" "=v") -@@ -3540,6 +3627,27 @@ - [(set_attr "length" "4") - (set_attr "type" "vecsimple")]) - -+(define_insn "darn_32" -+ [(set (match_operand:SI 0 "register_operand" "=r") -+ (unspec:SI [(const_int 0)] UNSPEC_DARN_32))] -+ "TARGET_P9_MISC" -+ "darn %0,0" -+ [(set_attr "type" "integer")]) -+ -+(define_insn "darn_raw" -+ [(set (match_operand:DI 0 "register_operand" "=r") -+ (unspec:DI [(const_int 0)] UNSPEC_DARN_RAW))] -+ "TARGET_P9_MISC && TARGET_64BIT" -+ "darn %0,2" -+ [(set_attr "type" "integer")]) -+ -+(define_insn "darn" -+ [(set (match_operand:DI 0 "register_operand" "=r") -+ (unspec:DI [(const_int 0)] UNSPEC_DARN))] -+ "TARGET_P9_MISC && TARGET_64BIT" -+ "darn %0,1" -+ [(set_attr "type" "integer")]) -+ - (define_expand "bcd<bcd_add_sub>_<code>" - [(parallel [(set (reg:CCFP 74) - (compare:CCFP -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/cell.md gcc-6-20160721/gcc/config/rs6000/cell.md ---- gcc-6.1.0/gcc/config/rs6000/cell.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/cell.md 2016-07-05 19:19:42.000000000 +0000 -@@ -306,7 +306,7 @@ - - ; Basic FP latency is 10 cycles, thoughput is 1/cycle - (define_insn_reservation "cell-fp" 10 -- (and (eq_attr "type" "fp,dmul") -+ (and (eq_attr "type" "fp,fpsimple,dmul") - (eq_attr "cpu" "cell")) - "slot01,vsu1_cell,vsu1_cell*8") - -@@ -329,7 +329,7 @@ - - ; VMX - (define_insn_reservation "cell-vecsimple" 4 -- (and (eq_attr "type" "vecsimple") -+ (and (eq_attr "type" "vecsimple,veclogical,vecmove") - (eq_attr "cpu" "cell")) - "slot01,vsu1_cell,vsu1_cell*2") - -@@ -341,7 +341,7 @@ - - ;; TODO: add support for recording instructions - (define_insn_reservation "cell-veccmp" 4 -- (and (eq_attr "type" "veccmp") -+ (and (eq_attr "type" "veccmp,veccmpfx") - (eq_attr "cpu" "cell")) - "slot01,vsu1_cell,vsu1_cell*2") - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/constraints.md gcc-6-20160721/gcc/config/rs6000/constraints.md ---- gcc-6.1.0/gcc/config/rs6000/constraints.md 2016-03-25 09:10:03.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/constraints.md 2016-06-09 23:28:23.000000000 +0000 -@@ -140,6 +140,10 @@ - (and (match_code "const_int") - (match_test "TARGET_VSX && (ival == VECTOR_ELEMENT_SCALAR_64BIT)"))) - -+(define_constraint "wE" -+ "Vector constant that can be loaded with the XXSPLTIB instruction." -+ (match_test "xxspltib_constant_nosplit (op, mode)")) -+ - ;; Extended fusion store - (define_memory_constraint "wF" - "Memory operand suitable for power9 fusion load/stores" -@@ -156,11 +160,26 @@ - (and (match_test "TARGET_DIRECT_MOVE_128") - (match_test "(ival == VECTOR_ELEMENT_MFVSRLD_64BIT)")))) - -+;; Generate the XXORC instruction to set a register to all 1's -+(define_constraint "wM" -+ "Match vector constant with all 1's if the XXLORC instruction is available" -+ (and (match_test "TARGET_P8_VECTOR") -+ (match_operand 0 "all_ones_constant"))) -+ -+;; ISA 3.0 vector d-form addresses -+(define_memory_constraint "wO" -+ "Memory operand suitable for the ISA 3.0 vector d-form instructions." -+ (match_operand 0 "vsx_quad_dform_memory_operand")) -+ - ;; Lq/stq validates the address for load/store quad - (define_memory_constraint "wQ" - "Memory operand suitable for the load/store quad instructions" - (match_operand 0 "quad_memory_operand")) - -+(define_constraint "wS" -+ "Vector constant that can be loaded with XXSPLTIB & sign extension." -+ (match_test "xxspltib_constant_split (op, mode)")) -+ - ;; Altivec style load/store that ignores the bottom bits of the address - (define_memory_constraint "wZ" - "Indexed or indirect memory operand, ignoring the bottom 4 bits" -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/crypto.md gcc-6-20160721/gcc/config/rs6000/crypto.md ---- gcc-6.1.0/gcc/config/rs6000/crypto.md 2016-02-05 15:25:39.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/crypto.md 2016-07-06 02:31:08.000000000 +0000 -@@ -107,4 +107,4 @@ - UNSPEC_VSHASIGMA))] - "TARGET_CRYPTO" - "vshasigma<CR_char> %0,%1,%2,%3" -- [(set_attr "type" "crypto")]) -+ [(set_attr "type" "vecsimple")]) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/dfp.md gcc-6-20160721/gcc/config/rs6000/dfp.md ---- gcc-6.1.0/gcc/config/rs6000/dfp.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/dfp.md 2016-07-07 19:42:07.000000000 +0000 -@@ -58,7 +58,7 @@ - (float_extend:DD (match_operand:SD 1 "gpc_reg_operand" "f")))] - "TARGET_DFP" - "dctdp %0,%1" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - (define_expand "extendsdtd2" - [(set (match_operand:TD 0 "gpc_reg_operand" "=d") -@@ -76,7 +76,7 @@ - (float_truncate:SD (match_operand:DD 1 "gpc_reg_operand" "d")))] - "TARGET_DFP" - "drsp %0,%1" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - (define_expand "negdd2" - [(set (match_operand:DD 0 "gpc_reg_operand" "") -@@ -89,7 +89,7 @@ - (neg:DD (match_operand:DD 1 "gpc_reg_operand" "d")))] - "TARGET_HARD_FLOAT && TARGET_FPRS" - "fneg %0,%1" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "fpsimple")]) - - (define_expand "absdd2" - [(set (match_operand:DD 0 "gpc_reg_operand" "") -@@ -102,14 +102,14 @@ - (abs:DD (match_operand:DD 1 "gpc_reg_operand" "d")))] - "TARGET_HARD_FLOAT && TARGET_FPRS" - "fabs %0,%1" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "fpsimple")]) - - (define_insn "*nabsdd2_fpr" - [(set (match_operand:DD 0 "gpc_reg_operand" "=d") - (neg:DD (abs:DD (match_operand:DD 1 "gpc_reg_operand" "d"))))] - "TARGET_HARD_FLOAT && TARGET_FPRS" - "fnabs %0,%1" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "fpsimple")]) - - (define_expand "negtd2" - [(set (match_operand:TD 0 "gpc_reg_operand" "") -@@ -124,7 +124,7 @@ - "@ - fneg %0,%1 - fneg %0,%1\;fmr %L0,%L1" -- [(set_attr "type" "fp") -+ [(set_attr "type" "fpsimple") - (set_attr "length" "4,8")]) - - (define_expand "abstd2" -@@ -140,7 +140,7 @@ - "@ - fabs %0,%1 - fabs %0,%1\;fmr %L0,%L1" -- [(set_attr "type" "fp") -+ [(set_attr "type" "fpsimple") - (set_attr "length" "4,8")]) - - (define_insn "*nabstd2_fpr" -@@ -150,7 +150,7 @@ - "@ - fnabs %0,%1 - fnabs %0,%1\;fmr %L0,%L1" -- [(set_attr "type" "fp") -+ [(set_attr "type" "fpsimple") - (set_attr "length" "4,8")]) - - ;; Hardware support for decimal floating point operations. -@@ -160,7 +160,7 @@ - (float_extend:TD (match_operand:DD 1 "gpc_reg_operand" "d")))] - "TARGET_DFP" - "dctqpq %0,%1" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - ;; The result of drdpq is an even/odd register pair with the converted - ;; value in the even register and zero in the odd register. -@@ -173,7 +173,7 @@ - (clobber (match_scratch:TD 2 "=d"))] - "TARGET_DFP" - "drdpq %2,%1\;fmr %0,%2" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - (define_insn "adddd3" - [(set (match_operand:DD 0 "gpc_reg_operand" "=d") -@@ -181,7 +181,7 @@ - (match_operand:DD 2 "gpc_reg_operand" "d")))] - "TARGET_DFP" - "dadd %0,%1,%2" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - (define_insn "addtd3" - [(set (match_operand:TD 0 "gpc_reg_operand" "=d") -@@ -189,7 +189,7 @@ - (match_operand:TD 2 "gpc_reg_operand" "d")))] - "TARGET_DFP" - "daddq %0,%1,%2" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - (define_insn "subdd3" - [(set (match_operand:DD 0 "gpc_reg_operand" "=d") -@@ -197,7 +197,7 @@ - (match_operand:DD 2 "gpc_reg_operand" "d")))] - "TARGET_DFP" - "dsub %0,%1,%2" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - (define_insn "subtd3" - [(set (match_operand:TD 0 "gpc_reg_operand" "=d") -@@ -205,7 +205,7 @@ - (match_operand:TD 2 "gpc_reg_operand" "d")))] - "TARGET_DFP" - "dsubq %0,%1,%2" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - (define_insn "muldd3" - [(set (match_operand:DD 0 "gpc_reg_operand" "=d") -@@ -213,7 +213,7 @@ - (match_operand:DD 2 "gpc_reg_operand" "d")))] - "TARGET_DFP" - "dmul %0,%1,%2" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - (define_insn "multd3" - [(set (match_operand:TD 0 "gpc_reg_operand" "=d") -@@ -221,7 +221,7 @@ - (match_operand:TD 2 "gpc_reg_operand" "d")))] - "TARGET_DFP" - "dmulq %0,%1,%2" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - (define_insn "divdd3" - [(set (match_operand:DD 0 "gpc_reg_operand" "=d") -@@ -229,7 +229,7 @@ - (match_operand:DD 2 "gpc_reg_operand" "d")))] - "TARGET_DFP" - "ddiv %0,%1,%2" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - (define_insn "divtd3" - [(set (match_operand:TD 0 "gpc_reg_operand" "=d") -@@ -237,7 +237,7 @@ - (match_operand:TD 2 "gpc_reg_operand" "d")))] - "TARGET_DFP" - "ddivq %0,%1,%2" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - (define_insn "*cmpdd_internal1" - [(set (match_operand:CCFP 0 "cc_reg_operand" "=y") -@@ -245,7 +245,7 @@ - (match_operand:DD 2 "gpc_reg_operand" "d")))] - "TARGET_DFP" - "dcmpu %0,%1,%2" -- [(set_attr "type" "fpcompare")]) -+ [(set_attr "type" "dfp")]) - - (define_insn "*cmptd_internal1" - [(set (match_operand:CCFP 0 "cc_reg_operand" "=y") -@@ -253,21 +253,21 @@ - (match_operand:TD 2 "gpc_reg_operand" "d")))] - "TARGET_DFP" - "dcmpuq %0,%1,%2" -- [(set_attr "type" "fpcompare")]) -+ [(set_attr "type" "dfp")]) - - (define_insn "floatdidd2" - [(set (match_operand:DD 0 "gpc_reg_operand" "=d") - (float:DD (match_operand:DI 1 "gpc_reg_operand" "d")))] - "TARGET_DFP && TARGET_POPCNTD" - "dcffix %0,%1" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - (define_insn "floatditd2" - [(set (match_operand:TD 0 "gpc_reg_operand" "=d") - (float:TD (match_operand:DI 1 "gpc_reg_operand" "d")))] - "TARGET_DFP" - "dcffixq %0,%1" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - ;; Convert a decimal64 to a decimal64 whose value is an integer. - ;; This is the first stage of converting it to an integer type. -@@ -277,7 +277,7 @@ - (fix:DD (match_operand:DD 1 "gpc_reg_operand" "d")))] - "TARGET_DFP" - "drintn. 0,%0,%1,1" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - ;; Convert a decimal64 whose value is an integer to an actual integer. - ;; This is the second stage of converting decimal float to integer type. -@@ -287,7 +287,7 @@ - (fix:DI (match_operand:DD 1 "gpc_reg_operand" "d")))] - "TARGET_DFP" - "dctfix %0,%1" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - ;; Convert a decimal128 to a decimal128 whose value is an integer. - ;; This is the first stage of converting it to an integer type. -@@ -297,7 +297,7 @@ - (fix:TD (match_operand:TD 1 "gpc_reg_operand" "d")))] - "TARGET_DFP" - "drintnq. 0,%0,%1,1" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - ;; Convert a decimal128 whose value is an integer to an actual integer. - ;; This is the second stage of converting decimal float to integer type. -@@ -307,7 +307,7 @@ - (fix:DI (match_operand:TD 1 "gpc_reg_operand" "d")))] - "TARGET_DFP" - "dctfixq %0,%1" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - - ;; Decimal builtin support -@@ -318,8 +318,11 @@ - UNSPEC_DXEX - UNSPEC_DIEX - UNSPEC_DSCLI -+ UNSPEC_DTSTSFI - UNSPEC_DSCRI]) - -+(define_code_iterator DFP_TEST [eq lt gt unordered]) -+ - (define_mode_iterator D64_D128 [DD TD]) - - (define_mode_attr dfp_suffix [(DD "") -@@ -332,7 +335,7 @@ - UNSPEC_DDEDPD))] - "TARGET_DFP" - "ddedpd<dfp_suffix> %1,%0,%2" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - (define_insn "dfp_denbcd_<mode>" - [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d") -@@ -341,7 +344,7 @@ - UNSPEC_DENBCD))] - "TARGET_DFP" - "denbcd<dfp_suffix> %1,%0,%2" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - (define_insn "dfp_dxex_<mode>" - [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d") -@@ -349,7 +352,7 @@ - UNSPEC_DXEX))] - "TARGET_DFP" - "dxex<dfp_suffix> %0,%1" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - (define_insn "dfp_diex_<mode>" - [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d") -@@ -358,6 +361,42 @@ - UNSPEC_DXEX))] - "TARGET_DFP" - "diex<dfp_suffix> %0,%1,%2" -+ [(set_attr "type" "dfp")]) -+ -+(define_expand "dfptstsfi_<code>_<mode>" -+ [(set (match_dup 3) -+ (compare:CCFP -+ (unspec:D64_D128 -+ [(match_operand:SI 1 "const_int_operand" "n") -+ (match_operand:D64_D128 2 "gpc_reg_operand" "d")] -+ UNSPEC_DTSTSFI) -+ (match_dup 4))) -+ (set (match_operand:SI 0 "register_operand" "") -+ (DFP_TEST:SI (match_dup 3) -+ (const_int 0))) -+ ] -+ "TARGET_P9_MISC" -+{ -+ operands[3] = gen_reg_rtx (CCFPmode); -+ operands[4] = const0_rtx; -+}) -+ -+(define_insn "*dfp_sgnfcnc_<mode>" -+ [(set (match_operand:CCFP 0 "" "=y") -+ (compare:CCFP -+ (unspec:D64_D128 [(match_operand:SI 1 "const_int_operand" "n") -+ (match_operand:D64_D128 2 "gpc_reg_operand" "d")] -+ UNSPEC_DTSTSFI) -+ (match_operand:SI 3 "zero_constant" "j")))] -+ "TARGET_P9_MISC" -+{ -+ /* If immediate operand is greater than 63, it will behave as if -+ the value had been 63. The code generator does not support -+ immediate operand values greater than 63. */ -+ if (!(IN_RANGE (INTVAL (operands[1]), 0, 63))) -+ operands[1] = GEN_INT (63); -+ return "dtstsfi<dfp_suffix> %0,%1,%2"; -+} - [(set_attr "type" "fp")]) - - (define_insn "dfp_dscli_<mode>" -@@ -367,7 +406,7 @@ - UNSPEC_DSCLI))] - "TARGET_DFP" - "dscli<dfp_suffix> %0,%1,%2" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) - - (define_insn "dfp_dscri_<mode>" - [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d") -@@ -376,4 +415,4 @@ - UNSPEC_DSCRI))] - "TARGET_DFP" - "dscri<dfp_suffix> %0,%1,%2" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "dfp")]) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/e300c2c3.md gcc-6-20160721/gcc/config/rs6000/e300c2c3.md ---- gcc-6.1.0/gcc/config/rs6000/e300c2c3.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/e300c2c3.md 2016-07-05 19:19:42.000000000 +0000 -@@ -150,7 +150,7 @@ - "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,nothing,ppce300c3_retire") - - (define_insn_reservation "ppce300c3_fp" 3 -- (and (eq_attr "type" "fp") -+ (and (eq_attr "type" "fp,fpsimple") - (eq_attr "cpu" "ppce300c3")) - "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,nothing,ppce300c3_retire") - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/e6500.md gcc-6-20160721/gcc/config/rs6000/e6500.md ---- gcc-6.1.0/gcc/config/rs6000/e6500.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/e6500.md 2016-07-05 19:19:42.000000000 +0000 -@@ -205,7 +205,7 @@ - - ;; VSFX. - (define_insn_reservation "e6500_vecsimple" 1 -- (and (eq_attr "type" "vecsimple,veccmp") -+ (and (eq_attr "type" "vecsimple,veclogical,vecmove,veccmp,veccmpfx") - (eq_attr "cpu" "ppce6500")) - "e6500_decode,e6500_vec") - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/htm.md gcc-6-20160721/gcc/config/rs6000/htm.md ---- gcc-6.1.0/gcc/config/rs6000/htm.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/htm.md 2016-07-06 02:31:08.000000000 +0000 -@@ -72,7 +72,7 @@ - (set (match_operand:BLK 2) (unspec:BLK [(match_dup 2)] UNSPEC_HTM_FENCE))] - "TARGET_HTM" - "tabort. %0" -- [(set_attr "type" "htm") -+ [(set_attr "type" "htmsimple") - (set_attr "length" "4")]) - - (define_expand "tabort<wd>c" -@@ -98,7 +98,7 @@ - (set (match_operand:BLK 4) (unspec:BLK [(match_dup 4)] UNSPEC_HTM_FENCE))] - "TARGET_HTM" - "tabort<wd>c. %0,%1,%2" -- [(set_attr "type" "htm") -+ [(set_attr "type" "htmsimple") - (set_attr "length" "4")]) - - (define_expand "tabort<wd>ci" -@@ -124,7 +124,7 @@ - (set (match_operand:BLK 4) (unspec:BLK [(match_dup 4)] UNSPEC_HTM_FENCE))] - "TARGET_HTM" - "tabort<wd>ci. %0,%1,%2" -- [(set_attr "type" "htm") -+ [(set_attr "type" "htmsimple") - (set_attr "length" "4")]) - - (define_expand "tbegin" -@@ -208,7 +208,7 @@ - (set (match_operand:BLK 1) (unspec:BLK [(match_dup 1)] UNSPEC_HTM_FENCE))] - "TARGET_HTM" - "trechkpt." -- [(set_attr "type" "htm") -+ [(set_attr "type" "htmsimple") - (set_attr "length" "4")]) - - (define_expand "treclaim" -@@ -230,7 +230,7 @@ - (set (match_operand:BLK 2) (unspec:BLK [(match_dup 2)] UNSPEC_HTM_FENCE))] - "TARGET_HTM" - "treclaim. %0" -- [(set_attr "type" "htm") -+ [(set_attr "type" "htmsimple") - (set_attr "length" "4")]) - - (define_expand "tsr" -@@ -252,7 +252,7 @@ - (set (match_operand:BLK 2) (unspec:BLK [(match_dup 2)] UNSPEC_HTM_FENCE))] - "TARGET_HTM" - "tsr. %0" -- [(set_attr "type" "htm") -+ [(set_attr "type" "htmsimple") - (set_attr "length" "4")]) - - (define_expand "ttest" -@@ -272,7 +272,7 @@ - (set (match_operand:BLK 1) (unspec:BLK [(match_dup 1)] UNSPEC_HTM_FENCE))] - "TARGET_HTM" - "tabortwci. 0,1,0" -- [(set_attr "type" "htm") -+ [(set_attr "type" "htmsimple") - (set_attr "length" "4")]) - - (define_insn "htm_mfspr_<mode>" -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/mpc.md gcc-6-20160721/gcc/config/rs6000/mpc.md ---- gcc-6.1.0/gcc/config/rs6000/mpc.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/mpc.md 2016-07-05 19:19:42.000000000 +0000 -@@ -81,7 +81,7 @@ - "fpu_mpc,bpu_mpc") - - (define_insn_reservation "mpccore-fp" 4 -- (and (eq_attr "type" "fp") -+ (and (eq_attr "type" "fp,fpsimple") - (eq_attr "cpu" "mpccore")) - "fpu_mpc*2") - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/power4.md gcc-6-20160721/gcc/config/rs6000/power4.md ---- gcc-6.1.0/gcc/config/rs6000/power4.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/power4.md 2016-07-05 19:19:42.000000000 +0000 -@@ -381,7 +381,7 @@ - - ; Basic FP latency is 6 cycles - (define_insn_reservation "power4-fp" 6 -- (and (eq_attr "type" "fp,dmul") -+ (and (eq_attr "type" "fp,fpsimple,dmul") - (eq_attr "cpu" "power4")) - "fpq_power4") - -@@ -410,7 +410,7 @@ - - ; VMX - (define_insn_reservation "power4-vecsimple" 2 -- (and (eq_attr "type" "vecsimple") -+ (and (eq_attr "type" "vecsimple,veclogical,vecmove") - (eq_attr "cpu" "power4")) - "vq_power4") - -@@ -421,7 +421,7 @@ - - ; vecfp compare - (define_insn_reservation "power4-veccmp" 8 -- (and (eq_attr "type" "veccmp") -+ (and (eq_attr "type" "veccmp,veccmpfx") - (eq_attr "cpu" "power4")) - "vq_power4") - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/power5.md gcc-6-20160721/gcc/config/rs6000/power5.md ---- gcc-6.1.0/gcc/config/rs6000/power5.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/power5.md 2016-07-05 19:19:42.000000000 +0000 -@@ -322,7 +322,7 @@ - - ; Basic FP latency is 6 cycles - (define_insn_reservation "power5-fp" 6 -- (and (eq_attr "type" "fp,dmul") -+ (and (eq_attr "type" "fp,fpsimple,dmul") - (eq_attr "cpu" "power5")) - "fpq_power5") - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/power6.md gcc-6-20160721/gcc/config/rs6000/power6.md ---- gcc-6.1.0/gcc/config/rs6000/power6.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/power6.md 2016-07-06 02:31:08.000000000 +0000 -@@ -500,7 +500,7 @@ - (define_bypass 9 "power6-mtcr" "power6-branch") - - (define_insn_reservation "power6-fp" 6 -- (and (eq_attr "type" "fp,dmul") -+ (and (eq_attr "type" "fp,fpsimple,dmul,dfp") - (eq_attr "cpu" "power6")) - "FPU_power6") - -@@ -556,7 +556,7 @@ - "LSF_power6") - - (define_insn_reservation "power6-vecsimple" 3 -- (and (eq_attr "type" "vecsimple") -+ (and (eq_attr "type" "vecsimple,veclogical,vecmove") - (eq_attr "cpu" "power6")) - "FPU_power6") - -@@ -568,7 +568,7 @@ - (define_bypass 4 "power6-vecsimple" "power6-vecstore" ) - - (define_insn_reservation "power6-veccmp" 1 -- (and (eq_attr "type" "veccmp") -+ (and (eq_attr "type" "veccmp,veccmpfx") - (eq_attr "cpu" "power6")) - "FPU_power6") - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/power7.md gcc-6-20160721/gcc/config/rs6000/power7.md ---- gcc-6.1.0/gcc/config/rs6000/power7.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/power7.md 2016-07-06 02:31:08.000000000 +0000 -@@ -292,7 +292,7 @@ - - ; VS Unit (includes FP/VSX/VMX/DFP) - (define_insn_reservation "power7-fp" 6 -- (and (eq_attr "type" "fp,dmul") -+ (and (eq_attr "type" "fp,fpsimple,dmul,dfp") - (eq_attr "cpu" "power7")) - "DU_power7,VSU_power7") - -@@ -324,7 +324,7 @@ - "DU_power7,VSU_power7") - - (define_insn_reservation "power7-vecsimple" 2 -- (and (eq_attr "type" "vecsimple,veccmp") -+ (and (eq_attr "type" "vecsimple,veclogical,vecmove,veccmp,veccmpfx") - (eq_attr "cpu" "power7")) - "DU_power7,vsu1_power7") - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/power8.md gcc-6-20160721/gcc/config/rs6000/power8.md ---- gcc-6.1.0/gcc/config/rs6000/power8.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/power8.md 2016-07-06 02:31:08.000000000 +0000 -@@ -317,7 +317,7 @@ - - ; VS Unit (includes FP/VSX/VMX/DFP/Crypto) - (define_insn_reservation "power8-fp" 6 -- (and (eq_attr "type" "fp,dmul") -+ (and (eq_attr "type" "fp,fpsimple,dmul,dfp") - (eq_attr "cpu" "power8")) - "DU_any_power8,VSU_power8") - -@@ -350,7 +350,8 @@ - "DU_any_power8,VSU_power8") - - (define_insn_reservation "power8-vecsimple" 2 -- (and (eq_attr "type" "vecperm,vecsimple,veccmp") -+ (and (eq_attr "type" "vecperm,vecsimple,veclogical,vecmove,veccmp, -+ veccmpfx") - (eq_attr "cpu" "power8")) - "DU_any_power8,VSU_power8") - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/power9.md gcc-6-20160721/gcc/config/rs6000/power9.md ---- gcc-6.1.0/gcc/config/rs6000/power9.md 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/power9.md 2016-07-06 02:31:08.000000000 +0000 -@@ -0,0 +1,477 @@ -+;; Scheduling description for IBM POWER9 processor. -+;; Copyright (C) 2016 Free Software Foundation, Inc. -+;; -+;; Contributed by Pat Haugen (pthaugen@us.ibm.com). -+ -+;; This file is part of GCC. -+;; -+;; GCC is free software; you can redistribute it and/or modify it -+;; under the terms of the GNU General Public License as published -+;; by the Free Software Foundation; either version 3, or (at your -+;; option) any later version. -+;; -+;; GCC is distributed in the hope that it will be useful, but WITHOUT -+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -+;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public -+;; License for more details. -+;; -+;; You should have received a copy of the GNU General Public License -+;; along with GCC; see the file COPYING3. If not see -+;; <http://www.gnu.org/licenses/>. -+ -+(define_automaton "power9dsp,power9lsu,power9vsu,power9misc") -+ -+(define_cpu_unit "lsu0_power9,lsu1_power9,lsu2_power9,lsu3_power9" "power9lsu") -+(define_cpu_unit "vsu0_power9,vsu1_power9,vsu2_power9,vsu3_power9" "power9vsu") -+; Two vector permute units, part of vsu -+(define_cpu_unit "prm0_power9,prm1_power9" "power9vsu") -+; Two fixed point divide units, not pipelined -+(define_cpu_unit "fx_div0_power9,fx_div1_power9" "power9misc") -+(define_cpu_unit "bru_power9,cryptu_power9,dfu_power9" "power9misc") -+ -+(define_cpu_unit "x0_power9,x1_power9,xa0_power9,xa1_power9, -+ x2_power9,x3_power9,xb0_power9,xb1_power9, -+ br0_power9,br1_power9" "power9dsp") -+ -+ -+; Dispatch port reservations -+; -+; Power9 can dispatch a maximum of 6 iops per cycle with the following -+; general restrictions (other restrictions also apply): -+; 1) At most 2 iops per execution slice -+; 2) At most 2 iops to the branch unit -+; Note that insn position in a dispatch group of 6 insns does not infer which -+; execution slice the insn is routed to. The units are used to infer the -+; conflicts that exist (i.e. an 'even' requirement will preclude dispatch -+; with 2 insns with 'superslice' requirement). -+ -+; The xa0/xa1 units really represent the 3rd dispatch port for a superslice but -+; are listed as separate units to allow those insns that preclude its use to -+; still be scheduled two to a superslice while reserving the 3rd slot. The -+; same applies for xb0/xb1. -+(define_reservation "DU_xa_power9" "xa0_power9+xa1_power9") -+(define_reservation "DU_xb_power9" "xb0_power9+xb1_power9") -+ -+; Any execution slice dispatch -+(define_reservation "DU_any_power9" -+ "x0_power9|x1_power9|DU_xa_power9|x2_power9|x3_power9| -+ DU_xb_power9") -+ -+; Even slice, actually takes even/odd slots -+(define_reservation "DU_even_power9" "x0_power9+x1_power9|x2_power9+x3_power9") -+ -+; Slice plus 3rd slot -+(define_reservation "DU_slice_3_power9" -+ "x0_power9+xa0_power9|x1_power9+xa1_power9| -+ x2_power9+xb0_power9|x3_power9+xb1_power9") -+ -+; Superslice -+(define_reservation "DU_super_power9" -+ "x0_power9+x1_power9|x2_power9+x3_power9") -+ -+; 2-way cracked -+(define_reservation "DU_C2_power9" "x0_power9+x1_power9| -+ x1_power9+DU_xa_power9| -+ x1_power9+x2_power9| -+ DU_xa_power9+x2_power9| -+ x2_power9+x3_power9| -+ x3_power9+DU_xb_power9") -+ -+; 2-way cracked plus 3rd slot -+(define_reservation "DU_C2_3_power9" "x0_power9+x1_power9+xa0_power9| -+ x1_power9+x2_power9+xa0_power9| -+ x1_power9+x2_power9+xb0_power9| -+ x2_power9+x3_power9+xb0_power9") -+ -+; 3-way cracked (consumes whole decode/dispatch cycle) -+(define_reservation "DU_C3_power9" -+ "x0_power9+x1_power9+xa0_power9+xa1_power9+x2_power9+ -+ x3_power9+xb0_power9+xb1_power9+br0_power9+br1_power9") -+ -+; Branch ports -+(define_reservation "DU_branch_power9" "br0_power9|br1_power9") -+ -+ -+; Execution unit reservations -+(define_reservation "LSU_power9" -+ "lsu0_power9|lsu1_power9|lsu2_power9|lsu3_power9") -+ -+(define_reservation "LSU_pair_power9" -+ "lsu0_power9+lsu1_power9|lsu1_power9+lsu2_power9| -+ lsu2_power9+lsu3_power9|lsu3_power9+lsu0_power9") -+ -+(define_reservation "VSU_power9" -+ "vsu0_power9|vsu1_power9|vsu2_power9|vsu3_power9") -+ -+(define_reservation "VSU_super_power9" -+ "vsu0_power9+vsu1_power9|vsu2_power9+vsu3_power9") -+ -+(define_reservation "VSU_PRM_power9" "prm0_power9|prm1_power9") -+ -+ -+; LS Unit -+(define_insn_reservation "power9-load" 4 -+ (and (eq_attr "type" "load") -+ (eq_attr "sign_extend" "no") -+ (eq_attr "update" "no") -+ (eq_attr "cpu" "power9")) -+ "DU_any_power9,LSU_power9") -+ -+(define_insn_reservation "power9-load-update" 4 -+ (and (eq_attr "type" "load") -+ (eq_attr "sign_extend" "no") -+ (eq_attr "update" "yes") -+ (eq_attr "cpu" "power9")) -+ "DU_C2_power9,LSU_power9+VSU_power9") -+ -+(define_insn_reservation "power9-load-ext" 6 -+ (and (eq_attr "type" "load") -+ (eq_attr "sign_extend" "yes") -+ (eq_attr "update" "no") -+ (eq_attr "cpu" "power9")) -+ "DU_C2_power9,LSU_power9") -+ -+(define_insn_reservation "power9-load-ext-update" 6 -+ (and (eq_attr "type" "load") -+ (eq_attr "sign_extend" "yes") -+ (eq_attr "update" "yes") -+ (eq_attr "cpu" "power9")) -+ "DU_C3_power9,LSU_power9+VSU_power9") -+ -+(define_insn_reservation "power9-fpload-double" 4 -+ (and (eq_attr "type" "fpload") -+ (eq_attr "update" "no") -+ (eq_attr "size" "64") -+ (eq_attr "cpu" "power9")) -+ "DU_slice_3_power9,LSU_power9") -+ -+(define_insn_reservation "power9-fpload-update-double" 4 -+ (and (eq_attr "type" "fpload") -+ (eq_attr "update" "yes") -+ (eq_attr "size" "64") -+ (eq_attr "cpu" "power9")) -+ "DU_C2_3_power9,LSU_power9+VSU_power9") -+ -+; SFmode loads are cracked and have additional 2 cycles over DFmode -+(define_insn_reservation "power9-fpload-single" 6 -+ (and (eq_attr "type" "fpload") -+ (eq_attr "update" "no") -+ (eq_attr "size" "32") -+ (eq_attr "cpu" "power9")) -+ "DU_C2_3_power9,LSU_power9") -+ -+(define_insn_reservation "power9-fpload-update-single" 6 -+ (and (eq_attr "type" "fpload") -+ (eq_attr "update" "yes") -+ (eq_attr "size" "32") -+ (eq_attr "cpu" "power9")) -+ "DU_C3_power9,LSU_power9+VSU_power9") -+ -+(define_insn_reservation "power9-vecload" 5 -+ (and (eq_attr "type" "vecload") -+ (eq_attr "cpu" "power9")) -+ "DU_any_power9,LSU_pair_power9") -+ -+; Store data can issue 2 cycles after AGEN issue, 3 cycles for vector store -+(define_insn_reservation "power9-store" 0 -+ (and (eq_attr "type" "store") -+ (eq_attr "update" "no") -+ (eq_attr "indexed" "no") -+ (eq_attr "cpu" "power9")) -+ "DU_slice_3_power9,LSU_power9") -+ -+(define_insn_reservation "power9-store-indexed" 0 -+ (and (eq_attr "type" "store") -+ (eq_attr "update" "no") -+ (eq_attr "indexed" "yes") -+ (eq_attr "cpu" "power9")) -+ "DU_slice_3_power9,LSU_power9") -+ -+; Update forms have 2 cycle latency for updated addr reg -+(define_insn_reservation "power9-store-update" 2 -+ (and (eq_attr "type" "store") -+ (eq_attr "update" "yes") -+ (eq_attr "indexed" "no") -+ (eq_attr "cpu" "power9")) -+ "DU_C2_3_power9,LSU_power9+VSU_power9") -+ -+; Update forms have 2 cycle latency for updated addr reg -+(define_insn_reservation "power9-store-update-indexed" 2 -+ (and (eq_attr "type" "store") -+ (eq_attr "update" "yes") -+ (eq_attr "indexed" "yes") -+ (eq_attr "cpu" "power9")) -+ "DU_C2_3_power9,LSU_power9+VSU_power9") -+ -+(define_insn_reservation "power9-fpstore" 0 -+ (and (eq_attr "type" "fpstore") -+ (eq_attr "update" "no") -+ (eq_attr "cpu" "power9")) -+ "DU_slice_3_power9,LSU_power9") -+ -+; Update forms have 2 cycle latency for updated addr reg -+(define_insn_reservation "power9-fpstore-update" 2 -+ (and (eq_attr "type" "fpstore") -+ (eq_attr "update" "yes") -+ (eq_attr "cpu" "power9")) -+ "DU_C2_3_power9,LSU_power9+VSU_power9") -+ -+(define_insn_reservation "power9-vecstore" 0 -+ (and (eq_attr "type" "vecstore") -+ (eq_attr "cpu" "power9")) -+ "DU_super_power9,LSU_pair_power9") -+ -+(define_insn_reservation "power9-larx" 4 -+ (and (eq_attr "type" "load_l") -+ (eq_attr "cpu" "power9")) -+ "DU_any_power9,LSU_power9") -+ -+(define_insn_reservation "power9-stcx" 2 -+ (and (eq_attr "type" "store_c") -+ (eq_attr "cpu" "power9")) -+ "DU_C2_3_power9,LSU_power9+VSU_power9") -+ -+(define_insn_reservation "power9-sync" 4 -+ (and (eq_attr "type" "sync,isync") -+ (eq_attr "cpu" "power9")) -+ "DU_any_power9,LSU_power9") -+ -+ -+; VSU Execution Unit -+ -+; Fixed point ops -+ -+; Most ALU insns are simple 2 cycle, including record form -+(define_insn_reservation "power9-alu" 2 -+ (and (ior (eq_attr "type" "add,cmp,exts,integer,logical,isel") -+ (and (eq_attr "type" "insert,shift") -+ (eq_attr "dot" "no"))) -+ (eq_attr "cpu" "power9")) -+ "DU_any_power9,VSU_power9") -+ -+; Record form rotate/shift are cracked -+(define_insn_reservation "power9-cracked-alu" 2 -+ (and (eq_attr "type" "insert,shift") -+ (eq_attr "dot" "yes") -+ (eq_attr "cpu" "power9")) -+ "DU_C2_power9,VSU_power9") -+; 4 cycle CR latency -+(define_bypass 4 "power9-cracked-alu" -+ "power9-crlogical,power9-mfcr,power9-mfcrf,power9-branch") -+ -+(define_insn_reservation "power9-alu2" 3 -+ (and (eq_attr "type" "cntlz,popcnt,trap") -+ (eq_attr "cpu" "power9")) -+ "DU_any_power9,VSU_power9") -+ -+; Treat 'two' and 'three' types as 2 or 3 way cracked -+(define_insn_reservation "power9-two" 4 -+ (and (eq_attr "type" "two") -+ (eq_attr "cpu" "power9")) -+ "DU_C2_power9,VSU_power9") -+ -+(define_insn_reservation "power9-three" 6 -+ (and (eq_attr "type" "three") -+ (eq_attr "cpu" "power9")) -+ "DU_C3_power9,VSU_power9") -+ -+(define_insn_reservation "power9-mul" 4 -+ (and (eq_attr "type" "mul") -+ (eq_attr "dot" "no") -+ (eq_attr "cpu" "power9")) -+ "DU_any_power9,VSU_power9") -+ -+(define_insn_reservation "power9-mul-compare" 4 -+ (and (eq_attr "type" "mul") -+ (eq_attr "dot" "yes") -+ (eq_attr "cpu" "power9")) -+ "DU_C2_power9,VSU_power9") -+; 6 cycle CR latency -+(define_bypass 6 "power9-mul-compare" -+ "power9-crlogical,power9-mfcr,power9-mfcrf,power9-branch") -+ -+; Fixed point divides reserve the divide units for a minimum of 8 cycles -+(define_insn_reservation "power9-idiv" 16 -+ (and (eq_attr "type" "div") -+ (eq_attr "size" "32") -+ (eq_attr "cpu" "power9")) -+ "DU_even_power9,fx_div0_power9*8|fx_div1_power9*8") -+ -+(define_insn_reservation "power9-ldiv" 24 -+ (and (eq_attr "type" "div") -+ (eq_attr "size" "64") -+ (eq_attr "cpu" "power9")) -+ "DU_even_power9,fx_div0_power9*8|fx_div1_power9*8") -+ -+(define_insn_reservation "power9-crlogical" 2 -+ (and (eq_attr "type" "cr_logical,delayed_cr") -+ (eq_attr "cpu" "power9")) -+ "DU_any_power9,VSU_power9") -+ -+(define_insn_reservation "power9-mfcrf" 2 -+ (and (eq_attr "type" "mfcrf") -+ (eq_attr "cpu" "power9")) -+ "DU_any_power9,VSU_power9") -+ -+(define_insn_reservation "power9-mfcr" 6 -+ (and (eq_attr "type" "mfcr") -+ (eq_attr "cpu" "power9")) -+ "DU_C3_power9,VSU_power9") -+ -+; Should differentiate between 1 cr field and > 1 since target of > 1 cr -+; is cracked -+(define_insn_reservation "power9-mtcr" 2 -+ (and (eq_attr "type" "mtcr") -+ (eq_attr "cpu" "power9")) -+ "DU_any_power9,VSU_power9") -+ -+; Move to LR/CTR are executed in VSU -+(define_insn_reservation "power9-mtjmpr" 5 -+ (and (eq_attr "type" "mtjmpr") -+ (eq_attr "cpu" "power9")) -+ "DU_any_power9,VSU_power9") -+ -+; Floating point/Vector ops -+(define_insn_reservation "power9-fpsimple" 2 -+ (and (eq_attr "type" "fpsimple") -+ (eq_attr "cpu" "power9")) -+ "DU_slice_3_power9,VSU_power9") -+ -+(define_insn_reservation "power9-fp" 7 -+ (and (eq_attr "type" "fp,dmul") -+ (eq_attr "cpu" "power9")) -+ "DU_slice_3_power9,VSU_power9") -+ -+(define_insn_reservation "power9-fpcompare" 3 -+ (and (eq_attr "type" "fpcompare") -+ (eq_attr "cpu" "power9")) -+ "DU_slice_3_power9,VSU_power9") -+ -+; FP div/sqrt are executed in the VSU slices. They are not pipelined wrt other -+; divide insns, but for the most part do not block pipelined ops. -+(define_insn_reservation "power9-sdiv" 22 -+ (and (eq_attr "type" "sdiv") -+ (eq_attr "cpu" "power9")) -+ "DU_slice_3_power9,VSU_power9") -+ -+(define_insn_reservation "power9-ddiv" 33 -+ (and (eq_attr "type" "ddiv") -+ (eq_attr "cpu" "power9")) -+ "DU_slice_3_power9,VSU_power9") -+ -+(define_insn_reservation "power9-sqrt" 26 -+ (and (eq_attr "type" "ssqrt") -+ (eq_attr "cpu" "power9")) -+ "DU_slice_3_power9,VSU_power9") -+ -+(define_insn_reservation "power9-dsqrt" 36 -+ (and (eq_attr "type" "dsqrt") -+ (eq_attr "cpu" "power9")) -+ "DU_slice_3_power9,VSU_power9") -+ -+(define_insn_reservation "power9-vec-2cyc" 2 -+ (and (eq_attr "type" "vecmove,veclogical,vecexts,veccmpfx") -+ (eq_attr "cpu" "power9")) -+ "DU_super_power9,VSU_super_power9") -+ -+(define_insn_reservation "power9-veccmp" 3 -+ (and (eq_attr "type" "veccmp") -+ (eq_attr "cpu" "power9")) -+ "DU_super_power9,VSU_super_power9") -+ -+(define_insn_reservation "power9-vecsimple" 3 -+ (and (eq_attr "type" "vecsimple") -+ (eq_attr "cpu" "power9")) -+ "DU_super_power9,VSU_super_power9") -+ -+(define_insn_reservation "power9-vecnormal" 7 -+ (and (eq_attr "type" "vecfloat,vecdouble") -+ (eq_attr "size" "!128") -+ (eq_attr "cpu" "power9")) -+ "DU_super_power9,VSU_super_power9") -+ -+; Quad-precision FP ops, execute in DFU -+(define_insn_reservation "power9-qp" 12 -+ (and (eq_attr "type" "vecfloat,vecdouble") -+ (eq_attr "size" "128") -+ (eq_attr "cpu" "power9")) -+ "DU_super_power9,dfu_power9") -+ -+(define_insn_reservation "power9-vecperm" 3 -+ (and (eq_attr "type" "vecperm") -+ (eq_attr "cpu" "power9")) -+ "DU_super_power9,VSU_PRM_power9") -+ -+(define_insn_reservation "power9-veccomplex" 7 -+ (and (eq_attr "type" "veccomplex") -+ (eq_attr "cpu" "power9")) -+ "DU_super_power9,VSU_super_power9") -+ -+(define_insn_reservation "power9-vecfdiv" 28 -+ (and (eq_attr "type" "vecfdiv") -+ (eq_attr "cpu" "power9")) -+ "DU_super_power9,VSU_super_power9") -+ -+(define_insn_reservation "power9-vecdiv" 32 -+ (and (eq_attr "type" "vecdiv") -+ (eq_attr "size" "!128") -+ (eq_attr "cpu" "power9")) -+ "DU_super_power9,VSU_super_power9") -+ -+(define_insn_reservation "power9-qpdiv" 56 -+ (and (eq_attr "type" "vecdiv") -+ (eq_attr "size" "128") -+ (eq_attr "cpu" "power9")) -+ "DU_super_power9,dfu_power9") -+ -+(define_insn_reservation "power9-mffgpr" 2 -+ (and (eq_attr "type" "mffgpr") -+ (eq_attr "cpu" "power9")) -+ "DU_slice_3_power9,VSU_power9") -+ -+(define_insn_reservation "power9-mftgpr" 2 -+ (and (eq_attr "type" "mftgpr") -+ (eq_attr "cpu" "power9")) -+ "DU_slice_3_power9,VSU_power9") -+ -+ -+; Branch Unit -+; Move from LR/CTR are executed in BRU but consume a writeback port from an -+; execution slice. -+(define_insn_reservation "power9-mfjmpr" 6 -+ (and (eq_attr "type" "mfjmpr") -+ (eq_attr "cpu" "power9")) -+ "DU_branch_power9,bru_power9+VSU_power9") -+ -+; Branch is 2 cycles -+(define_insn_reservation "power9-branch" 2 -+ (and (eq_attr "type" "jmpreg,branch") -+ (eq_attr "cpu" "power9")) -+ "DU_branch_power9,bru_power9") -+ -+ -+; Crypto Unit -+(define_insn_reservation "power9-crypto" 6 -+ (and (eq_attr "type" "crypto") -+ (eq_attr "cpu" "power9")) -+ "DU_super_power9,cryptu_power9") -+ -+ -+; HTM Unit -+(define_insn_reservation "power9-htm" 4 -+ (and (eq_attr "type" "htm") -+ (eq_attr "cpu" "power9")) -+ "DU_C2_power9,LSU_power9") -+ -+(define_insn_reservation "power9-htm-simple" 2 -+ (and (eq_attr "type" "htmsimple") -+ (eq_attr "cpu" "power9")) -+ "DU_any_power9,VSU_power9") -+ -+ -+; DFP Unit -+(define_insn_reservation "power9-dfp" 12 -+ (and (eq_attr "type" "dfp") -+ (eq_attr "cpu" "power9")) -+ "DU_even_power9,dfu_power9") -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/predicates.md gcc-6-20160721/gcc/config/rs6000/predicates.md ---- gcc-6.1.0/gcc/config/rs6000/predicates.md 2016-03-25 09:10:03.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/predicates.md 2016-07-01 17:56:54.000000000 +0000 -@@ -572,6 +572,38 @@ - } - }) - -+;; Return 1 if the operand is a CONST_VECTOR or VEC_DUPLICATE of a constant -+;; that can loaded with a XXSPLTIB instruction and then a VUPKHSB, VECSB2W or -+;; VECSB2D instruction. -+ -+(define_predicate "xxspltib_constant_split" -+ (match_code "const_vector,vec_duplicate,const_int") -+{ -+ int value = 256; -+ int num_insns = -1; -+ -+ if (!xxspltib_constant_p (op, mode, &num_insns, &value)) -+ return false; -+ -+ return num_insns > 1; -+}) -+ -+ -+;; Return 1 if the operand is a CONST_VECTOR that can loaded directly with a -+;; XXSPLTIB instruction. -+ -+(define_predicate "xxspltib_constant_nosplit" -+ (match_code "const_vector,vec_duplicate,const_int") -+{ -+ int value = 256; -+ int num_insns = -1; -+ -+ if (!xxspltib_constant_p (op, mode, &num_insns, &value)) -+ return false; -+ -+ return num_insns == 1; -+}) -+ - ;; Return 1 if the operand is a CONST_VECTOR and can be loaded into a - ;; vector register without using memory. - (define_predicate "easy_vector_constant" -@@ -590,7 +622,14 @@ - - if (VECTOR_MEM_ALTIVEC_OR_VSX_P (mode)) - { -- if (zero_constant (op, mode)) -+ int value = 256; -+ int num_insns = -1; -+ -+ if (zero_constant (op, mode) || all_ones_constant (op, mode)) -+ return true; -+ -+ if (TARGET_P9_VECTOR -+ && xxspltib_constant_p (op, mode, &num_insns, &value)) - return true; - - return easy_altivec_constant (op, mode); -@@ -669,6 +708,11 @@ - (and (match_code "const_int,const_double,const_wide_int,const_vector") - (match_test "op == CONST0_RTX (mode)"))) - -+;; Return 1 if operand is constant -1 (scalars and vectors). -+(define_predicate "all_ones_constant" -+ (and (match_code "const_int,const_double,const_wide_int,const_vector") -+ (match_test "op == CONSTM1_RTX (mode) && !FLOAT_MODE_P (mode)"))) -+ - ;; Return 1 if operand is 0.0. - (define_predicate "zero_fp_constant" - (and (match_code "const_double") -@@ -698,48 +742,25 @@ - (define_predicate "quad_memory_operand" - (match_code "mem") - { -- rtx addr, op0, op1; -- int ret; -- - if (!TARGET_QUAD_MEMORY && !TARGET_SYNC_TI) -- ret = 0; -- -- else if (!memory_operand (op, mode)) -- ret = 0; -- -- else if (GET_MODE_SIZE (GET_MODE (op)) != 16) -- ret = 0; -- -- else if (MEM_ALIGN (op) < 128) -- ret = 0; -- -- else -- { -- addr = XEXP (op, 0); -- if (int_reg_operand (addr, Pmode)) -- ret = 1; -+ return false; - -- else if (GET_CODE (addr) != PLUS) -- ret = 0; -+ if (GET_MODE_SIZE (mode) != 16 || !MEM_P (op) || MEM_ALIGN (op) < 128) -+ return false; - -- else -- { -- op0 = XEXP (addr, 0); -- op1 = XEXP (addr, 1); -- ret = (int_reg_operand (op0, Pmode) -- && GET_CODE (op1) == CONST_INT -- && IN_RANGE (INTVAL (op1), -32768, 32767) -- && (INTVAL (op1) & 15) == 0); -- } -- } -+ return quad_address_p (XEXP (op, 0), mode, false); -+}) - -- if (TARGET_DEBUG_ADDR) -- { -- fprintf (stderr, "\nquad_memory_operand, ret = %s\n", ret ? "true" : "false"); -- debug_rtx (op); -- } -+;; Return 1 if the operand is suitable for load/store to vector registers with -+;; d-form addressing (register+offset), which was added in ISA 3.0. -+;; Unlike quad_memory_operand, we do not have to check for alignment. -+(define_predicate "vsx_quad_dform_memory_operand" -+ (match_code "mem") -+{ -+ if (!TARGET_P9_DFORM_VECTOR || !MEM_P (op) || GET_MODE_SIZE (mode) != 16) -+ return false; - -- return ret; -+ return quad_address_p (XEXP (op, 0), mode, false); - }) - - ;; Return 1 if the operand is an indexed or indirect memory operand. -@@ -1054,6 +1075,10 @@ - mode = V2DFmode; - else if (mode == DImode) - mode = V2DImode; -+ else if (mode == SImode && TARGET_P9_VECTOR) -+ mode = V4SImode; -+ else if (mode == SFmode && TARGET_P9_VECTOR) -+ mode = V4SFmode; - else - gcc_unreachable (); - return memory_address_addr_space_p (mode, XEXP (op, 0), -@@ -1091,10 +1116,6 @@ - (define_special_predicate "equality_operator" - (match_code "eq,ne")) - --;; Return true if operand is MIN or MAX operator. --(define_predicate "min_max_operator" -- (match_code "smin,smax,umin,umax")) -- - ;; Return 1 if OP is a comparison operation that is valid for a branch - ;; instruction. We check the opcode against the mode of the CC value. - ;; validate_condition_mode is an assertion. -@@ -1137,6 +1158,11 @@ - (and (match_operand 0 "branch_comparison_operator") - (match_code "ne,le,ge,leu,geu,ordered"))) - -+;; Return 1 if OP is a comparison operator suitable for vector/scalar -+;; comparisons that generate a -1/0 mask. -+(define_predicate "fpmask_comparison_operator" -+ (match_code "eq,gt,ge")) -+ - ;; Return 1 if OP is a comparison operation that is valid for a branch - ;; insn, which is true if the corresponding bit in the CC register is set. - (define_predicate "branch_positive_comparison_operator" -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/rs6000-builtin.def gcc-6-20160721/gcc/config/rs6000/rs6000-builtin.def ---- gcc-6.1.0/gcc/config/rs6000/rs6000-builtin.def 2016-01-20 20:30:24.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/rs6000-builtin.def 2016-07-08 18:06:16.000000000 +0000 -@@ -24,6 +24,7 @@ - <http://www.gnu.org/licenses/>. */ - - /* Before including this file, some macros must be defined: -+ RS6000_BUILTIN_0 -- 0 arg builtins - RS6000_BUILTIN_1 -- 1 arg builtins - RS6000_BUILTIN_2 -- 2 arg builtins - RS6000_BUILTIN_3 -- 3 arg builtins -@@ -43,6 +44,10 @@ - ATTR builtin attribute information. - ICODE Insn code of the function that implents the builtin. */ - -+#ifndef RS6000_BUILTIN_0 -+ #error "RS6000_BUILTIN_0 is not defined." -+#endif -+ - #ifndef RS6000_BUILTIN_1 - #error "RS6000_BUILTIN_1 is not defined." - #endif -@@ -637,6 +642,91 @@ - | RS6000_BTC_TERNARY), \ - CODE_FOR_ ## ICODE) /* ICODE */ - -+/* Miscellaneous builtins for instructions added in ISA 3.0. These -+ instructions don't require either the DFP or VSX options, just the basic -+ ISA 3.0 enablement since they operate on general purpose registers. */ -+#define BU_P9_MISC_0(ENUM, NAME, ATTR, ICODE) \ -+ RS6000_BUILTIN_0 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ -+ "__builtin_" NAME, /* NAME */ \ -+ RS6000_BTM_P9_MISC, /* MASK */ \ -+ (RS6000_BTC_ ## ATTR /* ATTR */ \ -+ | RS6000_BTC_SPECIAL), \ -+ CODE_FOR_ ## ICODE) /* ICODE */ -+ -+#define BU_P9_MISC_1(ENUM, NAME, ATTR, ICODE) \ -+ RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ -+ "__builtin_" NAME, /* NAME */ \ -+ RS6000_BTM_P9_MISC, /* MASK */ \ -+ (RS6000_BTC_ ## ATTR /* ATTR */ \ -+ | RS6000_BTC_UNARY), \ -+ CODE_FOR_ ## ICODE) /* ICODE */ -+ -+/* Miscellaneous builtins for instructions added in ISA 3.0. These -+ instructions don't require either the DFP or VSX options, just the basic -+ ISA 3.0 enablement since they operate on general purpose registers, -+ and they require 64-bit addressing. */ -+#define BU_P9_64BIT_MISC_0(ENUM, NAME, ATTR, ICODE) \ -+ RS6000_BUILTIN_0 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ -+ "__builtin_" NAME, /* NAME */ \ -+ RS6000_BTM_P9_MISC \ -+ | RS6000_BTM_64BIT, /* MASK */ \ -+ (RS6000_BTC_ ## ATTR /* ATTR */ \ -+ | RS6000_BTC_SPECIAL), \ -+ CODE_FOR_ ## ICODE) /* ICODE */ -+ -+/* Miscellaneous builtins for decimal floating point instructions -+ added in ISA 3.0. These instructions don't require the VSX -+ options, just the basic ISA 3.0 enablement since they operate on -+ general purpose registers. */ -+#define BU_P9_DFP_MISC_0(ENUM, NAME, ATTR, ICODE) \ -+ RS6000_BUILTIN_0 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ -+ "__builtin_" NAME, /* NAME */ \ -+ RS6000_BTM_P9_MISC, /* MASK */ \ -+ (RS6000_BTC_ ## ATTR /* ATTR */ \ -+ | RS6000_BTC_SPECIAL), \ -+ CODE_FOR_ ## ICODE) /* ICODE */ -+ -+#define BU_P9_DFP_MISC_1(ENUM, NAME, ATTR, ICODE) \ -+ RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ -+ "__builtin_" NAME, /* NAME */ \ -+ RS6000_BTM_P9_MISC, /* MASK */ \ -+ (RS6000_BTC_ ## ATTR /* ATTR */ \ -+ | RS6000_BTC_SPECIAL), \ -+ CODE_FOR_ ## ICODE) /* ICODE */ -+ -+#define BU_P9_DFP_MISC_2(ENUM, NAME, ATTR, ICODE) \ -+ RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ -+ "__builtin_" NAME, /* NAME */ \ -+ RS6000_BTM_P9_MISC, /* MASK */ \ -+ (RS6000_BTC_ ## ATTR /* ATTR */ \ -+ | RS6000_BTC_SPECIAL), \ -+ CODE_FOR_ ## ICODE) /* ICODE */ -+ -+/* Decimal floating point overloaded functions added in ISA 3.0 */ -+#define BU_P9_DFP_OVERLOAD_1(ENUM, NAME) \ -+ RS6000_BUILTIN_1 (P9_BUILTIN_DFP_ ## ENUM, /* ENUM */ \ -+ "__builtin_dfp_" NAME, /* NAME */ \ -+ RS6000_BTM_P9_MISC, /* MASK */ \ -+ (RS6000_BTC_OVERLOADED /* ATTR */ \ -+ | RS6000_BTC_UNARY), \ -+ CODE_FOR_nothing) /* ICODE */ -+ -+#define BU_P9_DFP_OVERLOAD_2(ENUM, NAME) \ -+ RS6000_BUILTIN_2 (P9_BUILTIN_DFP_ ## ENUM, /* ENUM */ \ -+ "__builtin_dfp_" NAME, /* NAME */ \ -+ RS6000_BTM_P9_MISC, /* MASK */ \ -+ (RS6000_BTC_OVERLOADED /* ATTR */ \ -+ | RS6000_BTC_BINARY), \ -+ CODE_FOR_nothing) /* ICODE */ -+ -+#define BU_P9_DFP_OVERLOAD_3(ENUM, NAME) \ -+ RS6000_BUILTIN_3 (P9_BUILTIN_DFP_ ## ENUM, /* ENUM */ \ -+ "__builtin_dfp_" NAME, /* NAME */ \ -+ RS6000_BTM_P9_MISC, /* MASK */ \ -+ (RS6000_BTC_OVERLOADED /* ATTR */ \ -+ | RS6000_BTC_TERNARY), \ -+ CODE_FOR_nothing) /* ICODE */ -+ - /* 128-bit long double floating point builtins. */ - #define BU_LDBL128_2(ENUM, NAME, ATTR, ICODE) \ - RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ -@@ -647,8 +737,94 @@ - | RS6000_BTC_BINARY), \ - CODE_FOR_ ## ICODE) /* ICODE */ - -+/* IEEE 128-bit floating-point builtins. */ -+#define BU_FLOAT128_2(ENUM, NAME, ATTR, ICODE) \ -+ RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ -+ "__builtin_" NAME, /* NAME */ \ -+ RS6000_BTM_FLOAT128, /* MASK */ \ -+ (RS6000_BTC_ ## ATTR /* ATTR */ \ -+ | RS6000_BTC_BINARY), \ -+ CODE_FOR_ ## ICODE) /* ICODE */ -+ -+#define BU_FLOAT128_1(ENUM, NAME, ATTR, ICODE) \ -+ RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ -+ "__builtin_" NAME, /* NAME */ \ -+ RS6000_BTM_FLOAT128, /* MASK */ \ -+ (RS6000_BTC_ ## ATTR /* ATTR */ \ -+ | RS6000_BTC_UNARY), \ -+ CODE_FOR_ ## ICODE) /* ICODE */ -+ -+/* ISA 3.0 (power9) vector convenience macros. */ -+/* For the instructions that are encoded as altivec instructions use -+ __builtin_altivec_ as the builtin name. */ -+#define BU_P9V_AV_1(ENUM, NAME, ATTR, ICODE) \ -+ RS6000_BUILTIN_1 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \ -+ "__builtin_altivec_" NAME, /* NAME */ \ -+ RS6000_BTM_P9_VECTOR, /* MASK */ \ -+ (RS6000_BTC_ ## ATTR /* ATTR */ \ -+ | RS6000_BTC_UNARY), \ -+ CODE_FOR_ ## ICODE) /* ICODE */ -+ -+#define BU_P9V_AV_2(ENUM, NAME, ATTR, ICODE) \ -+ RS6000_BUILTIN_2 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \ -+ "__builtin_altivec_" NAME, /* NAME */ \ -+ RS6000_BTM_P9_VECTOR, /* MASK */ \ -+ (RS6000_BTC_ ## ATTR /* ATTR */ \ -+ | RS6000_BTC_BINARY), \ -+ CODE_FOR_ ## ICODE) /* ICODE */ -+ -+#define BU_P9V_AV_3(ENUM, NAME, ATTR, ICODE) \ -+ RS6000_BUILTIN_3 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \ -+ "__builtin_altivec_" NAME, /* NAME */ \ -+ RS6000_BTM_P9_VECTOR, /* MASK */ \ -+ (RS6000_BTC_ ## ATTR /* ATTR */ \ -+ | RS6000_BTC_TERNARY), \ -+ CODE_FOR_ ## ICODE) /* ICODE */ -+ -+#define BU_P9V_AV_P(ENUM, NAME, ATTR, ICODE) \ -+ RS6000_BUILTIN_P (P9V_BUILTIN_ ## ENUM, /* ENUM */ \ -+ "__builtin_altivec_" NAME, /* NAME */ \ -+ RS6000_BTM_P9_VECTOR, /* MASK */ \ -+ (RS6000_BTC_ ## ATTR /* ATTR */ \ -+ | RS6000_BTC_PREDICATE), \ -+ CODE_FOR_ ## ICODE) /* ICODE */ -+ -+/* For the instructions encoded as VSX instructions use __builtin_vsx as the -+ builtin name. */ -+#define BU_P9V_VSX_1(ENUM, NAME, ATTR, ICODE) \ -+ RS6000_BUILTIN_1 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \ -+ "__builtin_vsx_" NAME, /* NAME */ \ -+ RS6000_BTM_P9_VECTOR, /* MASK */ \ -+ (RS6000_BTC_ ## ATTR /* ATTR */ \ -+ | RS6000_BTC_UNARY), \ -+ CODE_FOR_ ## ICODE) /* ICODE */ -+ -+#define BU_P9V_OVERLOAD_1(ENUM, NAME) \ -+ RS6000_BUILTIN_1 (P9V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ -+ "__builtin_vec_" NAME, /* NAME */ \ -+ RS6000_BTM_P9_VECTOR, /* MASK */ \ -+ (RS6000_BTC_OVERLOADED /* ATTR */ \ -+ | RS6000_BTC_UNARY), \ -+ CODE_FOR_nothing) /* ICODE */ -+ -+#define BU_P9V_OVERLOAD_2(ENUM, NAME) \ -+ RS6000_BUILTIN_2 (P9V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ -+ "__builtin_vec_" NAME, /* NAME */ \ -+ RS6000_BTM_P9_VECTOR, /* MASK */ \ -+ (RS6000_BTC_OVERLOADED /* ATTR */ \ -+ | RS6000_BTC_BINARY), \ -+ CODE_FOR_nothing) /* ICODE */ -+ -+#define BU_P9V_OVERLOAD_3(ENUM, NAME) \ -+ RS6000_BUILTIN_3 (P9V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ -+ "__builtin_vec_" NAME, /* NAME */ \ -+ RS6000_BTM_P9_VECTOR, /* MASK */ \ -+ (RS6000_BTC_OVERLOADED /* ATTR */ \ -+ | RS6000_BTC_TERNARY), \ -+ CODE_FOR_nothing) /* ICODE */ - #endif - -+ - /* Insure 0 is not a legitimate index. */ - BU_SPECIAL_X (RS6000_BUILTIN_NONE, NULL, 0, RS6000_BTC_MISC) - -@@ -1391,13 +1567,25 @@ - BU_VSX_X (LXVW4X_V8HI, "lxvw4x_v8hi", MEM) - BU_VSX_X (LXVW4X_V16QI, "lxvw4x_v16qi", MEM) - BU_VSX_X (STXSDX, "stxsdx", MEM) --BU_VSX_X (STXVD2X_V1TI, "stxsdx_v1ti", MEM) --BU_VSX_X (STXVD2X_V2DF, "stxsdx_v2df", MEM) --BU_VSX_X (STXVD2X_V2DI, "stxsdx_v2di", MEM) --BU_VSX_X (STXVW4X_V4SF, "stxsdx_v4sf", MEM) --BU_VSX_X (STXVW4X_V4SI, "stxsdx_v4si", MEM) --BU_VSX_X (STXVW4X_V8HI, "stxsdx_v8hi", MEM) --BU_VSX_X (STXVW4X_V16QI, "stxsdx_v16qi", MEM) -+BU_VSX_X (STXVD2X_V1TI, "stxvd2x_v1ti", MEM) -+BU_VSX_X (STXVD2X_V2DF, "stxvd2x_v2df", MEM) -+BU_VSX_X (STXVD2X_V2DI, "stxvd2x_v2di", MEM) -+BU_VSX_X (STXVW4X_V4SF, "stxvw4x_v4sf", MEM) -+BU_VSX_X (STXVW4X_V4SI, "stxvw4x_v4si", MEM) -+BU_VSX_X (STXVW4X_V8HI, "stxvw4x_v8hi", MEM) -+BU_VSX_X (STXVW4X_V16QI, "stxvw4x_v16qi", MEM) -+BU_VSX_X (LD_ELEMREV_V2DF, "ld_elemrev_v2df", MEM) -+BU_VSX_X (LD_ELEMREV_V2DI, "ld_elemrev_v2di", MEM) -+BU_VSX_X (LD_ELEMREV_V4SF, "ld_elemrev_v4sf", MEM) -+BU_VSX_X (LD_ELEMREV_V4SI, "ld_elemrev_v4si", MEM) -+BU_VSX_X (LD_ELEMREV_V8HI, "ld_elemrev_v8hi", MEM) -+BU_VSX_X (LD_ELEMREV_V16QI, "ld_elemrev_v16qi", MEM) -+BU_VSX_X (ST_ELEMREV_V2DF, "st_elemrev_v2df", MEM) -+BU_VSX_X (ST_ELEMREV_V2DI, "st_elemrev_v2di", MEM) -+BU_VSX_X (ST_ELEMREV_V4SF, "st_elemrev_v4sf", MEM) -+BU_VSX_X (ST_ELEMREV_V4SI, "st_elemrev_v4si", MEM) -+BU_VSX_X (ST_ELEMREV_V8HI, "st_elemrev_v8hi", MEM) -+BU_VSX_X (ST_ELEMREV_V16QI, "st_elemrev_v16qi", MEM) - BU_VSX_X (XSABSDP, "xsabsdp", CONST) - BU_VSX_X (XSADDDP, "xsadddp", FP) - BU_VSX_X (XSCMPODP, "xscmpodp", FP) -@@ -1455,6 +1643,8 @@ - /* VSX builtins that are handled as special cases. */ - BU_VSX_OVERLOAD_X (LD, "ld") - BU_VSX_OVERLOAD_X (ST, "st") -+BU_VSX_OVERLOAD_X (XL, "xl") -+BU_VSX_OVERLOAD_X (XST, "xst") - - /* 1 argument VSX instructions added in ISA 2.07. */ - BU_P8V_VSX_1 (XSCVSPDPN, "xscvspdpn", CONST, vsx_xscvspdpn) -@@ -1589,6 +1779,25 @@ - BU_P8V_OVERLOAD_3 (VSUBECUQ, "vsubecuq") - BU_P8V_OVERLOAD_3 (VSUBEUQM, "vsubeuqm") - -+/* ISA 3.0 vector overloaded 2-argument functions. */ -+BU_P9V_AV_2 (VSLV, "vslv", CONST, vslv) -+BU_P9V_AV_2 (VSRV, "vsrv", CONST, vsrv) -+ -+/* ISA 3.0 vector overloaded 2-argument functions. */ -+BU_P9V_OVERLOAD_2 (VSLV, "vslv") -+BU_P9V_OVERLOAD_2 (VSRV, "vsrv") -+ -+/* 2 argument vector functions added in ISA 3.0 (power9). */ -+BU_P9V_AV_2 (VADUB, "vadub", CONST, vaduv16qi3) -+BU_P9V_AV_2 (VADUH, "vaduh", CONST, vaduv8hi3) -+BU_P9V_AV_2 (VADUW, "vaduw", CONST, vaduv4si3) -+ -+/* ISA 3.0 vector overloaded 2 argument functions. */ -+BU_P9V_OVERLOAD_2 (VADU, "vadu") -+BU_P9V_OVERLOAD_2 (VADUB, "vadub") -+BU_P9V_OVERLOAD_2 (VADUH, "vaduh") -+BU_P9V_OVERLOAD_2 (VADUW, "vaduw") -+ - - /* 2 argument extended divide functions added in ISA 2.06. */ - BU_P7_MISC_2 (DIVWE, "divwe", CONST, dive_si) -@@ -1639,12 +1848,72 @@ - BU_DFP_MISC_2 (PACK_TD, "pack_dec128", CONST, packtd) - BU_DFP_MISC_2 (UNPACK_TD, "unpack_dec128", CONST, unpacktd) - -+/* 0 argument general-purpose register functions added in ISA 3.0 (power9). */ -+BU_P9_MISC_0 (DARN_32, "darn_32", MISC, darn_32) -+BU_P9_64BIT_MISC_0 (DARN_RAW, "darn_raw", MISC, darn_raw) -+BU_P9_64BIT_MISC_0 (DARN, "darn", MISC, darn) -+ - BU_LDBL128_2 (PACK_TF, "pack_longdouble", CONST, packtf) - BU_LDBL128_2 (UNPACK_TF, "unpack_longdouble", CONST, unpacktf) - - BU_P7_MISC_2 (PACK_V1TI, "pack_vector_int128", CONST, packv1ti) - BU_P7_MISC_2 (UNPACK_V1TI, "unpack_vector_int128", CONST, unpackv1ti) - -+/* 2 argument DFP (Decimal Floating Point) functions added in ISA 3.0. */ -+BU_P9_DFP_MISC_2 (TSTSFI_LT_DD, "dtstsfi_lt_dd", CONST, dfptstsfi_lt_dd) -+BU_P9_DFP_MISC_2 (TSTSFI_LT_TD, "dtstsfi_lt_td", CONST, dfptstsfi_lt_td) -+ -+BU_P9_DFP_MISC_2 (TSTSFI_EQ_DD, "dtstsfi_eq_dd", CONST, dfptstsfi_eq_dd) -+BU_P9_DFP_MISC_2 (TSTSFI_EQ_TD, "dtstsfi_eq_td", CONST, dfptstsfi_eq_td) -+ -+BU_P9_DFP_MISC_2 (TSTSFI_GT_DD, "dtstsfi_gt_dd", CONST, dfptstsfi_gt_dd) -+BU_P9_DFP_MISC_2 (TSTSFI_GT_TD, "dtstsfi_gt_td", CONST, dfptstsfi_gt_td) -+ -+BU_P9_DFP_MISC_2 (TSTSFI_OV_DD, "dtstsfi_ov_dd", CONST, dfptstsfi_unordered_dd) -+BU_P9_DFP_MISC_2 (TSTSFI_OV_TD, "dtstsfi_ov_td", CONST, dfptstsfi_unordered_td) -+ -+/* 2 argument overloaded DFP functions added in ISA 3.0. */ -+BU_P9_DFP_OVERLOAD_2 (TSTSFI_LT, "dtstsfi_lt") -+BU_P9_DFP_OVERLOAD_2 (TSTSFI_LT_DD, "dtstsfi_lt_dd") -+BU_P9_DFP_OVERLOAD_2 (TSTSFI_LT_TD, "dtstsfi_lt_td") -+ -+BU_P9_DFP_OVERLOAD_2 (TSTSFI_EQ, "dtstsfi_eq") -+BU_P9_DFP_OVERLOAD_2 (TSTSFI_EQ_DD, "dtstsfi_eq_dd") -+BU_P9_DFP_OVERLOAD_2 (TSTSFI_EQ_TD, "dtstsfi_eq_td") -+ -+BU_P9_DFP_OVERLOAD_2 (TSTSFI_GT, "dtstsfi_gt") -+BU_P9_DFP_OVERLOAD_2 (TSTSFI_GT_DD, "dtstsfi_gt_dd") -+BU_P9_DFP_OVERLOAD_2 (TSTSFI_GT_TD, "dtstsfi_gt_td") -+ -+BU_P9_DFP_OVERLOAD_2 (TSTSFI_OV, "dtstsfi_ov") -+BU_P9_DFP_OVERLOAD_2 (TSTSFI_OV_DD, "dtstsfi_ov_dd") -+BU_P9_DFP_OVERLOAD_2 (TSTSFI_OV_TD, "dtstsfi_ov_td") -+ -+/* 1 argument vector functions added in ISA 3.0 (power9). */ -+BU_P9V_AV_1 (VCTZB, "vctzb", CONST, ctzv16qi2) -+BU_P9V_AV_1 (VCTZH, "vctzh", CONST, ctzv8hi2) -+BU_P9V_AV_1 (VCTZW, "vctzw", CONST, ctzv4si2) -+BU_P9V_AV_1 (VCTZD, "vctzd", CONST, ctzv2di2) -+BU_P9V_AV_1 (VPRTYBD, "vprtybd", CONST, parityv2di2) -+BU_P9V_AV_1 (VPRTYBQ, "vprtybq", CONST, parityv1ti2) -+BU_P9V_AV_1 (VPRTYBW, "vprtybw", CONST, parityv4si2) -+ -+/* ISA 3.0 vector overloaded 1 argument functions. */ -+BU_P9V_OVERLOAD_1 (VCTZ, "vctz") -+BU_P9V_OVERLOAD_1 (VCTZB, "vctzb") -+BU_P9V_OVERLOAD_1 (VCTZH, "vctzh") -+BU_P9V_OVERLOAD_1 (VCTZW, "vctzw") -+BU_P9V_OVERLOAD_1 (VCTZD, "vctzd") -+BU_P9V_OVERLOAD_1 (VPRTYB, "vprtyb") -+BU_P9V_OVERLOAD_1 (VPRTYBD, "vprtybd") -+BU_P9V_OVERLOAD_1 (VPRTYBQ, "vprtybq") -+BU_P9V_OVERLOAD_1 (VPRTYBW, "vprtybw") -+ -+/* 1 argument IEEE 128-bit floating-point functions. */ -+BU_FLOAT128_1 (FABSQ, "fabsq", CONST, abskf2) -+ -+/* 2 argument IEEE 128-bit floating-point functions. */ -+BU_FLOAT128_2 (COPYSIGNQ, "copysignq", CONST, copysignkf3) - - /* 1 argument crypto functions. */ - BU_CRYPTO_1 (VSBOX, "vsbox", CONST, crypto_vsbox) -@@ -2022,6 +2291,18 @@ - BU_SPECIAL_X (RS6000_BUILTIN_CPU_SUPPORTS, "__builtin_cpu_supports", - RS6000_BTM_ALWAYS, RS6000_BTC_MISC) - -+BU_SPECIAL_X (RS6000_BUILTIN_NANQ, "__builtin_nanq", -+ RS6000_BTM_FLOAT128, RS6000_BTC_CONST) -+ -+BU_SPECIAL_X (RS6000_BUILTIN_NANSQ, "__builtin_nansq", -+ RS6000_BTM_FLOAT128, RS6000_BTC_CONST) -+ -+BU_SPECIAL_X (RS6000_BUILTIN_INFQ, "__builtin_infq", -+ RS6000_BTM_FLOAT128, RS6000_BTC_CONST) -+ -+BU_SPECIAL_X (RS6000_BUILTIN_HUGE_VALQ, "__builtin_huge_valq", -+ RS6000_BTM_FLOAT128, RS6000_BTC_CONST) -+ - /* Darwin CfString builtin. */ - BU_SPECIAL_X (RS6000_BUILTIN_CFSTRING, "__builtin_cfstring", RS6000_BTM_ALWAYS, - RS6000_BTC_MISC) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/rs6000-c.c gcc-6-20160721/gcc/config/rs6000/rs6000-c.c ---- gcc-6.1.0/gcc/config/rs6000/rs6000-c.c 2016-03-21 15:41:13.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/rs6000-c.c 2016-07-07 19:42:07.000000000 +0000 -@@ -2726,6 +2726,49 @@ - RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 }, - { ALTIVEC_BUILTIN_VEC_SUMS, ALTIVEC_BUILTIN_VSUMSWS, - RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 }, -+ { VSX_BUILTIN_VEC_XL, VSX_BUILTIN_LD_ELEMREV_V2DF, -+ RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_V2DF, 0 }, -+ { VSX_BUILTIN_VEC_XL, VSX_BUILTIN_LD_ELEMREV_V2DF, -+ RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_double, 0 }, -+ { VSX_BUILTIN_VEC_XL, VSX_BUILTIN_LD_ELEMREV_V2DI, -+ RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_V2DI, 0 }, -+ { VSX_BUILTIN_VEC_XL, VSX_BUILTIN_LD_ELEMREV_V2DI, -+ RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_long_long, 0 }, -+ { VSX_BUILTIN_VEC_XL, VSX_BUILTIN_LD_ELEMREV_V2DI, -+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI, -+ ~RS6000_BTI_unsigned_V2DI, 0 }, -+ { VSX_BUILTIN_VEC_XL, VSX_BUILTIN_LD_ELEMREV_V2DI, -+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI, -+ ~RS6000_BTI_unsigned_long_long, 0 }, -+ { VSX_BUILTIN_VEC_XL, VSX_BUILTIN_LD_ELEMREV_V4SF, -+ RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_V4SF, 0 }, -+ { VSX_BUILTIN_VEC_XL, VSX_BUILTIN_LD_ELEMREV_V4SF, -+ RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_float, 0 }, -+ { VSX_BUILTIN_VEC_XL, VSX_BUILTIN_LD_ELEMREV_V4SI, -+ RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_V4SI, 0 }, -+ { VSX_BUILTIN_VEC_XL, VSX_BUILTIN_LD_ELEMREV_V4SI, -+ RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_INTSI, 0 }, -+ { VSX_BUILTIN_VEC_XL, VSX_BUILTIN_LD_ELEMREV_V4SI, -+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_unsigned_V4SI, 0 }, -+ { VSX_BUILTIN_VEC_XL, VSX_BUILTIN_LD_ELEMREV_V4SI, -+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTSI, 0 }, -+ { VSX_BUILTIN_VEC_XL, VSX_BUILTIN_LD_ELEMREV_V8HI, -+ RS6000_BTI_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_V8HI, 0 }, -+ { VSX_BUILTIN_VEC_XL, VSX_BUILTIN_LD_ELEMREV_V8HI, -+ RS6000_BTI_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_INTHI, 0 }, -+ { VSX_BUILTIN_VEC_XL, VSX_BUILTIN_LD_ELEMREV_V8HI, -+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_unsigned_V8HI, 0 }, -+ { VSX_BUILTIN_VEC_XL, VSX_BUILTIN_LD_ELEMREV_V8HI, -+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTHI, 0 }, -+ { VSX_BUILTIN_VEC_XL, VSX_BUILTIN_LD_ELEMREV_V16QI, -+ RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_V16QI, 0 }, -+ { VSX_BUILTIN_VEC_XL, VSX_BUILTIN_LD_ELEMREV_V16QI, -+ RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_INTQI, 0 }, -+ { VSX_BUILTIN_VEC_XL, VSX_BUILTIN_LD_ELEMREV_V16QI, -+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, -+ ~RS6000_BTI_unsigned_V16QI, 0 }, -+ { VSX_BUILTIN_VEC_XL, VSX_BUILTIN_LD_ELEMREV_V16QI, -+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTQI, 0 }, - { ALTIVEC_BUILTIN_VEC_XOR, ALTIVEC_BUILTIN_VXOR, - RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0 }, - { ALTIVEC_BUILTIN_VEC_XOR, ALTIVEC_BUILTIN_VXOR, -@@ -3475,6 +3518,55 @@ - RS6000_BTI_void, RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_unsigned_V16QI }, - { ALTIVEC_BUILTIN_VEC_STVRXL, ALTIVEC_BUILTIN_STVRXL, - RS6000_BTI_void, RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTQI }, -+ { VSX_BUILTIN_VEC_XST, VSX_BUILTIN_ST_ELEMREV_V2DF, -+ RS6000_BTI_void, RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_V2DF }, -+ { VSX_BUILTIN_VEC_XST, VSX_BUILTIN_ST_ELEMREV_V2DF, -+ RS6000_BTI_void, RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_double }, -+ { VSX_BUILTIN_VEC_XST, VSX_BUILTIN_ST_ELEMREV_V2DI, -+ RS6000_BTI_void, RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_V2DI }, -+ { VSX_BUILTIN_VEC_XST, VSX_BUILTIN_ST_ELEMREV_V2DI, -+ RS6000_BTI_void, RS6000_BTI_V2DI, RS6000_BTI_INTSI, -+ ~RS6000_BTI_long_long }, -+ { VSX_BUILTIN_VEC_XST, VSX_BUILTIN_ST_ELEMREV_V2DI, -+ RS6000_BTI_void, RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI, -+ ~RS6000_BTI_unsigned_V2DI }, -+ { VSX_BUILTIN_VEC_XST, VSX_BUILTIN_ST_ELEMREV_V2DI, -+ RS6000_BTI_void, RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI, -+ ~RS6000_BTI_unsigned_long_long }, -+ { VSX_BUILTIN_VEC_XST, VSX_BUILTIN_ST_ELEMREV_V4SF, -+ RS6000_BTI_void, RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_V4SF }, -+ { VSX_BUILTIN_VEC_XST, VSX_BUILTIN_ST_ELEMREV_V4SF, -+ RS6000_BTI_void, RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_float }, -+ { VSX_BUILTIN_VEC_XST, VSX_BUILTIN_ST_ELEMREV_V4SI, -+ RS6000_BTI_void, RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_V4SI }, -+ { VSX_BUILTIN_VEC_XST, VSX_BUILTIN_ST_ELEMREV_V4SI, -+ RS6000_BTI_void, RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_INTSI }, -+ { VSX_BUILTIN_VEC_XST, VSX_BUILTIN_ST_ELEMREV_V4SI, -+ RS6000_BTI_void, RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, -+ ~RS6000_BTI_unsigned_V4SI }, -+ { VSX_BUILTIN_VEC_XST, VSX_BUILTIN_ST_ELEMREV_V4SI, -+ RS6000_BTI_void, RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, -+ ~RS6000_BTI_UINTSI }, -+ { VSX_BUILTIN_VEC_XST, VSX_BUILTIN_ST_ELEMREV_V8HI, -+ RS6000_BTI_void, RS6000_BTI_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_V8HI }, -+ { VSX_BUILTIN_VEC_XST, VSX_BUILTIN_ST_ELEMREV_V8HI, -+ RS6000_BTI_void, RS6000_BTI_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_INTHI }, -+ { VSX_BUILTIN_VEC_XST, VSX_BUILTIN_ST_ELEMREV_V8HI, -+ RS6000_BTI_void, RS6000_BTI_unsigned_V8HI, RS6000_BTI_INTSI, -+ ~RS6000_BTI_unsigned_V8HI }, -+ { VSX_BUILTIN_VEC_XST, VSX_BUILTIN_ST_ELEMREV_V8HI, -+ RS6000_BTI_void, RS6000_BTI_unsigned_V8HI, RS6000_BTI_INTSI, -+ ~RS6000_BTI_UINTHI }, -+ { VSX_BUILTIN_VEC_XST, VSX_BUILTIN_ST_ELEMREV_V16QI, -+ RS6000_BTI_void, RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_V16QI }, -+ { VSX_BUILTIN_VEC_XST, VSX_BUILTIN_ST_ELEMREV_V16QI, -+ RS6000_BTI_void, RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_INTQI }, -+ { VSX_BUILTIN_VEC_XST, VSX_BUILTIN_ST_ELEMREV_V16QI, -+ RS6000_BTI_void, RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, -+ ~RS6000_BTI_unsigned_V16QI }, -+ { VSX_BUILTIN_VEC_XST, VSX_BUILTIN_ST_ELEMREV_V16QI, -+ RS6000_BTI_void, RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, -+ ~RS6000_BTI_UINTQI }, - { VSX_BUILTIN_VEC_XXSLDWI, VSX_BUILTIN_XXSLDWI_16QI, - RS6000_BTI_V16QI, RS6000_BTI_V16QI, RS6000_BTI_V16QI, RS6000_BTI_NOT_OPAQUE }, - { VSX_BUILTIN_VEC_XXSLDWI, VSX_BUILTIN_XXSLDWI_16QI, -@@ -4123,6 +4215,105 @@ - { P8V_BUILTIN_VEC_VCLZD, P8V_BUILTIN_VCLZD, - RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0, 0 }, - -+ { P9_BUILTIN_DFP_TSTSFI_LT, MISC_BUILTIN_TSTSFI_LT_TD, -+ RS6000_BTI_INTSI, RS6000_BTI_UINTSI, RS6000_BTI_dfloat128, 0 }, -+ { P9_BUILTIN_DFP_TSTSFI_LT, MISC_BUILTIN_TSTSFI_LT_DD, -+ RS6000_BTI_INTSI, RS6000_BTI_UINTSI, RS6000_BTI_dfloat64, 0 }, -+ -+ { P9_BUILTIN_DFP_TSTSFI_LT_TD, MISC_BUILTIN_TSTSFI_LT_TD, -+ RS6000_BTI_INTSI, RS6000_BTI_UINTSI, RS6000_BTI_dfloat128, 0 }, -+ { P9_BUILTIN_DFP_TSTSFI_LT_DD, MISC_BUILTIN_TSTSFI_LT_DD, -+ RS6000_BTI_INTSI, RS6000_BTI_UINTSI, RS6000_BTI_dfloat64, 0 }, -+ -+ { P9_BUILTIN_DFP_TSTSFI_EQ, MISC_BUILTIN_TSTSFI_EQ_TD, -+ RS6000_BTI_INTSI, RS6000_BTI_UINTSI, RS6000_BTI_dfloat128, 0 }, -+ { P9_BUILTIN_DFP_TSTSFI_EQ, MISC_BUILTIN_TSTSFI_EQ_DD, -+ RS6000_BTI_INTSI, RS6000_BTI_UINTSI, RS6000_BTI_dfloat64, 0 }, -+ -+ { P9_BUILTIN_DFP_TSTSFI_EQ_TD, MISC_BUILTIN_TSTSFI_EQ_TD, -+ RS6000_BTI_INTSI, RS6000_BTI_UINTSI, RS6000_BTI_dfloat128, 0 }, -+ { P9_BUILTIN_DFP_TSTSFI_EQ_DD, MISC_BUILTIN_TSTSFI_EQ_DD, -+ RS6000_BTI_INTSI, RS6000_BTI_UINTSI, RS6000_BTI_dfloat64, 0 }, -+ -+ { P9_BUILTIN_DFP_TSTSFI_GT, MISC_BUILTIN_TSTSFI_GT_TD, -+ RS6000_BTI_INTSI, RS6000_BTI_UINTSI, RS6000_BTI_dfloat128, 0 }, -+ { P9_BUILTIN_DFP_TSTSFI_GT, MISC_BUILTIN_TSTSFI_GT_DD, -+ RS6000_BTI_INTSI, RS6000_BTI_UINTSI, RS6000_BTI_dfloat64, 0 }, -+ -+ { P9_BUILTIN_DFP_TSTSFI_GT_TD, MISC_BUILTIN_TSTSFI_GT_TD, -+ RS6000_BTI_INTSI, RS6000_BTI_UINTSI, RS6000_BTI_dfloat128, 0 }, -+ { P9_BUILTIN_DFP_TSTSFI_GT_DD, MISC_BUILTIN_TSTSFI_GT_DD, -+ RS6000_BTI_INTSI, RS6000_BTI_UINTSI, RS6000_BTI_dfloat64, 0 }, -+ -+ { P9_BUILTIN_DFP_TSTSFI_OV, MISC_BUILTIN_TSTSFI_OV_TD, -+ RS6000_BTI_INTSI, RS6000_BTI_UINTSI, RS6000_BTI_dfloat128, 0 }, -+ { P9_BUILTIN_DFP_TSTSFI_OV, MISC_BUILTIN_TSTSFI_OV_DD, -+ RS6000_BTI_INTSI, RS6000_BTI_UINTSI, RS6000_BTI_dfloat64, 0 }, -+ -+ { P9_BUILTIN_DFP_TSTSFI_OV_TD, MISC_BUILTIN_TSTSFI_OV_TD, -+ RS6000_BTI_INTSI, RS6000_BTI_UINTSI, RS6000_BTI_dfloat128, 0 }, -+ { P9_BUILTIN_DFP_TSTSFI_OV_DD, MISC_BUILTIN_TSTSFI_OV_DD, -+ RS6000_BTI_INTSI, RS6000_BTI_UINTSI, RS6000_BTI_dfloat64, 0 }, -+ -+ { P9V_BUILTIN_VEC_VCTZ, P9V_BUILTIN_VCTZB, -+ RS6000_BTI_V16QI, RS6000_BTI_V16QI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VCTZ, P9V_BUILTIN_VCTZB, -+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VCTZ, P9V_BUILTIN_VCTZH, -+ RS6000_BTI_V8HI, RS6000_BTI_V8HI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VCTZ, P9V_BUILTIN_VCTZH, -+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V8HI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VCTZ, P9V_BUILTIN_VCTZW, -+ RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VCTZ, P9V_BUILTIN_VCTZW, -+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VCTZ, P9V_BUILTIN_VCTZD, -+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VCTZ, P9V_BUILTIN_VCTZD, -+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0, 0 }, -+ -+ { P9V_BUILTIN_VEC_VCTZB, P9V_BUILTIN_VCTZB, -+ RS6000_BTI_V16QI, RS6000_BTI_V16QI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VCTZB, P9V_BUILTIN_VCTZB, -+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI, 0, 0 }, -+ -+ { P9V_BUILTIN_VEC_VCTZH, P9V_BUILTIN_VCTZH, -+ RS6000_BTI_V8HI, RS6000_BTI_V8HI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VCTZH, P9V_BUILTIN_VCTZH, -+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V8HI, 0, 0 }, -+ -+ { P9V_BUILTIN_VEC_VCTZW, P9V_BUILTIN_VCTZW, -+ RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VCTZW, P9V_BUILTIN_VCTZW, -+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0, 0 }, -+ -+ { P9V_BUILTIN_VEC_VCTZD, P9V_BUILTIN_VCTZD, -+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VCTZD, P9V_BUILTIN_VCTZD, -+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0, 0 }, -+ -+ { P9V_BUILTIN_VEC_VADU, P9V_BUILTIN_VADUB, -+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI, -+ RS6000_BTI_unsigned_V16QI, 0 }, -+ { P9V_BUILTIN_VEC_VADU, P9V_BUILTIN_VADUH, -+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V8HI, -+ RS6000_BTI_unsigned_V8HI, 0 }, -+ { P9V_BUILTIN_VEC_VADU, P9V_BUILTIN_VADUW, -+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, -+ RS6000_BTI_unsigned_V4SI, 0 }, -+ -+ { P9V_BUILTIN_VEC_VADUB, P9V_BUILTIN_VADUB, -+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI, -+ RS6000_BTI_unsigned_V16QI, 0 }, -+ -+ { P9V_BUILTIN_VEC_VADUH, P9V_BUILTIN_VADUH, -+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V8HI, -+ RS6000_BTI_unsigned_V8HI, 0 }, -+ -+ { P9V_BUILTIN_VEC_VADUW, P9V_BUILTIN_VADUW, -+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, -+ RS6000_BTI_unsigned_V4SI, 0 }, -+ - { P8V_BUILTIN_VEC_VGBBD, P8V_BUILTIN_VGBBD, - RS6000_BTI_V16QI, RS6000_BTI_V16QI, 0, 0 }, - { P8V_BUILTIN_VEC_VGBBD, P8V_BUILTIN_VGBBD, -@@ -4252,6 +4443,42 @@ - { P8V_BUILTIN_VEC_VPOPCNTD, P8V_BUILTIN_VPOPCNTD, - RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0, 0 }, - -+ { P9V_BUILTIN_VEC_VPRTYB, P9V_BUILTIN_VPRTYBW, -+ RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VPRTYB, P9V_BUILTIN_VPRTYBW, -+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VPRTYB, P9V_BUILTIN_VPRTYBD, -+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VPRTYB, P9V_BUILTIN_VPRTYBD, -+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VPRTYB, P9V_BUILTIN_VPRTYBQ, -+ RS6000_BTI_V1TI, RS6000_BTI_V1TI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VPRTYB, P9V_BUILTIN_VPRTYBQ, -+ RS6000_BTI_unsigned_V1TI, RS6000_BTI_unsigned_V1TI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VPRTYB, P9V_BUILTIN_VPRTYBQ, -+ RS6000_BTI_INTTI, RS6000_BTI_INTTI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VPRTYB, P9V_BUILTIN_VPRTYBQ, -+ RS6000_BTI_UINTTI, RS6000_BTI_UINTTI, 0, 0 }, -+ -+ { P9V_BUILTIN_VEC_VPRTYBW, P9V_BUILTIN_VPRTYBW, -+ RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VPRTYBW, P9V_BUILTIN_VPRTYBW, -+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0, 0 }, -+ -+ { P9V_BUILTIN_VEC_VPRTYBD, P9V_BUILTIN_VPRTYBD, -+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VPRTYBD, P9V_BUILTIN_VPRTYBD, -+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0, 0 }, -+ -+ { P9V_BUILTIN_VEC_VPRTYBQ, P9V_BUILTIN_VPRTYBQ, -+ RS6000_BTI_V1TI, RS6000_BTI_V1TI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VPRTYBQ, P9V_BUILTIN_VPRTYBQ, -+ RS6000_BTI_unsigned_V1TI, RS6000_BTI_unsigned_V1TI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VPRTYBQ, P9V_BUILTIN_VPRTYBQ, -+ RS6000_BTI_INTTI, RS6000_BTI_INTTI, 0, 0 }, -+ { P9V_BUILTIN_VEC_VPRTYBQ, P9V_BUILTIN_VPRTYBQ, -+ RS6000_BTI_UINTTI, RS6000_BTI_UINTTI, 0, 0 }, -+ - { P8V_BUILTIN_VEC_VPKUDUM, P8V_BUILTIN_VPKUDUM, - RS6000_BTI_V4SI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 }, - { P8V_BUILTIN_VEC_VPKUDUM, P8V_BUILTIN_VPKUDUM, -@@ -4328,6 +4555,13 @@ - { P8V_BUILTIN_VEC_VGBBD, P8V_BUILTIN_VGBBD, - RS6000_BTI_unsigned_V16QI, 0, 0, 0 }, - -+ { P9V_BUILTIN_VEC_VSLV, P9V_BUILTIN_VSLV, -+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI, -+ RS6000_BTI_unsigned_V16QI, 0 }, -+ { P9V_BUILTIN_VEC_VSRV, P9V_BUILTIN_VSRV, -+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI, -+ RS6000_BTI_unsigned_V16QI, 0 }, -+ - /* Crypto builtins. */ - { CRYPTO_BUILTIN_VPERMXOR, CRYPTO_BUILTIN_VPERMXOR_V16QI, - RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI, -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/rs6000-cpus.def gcc-6-20160721/gcc/config/rs6000/rs6000-cpus.def ---- gcc-6.1.0/gcc/config/rs6000/rs6000-cpus.def 2016-03-23 20:33:28.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/rs6000-cpus.def 2016-07-08 14:51:44.000000000 +0000 -@@ -60,15 +60,26 @@ - | OPTION_MASK_UPPER_REGS_SF) - - /* Add ISEL back into ISA 3.0, since it is supposed to be a win. Do not add -- P9_DFORM or P9_MINMAX until they are fully debugged. */ -+ P9_MINMAX until the hardware that supports it is available. Do not add -+ FLOAT128_HW here until we are ready to make -mfloat128 on by default. */ - #define ISA_3_0_MASKS_SERVER (ISA_2_7_MASKS_SERVER \ -- | OPTION_MASK_FLOAT128_HW \ - | OPTION_MASK_ISEL \ - | OPTION_MASK_MODULO \ - | OPTION_MASK_P9_FUSION \ -- | OPTION_MASK_P9_DFORM \ -+ | OPTION_MASK_P9_DFORM_SCALAR \ -+ | OPTION_MASK_P9_DFORM_VECTOR \ -+ | OPTION_MASK_P9_MISC \ - | OPTION_MASK_P9_VECTOR) - -+/* Support for the IEEE 128-bit floating point hardware requires a lot of the -+ VSX instructions that are part of ISA 3.0. */ -+#define ISA_3_0_MASKS_IEEE (OPTION_MASK_VSX \ -+ | OPTION_MASK_P8_VECTOR \ -+ | OPTION_MASK_P9_VECTOR \ -+ | OPTION_MASK_DIRECT_MOVE \ -+ | OPTION_MASK_UPPER_REGS_DF \ -+ | OPTION_MASK_UPPER_REGS_SF) -+ - #define POWERPC_7400_MASK (OPTION_MASK_PPC_GFXOPT | OPTION_MASK_ALTIVEC) - - /* Deal with ports that do not have -mstrict-align. */ -@@ -94,6 +105,7 @@ - | OPTION_MASK_FPRND \ - | OPTION_MASK_HTM \ - | OPTION_MASK_ISEL \ -+ | OPTION_MASK_LRA \ - | OPTION_MASK_MFCRF \ - | OPTION_MASK_MFPGPR \ - | OPTION_MASK_MODULO \ -@@ -101,9 +113,11 @@ - | OPTION_MASK_NO_UPDATE \ - | OPTION_MASK_P8_FUSION \ - | OPTION_MASK_P8_VECTOR \ -- | OPTION_MASK_P9_DFORM \ -+ | OPTION_MASK_P9_DFORM_SCALAR \ -+ | OPTION_MASK_P9_DFORM_VECTOR \ - | OPTION_MASK_P9_FUSION \ - | OPTION_MASK_P9_MINMAX \ -+ | OPTION_MASK_P9_MISC \ - | OPTION_MASK_P9_VECTOR \ - | OPTION_MASK_POPCNTB \ - | OPTION_MASK_POPCNTD \ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/rs6000-protos.h gcc-6-20160721/gcc/config/rs6000/rs6000-protos.h ---- gcc-6.1.0/gcc/config/rs6000/rs6000-protos.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/rs6000-protos.h 2016-07-12 19:51:09.000000000 +0000 -@@ -31,6 +31,7 @@ - #endif /* TREE_CODE */ - - extern bool easy_altivec_constant (rtx, machine_mode); -+extern bool xxspltib_constant_p (rtx, machine_mode, int *, int *); - extern int vspltis_shifted (rtx); - extern HOST_WIDE_INT const_vector_elt_as_int (rtx, unsigned int); - extern bool macho_lo_sum_memory_operand (rtx, machine_mode); -@@ -86,6 +87,7 @@ - extern int mems_ok_for_quad_peep (rtx, rtx); - extern bool gpr_or_gpr_p (rtx, rtx); - extern bool direct_move_p (rtx, rtx); -+extern bool quad_address_p (rtx, machine_mode, bool); - extern bool quad_load_store_p (rtx, rtx); - extern bool fusion_gpr_load_p (rtx, rtx, rtx, rtx); - extern void expand_fusion_gpr_load (rtx *); -@@ -133,6 +135,7 @@ - extern int rs6000_emit_cmove (rtx, rtx, rtx, rtx); - extern int rs6000_emit_vector_cond_expr (rtx, rtx, rtx, rtx, rtx, rtx); - extern void rs6000_emit_minmax (rtx, enum rtx_code, rtx, rtx); -+extern void rs6000_split_signbit (rtx, rtx); - extern void rs6000_expand_atomic_compare_and_swap (rtx op[]); - extern void rs6000_expand_atomic_exchange (rtx op[]); - extern void rs6000_expand_atomic_op (enum rtx_code, rtx, rtx, rtx, rtx, rtx); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/rs6000.c gcc-6-20160721/gcc/config/rs6000/rs6000.c ---- gcc-6.1.0/gcc/config/rs6000/rs6000.c 2016-04-14 23:21:30.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/rs6000.c 2016-07-19 03:39:34.000000000 +0000 -@@ -452,6 +452,7 @@ - #define RELOAD_REG_PRE_INCDEC 0x10 /* PRE_INC/PRE_DEC valid. */ - #define RELOAD_REG_PRE_MODIFY 0x20 /* PRE_MODIFY valid. */ - #define RELOAD_REG_AND_M16 0x40 /* AND -16 addressing. */ -+#define RELOAD_REG_QUAD_OFFSET 0x80 /* quad offset is limited. */ - - /* Register type masks based on the type, of valid addressing modes. */ - struct rs6000_reg_addr { -@@ -499,6 +500,16 @@ - return ((reg_addr[mode].addr_mask[RELOAD_REG_VMX] & RELOAD_REG_OFFSET) != 0); - } - -+/* Return true if we have D-form addressing in VSX registers. This addressing -+ is more limited than normal d-form addressing in that the offset must be -+ aligned on a 16-byte boundary. */ -+static inline bool -+mode_supports_vsx_dform_quad (machine_mode mode) -+{ -+ return ((reg_addr[mode].addr_mask[RELOAD_REG_ANY] & RELOAD_REG_QUAD_OFFSET) -+ != 0); -+} -+ - - /* Target cpu costs. */ - -@@ -1093,16 +1104,16 @@ - COSTS_N_INSNS (3), /* mulsi_const */ - COSTS_N_INSNS (3), /* mulsi_const9 */ - COSTS_N_INSNS (3), /* muldi */ -- COSTS_N_INSNS (19), /* divsi */ -- COSTS_N_INSNS (35), /* divdi */ -+ COSTS_N_INSNS (8), /* divsi */ -+ COSTS_N_INSNS (12), /* divdi */ - COSTS_N_INSNS (3), /* fp */ - COSTS_N_INSNS (3), /* dmul */ -- COSTS_N_INSNS (14), /* sdiv */ -- COSTS_N_INSNS (17), /* ddiv */ -+ COSTS_N_INSNS (13), /* sdiv */ -+ COSTS_N_INSNS (18), /* ddiv */ - 128, /* cache line size */ - 32, /* l1 cache */ -- 256, /* l2 cache */ -- 12, /* prefetch streams */ -+ 512, /* l2 cache */ -+ 8, /* prefetch streams */ - COSTS_N_INSNS (3), /* SF->DF convert */ - }; - -@@ -1128,6 +1139,7 @@ - - - /* Table that classifies rs6000 builtin functions (pure, const, etc.). */ -+#undef RS6000_BUILTIN_0 - #undef RS6000_BUILTIN_1 - #undef RS6000_BUILTIN_2 - #undef RS6000_BUILTIN_3 -@@ -1140,6 +1152,9 @@ - #undef RS6000_BUILTIN_S - #undef RS6000_BUILTIN_X - -+#define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE) \ -+ { NAME, ICODE, MASK, ATTR }, -+ - #define RS6000_BUILTIN_1(ENUM, NAME, MASK, ATTR, ICODE) \ - { NAME, ICODE, MASK, ATTR }, - -@@ -1185,6 +1200,7 @@ - #include "rs6000-builtin.def" - }; - -+#undef RS6000_BUILTIN_0 - #undef RS6000_BUILTIN_1 - #undef RS6000_BUILTIN_2 - #undef RS6000_BUILTIN_3 -@@ -1312,6 +1328,7 @@ - bool); - rtl_opt_pass *make_pass_analyze_swaps (gcc::context*); - static bool rs6000_keep_leaf_when_profiled () __attribute__ ((unused)); -+static tree rs6000_fold_builtin (tree, int, tree *, bool); - - /* Hash table stuff for keeping track of TOC entries. */ - -@@ -1586,6 +1603,9 @@ - #undef TARGET_BUILTIN_DECL - #define TARGET_BUILTIN_DECL rs6000_builtin_decl - -+#undef TARGET_FOLD_BUILTIN -+#define TARGET_FOLD_BUILTIN rs6000_fold_builtin -+ - #undef TARGET_EXPAND_BUILTIN - #define TARGET_EXPAND_BUILTIN rs6000_expand_builtin - -@@ -1866,7 +1886,7 @@ - 128-bit floating point that can go in vector registers, which has VSX - memory addressing. */ - if (FP_REGNO_P (regno)) -- reg_size = (VECTOR_MEM_VSX_P (mode) -+ reg_size = (VECTOR_MEM_VSX_P (mode) || FLOAT128_VECTOR_P (mode) - ? UNITS_PER_VSX_WORD - : UNITS_PER_FP_WORD); - -@@ -1898,6 +1918,9 @@ - { - int last_regno = regno + rs6000_hard_regno_nregs[mode][regno] - 1; - -+ if (COMPLEX_MODE_P (mode)) -+ mode = GET_MODE_INNER (mode); -+ - /* PTImode can only go in GPRs. Quad word memory operations require even/odd - register combinations, and use PTImode where we need to deal with quad - word memory operations. Don't allow quad words in the argument or frame -@@ -2105,7 +2128,9 @@ - else if (keep_spaces) - *p++ = ' '; - -- if ((mask & RELOAD_REG_OFFSET) != 0) -+ if ((mask & RELOAD_REG_QUAD_OFFSET) != 0) -+ *p++ = 'O'; -+ else if ((mask & RELOAD_REG_OFFSET) != 0) - *p++ = 'o'; - else if (keep_spaces) - *p++ = ' '; -@@ -2642,8 +2667,7 @@ - if (TARGET_LINK_STACK) - fprintf (stderr, DEBUG_FMT_S, "link_stack", "true"); - -- if (targetm.lra_p ()) -- fprintf (stderr, DEBUG_FMT_S, "lra", "true"); -+ fprintf (stderr, DEBUG_FMT_S, "lra", TARGET_LRA ? "true" : "false"); - - if (TARGET_P8_FUSION) - { -@@ -2699,8 +2723,17 @@ - - for (m = 0; m < NUM_MACHINE_MODES; ++m) - { -- machine_mode m2 = (machine_mode)m; -- unsigned short msize = GET_MODE_SIZE (m2); -+ machine_mode m2 = (machine_mode) m; -+ bool complex_p = false; -+ size_t msize; -+ -+ if (COMPLEX_MODE_P (m2)) -+ { -+ complex_p = true; -+ m2 = GET_MODE_INNER (m2); -+ } -+ -+ msize = GET_MODE_SIZE (m2); - - /* SDmode is special in that we want to access it only via REG+REG - addressing on power7 and above, since we want to use the LFIWZX and -@@ -2722,7 +2755,7 @@ - /* Indicate if the mode takes more than 1 physical register. If - it takes a single register, indicate it can do REG+REG - addressing. */ -- if (nregs > 1 || m == BLKmode) -+ if (nregs > 1 || m == BLKmode || complex_p) - addr_mask |= RELOAD_REG_MULTIPLE; - else - addr_mask |= RELOAD_REG_INDEXED; -@@ -2738,7 +2771,7 @@ - && msize <= 8 - && !VECTOR_MODE_P (m2) - && !FLOAT128_VECTOR_P (m2) -- && !COMPLEX_MODE_P (m2) -+ && !complex_p - && (m2 != DFmode || !TARGET_UPPER_REGS_DF) - && (m2 != SFmode || !TARGET_UPPER_REGS_SF) - && !(TARGET_E500_DOUBLE && msize == 8)) -@@ -2769,17 +2802,31 @@ - } - - /* GPR and FPR registers can do REG+OFFSET addressing, except -- possibly for SDmode. ISA 3.0 (i.e. power9) adds D-form -- addressing for scalars to altivec registers. */ -+ possibly for SDmode. ISA 3.0 (i.e. power9) adds D-form addressing -+ for 64-bit scalars and 32-bit SFmode to altivec registers. */ - if ((addr_mask != 0) && !indexed_only_p - && msize <= 8 - && (rc == RELOAD_REG_GPR -- || rc == RELOAD_REG_FPR -- || (rc == RELOAD_REG_VMX -- && TARGET_P9_DFORM -- && (m2 == DFmode || m2 == SFmode)))) -+ || ((msize == 8 || m2 == SFmode) -+ && (rc == RELOAD_REG_FPR -+ || (rc == RELOAD_REG_VMX -+ && TARGET_P9_DFORM_SCALAR))))) - addr_mask |= RELOAD_REG_OFFSET; - -+ /* VSX registers can do REG+OFFSET addresssing if ISA 3.0 -+ instructions are enabled. The offset for 128-bit VSX registers is -+ only 12-bits. While GPRs can handle the full offset range, VSX -+ registers can only handle the restricted range. */ -+ else if ((addr_mask != 0) && !indexed_only_p -+ && msize == 16 && TARGET_P9_DFORM_VECTOR -+ && (ALTIVEC_OR_VSX_VECTOR_MODE (m2) -+ || (m2 == TImode && TARGET_VSX_TIMODE))) -+ { -+ addr_mask |= RELOAD_REG_OFFSET; -+ if (rc == RELOAD_REG_FPR || rc == RELOAD_REG_VMX) -+ addr_mask |= RELOAD_REG_QUAD_OFFSET; -+ } -+ - /* VMX registers can do (REG & -16) and ((REG+REG) & -16) - addressing on 128-bit types. */ - if (rc == RELOAD_REG_VMX && msize == 16 -@@ -3102,7 +3149,7 @@ - } - - /* Support for new D-form instructions. */ -- if (TARGET_P9_DFORM) -+ if (TARGET_P9_DFORM_SCALAR) - rs6000_constraints[RS6000_CONSTRAINT_wb] = ALTIVEC_REGS; - - /* Support for ISA 3.0 (power9) vectors. */ -@@ -3621,11 +3668,16 @@ - | ((TARGET_POPCNTD) ? RS6000_BTM_POPCNTD : 0) - | ((rs6000_cpu == PROCESSOR_CELL) ? RS6000_BTM_CELL : 0) - | ((TARGET_P8_VECTOR) ? RS6000_BTM_P8_VECTOR : 0) -+ | ((TARGET_P9_VECTOR) ? RS6000_BTM_P9_VECTOR : 0) -+ | ((TARGET_P9_MISC) ? RS6000_BTM_P9_MISC : 0) -+ | ((TARGET_MODULO) ? RS6000_BTM_MODULO : 0) -+ | ((TARGET_64BIT) ? RS6000_BTM_64BIT : 0) - | ((TARGET_CRYPTO) ? RS6000_BTM_CRYPTO : 0) - | ((TARGET_HTM) ? RS6000_BTM_HTM : 0) - | ((TARGET_DFP) ? RS6000_BTM_DFP : 0) - | ((TARGET_HARD_FLOAT) ? RS6000_BTM_HARD_FLOAT : 0) -- | ((TARGET_LONG_DOUBLE_128) ? RS6000_BTM_LDBL128 : 0)); -+ | ((TARGET_LONG_DOUBLE_128) ? RS6000_BTM_LDBL128 : 0) -+ | ((TARGET_FLOAT128) ? RS6000_BTM_FLOAT128 : 0)); - } - - /* Implement TARGET_MD_ASM_ADJUST. All asm statements are considered -@@ -3784,22 +3836,7 @@ - if (rs6000_tune_index >= 0) - tune_index = rs6000_tune_index; - else if (have_cpu) -- { -- /* Until power9 tuning is available, use power8 tuning if -mcpu=power9. */ -- if (processor_target_table[cpu_index].processor != PROCESSOR_POWER9) -- rs6000_tune_index = tune_index = cpu_index; -- else -- { -- size_t i; -- tune_index = -1; -- for (i = 0; i < ARRAY_SIZE (processor_target_table); i++) -- if (processor_target_table[i].processor == PROCESSOR_POWER8) -- { -- rs6000_tune_index = tune_index = i; -- break; -- } -- } -- } -+ rs6000_tune_index = tune_index = cpu_index; - else - { - size_t i; -@@ -3974,7 +4011,8 @@ - - /* For the newer switches (vsx, dfp, etc.) set some of the older options, - unless the user explicitly used the -mno-<option> to disable the code. */ -- if (TARGET_P9_VECTOR || TARGET_MODULO || TARGET_P9_DFORM || TARGET_P9_MINMAX) -+ if (TARGET_P9_VECTOR || TARGET_MODULO || TARGET_P9_DFORM_SCALAR -+ || TARGET_P9_DFORM_VECTOR || TARGET_P9_DFORM_BOTH > 0 || TARGET_P9_MINMAX) - rs6000_isa_flags |= (ISA_3_0_MASKS_SERVER & ~rs6000_isa_flags_explicit); - else if (TARGET_P8_VECTOR || TARGET_DIRECT_MOVE || TARGET_CRYPTO) - rs6000_isa_flags |= (ISA_2_7_MASKS_SERVER & ~rs6000_isa_flags_explicit); -@@ -4188,34 +4226,80 @@ - && !(rs6000_isa_flags_explicit & OPTION_MASK_TOC_FUSION)) - rs6000_isa_flags |= OPTION_MASK_TOC_FUSION; - -+ /* ISA 3.0 vector instructions include ISA 2.07. */ -+ if (TARGET_P9_VECTOR && !TARGET_P8_VECTOR) -+ { -+ if (rs6000_isa_flags_explicit & OPTION_MASK_P8_VECTOR) -+ error ("-mpower9-vector requires -mpower8-vector"); -+ rs6000_isa_flags &= ~OPTION_MASK_P9_VECTOR; -+ } -+ -+ /* -mpower9-dform turns on both -mpower9-dform-scalar and -+ -mpower9-dform-vector. */ -+ if (TARGET_P9_DFORM_BOTH > 0) -+ { -+ if (!(rs6000_isa_flags_explicit & OPTION_MASK_P9_DFORM_VECTOR)) -+ rs6000_isa_flags |= OPTION_MASK_P9_DFORM_VECTOR; -+ -+ if (!(rs6000_isa_flags_explicit & OPTION_MASK_P9_DFORM_SCALAR)) -+ rs6000_isa_flags |= OPTION_MASK_P9_DFORM_SCALAR; -+ } -+ else if (TARGET_P9_DFORM_BOTH == 0) -+ { -+ if (!(rs6000_isa_flags_explicit & OPTION_MASK_P9_DFORM_VECTOR)) -+ rs6000_isa_flags &= ~OPTION_MASK_P9_DFORM_VECTOR; -+ -+ if (!(rs6000_isa_flags_explicit & OPTION_MASK_P9_DFORM_SCALAR)) -+ rs6000_isa_flags &= ~OPTION_MASK_P9_DFORM_SCALAR; -+ } -+ - /* ISA 3.0 D-form instructions require p9-vector and upper-regs. */ -- if (TARGET_P9_DFORM && !TARGET_P9_VECTOR) -+ if ((TARGET_P9_DFORM_SCALAR || TARGET_P9_DFORM_VECTOR) && !TARGET_P9_VECTOR) - { - if (rs6000_isa_flags_explicit & OPTION_MASK_P9_VECTOR) - error ("-mpower9-dform requires -mpower9-vector"); -- rs6000_isa_flags &= ~OPTION_MASK_P9_DFORM; -+ rs6000_isa_flags &= ~(OPTION_MASK_P9_DFORM_SCALAR -+ | OPTION_MASK_P9_DFORM_VECTOR); - } - -- if (TARGET_P9_DFORM && !TARGET_UPPER_REGS_DF) -+ if (TARGET_P9_DFORM_SCALAR && !TARGET_UPPER_REGS_DF) - { - if (rs6000_isa_flags_explicit & OPTION_MASK_UPPER_REGS_DF) - error ("-mpower9-dform requires -mupper-regs-df"); -- rs6000_isa_flags &= ~OPTION_MASK_P9_DFORM; -+ rs6000_isa_flags &= ~OPTION_MASK_P9_DFORM_SCALAR; - } - -- if (TARGET_P9_DFORM && !TARGET_UPPER_REGS_SF) -+ if (TARGET_P9_DFORM_SCALAR && !TARGET_UPPER_REGS_SF) - { - if (rs6000_isa_flags_explicit & OPTION_MASK_UPPER_REGS_SF) - error ("-mpower9-dform requires -mupper-regs-sf"); -- rs6000_isa_flags &= ~OPTION_MASK_P9_DFORM; -+ rs6000_isa_flags &= ~OPTION_MASK_P9_DFORM_SCALAR; - } - -- /* ISA 3.0 vector instructions include ISA 2.07. */ -- if (TARGET_P9_VECTOR && !TARGET_P8_VECTOR) -+ /* There have been bugs with -mvsx-timode that don't show up with -mlra, -+ but do show up with -mno-lra. Given -mlra will become the default once -+ PR 69847 is fixed, turn off the options with problems by default if -+ -mno-lra was used, and warn if the user explicitly asked for the option. -+ -+ Enable -mpower9-dform-vector by default if LRA and other power9 options. -+ Enable -mvsx-timode by default if LRA and VSX. */ -+ if (!TARGET_LRA) - { -- if (rs6000_isa_flags_explicit & OPTION_MASK_P8_VECTOR) -- error ("-mpower9-vector requires -mpower8-vector"); -- rs6000_isa_flags &= ~OPTION_MASK_P9_VECTOR; -+ if (TARGET_VSX_TIMODE) -+ { -+ if ((rs6000_isa_flags_explicit & OPTION_MASK_VSX_TIMODE) != 0) -+ warning (0, "-mvsx-timode might need -mlra"); -+ -+ else -+ rs6000_isa_flags &= ~OPTION_MASK_VSX_TIMODE; -+ } -+ } -+ -+ else -+ { -+ if (TARGET_VSX && !TARGET_VSX_TIMODE -+ && (rs6000_isa_flags_explicit & OPTION_MASK_VSX_TIMODE) == 0) -+ rs6000_isa_flags |= OPTION_MASK_VSX_TIMODE; - } - - /* Set -mallow-movmisalign to explicitly on if we have full ISA 2.07 -@@ -4267,13 +4351,21 @@ - rs6000_isa_flags &= ~(OPTION_MASK_FLOAT128 | OPTION_MASK_FLOAT128_HW); - } - -+ /* If we have -mfloat128 and full ISA 3.0 support, enable -mfloat128-hardware -+ by default. */ -+ if (TARGET_FLOAT128 && !TARGET_FLOAT128_HW -+ && (rs6000_isa_flags & ISA_3_0_MASKS_IEEE) == ISA_3_0_MASKS_IEEE -+ && !(rs6000_isa_flags_explicit & OPTION_MASK_FLOAT128_HW)) -+ { -+ rs6000_isa_flags |= OPTION_MASK_FLOAT128_HW; -+ if ((rs6000_isa_flags & OPTION_MASK_FLOAT128) != 0) -+ rs6000_isa_flags_explicit |= OPTION_MASK_FLOAT128_HW; -+ } -+ - /* IEEE 128-bit floating point hardware instructions imply enabling - __float128. */ - if (TARGET_FLOAT128_HW -- && (rs6000_isa_flags & (OPTION_MASK_P9_VECTOR -- | OPTION_MASK_DIRECT_MOVE -- | OPTION_MASK_UPPER_REGS_DF -- | OPTION_MASK_UPPER_REGS_SF)) == 0) -+ && (rs6000_isa_flags & ISA_3_0_MASKS_IEEE) != ISA_3_0_MASKS_IEEE) - { - if ((rs6000_isa_flags_explicit & OPTION_MASK_FLOAT128_HW) != 0) - error ("-mfloat128-hardware requires full ISA 3.0 support"); -@@ -4281,10 +4373,6 @@ - rs6000_isa_flags &= ~OPTION_MASK_FLOAT128_HW; - } - -- else if (TARGET_P9_VECTOR && !TARGET_FLOAT128_HW -- && (rs6000_isa_flags_explicit & OPTION_MASK_FLOAT128_HW) == 0) -- rs6000_isa_flags |= OPTION_MASK_FLOAT128_HW; -- - if (TARGET_FLOAT128_HW - && (rs6000_isa_flags_explicit & OPTION_MASK_FLOAT128) == 0) - rs6000_isa_flags |= OPTION_MASK_FLOAT128; -@@ -4494,8 +4582,7 @@ - rs6000_sched_groups = (rs6000_cpu == PROCESSOR_POWER4 - || rs6000_cpu == PROCESSOR_POWER5 - || rs6000_cpu == PROCESSOR_POWER7 -- || rs6000_cpu == PROCESSOR_POWER8 -- || rs6000_cpu == PROCESSOR_POWER9); -+ || rs6000_cpu == PROCESSOR_POWER8); - rs6000_align_branch_targets = (rs6000_cpu == PROCESSOR_POWER4 - || rs6000_cpu == PROCESSOR_POWER5 - || rs6000_cpu == PROCESSOR_POWER6 -@@ -6134,6 +6221,128 @@ - gcc_unreachable (); - } - -+/* Return true if OP is of the given MODE and can be synthesized with ISA 3.0 -+ instructions (xxspltib, vupkhsb/vextsb2w/vextb2d). -+ -+ Return the number of instructions needed (1 or 2) into the address pointed -+ via NUM_INSNS_PTR. -+ -+ If NOSPLIT_P, only return true for constants that only generate the XXSPLTIB -+ instruction and can go in any VSX register. If !NOSPLIT_P, only return true -+ for constants that generate XXSPLTIB and need a sign extend operation, which -+ restricts us to the Altivec registers. -+ -+ Allow either (vec_const [...]) or (vec_duplicate <const>). If OP is a valid -+ XXSPLTIB constant, return the constant being set via the CONST_PTR -+ pointer. */ -+ -+bool -+xxspltib_constant_p (rtx op, -+ machine_mode mode, -+ int *num_insns_ptr, -+ int *constant_ptr) -+{ -+ size_t nunits = GET_MODE_NUNITS (mode); -+ size_t i; -+ HOST_WIDE_INT value; -+ rtx element; -+ -+ /* Set the returned values to out of bound values. */ -+ *num_insns_ptr = -1; -+ *constant_ptr = 256; -+ -+ if (!TARGET_P9_VECTOR) -+ return false; -+ -+ if (mode == VOIDmode) -+ mode = GET_MODE (op); -+ -+ else if (mode != GET_MODE (op)) -+ return false; -+ -+ /* Handle (vec_duplicate <constant>). */ -+ if (GET_CODE (op) == VEC_DUPLICATE) -+ { -+ if (mode != V16QImode && mode != V8HImode && mode != V4SImode -+ && mode != V2DImode) -+ return false; -+ -+ element = XEXP (op, 0); -+ if (!CONST_INT_P (element)) -+ return false; -+ -+ value = INTVAL (element); -+ if (!IN_RANGE (value, -128, 127)) -+ return false; -+ } -+ -+ /* Handle (const_vector [...]). */ -+ else if (GET_CODE (op) == CONST_VECTOR) -+ { -+ if (mode != V16QImode && mode != V8HImode && mode != V4SImode -+ && mode != V2DImode) -+ return false; -+ -+ element = CONST_VECTOR_ELT (op, 0); -+ if (!CONST_INT_P (element)) -+ return false; -+ -+ value = INTVAL (element); -+ if (!IN_RANGE (value, -128, 127)) -+ return false; -+ -+ for (i = 1; i < nunits; i++) -+ { -+ element = CONST_VECTOR_ELT (op, i); -+ if (!CONST_INT_P (element)) -+ return false; -+ -+ if (value != INTVAL (element)) -+ return false; -+ } -+ -+ /* See if we could generate vspltisw/vspltish directly instead of -+ xxspltib + sign extend. Special case 0/-1 to allow getting -+ any VSX register instead of an Altivec register. */ -+ if (!IN_RANGE (value, -1, 0) && EASY_VECTOR_15 (value) -+ && (mode == V4SImode || mode == V8HImode)) -+ return false; -+ } -+ -+ /* Handle integer constants being loaded into the upper part of the VSX -+ register as a scalar. If the value isn't 0/-1, only allow it if -+ the mode can go in Altivec registers. */ -+ else if (CONST_INT_P (op)) -+ { -+ if (!SCALAR_INT_MODE_P (mode)) -+ return false; -+ -+ value = INTVAL (op); -+ if (!IN_RANGE (value, -128, 127)) -+ return false; -+ -+ if (!IN_RANGE (value, -1, 0) -+ && (reg_addr[mode].addr_mask[RELOAD_REG_VMX] & RELOAD_REG_VALID) == 0) -+ return false; -+ } -+ -+ else -+ return false; -+ -+ /* Return # of instructions and the constant byte for XXSPLTIB. */ -+ if (mode == V16QImode) -+ *num_insns_ptr = 1; -+ -+ else if (IN_RANGE (value, -1, 0)) -+ *num_insns_ptr = 1; -+ -+ else -+ *num_insns_ptr = 2; -+ -+ *constant_ptr = (int) value; -+ return true; -+} -+ - const char * - output_vec_const_move (rtx *operands) - { -@@ -6147,23 +6356,60 @@ - - if (TARGET_VSX) - { -+ bool dest_vmx_p = ALTIVEC_REGNO_P (REGNO (dest)); -+ int xxspltib_value = 256; -+ int num_insns = -1; -+ - if (zero_constant (vec, mode)) -- return "xxlxor %x0,%x0,%x0"; -+ { -+ if (TARGET_P9_VECTOR) -+ return "xxspltib %x0,0"; - -- if (TARGET_P8_VECTOR && vec == CONSTM1_RTX (mode)) -- return "xxlorc %x0,%x0,%x0"; -+ else if (dest_vmx_p) -+ return "vspltisw %0,0"; - -- if ((mode == V2DImode || mode == V1TImode) -- && INTVAL (CONST_VECTOR_ELT (vec, 0)) == -1 -- && INTVAL (CONST_VECTOR_ELT (vec, 1)) == -1) -- return (TARGET_P8_VECTOR) ? "xxlorc %x0,%x0,%x0" : "vspltisw %0,-1"; -+ else -+ return "xxlxor %x0,%x0,%x0"; -+ } -+ -+ if (all_ones_constant (vec, mode)) -+ { -+ if (TARGET_P9_VECTOR) -+ return "xxspltib %x0,255"; -+ -+ else if (dest_vmx_p) -+ return "vspltisw %0,-1"; -+ -+ else if (TARGET_P8_VECTOR) -+ return "xxlorc %x0,%x0,%x0"; -+ -+ else -+ gcc_unreachable (); -+ } -+ -+ if (TARGET_P9_VECTOR -+ && xxspltib_constant_p (vec, mode, &num_insns, &xxspltib_value)) -+ { -+ if (num_insns == 1) -+ { -+ operands[2] = GEN_INT (xxspltib_value & 0xff); -+ return "xxspltib %x0,%2"; -+ } -+ -+ return "#"; -+ } - } - - if (TARGET_ALTIVEC) - { - rtx splat_vec; -+ -+ gcc_assert (ALTIVEC_REGNO_P (REGNO (dest))); - if (zero_constant (vec, mode)) -- return "vxor %0,%0,%0"; -+ return "vspltisw %0,0"; -+ -+ if (all_ones_constant (vec, mode)) -+ return "vspltisw %0,-1"; - - /* Do we need to construct a value using VSLDOI? */ - shift = vspltis_shifted (vec); -@@ -6436,6 +6682,15 @@ - return; - } - -+ /* Word values on ISA 3.0 can use mtvsrws, lxvwsx, or vspltisw. V4SF is -+ complicated since scalars are stored as doubles in the registers. */ -+ if (TARGET_P9_VECTOR && mode == V4SImode && all_same -+ && VECTOR_MEM_VSX_P (mode)) -+ { -+ emit_insn (gen_vsx_splat_v4si (target, XVECEXP (vals, 0, 0))); -+ return; -+ } -+ - /* With single precision floating point on VSX, know that internally single - precision is actually represented as a double, and either make 2 V2DF - vectors, and convert these vectors to single precision, or do one -@@ -6444,14 +6699,23 @@ - { - if (all_same) - { -- rtx freg = gen_reg_rtx (V4SFmode); -- rtx sreg = force_reg (SFmode, XVECEXP (vals, 0, 0)); -- rtx cvt = ((TARGET_XSCVDPSPN) -- ? gen_vsx_xscvdpspn_scalar (freg, sreg) -- : gen_vsx_xscvdpsp_scalar (freg, sreg)); -+ rtx op0 = XVECEXP (vals, 0, 0); -+ -+ if (TARGET_P9_VECTOR) -+ emit_insn (gen_vsx_splat_v4sf (target, op0)); -+ -+ else -+ { -+ rtx freg = gen_reg_rtx (V4SFmode); -+ rtx sreg = force_reg (SFmode, op0); -+ rtx cvt = (TARGET_XSCVDPSPN -+ ? gen_vsx_xscvdpspn_scalar (freg, sreg) -+ : gen_vsx_xscvdpsp_scalar (freg, sreg)); - -- emit_insn (cvt); -- emit_insn (gen_vsx_xxspltw_v4sf_direct (target, freg, const0_rtx)); -+ emit_insn (cvt); -+ emit_insn (gen_vsx_xxspltw_v4sf_direct (target, freg, -+ const0_rtx)); -+ } - } - else - { -@@ -6572,21 +6836,29 @@ - gen_rtvec (3, target, reg, - force_reg (V16QImode, x)), - UNSPEC_VPERM); -- else -+ else - { -- /* Invert selector. We prefer to generate VNAND on P8 so -- that future fusion opportunities can kick in, but must -- generate VNOR elsewhere. */ -- rtx notx = gen_rtx_NOT (V16QImode, force_reg (V16QImode, x)); -- rtx iorx = (TARGET_P8_VECTOR -- ? gen_rtx_IOR (V16QImode, notx, notx) -- : gen_rtx_AND (V16QImode, notx, notx)); -- rtx tmp = gen_reg_rtx (V16QImode); -- emit_insn (gen_rtx_SET (tmp, iorx)); -- -- /* Permute with operands reversed and adjusted selector. */ -- x = gen_rtx_UNSPEC (mode, gen_rtvec (3, reg, target, tmp), -- UNSPEC_VPERM); -+ if (TARGET_P9_VECTOR) -+ x = gen_rtx_UNSPEC (mode, -+ gen_rtvec (3, target, reg, -+ force_reg (V16QImode, x)), -+ UNSPEC_VPERMR); -+ else -+ { -+ /* Invert selector. We prefer to generate VNAND on P8 so -+ that future fusion opportunities can kick in, but must -+ generate VNOR elsewhere. */ -+ rtx notx = gen_rtx_NOT (V16QImode, force_reg (V16QImode, x)); -+ rtx iorx = (TARGET_P8_VECTOR -+ ? gen_rtx_IOR (V16QImode, notx, notx) -+ : gen_rtx_AND (V16QImode, notx, notx)); -+ rtx tmp = gen_reg_rtx (V16QImode); -+ emit_insn (gen_rtx_SET (tmp, iorx)); -+ -+ /* Permute with operands reversed and adjusted selector. */ -+ x = gen_rtx_UNSPEC (mode, gen_rtvec (3, reg, target, tmp), -+ UNSPEC_VPERM); -+ } - } - - emit_insn (gen_rtx_SET (target, x)); -@@ -6902,6 +7174,49 @@ - return false; - } - -+/* Return true if the OFFSET is valid for the quad address instructions that -+ use d-form (register + offset) addressing. */ -+ -+static inline bool -+quad_address_offset_p (HOST_WIDE_INT offset) -+{ -+ return (IN_RANGE (offset, -32768, 32767) && ((offset) & 0xf) == 0); -+} -+ -+/* Return true if the ADDR is an acceptable address for a quad memory -+ operation of mode MODE (either LQ/STQ for general purpose registers, or -+ LXV/STXV for vector registers under ISA 3.0. GPR_P is true if this address -+ is intended for LQ/STQ. If it is false, the address is intended for the ISA -+ 3.0 LXV/STXV instruction. */ -+ -+bool -+quad_address_p (rtx addr, machine_mode mode, bool strict) -+{ -+ rtx op0, op1; -+ -+ if (GET_MODE_SIZE (mode) != 16) -+ return false; -+ -+ if (legitimate_indirect_address_p (addr, strict)) -+ return true; -+ -+ if (VECTOR_MODE_P (mode) && !mode_supports_vsx_dform_quad (mode)) -+ return false; -+ -+ if (GET_CODE (addr) != PLUS) -+ return false; -+ -+ op0 = XEXP (addr, 0); -+ if (!REG_P (op0) || !INT_REG_OK_FOR_BASE_P (op0, strict)) -+ return false; -+ -+ op1 = XEXP (addr, 1); -+ if (!CONST_INT_P (op1)) -+ return false; -+ -+ return quad_address_offset_p (INTVAL (op1)); -+} -+ - /* Return true if this is a load or store quad operation. This function does - not handle the atomic quad memory instructions. */ - -@@ -6994,6 +7309,10 @@ - if (TARGET_POWERPC64 && (offset & 3) != 0) - return false; - -+ if (mode_supports_vsx_dform_quad (mode) -+ && !quad_address_offset_p (offset)) -+ return false; -+ - extra = GET_MODE_SIZE (mode) - UNITS_PER_WORD; - if (extra < 0) - extra = 0; -@@ -7023,13 +7342,14 @@ - case TImode: - case TFmode: - case KFmode: -- /* AltiVec/VSX vector modes. Only reg+reg addressing is valid. While -- TImode is not a vector mode, if we want to use the VSX registers to -- move it around, we need to restrict ourselves to reg+reg addressing. -- Similarly for IEEE 128-bit floating point that is passed in a single -- vector register. */ -+ /* AltiVec/VSX vector modes. Only reg+reg addressing was valid until the -+ ISA 3.0 vector d-form addressing mode was added. While TImode is not -+ a vector mode, if we want to use the VSX registers to move it around, -+ we need to restrict ourselves to reg+reg addressing. Similarly for -+ IEEE 128-bit floating point that is passed in a single vector -+ register. */ - if (VECTOR_MEM_ALTIVEC_OR_VSX_P (mode)) -- return false; -+ return mode_supports_vsx_dform_quad (mode); - break; - - case V4HImode: -@@ -7096,6 +7416,11 @@ - if (GET_CODE (op) != SYMBOL_REF) - return false; - -+ /* ISA 3.0 vector d-form addressing is restricted, don't allow -+ SYMBOL_REF. */ -+ if (mode_supports_vsx_dform_quad (mode)) -+ return false; -+ - dsize = GET_MODE_SIZE (mode); - decl = SYMBOL_REF_DECL (op); - if (!decl) -@@ -7250,6 +7575,8 @@ - return false; - if (!INT_REG_OK_FOR_BASE_P (XEXP (x, 0), strict)) - return false; -+ if (mode_supports_vsx_dform_quad (mode)) -+ return quad_address_p (x, mode, strict); - if (!reg_offset_addressing_ok_p (mode)) - return virtual_stack_registers_memory_p (x); - if (legitimate_constant_pool_address_p (x, mode, strict || lra_in_progress)) -@@ -7388,6 +7715,9 @@ - return false; - if (!INT_REG_OK_FOR_BASE_P (XEXP (x, 0), strict)) - return false; -+ /* quad word addresses are restricted, and we can't use LO_SUM. */ -+ if (mode_supports_vsx_dform_quad (mode)) -+ return false; - /* Restrict addressing for DI because of our SUBREG hackery. */ - if (TARGET_E500_DOUBLE && GET_MODE_SIZE (mode) > UNITS_PER_WORD) - return false; -@@ -7399,7 +7729,7 @@ - - if (DEFAULT_ABI == ABI_V4 && flag_pic) - return false; -- /* LRA don't use LEGITIMIZE_RELOAD_ADDRESS as it usually calls -+ /* LRA doesn't use LEGITIMIZE_RELOAD_ADDRESS as it usually calls - push_reload from reload pass code. LEGITIMIZE_RELOAD_ADDRESS - recognizes some LO_SUM addresses as valid although this - function says opposite. In most cases, LRA through different -@@ -7453,7 +7783,8 @@ - { - unsigned int extra; - -- if (!reg_offset_addressing_ok_p (mode)) -+ if (!reg_offset_addressing_ok_p (mode) -+ || mode_supports_vsx_dform_quad (mode)) - { - if (virtual_stack_registers_memory_p (x)) - return x; -@@ -8148,13 +8479,18 @@ - int ind_levels ATTRIBUTE_UNUSED, int *win) - { - bool reg_offset_p = reg_offset_addressing_ok_p (mode); -+ bool quad_offset_p = mode_supports_vsx_dform_quad (mode); - -- /* Nasty hack for vsx_splat_V2DF/V2DI load from mem, which takes a -- DFmode/DImode MEM. */ -+ /* Nasty hack for vsx_splat_v2df/v2di load from mem, which takes a -+ DFmode/DImode MEM. Ditto for ISA 3.0 vsx_splat_v4sf/v4si. */ - if (reg_offset_p - && opnum == 1 - && ((mode == DFmode && recog_data.operand_mode[0] == V2DFmode) -- || (mode == DImode && recog_data.operand_mode[0] == V2DImode))) -+ || (mode == DImode && recog_data.operand_mode[0] == V2DImode) -+ || (mode == SFmode && recog_data.operand_mode[0] == V4SFmode -+ && TARGET_P9_VECTOR) -+ || (mode == SImode && recog_data.operand_mode[0] == V4SImode -+ && TARGET_P9_VECTOR))) - reg_offset_p = false; - - /* We must recognize output that we have already generated ourselves. */ -@@ -8164,6 +8500,11 @@ - && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT - && GET_CODE (XEXP (x, 1)) == CONST_INT) - { -+ if (TARGET_DEBUG_ADDR) -+ { -+ fprintf (stderr, "\nlegitimize_reload_address push_reload #1:\n"); -+ debug_rtx (x); -+ } - push_reload (XEXP (x, 0), NULL_RTX, &XEXP (x, 0), NULL, - BASE_REG_CLASS, GET_MODE (x), VOIDmode, 0, 0, - opnum, (enum reload_type) type); -@@ -8175,6 +8516,11 @@ - if (GET_CODE (x) == LO_SUM - && GET_CODE (XEXP (x, 0)) == HIGH) - { -+ if (TARGET_DEBUG_ADDR) -+ { -+ fprintf (stderr, "\nlegitimize_reload_address push_reload #2:\n"); -+ debug_rtx (x); -+ } - push_reload (XEXP (x, 0), NULL_RTX, &XEXP (x, 0), NULL, - BASE_REG_CLASS, Pmode, VOIDmode, 0, 0, - opnum, (enum reload_type) type); -@@ -8203,10 +8549,16 @@ - - if (TARGET_CMODEL != CMODEL_SMALL - && reg_offset_p -+ && !quad_offset_p - && small_toc_ref (x, VOIDmode)) - { - rtx hi = gen_rtx_HIGH (Pmode, copy_rtx (x)); - x = gen_rtx_LO_SUM (Pmode, hi, x); -+ if (TARGET_DEBUG_ADDR) -+ { -+ fprintf (stderr, "\nlegitimize_reload_address push_reload #3:\n"); -+ debug_rtx (x); -+ } - push_reload (XEXP (x, 0), NULL_RTX, &XEXP (x, 0), NULL, - BASE_REG_CLASS, Pmode, VOIDmode, 0, 0, - opnum, (enum reload_type) type); -@@ -8215,22 +8567,24 @@ - } - - if (GET_CODE (x) == PLUS -- && GET_CODE (XEXP (x, 0)) == REG -+ && REG_P (XEXP (x, 0)) - && REGNO (XEXP (x, 0)) < FIRST_PSEUDO_REGISTER - && INT_REG_OK_FOR_BASE_P (XEXP (x, 0), 1) -- && GET_CODE (XEXP (x, 1)) == CONST_INT -+ && CONST_INT_P (XEXP (x, 1)) - && reg_offset_p - && !SPE_VECTOR_MODE (mode) - && !(TARGET_E500_DOUBLE && GET_MODE_SIZE (mode) > UNITS_PER_WORD) -- && (!VECTOR_MODE_P (mode) || VECTOR_MEM_NONE_P (mode))) -+ && (quad_offset_p || !VECTOR_MODE_P (mode) || VECTOR_MEM_NONE_P (mode))) - { - HOST_WIDE_INT val = INTVAL (XEXP (x, 1)); - HOST_WIDE_INT low = ((val & 0xffff) ^ 0x8000) - 0x8000; - HOST_WIDE_INT high - = (((val - low) & 0xffffffff) ^ 0x80000000) - 0x80000000; - -- /* Check for 32-bit overflow. */ -- if (high + low != val) -+ /* Check for 32-bit overflow or quad addresses with one of the -+ four least significant bits set. */ -+ if (high + low != val -+ || (quad_offset_p && (low & 0xf))) - { - *win = 0; - return x; -@@ -8244,6 +8598,11 @@ - GEN_INT (high)), - GEN_INT (low)); - -+ if (TARGET_DEBUG_ADDR) -+ { -+ fprintf (stderr, "\nlegitimize_reload_address push_reload #4:\n"); -+ debug_rtx (x); -+ } - push_reload (XEXP (x, 0), NULL_RTX, &XEXP (x, 0), NULL, - BASE_REG_CLASS, GET_MODE (x), VOIDmode, 0, 0, - opnum, (enum reload_type) type); -@@ -8253,6 +8612,7 @@ - - if (GET_CODE (x) == SYMBOL_REF - && reg_offset_p -+ && !quad_offset_p - && (!VECTOR_MODE_P (mode) || VECTOR_MEM_NONE_P (mode)) - && !SPE_VECTOR_MODE (mode) - #if TARGET_MACHO -@@ -8304,6 +8664,11 @@ - x = gen_rtx_LO_SUM (GET_MODE (x), - gen_rtx_HIGH (Pmode, x), x); - -+ if (TARGET_DEBUG_ADDR) -+ { -+ fprintf (stderr, "\nlegitimize_reload_address push_reload #5:\n"); -+ debug_rtx (x); -+ } - push_reload (XEXP (x, 0), NULL_RTX, &XEXP (x, 0), NULL, - BASE_REG_CLASS, Pmode, VOIDmode, 0, 0, - opnum, (enum reload_type) type); -@@ -8332,14 +8697,22 @@ - - if (TARGET_TOC - && reg_offset_p -+ && !quad_offset_p - && GET_CODE (x) == SYMBOL_REF - && use_toc_relative_ref (x, mode)) - { - x = create_TOC_reference (x, NULL_RTX); - if (TARGET_CMODEL != CMODEL_SMALL) -- push_reload (XEXP (x, 0), NULL_RTX, &XEXP (x, 0), NULL, -- BASE_REG_CLASS, Pmode, VOIDmode, 0, 0, -- opnum, (enum reload_type) type); -+ { -+ if (TARGET_DEBUG_ADDR) -+ { -+ fprintf (stderr, "\nlegitimize_reload_address push_reload #6:\n"); -+ debug_rtx (x); -+ } -+ push_reload (XEXP (x, 0), NULL_RTX, &XEXP (x, 0), NULL, -+ BASE_REG_CLASS, Pmode, VOIDmode, 0, 0, -+ opnum, (enum reload_type) type); -+ } - *win = 1; - return x; - } -@@ -8395,6 +8768,7 @@ - rs6000_legitimate_address_p (machine_mode mode, rtx x, bool reg_ok_strict) - { - bool reg_offset_p = reg_offset_addressing_ok_p (mode); -+ bool quad_offset_p = mode_supports_vsx_dform_quad (mode); - - /* If this is an unaligned stvx/ldvx type address, discard the outer AND. */ - if (VECTOR_MEM_ALTIVEC_P (mode) -@@ -8412,17 +8786,27 @@ - && mode_supports_pre_incdec_p (mode) - && legitimate_indirect_address_p (XEXP (x, 0), reg_ok_strict)) - return 1; -- if (virtual_stack_registers_memory_p (x)) -- return 1; -- if (reg_offset_p && legitimate_small_data_p (mode, x)) -+ /* Handle restricted vector d-form offsets in ISA 3.0. */ -+ if (quad_offset_p) -+ { -+ if (quad_address_p (x, mode, reg_ok_strict)) -+ return 1; -+ } -+ else if (virtual_stack_registers_memory_p (x)) - return 1; -- if (reg_offset_p -- && legitimate_constant_pool_address_p (x, mode, -+ -+ else if (reg_offset_p) -+ { -+ if (legitimate_small_data_p (mode, x)) -+ return 1; -+ if (legitimate_constant_pool_address_p (x, mode, - reg_ok_strict || lra_in_progress)) -- return 1; -- if (reg_offset_p && reg_addr[mode].fused_toc && GET_CODE (x) == UNSPEC -- && XINT (x, 1) == UNSPEC_FUSION_ADDIS) -- return 1; -+ return 1; -+ if (reg_addr[mode].fused_toc && GET_CODE (x) == UNSPEC -+ && XINT (x, 1) == UNSPEC_FUSION_ADDIS) -+ return 1; -+ } -+ - /* For TImode, if we have load/store quad and TImode in VSX registers, only - allow register indirect addresses. This will allow the values to go in - either GPRs or VSX registers without reloading. The vector types would -@@ -8461,7 +8845,8 @@ - && legitimate_indexed_address_p (XEXP (x, 1), reg_ok_strict))) - && rtx_equal_p (XEXP (XEXP (x, 1), 0), XEXP (x, 0))) - return 1; -- if (reg_offset_p && legitimate_lo_sum_address_p (mode, x, reg_ok_strict)) -+ if (reg_offset_p && !quad_offset_p -+ && legitimate_lo_sum_address_p (mode, x, reg_ok_strict)) - return 1; - return 0; - } -@@ -10044,6 +10429,35 @@ - return must_pass_in_stack_var_size_or_pad (mode, type); - } - -+static inline bool -+is_complex_IBM_long_double (machine_mode mode) -+{ -+ return mode == ICmode || (!TARGET_IEEEQUAD && mode == TCmode); -+} -+ -+/* Whether ABI_V4 passes MODE args to a function in floating point -+ registers. */ -+ -+static bool -+abi_v4_pass_in_fpr (machine_mode mode) -+{ -+ if (!TARGET_FPRS || !TARGET_HARD_FLOAT) -+ return false; -+ if (TARGET_SINGLE_FLOAT && mode == SFmode) -+ return true; -+ if (TARGET_DOUBLE_FLOAT && mode == DFmode) -+ return true; -+ /* ABI_V4 passes complex IBM long double in 8 gprs. -+ Stupid, but we can't change the ABI now. */ -+ if (is_complex_IBM_long_double (mode)) -+ return false; -+ if (FLOAT128_2REG_P (mode)) -+ return true; -+ if (DECIMAL_FLOAT_MODE_P (mode)) -+ return true; -+ return false; -+} -+ - /* If defined, a C expression which determines whether, and in which - direction, to pad out an argument with extra space. The value - should be of type `enum direction': either `upward' to pad above -@@ -10128,6 +10542,7 @@ - && (GET_MODE_SIZE (mode) == 8 - || (TARGET_HARD_FLOAT - && TARGET_FPRS -+ && !is_complex_IBM_long_double (mode) - && FLOAT128_2REG_P (mode)))) - return 64; - else if (FLOAT128_VECTOR_P (mode)) -@@ -10507,11 +10922,7 @@ - } - else if (DEFAULT_ABI == ABI_V4) - { -- if (TARGET_HARD_FLOAT && TARGET_FPRS -- && ((TARGET_SINGLE_FLOAT && mode == SFmode) -- || (TARGET_DOUBLE_FLOAT && mode == DFmode) -- || FLOAT128_2REG_P (mode) -- || DECIMAL_FLOAT_MODE_P (mode))) -+ if (abi_v4_pass_in_fpr (mode)) - { - /* _Decimal128 must use an even/odd register pair. This assumes - that the register number is odd when fregno is odd. */ -@@ -11168,11 +11579,7 @@ - - else if (abi == ABI_V4) - { -- if (TARGET_HARD_FLOAT && TARGET_FPRS -- && ((TARGET_SINGLE_FLOAT && mode == SFmode) -- || (TARGET_DOUBLE_FLOAT && mode == DFmode) -- || FLOAT128_2REG_P (mode) -- || DECIMAL_FLOAT_MODE_P (mode))) -+ if (abi_v4_pass_in_fpr (mode)) - { - /* _Decimal128 must use an even/odd register pair. This assumes - that the register number is odd when fregno is odd. */ -@@ -12093,19 +12500,15 @@ - rsize = (size + 3) / 4; - align = 1; - -- if (TARGET_HARD_FLOAT && TARGET_FPRS -- && ((TARGET_SINGLE_FLOAT && TYPE_MODE (type) == SFmode) -- || (TARGET_DOUBLE_FLOAT -- && (TYPE_MODE (type) == DFmode -- || FLOAT128_2REG_P (TYPE_MODE (type)) -- || DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))))) -+ machine_mode mode = TYPE_MODE (type); -+ if (abi_v4_pass_in_fpr (mode)) - { - /* FP args go in FP registers, if present. */ - reg = fpr; - n_reg = (size + 7) / 8; - sav_ofs = ((TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT) ? 8 : 4) * 4; - sav_scale = ((TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT) ? 8 : 4); -- if (TYPE_MODE (type) != SFmode && TYPE_MODE (type) != SDmode) -+ if (mode != SFmode && mode != SDmode) - align = 8; - } - else -@@ -12125,7 +12528,7 @@ - addr = create_tmp_var (ptr_type_node, "addr"); - - /* AltiVec vectors never go in registers when -mabi=altivec. */ -- if (TARGET_ALTIVEC_ABI && ALTIVEC_VECTOR_MODE (TYPE_MODE (type))) -+ if (TARGET_ALTIVEC_ABI && ALTIVEC_VECTOR_MODE (mode)) - align = 16; - else - { -@@ -12146,7 +12549,7 @@ - } - /* _Decimal128 is passed in even/odd fpr pairs; the stored - reg number is 0 for f1, so we want to make it odd. */ -- else if (reg == fpr && TYPE_MODE (type) == TDmode) -+ else if (reg == fpr && mode == TDmode) - { - t = build2 (BIT_IOR_EXPR, TREE_TYPE (reg), unshare_expr (reg), - build_int_cst (TREE_TYPE (reg), 1)); -@@ -12173,7 +12576,7 @@ - FP register for 32-bit binaries. */ - if (TARGET_32BIT - && TARGET_HARD_FLOAT && TARGET_FPRS -- && TYPE_MODE (type) == SDmode) -+ && mode == SDmode) - t = fold_build_pointer_plus_hwi (t, size); - - gimplify_assign (addr, t, pre_p); -@@ -12260,7 +12663,7 @@ - /* const function, function only depends on the inputs. */ - TREE_READONLY (t) = 1; - TREE_NOTHROW (t) = 1; -- attr_string = ", pure"; -+ attr_string = ", const"; - } - else if ((classify & RS6000_BTC_PURE) != 0) - { -@@ -12268,7 +12671,7 @@ - external state. */ - DECL_PURE_P (t) = 1; - TREE_NOTHROW (t) = 1; -- attr_string = ", const"; -+ attr_string = ", pure"; - } - else if ((classify & RS6000_BTC_FP) != 0) - { -@@ -12300,6 +12703,7 @@ - - /* Simple ternary operations: VECd = foo (VECa, VECb, VECc). */ - -+#undef RS6000_BUILTIN_0 - #undef RS6000_BUILTIN_1 - #undef RS6000_BUILTIN_2 - #undef RS6000_BUILTIN_3 -@@ -12312,6 +12716,7 @@ - #undef RS6000_BUILTIN_S - #undef RS6000_BUILTIN_X - -+#define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_1(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_2(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_3(ENUM, NAME, MASK, ATTR, ICODE) \ -@@ -12333,6 +12738,7 @@ - - /* DST operations: void foo (void *, const int, const char). */ - -+#undef RS6000_BUILTIN_0 - #undef RS6000_BUILTIN_1 - #undef RS6000_BUILTIN_2 - #undef RS6000_BUILTIN_3 -@@ -12345,6 +12751,7 @@ - #undef RS6000_BUILTIN_S - #undef RS6000_BUILTIN_X - -+#define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_1(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_2(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_3(ENUM, NAME, MASK, ATTR, ICODE) -@@ -12366,6 +12773,7 @@ - - /* Simple binary operations: VECc = foo (VECa, VECb). */ - -+#undef RS6000_BUILTIN_0 - #undef RS6000_BUILTIN_1 - #undef RS6000_BUILTIN_2 - #undef RS6000_BUILTIN_3 -@@ -12378,6 +12786,7 @@ - #undef RS6000_BUILTIN_S - #undef RS6000_BUILTIN_X - -+#define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_1(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_2(ENUM, NAME, MASK, ATTR, ICODE) \ - { MASK, ICODE, NAME, ENUM }, -@@ -12397,6 +12806,7 @@ - #include "rs6000-builtin.def" - }; - -+#undef RS6000_BUILTIN_0 - #undef RS6000_BUILTIN_1 - #undef RS6000_BUILTIN_2 - #undef RS6000_BUILTIN_3 -@@ -12409,6 +12819,7 @@ - #undef RS6000_BUILTIN_S - #undef RS6000_BUILTIN_X - -+#define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_1(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_2(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_3(ENUM, NAME, MASK, ATTR, ICODE) -@@ -12431,6 +12842,7 @@ - }; - - /* SPE predicates. */ -+#undef RS6000_BUILTIN_0 - #undef RS6000_BUILTIN_1 - #undef RS6000_BUILTIN_2 - #undef RS6000_BUILTIN_3 -@@ -12443,6 +12855,7 @@ - #undef RS6000_BUILTIN_S - #undef RS6000_BUILTIN_X - -+#define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_1(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_2(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_3(ENUM, NAME, MASK, ATTR, ICODE) -@@ -12463,6 +12876,7 @@ - }; - - /* SPE evsel predicates. */ -+#undef RS6000_BUILTIN_0 - #undef RS6000_BUILTIN_1 - #undef RS6000_BUILTIN_2 - #undef RS6000_BUILTIN_3 -@@ -12475,6 +12889,7 @@ - #undef RS6000_BUILTIN_S - #undef RS6000_BUILTIN_X - -+#define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_1(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_2(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_3(ENUM, NAME, MASK, ATTR, ICODE) -@@ -12495,6 +12910,7 @@ - }; - - /* PAIRED predicates. */ -+#undef RS6000_BUILTIN_0 - #undef RS6000_BUILTIN_1 - #undef RS6000_BUILTIN_2 - #undef RS6000_BUILTIN_3 -@@ -12507,6 +12923,7 @@ - #undef RS6000_BUILTIN_S - #undef RS6000_BUILTIN_X - -+#define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_1(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_2(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_3(ENUM, NAME, MASK, ATTR, ICODE) -@@ -12528,6 +12945,7 @@ - - /* ABS* operations. */ - -+#undef RS6000_BUILTIN_0 - #undef RS6000_BUILTIN_1 - #undef RS6000_BUILTIN_2 - #undef RS6000_BUILTIN_3 -@@ -12540,6 +12958,7 @@ - #undef RS6000_BUILTIN_S - #undef RS6000_BUILTIN_X - -+#define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_1(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_2(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_3(ENUM, NAME, MASK, ATTR, ICODE) -@@ -12562,6 +12981,7 @@ - /* Simple unary operations: VECb = foo (unsigned literal) or VECb = - foo (VECa). */ - -+#undef RS6000_BUILTIN_0 - #undef RS6000_BUILTIN_1 - #undef RS6000_BUILTIN_2 - #undef RS6000_BUILTIN_3 -@@ -12574,6 +12994,7 @@ - #undef RS6000_BUILTIN_S - #undef RS6000_BUILTIN_X - -+#define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_1(ENUM, NAME, MASK, ATTR, ICODE) \ - { MASK, ICODE, NAME, ENUM }, - -@@ -12593,7 +13014,43 @@ - #include "rs6000-builtin.def" - }; - -+/* Simple no-argument operations: result = __builtin_darn_32 () */ -+ -+#undef RS6000_BUILTIN_0 -+#undef RS6000_BUILTIN_1 -+#undef RS6000_BUILTIN_2 -+#undef RS6000_BUILTIN_3 -+#undef RS6000_BUILTIN_A -+#undef RS6000_BUILTIN_D -+#undef RS6000_BUILTIN_E -+#undef RS6000_BUILTIN_H -+#undef RS6000_BUILTIN_P -+#undef RS6000_BUILTIN_Q -+#undef RS6000_BUILTIN_S -+#undef RS6000_BUILTIN_X -+ -+#define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE) \ -+ { MASK, ICODE, NAME, ENUM }, -+ -+#define RS6000_BUILTIN_1(ENUM, NAME, MASK, ATTR, ICODE) -+#define RS6000_BUILTIN_2(ENUM, NAME, MASK, ATTR, ICODE) -+#define RS6000_BUILTIN_3(ENUM, NAME, MASK, ATTR, ICODE) -+#define RS6000_BUILTIN_A(ENUM, NAME, MASK, ATTR, ICODE) -+#define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE) -+#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE) -+#define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE) -+#define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE) -+#define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE) -+#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE) -+#define RS6000_BUILTIN_X(ENUM, NAME, MASK, ATTR, ICODE) -+ -+static const struct builtin_description bdesc_0arg[] = -+{ -+#include "rs6000-builtin.def" -+}; -+ - /* HTM builtins. */ -+#undef RS6000_BUILTIN_0 - #undef RS6000_BUILTIN_1 - #undef RS6000_BUILTIN_2 - #undef RS6000_BUILTIN_3 -@@ -12606,6 +13063,7 @@ - #undef RS6000_BUILTIN_S - #undef RS6000_BUILTIN_X - -+#define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_1(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_2(ENUM, NAME, MASK, ATTR, ICODE) - #define RS6000_BUILTIN_3(ENUM, NAME, MASK, ATTR, ICODE) -@@ -12625,6 +13083,7 @@ - #include "rs6000-builtin.def" - }; - -+#undef RS6000_BUILTIN_0 - #undef RS6000_BUILTIN_1 - #undef RS6000_BUILTIN_2 - #undef RS6000_BUILTIN_3 -@@ -12845,6 +13304,24 @@ - return const0_rtx; - } - } -+ else if (icode == CODE_FOR_dfptstsfi_eq_dd -+ || icode == CODE_FOR_dfptstsfi_lt_dd -+ || icode == CODE_FOR_dfptstsfi_gt_dd -+ || icode == CODE_FOR_dfptstsfi_unordered_dd -+ || icode == CODE_FOR_dfptstsfi_eq_td -+ || icode == CODE_FOR_dfptstsfi_lt_td -+ || icode == CODE_FOR_dfptstsfi_gt_td -+ || icode == CODE_FOR_dfptstsfi_unordered_td) -+ { -+ /* Only allow 6-bit unsigned literals. */ -+ STRIP_NOPS (arg0); -+ if (TREE_CODE (arg0) != INTEGER_CST -+ || !IN_RANGE (TREE_INT_CST_LOW (arg0), 0, 63)) -+ { -+ error ("argument 1 must be a 6-bit unsigned literal"); -+ return CONST0_RTX (tmode); -+ } -+ } - - if (target == 0 - || GET_MODE (target) != tmode -@@ -14129,6 +14606,47 @@ - case VSX_BUILTIN_STXVW4X_V16QI: - return altivec_expand_stv_builtin (CODE_FOR_vsx_store_v16qi, exp); - -+ /* For the following on big endian, it's ok to use any appropriate -+ unaligned-supporting store, so use a generic expander. For -+ little-endian, the exact element-reversing instruction must -+ be used. */ -+ case VSX_BUILTIN_ST_ELEMREV_V2DF: -+ { -+ enum insn_code code = (BYTES_BIG_ENDIAN ? CODE_FOR_vsx_store_v2df -+ : CODE_FOR_vsx_st_elemrev_v2df); -+ return altivec_expand_stv_builtin (code, exp); -+ } -+ case VSX_BUILTIN_ST_ELEMREV_V2DI: -+ { -+ enum insn_code code = (BYTES_BIG_ENDIAN ? CODE_FOR_vsx_store_v2di -+ : CODE_FOR_vsx_st_elemrev_v2di); -+ return altivec_expand_stv_builtin (code, exp); -+ } -+ case VSX_BUILTIN_ST_ELEMREV_V4SF: -+ { -+ enum insn_code code = (BYTES_BIG_ENDIAN ? CODE_FOR_vsx_store_v4sf -+ : CODE_FOR_vsx_st_elemrev_v4sf); -+ return altivec_expand_stv_builtin (code, exp); -+ } -+ case VSX_BUILTIN_ST_ELEMREV_V4SI: -+ { -+ enum insn_code code = (BYTES_BIG_ENDIAN ? CODE_FOR_vsx_store_v4si -+ : CODE_FOR_vsx_st_elemrev_v4si); -+ return altivec_expand_stv_builtin (code, exp); -+ } -+ case VSX_BUILTIN_ST_ELEMREV_V8HI: -+ { -+ enum insn_code code = (BYTES_BIG_ENDIAN ? CODE_FOR_vsx_store_v8hi -+ : CODE_FOR_vsx_st_elemrev_v8hi); -+ return altivec_expand_stv_builtin (code, exp); -+ } -+ case VSX_BUILTIN_ST_ELEMREV_V16QI: -+ { -+ enum insn_code code = (BYTES_BIG_ENDIAN ? CODE_FOR_vsx_store_v16qi -+ : CODE_FOR_vsx_st_elemrev_v16qi); -+ return altivec_expand_stv_builtin (code, exp); -+ } -+ - case ALTIVEC_BUILTIN_MFVSCR: - icode = CODE_FOR_altivec_mfvscr; - tmode = insn_data[icode].operand[0].mode; -@@ -14323,6 +14841,46 @@ - case VSX_BUILTIN_LXVW4X_V16QI: - return altivec_expand_lv_builtin (CODE_FOR_vsx_load_v16qi, - exp, target, false); -+ /* For the following on big endian, it's ok to use any appropriate -+ unaligned-supporting load, so use a generic expander. For -+ little-endian, the exact element-reversing instruction must -+ be used. */ -+ case VSX_BUILTIN_LD_ELEMREV_V2DF: -+ { -+ enum insn_code code = (BYTES_BIG_ENDIAN ? CODE_FOR_vsx_load_v2df -+ : CODE_FOR_vsx_ld_elemrev_v2df); -+ return altivec_expand_lv_builtin (code, exp, target, false); -+ } -+ case VSX_BUILTIN_LD_ELEMREV_V2DI: -+ { -+ enum insn_code code = (BYTES_BIG_ENDIAN ? CODE_FOR_vsx_load_v2di -+ : CODE_FOR_vsx_ld_elemrev_v2di); -+ return altivec_expand_lv_builtin (code, exp, target, false); -+ } -+ case VSX_BUILTIN_LD_ELEMREV_V4SF: -+ { -+ enum insn_code code = (BYTES_BIG_ENDIAN ? CODE_FOR_vsx_load_v4sf -+ : CODE_FOR_vsx_ld_elemrev_v4sf); -+ return altivec_expand_lv_builtin (code, exp, target, false); -+ } -+ case VSX_BUILTIN_LD_ELEMREV_V4SI: -+ { -+ enum insn_code code = (BYTES_BIG_ENDIAN ? CODE_FOR_vsx_load_v4si -+ : CODE_FOR_vsx_ld_elemrev_v4si); -+ return altivec_expand_lv_builtin (code, exp, target, false); -+ } -+ case VSX_BUILTIN_LD_ELEMREV_V8HI: -+ { -+ enum insn_code code = (BYTES_BIG_ENDIAN ? CODE_FOR_vsx_load_v8hi -+ : CODE_FOR_vsx_ld_elemrev_v8hi); -+ return altivec_expand_lv_builtin (code, exp, target, false); -+ } -+ case VSX_BUILTIN_LD_ELEMREV_V16QI: -+ { -+ enum insn_code code = (BYTES_BIG_ENDIAN ? CODE_FOR_vsx_load_v16qi -+ : CODE_FOR_vsx_ld_elemrev_v16qi); -+ return altivec_expand_lv_builtin (code, exp, target, false); -+ } - break; - default: - break; -@@ -14792,17 +15350,71 @@ - error ("Builtin function %s requires the -mhard-dfp option", name); - else if ((fnmask & RS6000_BTM_P8_VECTOR) != 0) - error ("Builtin function %s requires the -mpower8-vector option", name); -+ else if ((fnmask & RS6000_BTM_P9_VECTOR) != 0) -+ error ("Builtin function %s requires the -mpower9-vector option", name); -+ else if ((fnmask & (RS6000_BTM_P9_MISC | RS6000_BTM_64BIT)) -+ == (RS6000_BTM_P9_MISC | RS6000_BTM_64BIT)) -+ error ("Builtin function %s requires the -mpower9-misc and" -+ " -m64 options", name); -+ else if ((fnmask & RS6000_BTM_P9_MISC) == RS6000_BTM_P9_MISC) -+ error ("Builtin function %s requires the -mpower9-misc option", name); - else if ((fnmask & (RS6000_BTM_HARD_FLOAT | RS6000_BTM_LDBL128)) - == (RS6000_BTM_HARD_FLOAT | RS6000_BTM_LDBL128)) - error ("Builtin function %s requires the -mhard-float and" - " -mlong-double-128 options", name); - else if ((fnmask & RS6000_BTM_HARD_FLOAT) != 0) - error ("Builtin function %s requires the -mhard-float option", name); -+ else if ((fnmask & RS6000_BTM_FLOAT128) != 0) -+ error ("Builtin function %s requires the -mfloat128 option", name); - else - error ("Builtin function %s is not supported with the current options", - name); - } - -+/* Target hook for early folding of built-ins, shamelessly stolen -+ from ia64.c. */ -+ -+static tree -+rs6000_fold_builtin (tree fndecl, int n_args ATTRIBUTE_UNUSED, -+ tree *args, bool ignore ATTRIBUTE_UNUSED) -+{ -+ if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD) -+ { -+ enum rs6000_builtins fn_code -+ = (enum rs6000_builtins) DECL_FUNCTION_CODE (fndecl); -+ switch (fn_code) -+ { -+ case RS6000_BUILTIN_NANQ: -+ case RS6000_BUILTIN_NANSQ: -+ { -+ tree type = TREE_TYPE (TREE_TYPE (fndecl)); -+ const char *str = c_getstr (*args); -+ int quiet = fn_code == RS6000_BUILTIN_NANQ; -+ REAL_VALUE_TYPE real; -+ -+ if (str && real_nan (&real, str, quiet, TYPE_MODE (type))) -+ return build_real (type, real); -+ return NULL_TREE; -+ } -+ case RS6000_BUILTIN_INFQ: -+ case RS6000_BUILTIN_HUGE_VALQ: -+ { -+ tree type = TREE_TYPE (TREE_TYPE (fndecl)); -+ REAL_VALUE_TYPE inf; -+ real_inf (&inf); -+ return build_real (type, inf); -+ } -+ default: -+ break; -+ } -+ } -+#ifdef SUBTARGET_FOLD_BUILTIN -+ return SUBTARGET_FOLD_BUILTIN (fndecl, n_args, args, ignore); -+#else -+ return NULL_TREE; -+#endif -+} -+ - /* Expand an expression EXP that calls a built-in function, - with result going to TARGET if that's convenient - (and in mode MODE if that's convenient). -@@ -14990,9 +15602,11 @@ - } - - unsigned attr = rs6000_builtin_info[uns_fcode].attr & RS6000_BTC_TYPE_MASK; -+ /* RS6000_BTC_SPECIAL represents no-operand operators. */ - gcc_assert (attr == RS6000_BTC_UNARY - || attr == RS6000_BTC_BINARY -- || attr == RS6000_BTC_TERNARY); -+ || attr == RS6000_BTC_TERNARY -+ || attr == RS6000_BTC_SPECIAL); - - /* Handle simple unary operations. */ - d = bdesc_1arg; -@@ -15012,6 +15626,12 @@ - if (d->code == fcode) - return rs6000_expand_ternop_builtin (d->icode, exp, target); - -+ /* Handle simple no-argument operations. */ -+ d = bdesc_0arg; -+ for (i = 0; i < ARRAY_SIZE (bdesc_0arg); i++, d++) -+ if (d->code == fcode) -+ return rs6000_expand_zeroop_builtin (d->icode, target); -+ - gcc_unreachable (); - } - -@@ -15049,6 +15669,10 @@ - opaque_p_V2SI_type_node = build_pointer_type (opaque_V2SI_type_node); - opaque_V4SI_type_node = build_opaque_vector_type (intSI_type_node, 4); - -+ const_str_type_node -+ = build_pointer_type (build_qualified_type (char_type_node, -+ TYPE_QUAL_CONST)); -+ - /* We use V1TI mode as a special container to hold __int128_t items that - must live in VSX registers. */ - if (intTI_type_node) -@@ -15111,6 +15735,12 @@ - lang_hooks.types.register_builtin_type (ibm128_float_type_node, - "__ibm128"); - } -+ else -+ { -+ /* All types must be nonzero, or self-test barfs during bootstrap. */ -+ ieee128_float_type_node = long_double_type_node; -+ ibm128_float_type_node = long_double_type_node; -+ } - - /* Initialize the modes for builtin_function_type, mapping a machine mode to - tree type node. */ -@@ -15252,6 +15882,15 @@ - if (TARGET_EXTRA_BUILTINS || TARGET_SPE || TARGET_PAIRED_FLOAT) - rs6000_common_init_builtins (); - -+ ftype = build_function_type_list (ieee128_float_type_node, -+ const_str_type_node, NULL_TREE); -+ def_builtin ("__builtin_nanq", ftype, RS6000_BUILTIN_NANQ); -+ def_builtin ("__builtin_nansq", ftype, RS6000_BUILTIN_NANSQ); -+ -+ ftype = build_function_type_list (ieee128_float_type_node, NULL_TREE); -+ def_builtin ("__builtin_infq", ftype, RS6000_BUILTIN_INFQ); -+ def_builtin ("__builtin_huge_valq", ftype, RS6000_BUILTIN_HUGE_VALQ); -+ - ftype = builtin_function_type (DFmode, DFmode, DFmode, VOIDmode, - RS6000_BUILTIN_RECIP, "__builtin_recipdiv"); - def_builtin ("__builtin_recipdiv", ftype, RS6000_BUILTIN_RECIP); -@@ -15816,10 +16455,44 @@ - VSX_BUILTIN_STXVW4X_V8HI); - def_builtin ("__builtin_vsx_stxvw4x_v16qi", void_ftype_v16qi_long_pvoid, - VSX_BUILTIN_STXVW4X_V16QI); -+ -+ def_builtin ("__builtin_vsx_ld_elemrev_v2df", v2df_ftype_long_pcvoid, -+ VSX_BUILTIN_LD_ELEMREV_V2DF); -+ def_builtin ("__builtin_vsx_ld_elemrev_v2di", v2di_ftype_long_pcvoid, -+ VSX_BUILTIN_LD_ELEMREV_V2DI); -+ def_builtin ("__builtin_vsx_ld_elemrev_v4sf", v4sf_ftype_long_pcvoid, -+ VSX_BUILTIN_LD_ELEMREV_V4SF); -+ def_builtin ("__builtin_vsx_ld_elemrev_v4si", v4si_ftype_long_pcvoid, -+ VSX_BUILTIN_LD_ELEMREV_V4SI); -+ def_builtin ("__builtin_vsx_st_elemrev_v2df", void_ftype_v2df_long_pvoid, -+ VSX_BUILTIN_ST_ELEMREV_V2DF); -+ def_builtin ("__builtin_vsx_st_elemrev_v2di", void_ftype_v2di_long_pvoid, -+ VSX_BUILTIN_ST_ELEMREV_V2DI); -+ def_builtin ("__builtin_vsx_st_elemrev_v4sf", void_ftype_v4sf_long_pvoid, -+ VSX_BUILTIN_ST_ELEMREV_V4SF); -+ def_builtin ("__builtin_vsx_st_elemrev_v4si", void_ftype_v4si_long_pvoid, -+ VSX_BUILTIN_ST_ELEMREV_V4SI); -+ -+ if (TARGET_P9_VECTOR) -+ { -+ def_builtin ("__builtin_vsx_ld_elemrev_v8hi", v8hi_ftype_long_pcvoid, -+ VSX_BUILTIN_LD_ELEMREV_V8HI); -+ def_builtin ("__builtin_vsx_ld_elemrev_v16qi", v16qi_ftype_long_pcvoid, -+ VSX_BUILTIN_LD_ELEMREV_V16QI); -+ def_builtin ("__builtin_vsx_st_elemrev_v8hi", -+ void_ftype_v8hi_long_pvoid, VSX_BUILTIN_ST_ELEMREV_V8HI); -+ def_builtin ("__builtin_vsx_st_elemrev_v16qi", -+ void_ftype_v16qi_long_pvoid, VSX_BUILTIN_ST_ELEMREV_V16QI); -+ } -+ - def_builtin ("__builtin_vec_vsx_ld", opaque_ftype_long_pcvoid, - VSX_BUILTIN_VEC_LD); - def_builtin ("__builtin_vec_vsx_st", void_ftype_opaque_long_pvoid, - VSX_BUILTIN_VEC_ST); -+ def_builtin ("__builtin_vec_xl", opaque_ftype_long_pcvoid, -+ VSX_BUILTIN_VEC_XL); -+ def_builtin ("__builtin_vec_xst", void_ftype_opaque_long_pvoid, -+ VSX_BUILTIN_VEC_XST); - - def_builtin ("__builtin_vec_step", int_ftype_opaque, ALTIVEC_BUILTIN_VEC_STEP); - def_builtin ("__builtin_vec_splats", opaque_ftype_opaque, ALTIVEC_BUILTIN_VEC_SPLATS); -@@ -16351,10 +17024,6 @@ - while (num_args > 0 && h.mode[num_args] == VOIDmode) - num_args--; - -- if (num_args == 0) -- fatal_error (input_location, -- "internal error: builtin function %s had no type", name); -- - ret_type = builtin_mode_to_type[h.mode[0]][h.uns_p[0]]; - if (!ret_type && h.uns_p[0]) - ret_type = builtin_mode_to_type[h.mode[0]][0]; -@@ -16406,6 +17075,7 @@ - tree opaque_ftype_opaque = NULL_TREE; - tree opaque_ftype_opaque_opaque = NULL_TREE; - tree opaque_ftype_opaque_opaque_opaque = NULL_TREE; -+ tree v2si_ftype = NULL_TREE; - tree v2si_ftype_qi = NULL_TREE; - tree v2si_ftype_v2si_qi = NULL_TREE; - tree v2si_ftype_int_qi = NULL_TREE; -@@ -16622,6 +17292,64 @@ - - def_builtin (d->name, type, d->code); - } -+ -+ /* Add the simple no-argument operators. */ -+ d = bdesc_0arg; -+ for (i = 0; i < ARRAY_SIZE (bdesc_0arg); i++, d++) -+ { -+ machine_mode mode0; -+ tree type; -+ HOST_WIDE_INT mask = d->mask; -+ -+ if ((mask & builtin_mask) != mask) -+ { -+ if (TARGET_DEBUG_BUILTIN) -+ fprintf (stderr, "rs6000_builtin, skip no-argument %s\n", d->name); -+ continue; -+ } -+ if (rs6000_overloaded_builtin_p (d->code)) -+ { -+ if (!opaque_ftype_opaque) -+ opaque_ftype_opaque -+ = build_function_type_list (opaque_V4SI_type_node, NULL_TREE); -+ type = opaque_ftype_opaque; -+ } -+ else -+ { -+ enum insn_code icode = d->icode; -+ if (d->name == 0) -+ { -+ if (TARGET_DEBUG_BUILTIN) -+ fprintf (stderr, "rs6000_builtin, bdesc_0arg[%lu] no name\n", -+ (long unsigned) i); -+ continue; -+ } -+ if (icode == CODE_FOR_nothing) -+ { -+ if (TARGET_DEBUG_BUILTIN) -+ fprintf (stderr, -+ "rs6000_builtin, skip no-argument %s (no code)\n", -+ d->name); -+ continue; -+ } -+ mode0 = insn_data[icode].operand[0].mode; -+ if (mode0 == V2SImode) -+ { -+ /* code for SPE */ -+ if (! (type = v2si_ftype)) -+ { -+ v2si_ftype -+ = build_function_type_list (opaque_V2SI_type_node, -+ NULL_TREE); -+ type = v2si_ftype; -+ } -+ } -+ else -+ type = builtin_function_type (mode0, VOIDmode, VOIDmode, VOIDmode, -+ d->code, d->name); -+ } -+ def_builtin (d->name, type, d->code); -+ } - } - - /* Set up AIX/Darwin/64-bit Linux quad floating point routines. */ -@@ -18006,25 +18734,33 @@ - addr_mask = (reg_addr[mode].addr_mask[RELOAD_REG_VMX] - & ~RELOAD_REG_AND_M16); - -- else -+ /* If the register allocator hasn't made up its mind yet on the register -+ class to use, settle on defaults to use. */ -+ else if (rclass == NO_REGS) - { -- if (TARGET_DEBUG_ADDR) -- fprintf (stderr, -- "rs6000_secondary_reload_memory: mode = %s, class = %s, " -- "class is not GPR, FPR, VMX\n", -- GET_MODE_NAME (mode), reg_class_names[rclass]); -+ addr_mask = (reg_addr[mode].addr_mask[RELOAD_REG_ANY] -+ & ~RELOAD_REG_AND_M16); - -- return -1; -+ if ((addr_mask & RELOAD_REG_MULTIPLE) != 0) -+ addr_mask &= ~(RELOAD_REG_INDEXED -+ | RELOAD_REG_PRE_INCDEC -+ | RELOAD_REG_PRE_MODIFY); - } - -+ else -+ addr_mask = 0; -+ - /* If the register isn't valid in this register class, just return now. */ - if ((addr_mask & RELOAD_REG_VALID) == 0) - { - if (TARGET_DEBUG_ADDR) -- fprintf (stderr, -- "rs6000_secondary_reload_memory: mode = %s, class = %s, " -- "not valid in class\n", -- GET_MODE_NAME (mode), reg_class_names[rclass]); -+ { -+ fprintf (stderr, -+ "rs6000_secondary_reload_memory: mode = %s, class = %s, " -+ "not valid in class\n", -+ GET_MODE_NAME (mode), reg_class_names[rclass]); -+ debug_rtx (addr); -+ } - - return -1; - } -@@ -18152,13 +18888,23 @@ - } - } - -+ else if ((addr_mask & RELOAD_REG_QUAD_OFFSET) != 0 -+ && CONST_INT_P (plus_arg1)) -+ { -+ if (!quad_address_offset_p (INTVAL (plus_arg1))) -+ { -+ extra_cost = 1; -+ type = "vector d-form offset"; -+ } -+ } -+ - /* Make sure the register class can handle offset addresses. */ - else if (rs6000_legitimate_offset_address_p (mode, addr, false, true)) - { - if ((addr_mask & RELOAD_REG_OFFSET) == 0) - { - extra_cost = 1; -- type = "offset"; -+ type = "offset #2"; - } - } - -@@ -18171,7 +18917,14 @@ - break; - - case LO_SUM: -- if (!legitimate_lo_sum_address_p (mode, addr, false)) -+ /* Quad offsets are restricted and can't handle normal addresses. */ -+ if ((addr_mask & RELOAD_REG_QUAD_OFFSET) != 0) -+ { -+ extra_cost = -1; -+ type = "vector d-form lo_sum"; -+ } -+ -+ else if (!legitimate_lo_sum_address_p (mode, addr, false)) - { - fail_msg = "bad LO_SUM"; - extra_cost = -1; -@@ -18188,8 +18941,17 @@ - case CONST: - case SYMBOL_REF: - case LABEL_REF: -- type = "address"; -- extra_cost = rs6000_secondary_reload_toc_costs (addr_mask); -+ if ((addr_mask & RELOAD_REG_QUAD_OFFSET) != 0) -+ { -+ extra_cost = -1; -+ type = "vector d-form lo_sum #2"; -+ } -+ -+ else -+ { -+ type = "address"; -+ extra_cost = rs6000_secondary_reload_toc_costs (addr_mask); -+ } - break; - - /* TOC references look like offsetable memory. */ -@@ -18200,6 +18962,12 @@ - extra_cost = -1; - } - -+ else if ((addr_mask & RELOAD_REG_QUAD_OFFSET) != 0) -+ { -+ extra_cost = -1; -+ type = "vector d-form lo_sum #3"; -+ } -+ - else if ((addr_mask & RELOAD_REG_OFFSET) == 0) - { - extra_cost = 1; -@@ -18256,7 +19024,8 @@ - simple move insns are issued. At present, 32-bit integers are not allowed - in FPR/VSX registers. Single precision binary floating is not a simple - move because we need to convert to the single precision memory layout. -- The 4-byte SDmode can be moved. */ -+ The 4-byte SDmode can be moved. TDmode values are disallowed since they -+ need special direct move handling, which we do not support yet. */ - size = GET_MODE_SIZE (mode); - if (TARGET_DIRECT_MOVE - && ((mode == SDmode) || (TARGET_POWERPC64 && size == 8)) -@@ -18264,7 +19033,7 @@ - || (to_type == VSX_REG_TYPE && from_type == GPR_REG_TYPE))) - return true; - -- else if (TARGET_DIRECT_MOVE_128 && size == 16 -+ else if (TARGET_DIRECT_MOVE_128 && size == 16 && mode != TDmode - && ((to_type == VSX_REG_TYPE && from_type == GPR_REG_TYPE) - || (to_type == GPR_REG_TYPE && from_type == VSX_REG_TYPE))) - return true; -@@ -18653,6 +19422,9 @@ - fprintf (stderr, ", reload func = %s, extra cost = %d", - insn_data[sri->icode].name, sri->extra_cost); - -+ else if (sri->extra_cost > 0) -+ fprintf (stderr, ", extra cost = %d", sri->extra_cost); -+ - fputs ("\n", stderr); - debug_rtx (x); - } -@@ -18827,6 +19599,16 @@ - } - } - -+ else if (mode_supports_vsx_dform_quad (mode) && CONST_INT_P (op1)) -+ { -+ if (((addr_mask & RELOAD_REG_QUAD_OFFSET) == 0) -+ || !quad_address_p (addr, mode, false)) -+ { -+ emit_insn (gen_rtx_SET (scratch, addr)); -+ new_addr = scratch; -+ } -+ } -+ - /* Make sure the register class can handle offset addresses. */ - else if (rs6000_legitimate_offset_address_p (mode, addr, false, true)) - { -@@ -18857,6 +19639,13 @@ - } - } - -+ /* Quad offsets are restricted and can't handle normal addresses. */ -+ else if (mode_supports_vsx_dform_quad (mode)) -+ { -+ emit_insn (gen_rtx_SET (scratch, addr)); -+ new_addr = scratch; -+ } -+ - /* Make sure the register class can handle offset addresses. */ - else if (legitimate_lo_sum_address_p (mode, addr, false)) - { -@@ -19046,6 +19835,16 @@ - machine_mode mode = GET_MODE (x); - bool is_constant = CONSTANT_P (x); - -+ /* If a mode can't go in FPR/ALTIVEC/VSX registers, don't return a preferred -+ reload class for it. */ -+ if ((rclass == ALTIVEC_REGS || rclass == VSX_REGS) -+ && (reg_addr[mode].addr_mask[RELOAD_REG_VMX] & RELOAD_REG_VALID) == 0) -+ return NO_REGS; -+ -+ if ((rclass == FLOAT_REGS || rclass == VSX_REGS) -+ && (reg_addr[mode].addr_mask[RELOAD_REG_FPR] & RELOAD_REG_VALID) == 0) -+ return NO_REGS; -+ - /* For VSX, see if we should prefer FLOAT_REGS or ALTIVEC_REGS. Do not allow - the reloading of address expressions using PLUS into floating point - registers. */ -@@ -19067,7 +19866,8 @@ - } - - /* D-form addressing can easily reload the value. */ -- if (mode_supports_vmx_dform (mode)) -+ if (mode_supports_vmx_dform (mode) -+ || mode_supports_vsx_dform_quad (mode)) - return rclass; - - /* If this is a scalar floating point value and we don't have D-form -@@ -19095,6 +19895,25 @@ - return NO_REGS; - } - -+ /* If we haven't picked a register class, and the type is a vector or -+ floating point type, prefer to use the VSX, FPR, or Altivec register -+ classes. */ -+ if (rclass == NO_REGS) -+ { -+ if (TARGET_VSX && VECTOR_MEM_VSX_OR_P8_VECTOR_P (mode)) -+ return VSX_REGS; -+ -+ if (TARGET_ALTIVEC && VECTOR_MEM_ALTIVEC_P (mode)) -+ return ALTIVEC_REGS; -+ -+ if (DECIMAL_FLOAT_MODE_P (mode)) -+ return TARGET_DFP ? FLOAT_REGS : NO_REGS; -+ -+ if (TARGET_FPRS && TARGET_HARD_FLOAT && FLOAT_MODE_P (mode) -+ && (reg_addr[mode].addr_mask[RELOAD_REG_FPR] & RELOAD_REG_VALID) == 0) -+ return FLOAT_REGS; -+ } -+ - if (GET_MODE_CLASS (mode) == MODE_INT && rclass == NON_SPECIAL_REGS) - return GENERAL_REGS; - -@@ -19483,8 +20302,16 @@ - - else if (TARGET_VSX && dest_vsx_p) - { -- if (mode == V16QImode || mode == V8HImode || mode == V4SImode) -+ if (mode_supports_vsx_dform_quad (mode) -+ && quad_address_p (XEXP (src, 0), mode, true)) -+ return "lxv %x0,%1"; -+ -+ else if (TARGET_P9_VECTOR) -+ return "lxvx %x0,%y1"; -+ -+ else if (mode == V16QImode || mode == V8HImode || mode == V4SImode) - return "lxvw4x %x0,%y1"; -+ - else - return "lxvd2x %x0,%y1"; - } -@@ -19513,8 +20340,16 @@ - - else if (TARGET_VSX && src_vsx_p) - { -- if (mode == V16QImode || mode == V8HImode || mode == V4SImode) -+ if (mode_supports_vsx_dform_quad (mode) -+ && quad_address_p (XEXP (dest, 0), mode, true)) -+ return "stxv %x1,%0"; -+ -+ else if (TARGET_P9_VECTOR) -+ return "stxvx %x1,%y0"; -+ -+ else if (mode == V16QImode || mode == V8HImode || mode == V4SImode) - return "stxvw4x %x1,%y0"; -+ - else - return "stxvd2x %x1,%y0"; - } -@@ -19536,10 +20371,8 @@ - if (dest_gpr_p) - return "#"; - -- else if (TARGET_VSX && dest_vsx_p && zero_constant (src, mode)) -- return "xxlxor %x0,%x0,%x0"; -- -- else if (TARGET_ALTIVEC && dest_vmx_p) -+ else if ((dest_vmx_p && TARGET_ALTIVEC) -+ || (dest_vsx_p && TARGET_VSX)) - return output_vec_const_move (operands); - } - -@@ -21747,6 +22580,101 @@ - return 1; - } - -+/* ISA 3.0 (power9) minmax subcase to emit a XSMAXCDP or XSMINCDP instruction -+ for SF/DF scalars. Move TRUE_COND to DEST if OP of the operands of the last -+ comparison is nonzero/true, FALSE_COND if it is zero/false. Return 0 if the -+ hardware has no such operation. */ -+ -+static int -+rs6000_emit_p9_fp_minmax (rtx dest, rtx op, rtx true_cond, rtx false_cond) -+{ -+ enum rtx_code code = GET_CODE (op); -+ rtx op0 = XEXP (op, 0); -+ rtx op1 = XEXP (op, 1); -+ machine_mode compare_mode = GET_MODE (op0); -+ machine_mode result_mode = GET_MODE (dest); -+ bool max_p = false; -+ -+ if (result_mode != compare_mode) -+ return 0; -+ -+ if (code == GE || code == GT) -+ max_p = true; -+ else if (code == LE || code == LT) -+ max_p = false; -+ else -+ return 0; -+ -+ if (rtx_equal_p (op0, true_cond) && rtx_equal_p (op1, false_cond)) -+ ; -+ -+ else if (rtx_equal_p (op1, true_cond) && rtx_equal_p (op0, false_cond)) -+ max_p = !max_p; -+ -+ else -+ return 0; -+ -+ rs6000_emit_minmax (dest, max_p ? SMAX : SMIN, op0, op1); -+ return 1; -+} -+ -+/* ISA 3.0 (power9) conditional move subcase to emit XSCMP{EQ,GE,GT,NE}DP and -+ XXSEL instructions for SF/DF scalars. Move TRUE_COND to DEST if OP of the -+ operands of the last comparison is nonzero/true, FALSE_COND if it is -+ zero/false. Return 0 if the hardware has no such operation. */ -+ -+static int -+rs6000_emit_p9_fp_cmove (rtx dest, rtx op, rtx true_cond, rtx false_cond) -+{ -+ enum rtx_code code = GET_CODE (op); -+ rtx op0 = XEXP (op, 0); -+ rtx op1 = XEXP (op, 1); -+ machine_mode result_mode = GET_MODE (dest); -+ rtx compare_rtx; -+ rtx cmove_rtx; -+ rtx clobber_rtx; -+ -+ if (!can_create_pseudo_p ()) -+ return 0; -+ -+ switch (code) -+ { -+ case EQ: -+ case GE: -+ case GT: -+ break; -+ -+ case NE: -+ case LT: -+ case LE: -+ code = swap_condition (code); -+ std::swap (op0, op1); -+ break; -+ -+ default: -+ return 0; -+ } -+ -+ /* Generate: [(parallel [(set (dest) -+ (if_then_else (op (cmp1) (cmp2)) -+ (true) -+ (false))) -+ (clobber (scratch))])]. */ -+ -+ compare_rtx = gen_rtx_fmt_ee (code, CCFPmode, op0, op1); -+ cmove_rtx = gen_rtx_SET (dest, -+ gen_rtx_IF_THEN_ELSE (result_mode, -+ compare_rtx, -+ true_cond, -+ false_cond)); -+ -+ clobber_rtx = gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (V2DImode)); -+ emit_insn (gen_rtx_PARALLEL (VOIDmode, -+ gen_rtvec (2, cmove_rtx, clobber_rtx))); -+ -+ return 1; -+} -+ - /* Emit a conditional move: move TRUE_COND to DEST if OP of the - operands of the last comparison is nonzero/true, FALSE_COND if it - is zero/false. Return 0 if the hardware has no such operation. */ -@@ -21773,6 +22701,18 @@ - if (GET_MODE (false_cond) != result_mode) - return 0; - -+ /* See if we can use the ISA 3.0 (power9) min/max/compare functions. */ -+ if (TARGET_P9_MINMAX -+ && (compare_mode == SFmode || compare_mode == DFmode) -+ && (result_mode == SFmode || result_mode == DFmode)) -+ { -+ if (rs6000_emit_p9_fp_minmax (dest, op, true_cond, false_cond)) -+ return 1; -+ -+ if (rs6000_emit_p9_fp_cmove (dest, op, true_cond, false_cond)) -+ return 1; -+ } -+ - /* Don't allow using floating point comparisons for integer results for - now. */ - if (FLOAT_MODE_P (compare_mode) && !FLOAT_MODE_P (result_mode)) -@@ -22034,6 +22974,48 @@ - emit_move_insn (dest, target); - } - -+/* Split a signbit operation on 64-bit machines with direct move. Also allow -+ for the value to come from memory or if it is already loaded into a GPR. */ -+ -+void -+rs6000_split_signbit (rtx dest, rtx src) -+{ -+ machine_mode d_mode = GET_MODE (dest); -+ machine_mode s_mode = GET_MODE (src); -+ rtx dest_di = (d_mode == DImode) ? dest : gen_lowpart (DImode, dest); -+ rtx shift_reg = dest_di; -+ -+ gcc_assert (REG_P (dest)); -+ gcc_assert (REG_P (src) || MEM_P (src)); -+ gcc_assert (s_mode == KFmode || s_mode == TFmode); -+ -+ if (MEM_P (src)) -+ { -+ rtx mem = (WORDS_BIG_ENDIAN -+ ? adjust_address (src, DImode, 0) -+ : adjust_address (src, DImode, 8)); -+ emit_insn (gen_rtx_SET (dest_di, mem)); -+ } -+ -+ else -+ { -+ unsigned int r = REGNO (src); -+ -+ /* If this is a VSX register, generate the special mfvsrd instruction -+ to get it in a GPR. Until we support SF and DF modes, that will -+ always be true. */ -+ gcc_assert (VSX_REGNO_P (r)); -+ -+ if (s_mode == KFmode) -+ emit_insn (gen_signbitkf2_dm2 (dest_di, src)); -+ else -+ emit_insn (gen_signbittf2_dm2 (dest_di, src)); -+ } -+ -+ emit_insn (gen_lshrdi3 (dest_di, shift_reg, GEN_INT (63))); -+ return; -+} -+ - /* A subroutine of the atomic operation splitters. Jump to LABEL if - COND is true. Mark the jump as unlikely to be taken. */ - -@@ -25949,25 +26931,37 @@ - if (info->vrsave_mask & ALTIVEC_REG_BIT (i)) - { - rtx areg, savereg, mem; -- int offset; -+ HOST_WIDE_INT offset; - - offset = (info->altivec_save_offset + frame_off - + 16 * (i - info->first_altivec_reg_save)); - - savereg = gen_rtx_REG (V4SImode, i); - -- NOT_INUSE (0); -- areg = gen_rtx_REG (Pmode, 0); -- emit_move_insn (areg, GEN_INT (offset)); -- -- /* AltiVec addressing mode is [reg+reg]. */ -- mem = gen_frame_mem (V4SImode, -- gen_rtx_PLUS (Pmode, frame_reg_rtx, areg)); -- -- /* Rather than emitting a generic move, force use of the stvx -- instruction, which we always want. In particular we don't -- want xxpermdi/stxvd2x for little endian. */ -- insn = emit_insn (gen_altivec_stvx_v4si_internal (mem, savereg)); -+ if (TARGET_P9_DFORM_VECTOR && quad_address_offset_p (offset)) -+ { -+ mem = gen_frame_mem (V4SImode, -+ gen_rtx_PLUS (Pmode, frame_reg_rtx, -+ GEN_INT (offset))); -+ insn = emit_insn (gen_rtx_SET (mem, savereg)); -+ areg = NULL_RTX; -+ } -+ else -+ { -+ NOT_INUSE (0); -+ areg = gen_rtx_REG (Pmode, 0); -+ emit_move_insn (areg, GEN_INT (offset)); -+ -+ /* AltiVec addressing mode is [reg+reg]. */ -+ mem = gen_frame_mem (V4SImode, -+ gen_rtx_PLUS (Pmode, frame_reg_rtx, areg)); -+ -+ /* Rather than emitting a generic move, force use of the stvx -+ instruction, which we always want on ISA 2.07 (power8) systems. -+ In particular we don't want xxpermdi/stxvd2x for little -+ endian. */ -+ insn = emit_insn (gen_altivec_stvx_v4si_internal (mem, savereg)); -+ } - - rs6000_frame_related (insn, frame_reg_rtx, sp_off - frame_off, - areg, GEN_INT (offset)); -@@ -26687,23 +27681,35 @@ - for (i = info->first_altivec_reg_save; i <= LAST_ALTIVEC_REGNO; ++i) - if (info->vrsave_mask & ALTIVEC_REG_BIT (i)) - { -- rtx addr, areg, mem, reg; -+ rtx addr, areg, mem, insn; -+ rtx reg = gen_rtx_REG (V4SImode, i); -+ HOST_WIDE_INT offset -+ = (info->altivec_save_offset + frame_off -+ + 16 * (i - info->first_altivec_reg_save)); - -- areg = gen_rtx_REG (Pmode, 0); -- emit_move_insn -- (areg, GEN_INT (info->altivec_save_offset -- + frame_off -- + 16 * (i - info->first_altivec_reg_save))); -+ if (TARGET_P9_DFORM_VECTOR && quad_address_offset_p (offset)) -+ { -+ mem = gen_frame_mem (V4SImode, -+ gen_rtx_PLUS (Pmode, frame_reg_rtx, -+ GEN_INT (offset))); -+ insn = gen_rtx_SET (reg, mem); -+ } -+ else -+ { -+ areg = gen_rtx_REG (Pmode, 0); -+ emit_move_insn (areg, GEN_INT (offset)); - -- /* AltiVec addressing mode is [reg+reg]. */ -- addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, areg); -- mem = gen_frame_mem (V4SImode, addr); -+ /* AltiVec addressing mode is [reg+reg]. */ -+ addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, areg); -+ mem = gen_frame_mem (V4SImode, addr); -+ -+ /* Rather than emitting a generic move, force use of the -+ lvx instruction, which we always want. In particular we -+ don't want lxvd2x/xxpermdi for little endian. */ -+ insn = gen_altivec_lvx_v4si_internal (reg, mem); -+ } - -- reg = gen_rtx_REG (V4SImode, i); -- /* Rather than emitting a generic move, force use of the -- lvx instruction, which we always want. In particular -- we don't want lxvd2x/xxpermdi for little endian. */ -- (void) emit_insn (gen_altivec_lvx_v4si_internal (reg, mem)); -+ (void) emit_insn (insn); - } - } - -@@ -26890,23 +27896,35 @@ - for (i = info->first_altivec_reg_save; i <= LAST_ALTIVEC_REGNO; ++i) - if (info->vrsave_mask & ALTIVEC_REG_BIT (i)) - { -- rtx addr, areg, mem, reg; -+ rtx addr, areg, mem, insn; -+ rtx reg = gen_rtx_REG (V4SImode, i); -+ HOST_WIDE_INT offset -+ = (info->altivec_save_offset + frame_off -+ + 16 * (i - info->first_altivec_reg_save)); - -- areg = gen_rtx_REG (Pmode, 0); -- emit_move_insn -- (areg, GEN_INT (info->altivec_save_offset -- + frame_off -- + 16 * (i - info->first_altivec_reg_save))); -+ if (TARGET_P9_DFORM_VECTOR && quad_address_offset_p (offset)) -+ { -+ mem = gen_frame_mem (V4SImode, -+ gen_rtx_PLUS (Pmode, frame_reg_rtx, -+ GEN_INT (offset))); -+ insn = gen_rtx_SET (reg, mem); -+ } -+ else -+ { -+ areg = gen_rtx_REG (Pmode, 0); -+ emit_move_insn (areg, GEN_INT (offset)); - -- /* AltiVec addressing mode is [reg+reg]. */ -- addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, areg); -- mem = gen_frame_mem (V4SImode, addr); -+ /* AltiVec addressing mode is [reg+reg]. */ -+ addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, areg); -+ mem = gen_frame_mem (V4SImode, addr); -+ -+ /* Rather than emitting a generic move, force use of the -+ lvx instruction, which we always want. In particular we -+ don't want lxvd2x/xxpermdi for little endian. */ -+ insn = gen_altivec_lvx_v4si_internal (reg, mem); -+ } - -- reg = gen_rtx_REG (V4SImode, i); -- /* Rather than emitting a generic move, force use of the -- lvx instruction, which we always want. In particular -- we don't want lxvd2x/xxpermdi for little endian. */ -- (void) emit_insn (gen_altivec_lvx_v4si_internal (reg, mem)); -+ (void) emit_insn (insn); - } - } - -@@ -27724,6 +28742,11 @@ - const0_rtx, const0_rtx)); - call_fusage = NULL_RTX; - use_reg (&call_fusage, r12); -+ /* Say the call uses r0, even though it doesn't, to stop regrename -+ from twiddling with the insns saving lr, trashing args for cfun. -+ The insns restoring lr are similarly protected by making -+ split_stack_return use r0. */ -+ use_reg (&call_fusage, r0); - add_function_usage_to (insn, call_fusage); - emit_insn (gen_frame_load (r0, r1, info->lr_save_offset)); - insn = emit_move_insn (lr, r0); -@@ -28763,13 +29786,20 @@ - - /* The following variable value is the last issued insn. */ - --static rtx last_scheduled_insn; -+static rtx_insn *last_scheduled_insn; - - /* The following variable helps to balance issuing of load and - store instructions */ - - static int load_store_pendulum; - -+/* The following variable helps pair divide insns during scheduling. */ -+static int divide_cnt; -+/* The following variable helps pair and alternate vector and vector load -+ insns during scheduling. */ -+static int vec_load_pendulum; -+ -+ - /* Power4 load update and store update instructions are cracked into a - load or store and an integer insn which are executed in the same cycle. - Branches have their own dispatch slot which does not count against the -@@ -28844,7 +29874,7 @@ - some cycles later. */ - - /* Separate a load from a narrower, dependent store. */ -- if (rs6000_sched_groups -+ if ((rs6000_sched_groups || rs6000_cpu_attr == CPU_POWER9) - && GET_CODE (PATTERN (insn)) == SET - && GET_CODE (PATTERN (dep_insn)) == SET - && GET_CODE (XEXP (PATTERN (insn), 1)) == MEM -@@ -29070,7 +30100,9 @@ - switch (attr_type) - { - case TYPE_FP: -- if (get_attr_type (dep_insn) == TYPE_FP) -+ case TYPE_FPSIMPLE: -+ if (get_attr_type (dep_insn) == TYPE_FP -+ || get_attr_type (dep_insn) == TYPE_FPSIMPLE) - return 1; - break; - case TYPE_FPLOAD: -@@ -29082,6 +30114,8 @@ - break; - } - } -+ /* Fall through, no cost for output dependency. */ -+ - case REG_DEP_ANTI: - /* Anti dependency; DEP_INSN reads a register that INSN writes some - cycles later. */ -@@ -29454,8 +30488,9 @@ - case CPU_POWER7: - return 5; - case CPU_POWER8: -- case CPU_POWER9: - return 7; -+ case CPU_POWER9: -+ return 6; - default: - return 1; - } -@@ -29613,6 +30648,28 @@ - return is_store_insn1 (PATTERN (insn), str_mem); - } - -+/* Return whether TYPE is a Power9 pairable vector instruction type. */ -+ -+static bool -+is_power9_pairable_vec_type (enum attr_type type) -+{ -+ switch (type) -+ { -+ case TYPE_VECSIMPLE: -+ case TYPE_VECCOMPLEX: -+ case TYPE_VECDIV: -+ case TYPE_VECCMP: -+ case TYPE_VECPERM: -+ case TYPE_VECFLOAT: -+ case TYPE_VECFDIV: -+ case TYPE_VECDOUBLE: -+ return true; -+ default: -+ break; -+ } -+ return false; -+} -+ - /* Returns whether the dependence between INSN and NEXT is considered - costly by the given target. */ - -@@ -29689,6 +30746,229 @@ - return insn; - } - -+/* Do Power9 specific sched_reorder2 reordering of ready list. */ -+ -+static int -+power9_sched_reorder2 (rtx_insn **ready, int lastpos) -+{ -+ int pos; -+ int i; -+ rtx_insn *tmp; -+ enum attr_type type; -+ -+ type = get_attr_type (last_scheduled_insn); -+ -+ /* Try to issue fixed point divides back-to-back in pairs so they will be -+ routed to separate execution units and execute in parallel. */ -+ if (type == TYPE_DIV && divide_cnt == 0) -+ { -+ /* First divide has been scheduled. */ -+ divide_cnt = 1; -+ -+ /* Scan the ready list looking for another divide, if found move it -+ to the end of the list so it is chosen next. */ -+ pos = lastpos; -+ while (pos >= 0) -+ { -+ if (recog_memoized (ready[pos]) >= 0 -+ && get_attr_type (ready[pos]) == TYPE_DIV) -+ { -+ tmp = ready[pos]; -+ for (i = pos; i < lastpos; i++) -+ ready[i] = ready[i + 1]; -+ ready[lastpos] = tmp; -+ break; -+ } -+ pos--; -+ } -+ } -+ else -+ { -+ /* Last insn was the 2nd divide or not a divide, reset the counter. */ -+ divide_cnt = 0; -+ -+ /* Power9 can execute 2 vector operations and 2 vector loads in a single -+ cycle. So try to pair up and alternate groups of vector and vector -+ load instructions. -+ -+ To aid this formation, a counter is maintained to keep track of -+ vec/vecload insns issued. The value of vec_load_pendulum maintains -+ the current state with the following values: -+ -+ 0 : Initial state, no vec/vecload group has been started. -+ -+ -1 : 1 vector load has been issued and another has been found on -+ the ready list and moved to the end. -+ -+ -2 : 2 vector loads have been issued and a vector operation has -+ been found and moved to the end of the ready list. -+ -+ -3 : 2 vector loads and a vector insn have been issued and a -+ vector operation has been found and moved to the end of the -+ ready list. -+ -+ 1 : 1 vector insn has been issued and another has been found and -+ moved to the end of the ready list. -+ -+ 2 : 2 vector insns have been issued and a vector load has been -+ found and moved to the end of the ready list. -+ -+ 3 : 2 vector insns and a vector load have been issued and another -+ vector load has been found and moved to the end of the ready -+ list. */ -+ if (type == TYPE_VECLOAD) -+ { -+ /* Issued a vecload. */ -+ if (vec_load_pendulum == 0) -+ { -+ /* We issued a single vecload, look for another and move it to -+ the end of the ready list so it will be scheduled next. -+ Set pendulum if found. */ -+ pos = lastpos; -+ while (pos >= 0) -+ { -+ if (recog_memoized (ready[pos]) >= 0 -+ && get_attr_type (ready[pos]) == TYPE_VECLOAD) -+ { -+ tmp = ready[pos]; -+ for (i = pos; i < lastpos; i++) -+ ready[i] = ready[i + 1]; -+ ready[lastpos] = tmp; -+ vec_load_pendulum = -1; -+ return cached_can_issue_more; -+ } -+ pos--; -+ } -+ } -+ else if (vec_load_pendulum == -1) -+ { -+ /* This is the second vecload we've issued, search the ready -+ list for a vector operation so we can try to schedule a -+ pair of those next. If found move to the end of the ready -+ list so it is scheduled next and set the pendulum. */ -+ pos = lastpos; -+ while (pos >= 0) -+ { -+ if (recog_memoized (ready[pos]) >= 0 -+ && is_power9_pairable_vec_type ( -+ get_attr_type (ready[pos]))) -+ { -+ tmp = ready[pos]; -+ for (i = pos; i < lastpos; i++) -+ ready[i] = ready[i + 1]; -+ ready[lastpos] = tmp; -+ vec_load_pendulum = -2; -+ return cached_can_issue_more; -+ } -+ pos--; -+ } -+ } -+ else if (vec_load_pendulum == 2) -+ { -+ /* Two vector ops have been issued and we've just issued a -+ vecload, look for another vecload and move to end of ready -+ list if found. */ -+ pos = lastpos; -+ while (pos >= 0) -+ { -+ if (recog_memoized (ready[pos]) >= 0 -+ && get_attr_type (ready[pos]) == TYPE_VECLOAD) -+ { -+ tmp = ready[pos]; -+ for (i = pos; i < lastpos; i++) -+ ready[i] = ready[i + 1]; -+ ready[lastpos] = tmp; -+ /* Set pendulum so that next vecload will be seen as -+ finishing a group, not start of one. */ -+ vec_load_pendulum = 3; -+ return cached_can_issue_more; -+ } -+ pos--; -+ } -+ } -+ } -+ else if (is_power9_pairable_vec_type (type)) -+ { -+ /* Issued a vector operation. */ -+ if (vec_load_pendulum == 0) -+ /* We issued a single vec op, look for another and move it -+ to the end of the ready list so it will be scheduled next. -+ Set pendulum if found. */ -+ { -+ pos = lastpos; -+ while (pos >= 0) -+ { -+ if (recog_memoized (ready[pos]) >= 0 -+ && is_power9_pairable_vec_type ( -+ get_attr_type (ready[pos]))) -+ { -+ tmp = ready[pos]; -+ for (i = pos; i < lastpos; i++) -+ ready[i] = ready[i + 1]; -+ ready[lastpos] = tmp; -+ vec_load_pendulum = 1; -+ return cached_can_issue_more; -+ } -+ pos--; -+ } -+ } -+ else if (vec_load_pendulum == 1) -+ { -+ /* This is the second vec op we've issued, search the ready -+ list for a vecload operation so we can try to schedule a -+ pair of those next. If found move to the end of the ready -+ list so it is scheduled next and set the pendulum. */ -+ pos = lastpos; -+ while (pos >= 0) -+ { -+ if (recog_memoized (ready[pos]) >= 0 -+ && get_attr_type (ready[pos]) == TYPE_VECLOAD) -+ { -+ tmp = ready[pos]; -+ for (i = pos; i < lastpos; i++) -+ ready[i] = ready[i + 1]; -+ ready[lastpos] = tmp; -+ vec_load_pendulum = 2; -+ return cached_can_issue_more; -+ } -+ pos--; -+ } -+ } -+ else if (vec_load_pendulum == -2) -+ { -+ /* Two vecload ops have been issued and we've just issued a -+ vec op, look for another vec op and move to end of ready -+ list if found. */ -+ pos = lastpos; -+ while (pos >= 0) -+ { -+ if (recog_memoized (ready[pos]) >= 0 -+ && is_power9_pairable_vec_type ( -+ get_attr_type (ready[pos]))) -+ { -+ tmp = ready[pos]; -+ for (i = pos; i < lastpos; i++) -+ ready[i] = ready[i + 1]; -+ ready[lastpos] = tmp; -+ /* Set pendulum so that next vec op will be seen as -+ finishing a group, not start of one. */ -+ vec_load_pendulum = -3; -+ return cached_can_issue_more; -+ } -+ pos--; -+ } -+ } -+ } -+ -+ /* We've either finished a vec/vecload group, couldn't find an insn to -+ continue the current group, or the last insn had nothing to do with -+ with a group. In any case, reset the pendulum. */ -+ vec_load_pendulum = 0; -+ } -+ -+ return cached_can_issue_more; -+} -+ - /* We are about to begin issuing insns for this clock cycle. */ - - static int -@@ -29920,6 +31200,11 @@ - } - } - -+ /* Do Power9 dependent reordering if necessary. */ -+ if (rs6000_cpu == PROCESSOR_POWER9 && last_scheduled_insn -+ && recog_memoized (last_scheduled_insn) >= 0) -+ return power9_sched_reorder2 (ready, *pn_ready - 1); -+ - return cached_can_issue_more; - } - -@@ -30088,7 +31373,6 @@ - } - break; - case PROCESSOR_POWER8: -- case PROCESSOR_POWER9: - type = get_attr_type (insn); - - switch (type) -@@ -30219,7 +31503,6 @@ - } - break; - case PROCESSOR_POWER8: -- case PROCESSOR_POWER9: - type = get_attr_type (insn); - - switch (type) -@@ -30338,7 +31621,7 @@ - - /* Do we have a special group ending nop? */ - if (rs6000_cpu_attr == CPU_POWER6 || rs6000_cpu_attr == CPU_POWER7 -- || rs6000_cpu_attr == CPU_POWER8 || rs6000_cpu_attr == CPU_POWER9) -+ || rs6000_cpu_attr == CPU_POWER8) - { - nop = gen_group_ending_nop (); - emit_insn_before (nop, next_insn); -@@ -30592,8 +31875,10 @@ - int sched_verbose ATTRIBUTE_UNUSED, - int max_ready ATTRIBUTE_UNUSED) - { -- last_scheduled_insn = NULL_RTX; -+ last_scheduled_insn = NULL; - load_store_pendulum = 0; -+ divide_cnt = 0; -+ vec_load_pendulum = 0; - } - - /* The following function is called at the end of scheduling BB. -@@ -30634,14 +31919,16 @@ - } - } - --struct _rs6000_sched_context -+struct rs6000_sched_context - { - short cached_can_issue_more; -- rtx last_scheduled_insn; -+ rtx_insn *last_scheduled_insn; - int load_store_pendulum; -+ int divide_cnt; -+ int vec_load_pendulum; - }; - --typedef struct _rs6000_sched_context rs6000_sched_context_def; -+typedef struct rs6000_sched_context rs6000_sched_context_def; - typedef rs6000_sched_context_def *rs6000_sched_context_t; - - /* Allocate store for new scheduling context. */ -@@ -30661,14 +31948,18 @@ - if (clean_p) - { - sc->cached_can_issue_more = 0; -- sc->last_scheduled_insn = NULL_RTX; -+ sc->last_scheduled_insn = NULL; - sc->load_store_pendulum = 0; -+ sc->divide_cnt = 0; -+ sc->vec_load_pendulum = 0; - } - else - { - sc->cached_can_issue_more = cached_can_issue_more; - sc->last_scheduled_insn = last_scheduled_insn; - sc->load_store_pendulum = load_store_pendulum; -+ sc->divide_cnt = divide_cnt; -+ sc->vec_load_pendulum = vec_load_pendulum; - } - } - -@@ -30683,6 +31974,8 @@ - cached_can_issue_more = sc->cached_can_issue_more; - last_scheduled_insn = sc->last_scheduled_insn; - load_store_pendulum = sc->load_store_pendulum; -+ divide_cnt = sc->divide_cnt; -+ vec_load_pendulum = sc->vec_load_pendulum; - } - - /* Free _SC. */ -@@ -33448,17 +34741,25 @@ - if (!REG_P (target)) - tmp = gen_reg_rtx (mode); - -- /* Invert the selector with a VNAND if available, else a VNOR. -- The VNAND is preferred for future fusion opportunities. */ -- notx = gen_rtx_NOT (V16QImode, sel); -- iorx = (TARGET_P8_VECTOR -- ? gen_rtx_IOR (V16QImode, notx, notx) -- : gen_rtx_AND (V16QImode, notx, notx)); -- emit_insn (gen_rtx_SET (norreg, iorx)); -+ if (TARGET_P9_VECTOR) -+ { -+ unspec = gen_rtx_UNSPEC (mode, gen_rtvec (3, op0, op1, sel), -+ UNSPEC_VPERMR); -+ } -+ else -+ { -+ /* Invert the selector with a VNAND if available, else a VNOR. -+ The VNAND is preferred for future fusion opportunities. */ -+ notx = gen_rtx_NOT (V16QImode, sel); -+ iorx = (TARGET_P8_VECTOR -+ ? gen_rtx_IOR (V16QImode, notx, notx) -+ : gen_rtx_AND (V16QImode, notx, notx)); -+ emit_insn (gen_rtx_SET (norreg, iorx)); - -- /* Permute with operands reversed and adjusted selector. */ -- unspec = gen_rtx_UNSPEC (mode, gen_rtvec (3, op1, op0, norreg), -- UNSPEC_VPERM); -+ /* Permute with operands reversed and adjusted selector. */ -+ unspec = gen_rtx_UNSPEC (mode, gen_rtvec (3, op1, op0, norreg), -+ UNSPEC_VPERM); -+ } - - /* Copy into target, possibly by way of a register. */ - if (!REG_P (target)) -@@ -33869,8 +35170,14 @@ - machine_mode inner = GET_MODE_INNER (mode); - unsigned int inner_bytes = GET_MODE_UNIT_SIZE (mode); - -- if (FLOAT_MODE_P (mode) && TARGET_HARD_FLOAT && TARGET_FPRS) -+ if (TARGET_FLOAT128 -+ && (mode == KCmode -+ || (mode == TCmode && TARGET_IEEEQUAD))) -+ regno = ALTIVEC_ARG_RETURN; -+ -+ else if (FLOAT_MODE_P (mode) && TARGET_HARD_FLOAT && TARGET_FPRS) - regno = FP_ARG_RETURN; -+ - else - { - regno = GP_ARG_RETURN; -@@ -33992,7 +35299,8 @@ - if (DECIMAL_FLOAT_MODE_P (mode) && TARGET_HARD_FLOAT && TARGET_FPRS) - /* _Decimal128 must use an even/odd register pair. */ - regno = (mode == TDmode) ? FP_ARG_RETURN + 1 : FP_ARG_RETURN; -- else if (SCALAR_FLOAT_MODE_NOT_VECTOR_P (mode) && TARGET_HARD_FLOAT && TARGET_FPRS -+ else if (SCALAR_FLOAT_TYPE_P (valtype) && TARGET_HARD_FLOAT && TARGET_FPRS -+ && !FLOAT128_VECTOR_P (mode) - && ((TARGET_SINGLE_FLOAT && (mode == SFmode)) || TARGET_DOUBLE_FLOAT)) - regno = FP_ARG_RETURN; - else if (TREE_CODE (valtype) == COMPLEX_TYPE -@@ -34056,7 +35364,7 @@ - static bool - rs6000_lra_p (void) - { -- return rs6000_lra_flag; -+ return TARGET_LRA; - } - - /* Given FROM and TO register numbers, say whether this elimination is allowed. -@@ -34417,9 +35725,11 @@ - { "power8-fusion", OPTION_MASK_P8_FUSION, false, true }, - { "power8-fusion-sign", OPTION_MASK_P8_FUSION_SIGN, false, true }, - { "power8-vector", OPTION_MASK_P8_VECTOR, false, true }, -- { "power9-dform", OPTION_MASK_P9_DFORM, false, true }, -+ { "power9-dform-scalar", OPTION_MASK_P9_DFORM_SCALAR, false, true }, -+ { "power9-dform-vector", OPTION_MASK_P9_DFORM_VECTOR, false, true }, - { "power9-fusion", OPTION_MASK_P9_FUSION, false, true }, - { "power9-minmax", OPTION_MASK_P9_MINMAX, false, true }, -+ { "power9-misc", OPTION_MASK_P9_MISC, false, true }, - { "power9-vector", OPTION_MASK_P9_VECTOR, false, true }, - { "powerpc-gfxopt", OPTION_MASK_PPC_GFXOPT, false, true }, - { "powerpc-gpopt", OPTION_MASK_PPC_GPOPT, false, true }, -@@ -34474,11 +35784,14 @@ - { "popcntd", RS6000_BTM_POPCNTD, false, false }, - { "cell", RS6000_BTM_CELL, false, false }, - { "power8-vector", RS6000_BTM_P8_VECTOR, false, false }, -+ { "power9-vector", RS6000_BTM_P9_VECTOR, false, false }, -+ { "power9-misc", RS6000_BTM_P9_MISC, false, false }, - { "crypto", RS6000_BTM_CRYPTO, false, false }, - { "htm", RS6000_BTM_HTM, false, false }, - { "hard-dfp", RS6000_BTM_DFP, false, false }, - { "hard-float", RS6000_BTM_HARD_FLOAT, false, false }, - { "long-double-128", RS6000_BTM_LDBL128, false, false }, -+ { "float128", RS6000_BTM_FLOAT128, false, false }, - }; - - /* Option variables that we want to support inside attribute((target)) and -@@ -35049,7 +36362,9 @@ - size_t i; - size_t start_column = 0; - size_t cur_column; -- size_t max_column = 76; -+ size_t max_column = 120; -+ size_t prefix_len = strlen (prefix); -+ size_t comma_len = 0; - const char *comma = ""; - - if (indent) -@@ -35067,27 +36382,45 @@ - cur_column = start_column; - for (i = 0; i < num_elements; i++) - { -- if ((flags & opts[i].mask) != 0) -+ bool invert = opts[i].invert; -+ const char *name = opts[i].name; -+ const char *no_str = ""; -+ HOST_WIDE_INT mask = opts[i].mask; -+ size_t len = comma_len + prefix_len + strlen (name); -+ -+ if (!invert) - { -- const char *no_str = rs6000_opt_masks[i].invert ? "no-" : ""; -- size_t len = (strlen (comma) -- + strlen (prefix) -- + strlen (no_str) -- + strlen (rs6000_opt_masks[i].name)); -+ if ((flags & mask) == 0) -+ { -+ no_str = "no-"; -+ len += sizeof ("no-") - 1; -+ } -+ -+ flags &= ~mask; -+ } - -- cur_column += len; -- if (cur_column > max_column) -+ else -+ { -+ if ((flags & mask) != 0) - { -- fprintf (stderr, ", \\\n%*s", (int)start_column, ""); -- cur_column = start_column + len; -- comma = ""; -+ no_str = "no-"; -+ len += sizeof ("no-") - 1; - } - -- fprintf (file, "%s%s%s%s", comma, prefix, no_str, -- rs6000_opt_masks[i].name); -- flags &= ~ opts[i].mask; -- comma = ", "; -+ flags |= mask; -+ } -+ -+ cur_column += len; -+ if (cur_column > max_column) -+ { -+ fprintf (stderr, ", \\\n%*s", (int)start_column, ""); -+ cur_column = start_column + len; -+ comma = ""; - } -+ -+ fprintf (file, "%s%s%s%s", comma, prefix, no_str, name); -+ comma = ", "; -+ comma_len = sizeof (", ") - 1; - } - - fputs ("\n", file); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/rs6000.h gcc-6-20160721/gcc/config/rs6000/rs6000.h ---- gcc-6.1.0/gcc/config/rs6000/rs6000.h 2016-01-20 20:30:24.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/rs6000.h 2016-07-07 19:42:07.000000000 +0000 -@@ -302,6 +302,28 @@ - #define TARGET_P8_VECTOR 0 - #endif - -+/* Define the ISA 3.0 flags as 0 if the target assembler does not support -+ Power9 instructions. Allow -mpower9-fusion, since it does not add new -+ instructions. Allow -misel, since it predates ISA 3.0 and does -+ not require any Power9 features. */ -+ -+#ifndef HAVE_AS_POWER9 -+#undef TARGET_FLOAT128_HW -+#undef TARGET_MODULO -+#undef TARGET_P9_VECTOR -+#undef TARGET_P9_MINMAX -+#undef TARGET_P9_DFORM_SCALAR -+#undef TARGET_P9_DFORM_VECTOR -+#undef TARGET_P9_MISC -+#define TARGET_FLOAT128_HW 0 -+#define TARGET_MODULO 0 -+#define TARGET_P9_VECTOR 0 -+#define TARGET_P9_MINMAX 0 -+#define TARGET_P9_DFORM_SCALAR 0 -+#define TARGET_P9_DFORM_VECTOR 0 -+#define TARGET_P9_MISC 0 -+#endif -+ - /* Define TARGET_LWSYNC_INSTRUCTION if the assembler knows about lwsync. If - not, generate the lwsync code as an integer constant. */ - #ifdef HAVE_AS_LWSYNC -@@ -418,12 +440,12 @@ - Similarly IFmode is the IBM long double format even if the default is IEEE - 128-bit. */ - #define FLOAT128_IEEE_P(MODE) \ -- (((MODE) == TFmode && TARGET_IEEEQUAD) \ -- || ((MODE) == KFmode)) -+ ((TARGET_IEEEQUAD && ((MODE) == TFmode || (MODE) == TCmode)) \ -+ || ((MODE) == KFmode) || ((MODE) == KCmode)) - - #define FLOAT128_IBM_P(MODE) \ -- (((MODE) == TFmode && !TARGET_IEEEQUAD) \ -- || ((MODE) == IFmode)) -+ ((!TARGET_IEEEQUAD && ((MODE) == TFmode || (MODE) == TCmode)) \ -+ || ((MODE) == IFmode) || ((MODE) == ICmode)) - - /* Helper macros to say whether a 128-bit floating point type can go in a - single vector register, or whether it needs paired scalar values. */ -@@ -594,6 +616,15 @@ - in the register. */ - #define TARGET_NO_SDMODE_STACK (TARGET_LFIWZX && TARGET_STFIWX && TARGET_DFP) - -+/* ISA 3.0 has new min/max functions that don't need fast math that are being -+ phased in. Min/max using FSEL or XSMAXDP/XSMINDP do not return the correct -+ answers if the arguments are not in the normal range. */ -+#define TARGET_MINMAX_SF (TARGET_SF_FPR && TARGET_PPC_GFXOPT \ -+ && (TARGET_P9_MINMAX || !flag_trapping_math)) -+ -+#define TARGET_MINMAX_DF (TARGET_DF_FPR && TARGET_PPC_GFXOPT \ -+ && (TARGET_P9_MINMAX || !flag_trapping_math)) -+ - /* In switching from using target_flags to using rs6000_isa_flags, the options - machinery creates OPTION_MASK_<xxx> instead of MASK_<xxx>. For now map - OPTION_MASK_<xxx> back into MASK_<xxx>. */ -@@ -615,6 +646,8 @@ - #define MASK_MULTIPLE OPTION_MASK_MULTIPLE - #define MASK_NO_UPDATE OPTION_MASK_NO_UPDATE - #define MASK_P8_VECTOR OPTION_MASK_P8_VECTOR -+#define MASK_P9_VECTOR OPTION_MASK_P9_VECTOR -+#define MASK_P9_MISC OPTION_MASK_P9_MISC - #define MASK_POPCNTB OPTION_MASK_POPCNTB - #define MASK_POPCNTD OPTION_MASK_POPCNTD - #define MASK_PPC_GFXOPT OPTION_MASK_PPC_GFXOPT -@@ -655,6 +688,11 @@ - #define MASK_PROTOTYPE OPTION_MASK_PROTOTYPE - #endif - -+#ifdef TARGET_MODULO -+#define RS6000_BTM_MODULO OPTION_MASK_MODULO -+#endif -+ -+ - /* For power systems, we want to enable Altivec and VSX builtins even if the - user did not use -maltivec or -mvsx to allow the builtins to be used inside - of #pragma GCC target or the target attribute to change the code level for a -@@ -1774,7 +1812,9 @@ - #define ALTIVEC_ARG_RETURN (FIRST_ALTIVEC_REGNO + 2) - #define FP_ARG_MAX_RETURN (DEFAULT_ABI != ABI_ELFv2 ? FP_ARG_RETURN \ - : (FP_ARG_RETURN + AGGR_ARG_NUM_REG - 1)) --#define ALTIVEC_ARG_MAX_RETURN (DEFAULT_ABI != ABI_ELFv2 ? ALTIVEC_ARG_RETURN \ -+#define ALTIVEC_ARG_MAX_RETURN (DEFAULT_ABI != ABI_ELFv2 \ -+ ? (ALTIVEC_ARG_RETURN \ -+ + (TARGET_FLOAT128 ? 1 : 0)) \ - : (ALTIVEC_ARG_RETURN + AGGR_ARG_NUM_REG - 1)) - - /* Flags for the call/call_value rtl operations set up by function_arg */ -@@ -2638,7 +2678,9 @@ - - #define RS6000_BTC_MISC 0x00000000 /* No special attributes. */ - #define RS6000_BTC_CONST 0x00000100 /* uses no global state. */ --#define RS6000_BTC_PURE 0x00000200 /* reads global state/mem. */ -+#define RS6000_BTC_PURE 0x00000200 /* reads global -+ state/mem and does -+ not modify global state. */ - #define RS6000_BTC_FP 0x00000400 /* depends on rounding mode. */ - #define RS6000_BTC_ATTR_MASK 0x00000700 /* Mask of the attributes. */ - -@@ -2660,6 +2702,8 @@ - #define RS6000_BTM_ALTIVEC MASK_ALTIVEC /* VMX/altivec vectors. */ - #define RS6000_BTM_VSX MASK_VSX /* VSX (vector/scalar). */ - #define RS6000_BTM_P8_VECTOR MASK_P8_VECTOR /* ISA 2.07 vector. */ -+#define RS6000_BTM_P9_VECTOR MASK_P9_VECTOR /* ISA 3.00 vector. */ -+#define RS6000_BTM_P9_MISC MASK_P9_MISC /* ISA 3.0 misc. non-vector. */ - #define RS6000_BTM_CRYPTO MASK_CRYPTO /* crypto funcs. */ - #define RS6000_BTM_HTM MASK_HTM /* hardware TM funcs. */ - #define RS6000_BTM_SPE MASK_STRING /* E500 */ -@@ -2673,10 +2717,15 @@ - #define RS6000_BTM_DFP MASK_DFP /* Decimal floating point. */ - #define RS6000_BTM_HARD_FLOAT MASK_SOFT_FLOAT /* Hardware floating point. */ - #define RS6000_BTM_LDBL128 MASK_MULTIPLE /* 128-bit long double. */ -+#define RS6000_BTM_64BIT MASK_64BIT /* 64-bit addressing. */ -+#define RS6000_BTM_FLOAT128 MASK_P9_VECTOR /* IEEE 128-bit float. */ - - #define RS6000_BTM_COMMON (RS6000_BTM_ALTIVEC \ - | RS6000_BTM_VSX \ - | RS6000_BTM_P8_VECTOR \ -+ | RS6000_BTM_P9_VECTOR \ -+ | RS6000_BTM_P9_MISC \ -+ | RS6000_BTM_MODULO \ - | RS6000_BTM_CRYPTO \ - | RS6000_BTM_FRE \ - | RS6000_BTM_FRES \ -@@ -2687,10 +2736,12 @@ - | RS6000_BTM_CELL \ - | RS6000_BTM_DFP \ - | RS6000_BTM_HARD_FLOAT \ -- | RS6000_BTM_LDBL128) -+ | RS6000_BTM_LDBL128 \ -+ | RS6000_BTM_FLOAT128) - - /* Define builtin enum index. */ - -+#undef RS6000_BUILTIN_0 - #undef RS6000_BUILTIN_1 - #undef RS6000_BUILTIN_2 - #undef RS6000_BUILTIN_3 -@@ -2703,6 +2754,7 @@ - #undef RS6000_BUILTIN_S - #undef RS6000_BUILTIN_X - -+#define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE) ENUM, - #define RS6000_BUILTIN_1(ENUM, NAME, MASK, ATTR, ICODE) ENUM, - #define RS6000_BUILTIN_2(ENUM, NAME, MASK, ATTR, ICODE) ENUM, - #define RS6000_BUILTIN_3(ENUM, NAME, MASK, ATTR, ICODE) ENUM, -@@ -2722,6 +2774,7 @@ - RS6000_BUILTIN_COUNT - }; - -+#undef RS6000_BUILTIN_0 - #undef RS6000_BUILTIN_1 - #undef RS6000_BUILTIN_2 - #undef RS6000_BUILTIN_3 -@@ -2788,6 +2841,7 @@ - RS6000_BTI_void, /* void_type_node */ - RS6000_BTI_ieee128_float, /* ieee 128-bit floating point */ - RS6000_BTI_ibm128_float, /* IBM 128-bit floating point */ -+ RS6000_BTI_const_str, /* pointer to const char * */ - RS6000_BTI_MAX - }; - -@@ -2844,6 +2898,7 @@ - #define void_type_internal_node (rs6000_builtin_types[RS6000_BTI_void]) - #define ieee128_float_type_node (rs6000_builtin_types[RS6000_BTI_ieee128_float]) - #define ibm128_float_type_node (rs6000_builtin_types[RS6000_BTI_ibm128_float]) -+#define const_str_type_node (rs6000_builtin_types[RS6000_BTI_const_str]) - - extern GTY(()) tree rs6000_builtin_types[RS6000_BTI_MAX]; - extern GTY(()) tree rs6000_builtin_decls[RS6000_BUILTIN_COUNT]; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/rs6000.md gcc-6-20160721/gcc/config/rs6000/rs6000.md ---- gcc-6.1.0/gcc/config/rs6000/rs6000.md 2016-04-12 19:25:56.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/rs6000.md 2016-07-15 04:47:30.000000000 +0000 -@@ -147,6 +147,8 @@ - UNSPEC_ROUND_TO_ODD - UNSPEC_IEEE128_MOVE - UNSPEC_IEEE128_CONVERT -+ UNSPEC_SIGNBIT -+ UNSPEC_DOLOOP - ]) - - ;; -@@ -183,12 +185,13 @@ - brinc, - vecsimple,veccomplex,vecdiv,veccmp,veccmpsimple,vecperm, - vecfloat,vecfdiv,vecdouble,mffgpr,mftgpr,crypto, -- htm" -+ veclogical,veccmpfx,vecexts,vecmove, -+ htm,htmsimple,dfp" - (const_string "integer")) - - ;; What data size does this instruction work on? --;; This is used for insert, mul. --(define_attr "size" "8,16,32,64" (const_string "32")) -+;; This is used for insert, mul and others as necessary. -+(define_attr "size" "8,16,32,64,128" (const_string "32")) - - ;; Is this instruction record form ("dot", signed compare to 0, writing CR0)? - ;; This is used for add, logical, shift, exts, mul. -@@ -298,6 +301,7 @@ - (include "power6.md") - (include "power7.md") - (include "power8.md") -+(include "power9.md") - (include "cell.md") - (include "xfpu.md") - (include "a2.md") -@@ -489,6 +493,10 @@ - ; Iterator for just SF/DF - (define_mode_iterator SFDF [SF DF]) - -+; Like SFDF, but a different name to match conditional move where the -+; comparison operands may be a different mode than the input operands. -+(define_mode_iterator SFDF2 [SF DF]) -+ - ; Iterator for 128-bit floating point that uses the IBM double-double format - (define_mode_iterator IBM128 [(IF "FLOAT128_IBM_P (IFmode)") - (TF "FLOAT128_IBM_P (TFmode)")]) -@@ -502,6 +510,13 @@ - (IF "TARGET_FLOAT128") - (TF "TARGET_LONG_DOUBLE_128")]) - -+; Iterator for signbit on 64-bit machines with direct move -+(define_mode_iterator SIGNBIT [(KF "FLOAT128_VECTOR_P (KFmode)") -+ (TF "FLOAT128_VECTOR_P (TFmode)")]) -+ -+(define_mode_attr Fsignbit [(KF "wa") -+ (TF "wa")]) -+ - ; SF/DF suffix for traditional floating instructions - (define_mode_attr Ftrad [(SF "s") (DF "")]) - -@@ -577,7 +592,9 @@ - (V16QI "b") - (V8HI "h") - (V4SI "w") -- (V2DI "d")]) -+ (V2DI "d") -+ (V1TI "q") -+ (TI "q")]) - - ;; How many bits in this mode? - (define_mode_attr bits [(QI "8") (HI "16") (SI "32") (DI "64")]) -@@ -698,6 +715,15 @@ - (define_mode_iterator RELOAD [V16QI V8HI V4SI V2DI V4SF V2DF V1TI - SF SD SI DF DD DI TI PTI KF IF TF]) - -+;; Iterate over smin, smax -+(define_code_iterator fp_minmax [smin smax]) -+ -+(define_code_attr minmax [(smin "min") -+ (smax "max")]) -+ -+(define_code_attr SMINMAX [(smin "SMIN") -+ (smax "SMAX")]) -+ - - ;; Start with fixed-point load and store insns. Here we put only the more - ;; complex forms. Basic data transfer is done later. -@@ -4044,7 +4070,7 @@ - - if (REGNO (cr) == CR0_REGNO) - { -- emit_insn (gen_ashdi3_extswsli_dot (dest, src2, shift, cr)); -+ emit_insn (gen_ashdi3_extswsli_dot2 (dest, src2, shift, cr)); - DONE; - } - -@@ -4305,7 +4331,7 @@ - "@ - fabs %0,%1 - xsabsdp %x0,%x1" -- [(set_attr "type" "fp") -+ [(set_attr "type" "fpsimple") - (set_attr "fp_type" "fp_addsub_<Fs>")]) - - (define_insn "*nabs<mode>2_fpr" -@@ -4317,7 +4343,7 @@ - "@ - fnabs %0,%1 - xsnabsdp %x0,%x1" -- [(set_attr "type" "fp") -+ [(set_attr "type" "fpsimple") - (set_attr "fp_type" "fp_addsub_<Fs>")]) - - (define_expand "neg<mode>2" -@@ -4333,7 +4359,7 @@ - "@ - fneg %0,%1 - xsnegdp %x0,%x1" -- [(set_attr "type" "fp") -+ [(set_attr "type" "fpsimple") - (set_attr "fp_type" "fp_addsub_<Fs>")]) - - (define_expand "add<mode>3" -@@ -4494,7 +4520,7 @@ - emit_note (NOTE_INSN_DELETED); - DONE; - } -- [(set_attr "type" "fp,fp,fpload,fp,fp,fpload,fpload")]) -+ [(set_attr "type" "fp,fpsimple,fpload,fp,fpsimple,fpload,fpload")]) - - (define_expand "truncdfsf2" - [(set (match_operand:SF 0 "gpc_reg_operand" "") -@@ -4516,7 +4542,7 @@ - ;; when little-endian. - (define_expand "signbit<mode>2" - [(set (match_dup 2) -- (float_truncate:DF (match_operand:IBM128 1 "gpc_reg_operand" ""))) -+ (float_truncate:DF (match_operand:FLOAT128 1 "gpc_reg_operand" ""))) - (set (match_dup 3) - (subreg:DI (match_dup 2) 0)) - (set (match_dup 4) -@@ -4524,8 +4550,20 @@ - (set (match_operand:SI 0 "gpc_reg_operand" "") - (match_dup 6))] - "TARGET_HARD_FLOAT -- && (TARGET_FPRS || TARGET_E500_DOUBLE)" -+ && (TARGET_FPRS || TARGET_E500_DOUBLE) -+ && (!FLOAT128_IEEE_P (<MODE>mode) -+ || (TARGET_POWERPC64 && TARGET_DIRECT_MOVE))" - { -+ if (FLOAT128_IEEE_P (<MODE>mode)) -+ { -+ if (<MODE>mode == KFmode) -+ emit_insn (gen_signbitkf2_dm (operands[0], operands[1])); -+ else if (<MODE>mode == TFmode) -+ emit_insn (gen_signbittf2_dm (operands[0], operands[1])); -+ else -+ gcc_unreachable (); -+ DONE; -+ } - operands[2] = gen_reg_rtx (DFmode); - operands[3] = gen_reg_rtx (DImode); - if (TARGET_POWERPC64) -@@ -4573,6 +4611,37 @@ - operands[5] = CONST0_RTX (<MODE>mode); - }) - -+;; Optimize signbit on 64-bit systems with direct move to avoid doing the store -+;; and load. -+(define_insn_and_split "signbit<mode>2_dm" -+ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r") -+ (unspec:SI -+ [(match_operand:SIGNBIT 1 "input_operand" "<Fsignbit>,m,r")] -+ UNSPEC_SIGNBIT))] -+ "TARGET_POWERPC64 && TARGET_DIRECT_MOVE" -+ "#" -+ "&& reload_completed" -+ [(const_int 0)] -+{ -+ rs6000_split_signbit (operands[0], operands[1]); -+ DONE; -+} -+ [(set_attr "length" "8,8,12") -+ (set_attr "type" "mftgpr,load,integer")]) -+ -+;; MODES_TIEABLE_P doesn't allow DImode to be tied with the various floating -+;; point types, which makes normal SUBREG's problematical. Instead use a -+;; special pattern to avoid using a normal movdi. -+(define_insn "signbit<mode>2_dm2" -+ [(set (match_operand:DI 0 "gpc_reg_operand" "=r") -+ (unspec:DI [(match_operand:SIGNBIT 1 "gpc_reg_operand" "<Fsignbit>") -+ (const_int 0)] -+ UNSPEC_SIGNBIT))] -+ "TARGET_POWERPC64 && TARGET_DIRECT_MOVE" -+ "mfvsrd %0,%x1" -+ [(set_attr "type" "mftgpr")]) -+ -+ - ;; Use an unspec rather providing an if-then-else in RTL, to prevent the - ;; compiler from optimizing -0.0 - (define_insn "copysign<mode>3_fcpsgn" -@@ -4584,7 +4653,7 @@ - "@ - fcpsgn %0,%2,%1 - xscpsgndp %x0,%x2,%x1" -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "fpsimple")]) - - ;; For MIN, MAX, and conditional move, we use DEFINE_EXPAND's that involve a - ;; fsel instruction and some auxiliary computations. Then we just have a -@@ -4599,74 +4668,45 @@ - ;; On VSX, we only check for TARGET_VSX instead of checking for a vsx/p8 vector - ;; to allow either DF/SF to use only traditional registers. - --(define_expand "smax<mode>3" -+(define_expand "s<minmax><mode>3" - [(set (match_operand:SFDF 0 "gpc_reg_operand" "") -- (if_then_else:SFDF (ge (match_operand:SFDF 1 "gpc_reg_operand" "") -- (match_operand:SFDF 2 "gpc_reg_operand" "")) -- (match_dup 1) -- (match_dup 2)))] -- "TARGET_<MODE>_FPR && TARGET_PPC_GFXOPT && !flag_trapping_math" -+ (fp_minmax:SFDF (match_operand:SFDF 1 "gpc_reg_operand" "") -+ (match_operand:SFDF 2 "gpc_reg_operand" "")))] -+ "TARGET_MINMAX_<MODE>" - { -- rs6000_emit_minmax (operands[0], SMAX, operands[1], operands[2]); -+ rs6000_emit_minmax (operands[0], <SMINMAX>, operands[1], operands[2]); - DONE; - }) - --(define_insn "*smax<mode>3_vsx" -- [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>") -- (smax:SFDF (match_operand:SFDF 1 "gpc_reg_operand" "%<Ff>,<Fv>") -- (match_operand:SFDF 2 "gpc_reg_operand" "<Ff>,<Fv>")))] -- "TARGET_<MODE>_FPR && TARGET_VSX" -- "xsmaxdp %x0,%x1,%x2" -- [(set_attr "type" "fp")]) -- --(define_expand "smin<mode>3" -- [(set (match_operand:SFDF 0 "gpc_reg_operand" "") -- (if_then_else:SFDF (ge (match_operand:SFDF 1 "gpc_reg_operand" "") -- (match_operand:SFDF 2 "gpc_reg_operand" "")) -- (match_dup 2) -- (match_dup 1)))] -- "TARGET_<MODE>_FPR && TARGET_PPC_GFXOPT && !flag_trapping_math" -+(define_insn "*s<minmax><mode>3_vsx" -+ [(set (match_operand:SFDF 0 "vsx_register_operand" "=<Fv>") -+ (fp_minmax:SFDF (match_operand:SFDF 1 "vsx_register_operand" "<Fv>") -+ (match_operand:SFDF 2 "vsx_register_operand" "<Fv>")))] -+ "TARGET_VSX && TARGET_<MODE>_FPR" - { -- rs6000_emit_minmax (operands[0], SMIN, operands[1], operands[2]); -- DONE; --}) -- --(define_insn "*smin<mode>3_vsx" -- [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>") -- (smin:SFDF (match_operand:SFDF 1 "gpc_reg_operand" "%<Ff>,<Fv>") -- (match_operand:SFDF 2 "gpc_reg_operand" "<Ff>,<Fv>")))] -- "TARGET_<MODE>_FPR && TARGET_VSX" -- "xsmindp %x0,%x1,%x2" -+ return (TARGET_P9_MINMAX -+ ? "xs<minmax>cdp %x0,%x1,%x2" -+ : "xs<minmax>dp %x0,%x1,%x2"); -+} - [(set_attr "type" "fp")]) - --(define_split -+;; The conditional move instructions allow us to perform max and min operations -+;; even when we don't have the appropriate max/min instruction using the FSEL -+;; instruction. -+ -+(define_insn_and_split "*s<minmax><mode>3_fpr" - [(set (match_operand:SFDF 0 "gpc_reg_operand" "") -- (match_operator:SFDF 3 "min_max_operator" -- [(match_operand:SFDF 1 "gpc_reg_operand" "") -- (match_operand:SFDF 2 "gpc_reg_operand" "")]))] -- "TARGET_<MODE>_FPR && TARGET_PPC_GFXOPT && !flag_trapping_math -- && !TARGET_VSX" -+ (fp_minmax:SFDF (match_operand:SFDF 1 "gpc_reg_operand" "") -+ (match_operand:SFDF 2 "gpc_reg_operand" "")))] -+ "!TARGET_VSX && TARGET_MINMAX_<MODE>" -+ "#" -+ "&& 1" - [(const_int 0)] - { -- rs6000_emit_minmax (operands[0], GET_CODE (operands[3]), operands[1], -- operands[2]); -+ rs6000_emit_minmax (operands[0], <SMINMAX>, operands[1], operands[2]); - DONE; - }) - --(define_split -- [(set (match_operand:SF 0 "gpc_reg_operand" "") -- (match_operator:SF 3 "min_max_operator" -- [(match_operand:SF 1 "gpc_reg_operand" "") -- (match_operand:SF 2 "gpc_reg_operand" "")]))] -- "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT && TARGET_FPRS -- && TARGET_SINGLE_FLOAT && !flag_trapping_math" -- [(const_int 0)] -- " --{ rs6000_emit_minmax (operands[0], GET_CODE (operands[3]), -- operands[1], operands[2]); -- DONE; --}") -- - (define_expand "mov<mode>cc" - [(set (match_operand:GPR 0 "gpc_reg_operand" "") - (if_then_else:GPR (match_operand 1 "comparison_operator" "") -@@ -4749,12 +4789,13 @@ - [(set_attr "type" "isel") - (set_attr "length" "4")]) - --(define_expand "movsfcc" -- [(set (match_operand:SF 0 "gpc_reg_operand" "") -- (if_then_else:SF (match_operand 1 "comparison_operator" "") -- (match_operand:SF 2 "gpc_reg_operand" "") -- (match_operand:SF 3 "gpc_reg_operand" "")))] -- "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_SINGLE_FLOAT" -+;; Floating point conditional move -+(define_expand "mov<mode>cc" -+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "") -+ (if_then_else:SFDF (match_operand 1 "comparison_operator" "") -+ (match_operand:SFDF 2 "gpc_reg_operand" "") -+ (match_operand:SFDF 3 "gpc_reg_operand" "")))] -+ "TARGET_<MODE>_FPR && TARGET_PPC_GFXOPT" - " - { - if (rs6000_emit_cmove (operands[0], operands[1], operands[2], operands[3])) -@@ -4763,76 +4804,70 @@ - FAIL; - }") - --(define_insn "*fselsfsf4" -- [(set (match_operand:SF 0 "gpc_reg_operand" "=f") -- (if_then_else:SF (ge (match_operand:SF 1 "gpc_reg_operand" "f") -- (match_operand:SF 4 "zero_fp_constant" "F")) -- (match_operand:SF 2 "gpc_reg_operand" "f") -- (match_operand:SF 3 "gpc_reg_operand" "f")))] -- "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_SINGLE_FLOAT" -- "fsel %0,%1,%2,%3" -- [(set_attr "type" "fp")]) -- --(define_insn "*fseldfsf4" -- [(set (match_operand:SF 0 "gpc_reg_operand" "=f") -- (if_then_else:SF (ge (match_operand:DF 1 "gpc_reg_operand" "d") -- (match_operand:DF 4 "zero_fp_constant" "F")) -- (match_operand:SF 2 "gpc_reg_operand" "f") -- (match_operand:SF 3 "gpc_reg_operand" "f")))] -- "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT && TARGET_SINGLE_FLOAT" -+(define_insn "*fsel<SFDF:mode><SFDF2:mode>4" -+ [(set (match_operand:SFDF 0 "fpr_reg_operand" "=&<SFDF:rreg2>") -+ (if_then_else:SFDF -+ (ge (match_operand:SFDF2 1 "fpr_reg_operand" "<SFDF2:rreg2>") -+ (match_operand:SFDF2 4 "zero_fp_constant" "F")) -+ (match_operand:SFDF 2 "fpr_reg_operand" "<SFDF:rreg2>") -+ (match_operand:SFDF 3 "fpr_reg_operand" "<SFDF:rreg2>")))] -+ "TARGET_<MODE>_FPR && TARGET_PPC_GFXOPT" - "fsel %0,%1,%2,%3" - [(set_attr "type" "fp")]) - --;; The conditional move instructions allow us to perform max and min --;; operations even when -- --(define_split -- [(set (match_operand:DF 0 "gpc_reg_operand" "") -- (match_operator:DF 3 "min_max_operator" -- [(match_operand:DF 1 "gpc_reg_operand" "") -- (match_operand:DF 2 "gpc_reg_operand" "")]))] -- "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT -- && !flag_trapping_math" -- [(const_int 0)] -- " --{ rs6000_emit_minmax (operands[0], GET_CODE (operands[3]), -- operands[1], operands[2]); -- DONE; --}") -- --(define_expand "movdfcc" -- [(set (match_operand:DF 0 "gpc_reg_operand" "") -- (if_then_else:DF (match_operand 1 "comparison_operator" "") -- (match_operand:DF 2 "gpc_reg_operand" "") -- (match_operand:DF 3 "gpc_reg_operand" "")))] -- "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT" -- " --{ -- if (rs6000_emit_cmove (operands[0], operands[1], operands[2], operands[3])) -- DONE; -- else -- FAIL; --}") -+(define_insn_and_split "*mov<SFDF:mode><SFDF2:mode>cc_p9" -+ [(set (match_operand:SFDF 0 "vsx_register_operand" "=&<SFDF:Fv>,<SFDF:Fv>") -+ (if_then_else:SFDF -+ (match_operator:CCFP 1 "fpmask_comparison_operator" -+ [(match_operand:SFDF2 2 "vsx_register_operand" "<SFDF2:Fv>,<SFDF2:Fv>") -+ (match_operand:SFDF2 3 "vsx_register_operand" "<SFDF2:Fv>,<SFDF2:Fv>")]) -+ (match_operand:SFDF 4 "vsx_register_operand" "<SFDF:Fv>,<SFDF:Fv>") -+ (match_operand:SFDF 5 "vsx_register_operand" "<SFDF:Fv>,<SFDF:Fv>"))) -+ (clobber (match_scratch:V2DI 6 "=0,&wa"))] -+ "TARGET_P9_MINMAX" -+ "#" -+ "" -+ [(set (match_dup 6) -+ (if_then_else:V2DI (match_dup 1) -+ (match_dup 7) -+ (match_dup 8))) -+ (set (match_dup 0) -+ (if_then_else:SFDF (ne (match_dup 6) -+ (match_dup 8)) -+ (match_dup 4) -+ (match_dup 5)))] -+{ -+ if (GET_CODE (operands[6]) == SCRATCH) -+ operands[6] = gen_reg_rtx (V2DImode); -+ -+ operands[7] = CONSTM1_RTX (V2DImode); -+ operands[8] = CONST0_RTX (V2DImode); -+} -+ [(set_attr "length" "8") -+ (set_attr "type" "vecperm")]) -+ -+(define_insn "*fpmask<mode>" -+ [(set (match_operand:V2DI 0 "vsx_register_operand" "=wa") -+ (if_then_else:V2DI -+ (match_operator:CCFP 1 "fpmask_comparison_operator" -+ [(match_operand:SFDF 2 "vsx_register_operand" "<Fv>") -+ (match_operand:SFDF 3 "vsx_register_operand" "<Fv>")]) -+ (match_operand:V2DI 4 "all_ones_constant" "") -+ (match_operand:V2DI 5 "zero_constant" "")))] -+ "TARGET_P9_MINMAX" -+ "xscmp%V1dp %x0,%x2,%x3" -+ [(set_attr "type" "fpcompare")]) - --(define_insn "*fseldfdf4" -- [(set (match_operand:DF 0 "gpc_reg_operand" "=d") -- (if_then_else:DF (ge (match_operand:DF 1 "gpc_reg_operand" "d") -- (match_operand:DF 4 "zero_fp_constant" "F")) -- (match_operand:DF 2 "gpc_reg_operand" "d") -- (match_operand:DF 3 "gpc_reg_operand" "d")))] -- "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT" -- "fsel %0,%1,%2,%3" -- [(set_attr "type" "fp")]) -+(define_insn "*xxsel<mode>" -+ [(set (match_operand:SFDF 0 "vsx_register_operand" "=<Fv>") -+ (if_then_else:SFDF (ne (match_operand:V2DI 1 "vsx_register_operand" "wa") -+ (match_operand:V2DI 2 "zero_constant" "")) -+ (match_operand:SFDF 3 "vsx_register_operand" "<Fv>") -+ (match_operand:SFDF 4 "vsx_register_operand" "<Fv>")))] -+ "TARGET_P9_MINMAX" -+ "xxsel %x0,%x1,%x3,%x4" -+ [(set_attr "type" "vecmove")]) - --(define_insn "*fselsfdf4" -- [(set (match_operand:DF 0 "gpc_reg_operand" "=d") -- (if_then_else:DF (ge (match_operand:SF 1 "gpc_reg_operand" "f") -- (match_operand:SF 4 "zero_fp_constant" "F")) -- (match_operand:DF 2 "gpc_reg_operand" "d") -- (match_operand:DF 3 "gpc_reg_operand" "d")))] -- "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT && TARGET_SINGLE_FLOAT" -- "fsel %0,%1,%2,%3" -- [(set_attr "type" "fp")]) - - ;; Conversions to and from floating-point. - -@@ -5942,7 +5977,7 @@ - [(set (attr "type") - (if_then_else - (match_test "vsx_register_operand (operands[0], <MODE>mode)") -- (const_string "vecsimple") -+ (const_string "veclogical") - (const_string "integer"))) - (set (attr "length") - (if_then_else -@@ -5978,7 +6013,7 @@ - [(set (attr "type") - (if_then_else - (match_test "vsx_register_operand (operands[0], <MODE>mode)") -- (const_string "vecsimple") -+ (const_string "veclogical") - (const_string "integer"))) - (set (attr "length") - (if_then_else -@@ -6016,7 +6051,7 @@ - [(set (attr "type") - (if_then_else - (match_test "vsx_register_operand (operands[0], <MODE>mode)") -- (const_string "vecsimple") -+ (const_string "veclogical") - (const_string "integer"))) - (set (attr "length") - (if_then_else -@@ -6076,7 +6111,7 @@ - [(set (attr "type") - (if_then_else - (match_test "vsx_register_operand (operands[0], <MODE>mode)") -- (const_string "vecsimple") -+ (const_string "veclogical") - (const_string "integer"))) - (set (attr "length") - (if_then_else -@@ -6134,7 +6169,7 @@ - [(set (attr "type") - (if_then_else - (match_test "vsx_register_operand (operands[0], <MODE>mode)") -- (const_string "vecsimple") -+ (const_string "veclogical") - (const_string "integer"))) - (set (attr "length") - (if_then_else -@@ -6190,7 +6225,7 @@ - [(set (attr "type") - (if_then_else - (match_test "vsx_register_operand (operands[0], <MODE>mode)") -- (const_string "vecsimple") -+ (const_string "veclogical") - (const_string "integer"))) - (set (attr "length") - (if_then_else -@@ -6505,7 +6540,7 @@ - mt%0 %1 - mf%1 %0 - nop" -- [(set_attr "type" "*,load,store,fp,fp,vecsimple,integer,fpload,fpload,fpstore,fpstore,fpload,fpstore,mffgpr,mftgpr,mtjmpr,mfjmpr,*") -+ [(set_attr "type" "*,load,store,fpsimple,fpsimple,veclogical,integer,fpload,fpload,fpstore,fpstore,fpload,fpstore,mffgpr,mftgpr,mtjmpr,mfjmpr,*") - (set_attr "length" "4")]) - - (define_insn "*mov<mode>_softfloat" -@@ -6640,7 +6675,8 @@ - # - # - #" -- [(set_attr "type" "fpstore,fpload,fp,fpload,fpstore,fpload,fpstore,vecsimple,vecsimple,two,store,load,two") -+ [(set_attr "type" "fpstore,fpload,fpsimple,fpload,fpstore,fpload,fpstore,veclogical,veclogical,two,store,load,two") -+ (set_attr "size" "64") - (set_attr "length" "4,4,4,4,4,4,4,4,4,8,8,8,8")]) - - (define_insn "*mov<mode>_softfloat32" -@@ -6685,7 +6721,8 @@ - mffgpr %0,%1 - mfvsrd %0,%x1 - mtvsrd %x0,%1" -- [(set_attr "type" "fpstore,fpload,fp,fpload,fpstore,fpload,fpstore,vecsimple,vecsimple,integer,store,load,*,mtjmpr,mfjmpr,*,mftgpr,mffgpr,mftgpr,mffgpr") -+ [(set_attr "type" "fpstore,fpload,fpsimple,fpload,fpstore,fpload,fpstore,veclogical,veclogical,integer,store,load,*,mtjmpr,mfjmpr,*,mftgpr,mffgpr,mftgpr,mffgpr") -+ (set_attr "size" "64") - (set_attr "length" "4")]) - - (define_insn "*mov<mode>_softfloat64" -@@ -6896,7 +6933,7 @@ - emit_note (NOTE_INSN_DELETED); - DONE; - } -- [(set_attr "type" "fp")]) -+ [(set_attr "type" "fpsimple")]) - - (define_insn "trunc<mode>df2_internal2" - [(set (match_operand:DF 0 "gpc_reg_operand" "=d") -@@ -7129,7 +7166,7 @@ - else - return \"fneg %0,%1\;fneg %L0,%L1\"; - }" -- [(set_attr "type" "fp") -+ [(set_attr "type" "fpsimple") - (set_attr "length" "8")]) - - (define_expand "abs<mode>2" -@@ -7264,7 +7301,7 @@ - (use (match_operand:V16QI 2 "register_operand" "v"))] - "TARGET_FLOAT128 && !TARGET_FLOAT128_HW" - "xxlxor %x0,%x1,%x2" -- [(set_attr "type" "vecsimple")]) -+ [(set_attr "type" "veclogical")]) - - ;; IEEE 128-bit absolute value - (define_insn_and_split "ieee_128bit_vsx_abs<mode>2" -@@ -7293,7 +7330,7 @@ - (use (match_operand:V16QI 2 "register_operand" "v"))] - "TARGET_FLOAT128 && !TARGET_FLOAT128_HW" - "xxlandc %x0,%x1,%x2" -- [(set_attr "type" "vecsimple")]) -+ [(set_attr "type" "veclogical")]) - - ;; IEEE 128-bit negative absolute value - (define_insn_and_split "*ieee_128bit_vsx_nabs<mode>2" -@@ -7326,7 +7363,7 @@ - (use (match_operand:V16QI 2 "register_operand" "v"))] - "TARGET_FLOAT128 && !TARGET_FLOAT128_HW" - "xxlor %x0,%x1,%x2" -- [(set_attr "type" "vecsimple")]) -+ [(set_attr "type" "veclogical")]) - - ;; Float128 conversion functions. These expand to library function calls. - ;; We use expand to convert from IBM double double to IEEE 128-bit -@@ -7482,7 +7519,7 @@ - UNSPEC_P8V_FMRGOW))] - "!TARGET_POWERPC64 && TARGET_DIRECT_MOVE" - "fmrgow %0,%1,%2" -- [(set_attr "type" "vecperm")]) -+ [(set_attr "type" "fpsimple")]) - - (define_insn "p8_mtvsrwz" - [(set (match_operand:DF 0 "register_operand" "=d") -@@ -7705,7 +7742,8 @@ - lfd%U1%X1 %0,%1 - fmr %0,%1 - #" -- [(set_attr "type" "store,load,*,fpstore,fpload,fp,*")]) -+ [(set_attr "type" "store,load,*,fpstore,fpload,fpsimple,*") -+ (set_attr "size" "64")]) - - (define_split - [(set (match_operand:DI 0 "gpc_reg_operand" "") -@@ -7759,7 +7797,8 @@ - mfvsrd %0,%x1 - mtvsrd %x0,%1 - xxlxor %x0,%x0,%x0" -- [(set_attr "type" "store,load,*,*,*,*,fpstore,fpload,fp,mfjmpr,mtjmpr,*,mftgpr,mffgpr,mftgpr,mffgpr,vecsimple") -+ [(set_attr "type" "store,load,*,*,*,*,fpstore,fpload,fpsimple,mfjmpr,mtjmpr,*,mftgpr,mffgpr,mftgpr,mffgpr,veclogical") -+ (set_attr "size" "64") - (set_attr "length" "4,4,4,4,4,20,4,4,4,4,4,4,4,4,4,4,4")]) - - ; Some DImode loads are best done as a load of -1 followed by a mask -@@ -8767,7 +8806,8 @@ - lfdu %3,%2(%0)" - [(set_attr "type" "fpload") - (set_attr "update" "yes") -- (set_attr "indexed" "yes,no")]) -+ (set_attr "indexed" "yes,no") -+ (set_attr "size" "64")]) - - (define_insn "*movdf_update2" - [(set (mem:DF (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0") -@@ -11902,6 +11942,7 @@ - (set (match_dup 0) - (plus:P (match_dup 0) - (const_int -1))) -+ (unspec [(const_int 0)] UNSPEC_DOLOOP) - (clobber (match_scratch:CC 2 "")) - (clobber (match_scratch:P 3 ""))])] - "" -@@ -11912,6 +11953,7 @@ - ;; JUMP_INSNs. - ;; For the length attribute to be calculated correctly, the - ;; label MUST be operand 0. -+;; The UNSPEC is present to prevent combine creating this pattern. - - (define_insn "*ctr<mode>_internal1" - [(set (pc) -@@ -11919,9 +11961,10 @@ - (const_int 1)) - (label_ref (match_operand 0 "" "")) - (pc))) -- (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*c*l") -+ (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*wi*c*l") - (plus:P (match_dup 1) - (const_int -1))) -+ (unspec [(const_int 0)] UNSPEC_DOLOOP) - (clobber (match_scratch:CC 3 "=X,&x,&x,&x")) - (clobber (match_scratch:P 4 "=X,X,&r,r"))] - "" -@@ -11943,9 +11986,10 @@ - (const_int 1)) - (pc) - (label_ref (match_operand 0 "" "")))) -- (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*c*l") -+ (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*wi*c*l") - (plus:P (match_dup 1) - (const_int -1))) -+ (unspec [(const_int 0)] UNSPEC_DOLOOP) - (clobber (match_scratch:CC 3 "=X,&x,&x,&x")) - (clobber (match_scratch:P 4 "=X,X,&r,r"))] - "" -@@ -11969,9 +12013,10 @@ - (const_int 1)) - (label_ref (match_operand 0 "" "")) - (pc))) -- (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*c*l") -+ (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*wi*c*l") - (plus:P (match_dup 1) - (const_int -1))) -+ (unspec [(const_int 0)] UNSPEC_DOLOOP) - (clobber (match_scratch:CC 3 "=X,&x,&x,&x")) - (clobber (match_scratch:P 4 "=X,X,&r,r"))] - "" -@@ -11993,9 +12038,10 @@ - (const_int 1)) - (pc) - (label_ref (match_operand 0 "" "")))) -- (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*c*l") -+ (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*wi*c*l") - (plus:P (match_dup 1) - (const_int -1))) -+ (unspec [(const_int 0)] UNSPEC_DOLOOP) - (clobber (match_scratch:CC 3 "=X,&x,&x,&x")) - (clobber (match_scratch:P 4 "=X,X,&r,r"))] - "" -@@ -12022,6 +12068,7 @@ - (match_operand 6 "" ""))) - (set (match_operand:P 0 "int_reg_operand" "") - (plus:P (match_dup 1) (const_int -1))) -+ (unspec [(const_int 0)] UNSPEC_DOLOOP) - (clobber (match_scratch:CC 3 "")) - (clobber (match_scratch:P 4 ""))] - "reload_completed" -@@ -12047,6 +12094,7 @@ - (match_operand 6 "" ""))) - (set (match_operand:P 0 "nonimmediate_operand" "") - (plus:P (match_dup 1) (const_int -1))) -+ (unspec [(const_int 0)] UNSPEC_DOLOOP) - (clobber (match_scratch:CC 3 "")) - (clobber (match_scratch:P 4 ""))] - "reload_completed && ! gpc_reg_operand (operands[0], SImode)" -@@ -12563,8 +12611,10 @@ - (set_attr "indexed" "no")]) - - ;; A return instruction which the middle-end doesn't see. -+;; Use r0 to stop regrename twiddling with lr restore insns emitted -+;; after the call to __morestack. - (define_insn "split_stack_return" -- [(unspec_volatile [(const_int 0)] UNSPECV_SPLIT_STACK_RETURN)] -+ [(unspec_volatile [(use (reg:SI 0))] UNSPECV_SPLIT_STACK_RETURN)] - "" - "blr" - [(set_attr "type" "jmpreg")]) -@@ -13166,7 +13216,7 @@ - operands[3] = gen_rtx_REG (<FP128_64>mode, dest_hi); - operands[4] = gen_rtx_REG (<FP128_64>mode, dest_lo); - } -- [(set_attr "type" "fp,fp") -+ [(set_attr "type" "fpsimple,fp") - (set_attr "length" "4,8")]) - - (define_insn "unpack<mode>" -@@ -13205,7 +13255,8 @@ - (match_operand:IEEE128 2 "altivec_register_operand" "v")))] - "TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)" - "xsaddqp %0,%1,%2" -- [(set_attr "type" "vecfloat")]) -+ [(set_attr "type" "vecfloat") -+ (set_attr "size" "128")]) - - (define_insn "sub<mode>3" - [(set (match_operand:IEEE128 0 "altivec_register_operand" "=v") -@@ -13214,7 +13265,8 @@ - (match_operand:IEEE128 2 "altivec_register_operand" "v")))] - "TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)" - "xssubqp %0,%1,%2" -- [(set_attr "type" "vecfloat")]) -+ [(set_attr "type" "vecfloat") -+ (set_attr "size" "128")]) - - (define_insn "mul<mode>3" - [(set (match_operand:IEEE128 0 "altivec_register_operand" "=v") -@@ -13223,7 +13275,8 @@ - (match_operand:IEEE128 2 "altivec_register_operand" "v")))] - "TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)" - "xsmulqp %0,%1,%2" -- [(set_attr "type" "vecfloat")]) -+ [(set_attr "type" "vecfloat") -+ (set_attr "size" "128")]) - - (define_insn "div<mode>3" - [(set (match_operand:IEEE128 0 "altivec_register_operand" "=v") -@@ -13232,7 +13285,8 @@ - (match_operand:IEEE128 2 "altivec_register_operand" "v")))] - "TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)" - "xsdivqp %0,%1,%2" -- [(set_attr "type" "vecdiv")]) -+ [(set_attr "type" "vecdiv") -+ (set_attr "size" "128")]) - - (define_insn "sqrt<mode>2" - [(set (match_operand:IEEE128 0 "altivec_register_operand" "=v") -@@ -13240,9 +13294,28 @@ - (match_operand:IEEE128 1 "altivec_register_operand" "v")))] - "TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)" - "xssqrtqp %0,%1" -- [(set_attr "type" "vecdiv")]) -+ [(set_attr "type" "vecdiv") -+ (set_attr "size" "128")]) - --(define_insn "copysign<mode>3" -+(define_expand "copysign<mode>3" -+ [(use (match_operand:IEEE128 0 "altivec_register_operand")) -+ (use (match_operand:IEEE128 1 "altivec_register_operand")) -+ (use (match_operand:IEEE128 2 "altivec_register_operand"))] -+ "FLOAT128_IEEE_P (<MODE>mode)" -+{ -+ if (TARGET_FLOAT128_HW) -+ emit_insn (gen_copysign<mode>3_hard (operands[0], operands[1], -+ operands[2])); -+ else -+ { -+ rtx tmp = gen_reg_rtx (<MODE>mode); -+ emit_insn (gen_copysign<mode>3_soft (operands[0], operands[1], -+ operands[2], tmp)); -+ } -+ DONE; -+}) -+ -+(define_insn "copysign<mode>3_hard" - [(set (match_operand:IEEE128 0 "altivec_register_operand" "=v") - (unspec:IEEE128 - [(match_operand:IEEE128 1 "altivec_register_operand" "v") -@@ -13250,7 +13323,20 @@ - UNSPEC_COPYSIGN))] - "TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)" - "xscpsgnqp %0,%2,%1" -- [(set_attr "type" "vecsimple")]) -+ [(set_attr "type" "vecmove") -+ (set_attr "size" "128")]) -+ -+(define_insn "copysign<mode>3_soft" -+ [(set (match_operand:IEEE128 0 "altivec_register_operand" "=v") -+ (unspec:IEEE128 -+ [(match_operand:IEEE128 1 "altivec_register_operand" "v") -+ (match_operand:IEEE128 2 "altivec_register_operand" "v") -+ (match_operand:IEEE128 3 "altivec_register_operand" "+v")] -+ UNSPEC_COPYSIGN))] -+ "!TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)" -+ "xscpsgndp %x3,%x2,%x1\;xxpermdi %x0,%x3,%x1,1" -+ [(set_attr "type" "veccomplex") -+ (set_attr "length" "8")]) - - (define_insn "neg<mode>2_hw" - [(set (match_operand:IEEE128 0 "altivec_register_operand" "=v") -@@ -13258,7 +13344,8 @@ - (match_operand:IEEE128 1 "altivec_register_operand" "v")))] - "TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)" - "xsnegqp %0,%1" -- [(set_attr "type" "vecfloat")]) -+ [(set_attr "type" "vecmove") -+ (set_attr "size" "128")]) - - - (define_insn "abs<mode>2_hw" -@@ -13267,7 +13354,8 @@ - (match_operand:IEEE128 1 "altivec_register_operand" "v")))] - "TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)" - "xsabsqp %0,%1" -- [(set_attr "type" "vecfloat")]) -+ [(set_attr "type" "vecmove") -+ (set_attr "size" "128")]) - - - (define_insn "*nabs<mode>2_hw" -@@ -13277,7 +13365,8 @@ - (match_operand:IEEE128 1 "altivec_register_operand" "v"))))] - "TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)" - "xsnabsqp %0,%1" -- [(set_attr "type" "vecfloat")]) -+ [(set_attr "type" "vecmove") -+ (set_attr "size" "128")]) - - ;; Initially don't worry about doing fusion - (define_insn "*fma<mode>4_hw" -@@ -13288,7 +13377,8 @@ - (match_operand:IEEE128 3 "altivec_register_operand" "0")))] - "TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)" - "xsmaddqp %0,%1,%2" -- [(set_attr "type" "vecfloat")]) -+ [(set_attr "type" "vecfloat") -+ (set_attr "size" "128")]) - - (define_insn "*fms<mode>4_hw" - [(set (match_operand:IEEE128 0 "altivec_register_operand" "=v") -@@ -13299,7 +13389,8 @@ - (match_operand:IEEE128 3 "altivec_register_operand" "0"))))] - "TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)" - "xsmsubqp %0,%1,%2" -- [(set_attr "type" "vecfloat")]) -+ [(set_attr "type" "vecfloat") -+ (set_attr "size" "128")]) - - (define_insn "*nfma<mode>4_hw" - [(set (match_operand:IEEE128 0 "altivec_register_operand" "=v") -@@ -13310,7 +13401,8 @@ - (match_operand:IEEE128 3 "altivec_register_operand" "0"))))] - "TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)" - "xsnmaddqp %0,%1,%2" -- [(set_attr "type" "vecfloat")]) -+ [(set_attr "type" "vecfloat") -+ (set_attr "size" "128")]) - - (define_insn "*nfms<mode>4_hw" - [(set (match_operand:IEEE128 0 "altivec_register_operand" "=v") -@@ -13322,7 +13414,8 @@ - (match_operand:IEEE128 3 "altivec_register_operand" "0")))))] - "TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)" - "xsnmsubqp %0,%1,%2" -- [(set_attr "type" "vecfloat")]) -+ [(set_attr "type" "vecfloat") -+ (set_attr "size" "128")]) - - (define_insn "extend<SFDF:mode><IEEE128:mode>2_hw" - [(set (match_operand:IEEE128 0 "altivec_register_operand" "=v") -@@ -13330,7 +13423,8 @@ - (match_operand:SFDF 1 "altivec_register_operand" "v")))] - "TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<IEEE128:MODE>mode)" - "xscvdpqp %0,%1" -- [(set_attr "type" "vecfloat")]) -+ [(set_attr "type" "vecfloat") -+ (set_attr "size" "128")]) - - ;; Conversion between KFmode and TFmode if TFmode is ieee 128-bit floating - ;; point is a simple copy. -@@ -13347,7 +13441,7 @@ - emit_note (NOTE_INSN_DELETED); - DONE; - } -- [(set_attr "type" "*,vecsimple") -+ [(set_attr "type" "*,veclogical") - (set_attr "length" "0,4")]) - - (define_insn_and_split "trunctfkf2" -@@ -13363,7 +13457,7 @@ - emit_note (NOTE_INSN_DELETED); - DONE; - } -- [(set_attr "type" "*,vecsimple") -+ [(set_attr "type" "*,veclogical") - (set_attr "length" "0,4")]) - - (define_insn "trunc<mode>df2_hw" -@@ -13372,7 +13466,8 @@ - (match_operand:IEEE128 1 "altivec_register_operand" "v")))] - "TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)" - "xscvqpdp %0,%1" -- [(set_attr "type" "vecfloat")]) -+ [(set_attr "type" "vecfloat") -+ (set_attr "size" "128")]) - - ;; There is no KFmode -> SFmode instruction. Preserve the accuracy by doing - ;; the KFmode -> DFmode conversion using round to odd rather than the normal -@@ -13469,7 +13564,8 @@ - UNSPEC_IEEE128_CONVERT))] - "TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)" - "xscvqp<su>wz %0,%1" -- [(set_attr "type" "vecfloat")]) -+ [(set_attr "type" "vecfloat") -+ (set_attr "size" "128")]) - - (define_insn "*xscvqp<su>dz_<mode>" - [(set (match_operand:V2DI 0 "altivec_register_operand" "=v") -@@ -13479,7 +13575,8 @@ - UNSPEC_IEEE128_CONVERT))] - "TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)" - "xscvqp<su>dz %0,%1" -- [(set_attr "type" "vecfloat")]) -+ [(set_attr "type" "vecfloat") -+ (set_attr "size" "128")]) - - (define_insn "*xscv<su>dqp_<mode>" - [(set (match_operand:IEEE128 0 "altivec_register_operand" "=v") -@@ -13488,7 +13585,8 @@ - UNSPEC_IEEE128_CONVERT)))] - "TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)" - "xscv<su>dqp %0,%1" -- [(set_attr "type" "vecfloat")]) -+ [(set_attr "type" "vecfloat") -+ (set_attr "size" "128")]) - - (define_insn "*ieee128_mfvsrd_64bit" - [(set (match_operand:DI 0 "reg_or_indexed_operand" "=wr,Z,wi") -@@ -13499,7 +13597,7 @@ - mfvsrd %0,%x1 - stxsdx %x1,%y0 - xxlor %x0,%x1,%x1" -- [(set_attr "type" "mftgpr,fpstore,vecsimple")]) -+ [(set_attr "type" "mftgpr,fpstore,veclogical")]) - - - (define_insn "*ieee128_mfvsrd_32bit" -@@ -13510,7 +13608,7 @@ - "@ - stxsdx %x1,%y0 - xxlor %x0,%x1,%x1" -- [(set_attr "type" "fpstore,vecsimple")]) -+ [(set_attr "type" "fpstore,veclogical")]) - - (define_insn "*ieee128_mfvsrwz" - [(set (match_operand:SI 0 "reg_or_indexed_operand" "=r,Z") -@@ -13546,7 +13644,7 @@ - mtvsrd %x0,%1 - lxsdx %x0,%y1 - xxlor %x0,%x1,%x1" -- [(set_attr "type" "mffgpr,fpload,vecsimple")]) -+ [(set_attr "type" "mffgpr,fpload,veclogical")]) - - (define_insn "*ieee128_mtvsrd_32bit" - [(set (match_operand:V2DI 0 "altivec_register_operand" "=v,v") -@@ -13556,7 +13654,7 @@ - "@ - lxsdx %x0,%y1 - xxlor %x0,%x1,%x1" -- [(set_attr "type" "fpload,vecsimple")]) -+ [(set_attr "type" "fpload,veclogical")]) - - ;; IEEE 128-bit instructions with round to odd semantics - (define_insn "*trunc<mode>df2_odd" -@@ -13565,7 +13663,8 @@ - UNSPEC_ROUND_TO_ODD))] - "TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)" - "xscvqpdpo %0,%1" -- [(set_attr "type" "vecfloat")]) -+ [(set_attr "type" "vecfloat") -+ (set_attr "size" "128")]) - - ;; IEEE 128-bit comparisons - (define_insn "*cmp<mode>_hw" -@@ -13574,7 +13673,8 @@ - (match_operand:IEEE128 2 "altivec_register_operand" "v")))] - "TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)" - "xscmpuqp %0,%1,%2" -- [(set_attr "type" "fpcompare")]) -+ [(set_attr "type" "veccmp") -+ (set_attr "size" "128")]) - - - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/rs6000.opt gcc-6-20160721/gcc/config/rs6000/rs6000.opt ---- gcc-6.1.0/gcc/config/rs6000/rs6000.opt 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/rs6000.opt 2016-07-07 19:42:07.000000000 +0000 -@@ -470,8 +470,8 @@ - -mlong-double-<n> Specify size of long double (64 or 128 bits). - - mlra --Target Report Var(rs6000_lra_flag) Init(0) Save --Use LRA instead of reload. -+Target Report Mask(LRA) Var(rs6000_isa_flags) -+Enable Local Register Allocation. - - msched-costly-dep= - Target RejectNegative Joined Var(rs6000_sched_costly_dep_str) -@@ -605,13 +605,25 @@ - Target Report Mask(P9_FUSION) Var(rs6000_isa_flags) - Fuse certain operations together for better performance on power9. - -+mpower9-misc -+Target Undocumented Report Mask(P9_MISC) Var(rs6000_isa_flags) -+Use/do not use certain scalar instructions added in ISA 3.0. -+ - mpower9-vector - Target Report Mask(P9_VECTOR) Var(rs6000_isa_flags) --Use/do not use vector and scalar instructions added in ISA 3.0. -+Use/do not use vector instructions added in ISA 3.0. -+ -+mpower9-dform-scalar -+Target Undocumented Mask(P9_DFORM_SCALAR) Var(rs6000_isa_flags) -+Use/do not use scalar register+offset memory instructions added in ISA 3.0. -+ -+mpower9-dform-vector -+Target Undocumented Mask(P9_DFORM_VECTOR) Var(rs6000_isa_flags) -+Use/do not use vector register+offset memory instructions added in ISA 3.0. - - mpower9-dform --Target Undocumented Mask(P9_DFORM) Var(rs6000_isa_flags) --Use/do not use vector and scalar instructions added in ISA 3.0. -+Target Report Var(TARGET_P9_DFORM_BOTH) Init(-1) Save -+Use/do not use register+offset memory instructions added in ISA 3.0. - - mpower9-minmax - Target Undocumented Mask(P9_MINMAX) Var(rs6000_isa_flags) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/rs64.md gcc-6-20160721/gcc/config/rs6000/rs64.md ---- gcc-6.1.0/gcc/config/rs6000/rs64.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/rs64.md 2016-07-05 19:19:42.000000000 +0000 -@@ -111,7 +111,7 @@ - "mciu_rs64,fpu_rs64,bpu_rs64") - - (define_insn_reservation "rs64a-fp" 4 -- (and (eq_attr "type" "fp,dmul") -+ (and (eq_attr "type" "fp,fpsimple,dmul") - (eq_attr "cpu" "rs64a")) - "mciu_rs64,fpu_rs64") - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/sysv4.h gcc-6-20160721/gcc/config/rs6000/sysv4.h ---- gcc-6.1.0/gcc/config/rs6000/sysv4.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/sysv4.h 2016-05-16 13:47:47.000000000 +0000 -@@ -744,21 +744,32 @@ - %{!mnewlib: %{pthread:-lpthread} %{shared:-lc} \ - %{!shared: %{profile:-lc_p} %{!profile:-lc}}}" - -+#if ENABLE_OFFLOADING == 1 -+#define CRTOFFLOADBEGIN "%{fopenacc|fopenmp:crtoffloadbegin%O%s}" -+#define CRTOFFLOADEND "%{fopenacc|fopenmp:crtoffloadend%O%s}" -+#else -+#define CRTOFFLOADBEGIN "" -+#define CRTOFFLOADEND "" -+#endif -+ - #ifdef HAVE_LD_PIE - #define STARTFILE_LINUX_SPEC "\ - %{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} \ - %{mnewlib:ecrti.o%s;:crti.o%s} \ --%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" -+%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s} \ -+" CRTOFFLOADBEGIN - #else - #define STARTFILE_LINUX_SPEC "\ - %{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \ - %{mnewlib:ecrti.o%s;:crti.o%s} \ --%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" -+%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s} \ -+" CRTOFFLOADBEGIN - #endif - - #define ENDFILE_LINUX_SPEC "\ - %{shared|pie:crtendS.o%s;:crtend.o%s} \ --%{mnewlib:ecrtn.o%s;:crtn.o%s}" -+%{mnewlib:ecrtn.o%s;:crtn.o%s} \ -+" CRTOFFLOADEND - - #define LINK_START_LINUX_SPEC "" - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/t-rs6000 gcc-6-20160721/gcc/config/rs6000/t-rs6000 ---- gcc-6.1.0/gcc/config/rs6000/t-rs6000 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/t-rs6000 2016-07-06 02:31:08.000000000 +0000 -@@ -50,6 +50,7 @@ - $(srcdir)/config/rs6000/power6.md \ - $(srcdir)/config/rs6000/power7.md \ - $(srcdir)/config/rs6000/power8.md \ -+ $(srcdir)/config/rs6000/power9.md \ - $(srcdir)/config/rs6000/cell.md \ - $(srcdir)/config/rs6000/xfpu.md \ - $(srcdir)/config/rs6000/a2.md \ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/titan.md gcc-6-20160721/gcc/config/rs6000/titan.md ---- gcc-6.1.0/gcc/config/rs6000/titan.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/titan.md 2016-07-05 19:19:42.000000000 +0000 -@@ -156,7 +156,7 @@ - ;; Make sure the "titan_fp" rule stays last, as it's a catch all for - ;; double-precision and unclassified (e.g. fsel) FP-instructions - (define_insn_reservation "titan_fp" 10 -- (and (eq_attr "type" "fpcompare,fp,dmul") -+ (and (eq_attr "type" "fpcompare,fp,fpsimple,dmul") - (eq_attr "cpu" "titan")) - "titan_issue,titan_fp0*2,nothing*8,titan_fpwb") - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/vector.md gcc-6-20160721/gcc/config/rs6000/vector.md ---- gcc-6.1.0/gcc/config/rs6000/vector.md 2016-01-20 19:39:08.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/vector.md 2016-06-01 23:23:42.000000000 +0000 -@@ -26,6 +26,13 @@ - ;; Vector int modes - (define_mode_iterator VEC_I [V16QI V8HI V4SI V2DI]) - -+;; Vector int modes for parity -+(define_mode_iterator VEC_IP [V8HI -+ V4SI -+ V2DI -+ V1TI -+ (TI "TARGET_VSX_TIMODE")]) -+ - ;; Vector float modes - (define_mode_iterator VEC_F [V4SF V2DF]) - -@@ -738,12 +745,24 @@ - (clz:VEC_I (match_operand:VEC_I 1 "register_operand" "")))] - "TARGET_P8_VECTOR") - -+;; Vector count trailing zeros -+(define_expand "ctz<mode>2" -+ [(set (match_operand:VEC_I 0 "register_operand" "") -+ (ctz:VEC_I (match_operand:VEC_I 1 "register_operand" "")))] -+ "TARGET_P9_VECTOR") -+ - ;; Vector population count - (define_expand "popcount<mode>2" - [(set (match_operand:VEC_I 0 "register_operand" "") - (popcount:VEC_I (match_operand:VEC_I 1 "register_operand" "")))] - "TARGET_P8_VECTOR") - -+;; Vector parity -+(define_expand "parity<mode>2" -+ [(set (match_operand:VEC_IP 0 "register_operand" "") -+ (parity:VEC_IP (match_operand:VEC_IP 1 "register_operand" "")))] -+ "TARGET_P9_VECTOR") -+ - - ;; Same size conversions - (define_expand "float<VEC_int><mode>2" -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/vsx.md gcc-6-20160721/gcc/config/rs6000/vsx.md ---- gcc-6.1.0/gcc/config/rs6000/vsx.md 2016-02-15 23:29:17.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/vsx.md 2016-07-07 22:44:15.000000000 +0000 -@@ -55,8 +55,7 @@ - (KF "FLOAT128_VECTOR_P (KFmode)") - (TF "FLOAT128_VECTOR_P (TFmode)")]) - --;; Iterator for memory move. Handle TImode specially to allow --;; it to use gprs as well as vsx registers. -+;; Iterator for memory moves. - (define_mode_iterator VSX_M [V16QI - V8HI - V4SI -@@ -65,18 +64,8 @@ - V2DF - V1TI - (KF "FLOAT128_VECTOR_P (KFmode)") -- (TF "FLOAT128_VECTOR_P (TFmode)")]) -- --(define_mode_iterator VSX_M2 [V16QI -- V8HI -- V4SI -- V2DI -- V4SF -- V2DF -- V1TI -- (KF "FLOAT128_VECTOR_P (KFmode)") -- (TF "FLOAT128_VECTOR_P (TFmode)") -- (TI "TARGET_VSX_TIMODE")]) -+ (TF "FLOAT128_VECTOR_P (TFmode)") -+ (TI "TARGET_VSX_TIMODE")]) - - ;; Map into the appropriate load/store name based on the type - (define_mode_attr VSm [(V16QI "vw4") -@@ -270,6 +259,10 @@ - (define_mode_attr VS_64reg [(V2DF "ws") - (V2DI "wi")]) - -+;; Iterators for loading constants with xxspltib -+(define_mode_iterator VSINT_84 [V4SI V2DI]) -+(define_mode_iterator VSINT_842 [V8HI V4SI V2DI]) -+ - ;; Constants for creating unspecs - (define_c_enum "unspec" - [UNSPEC_VSX_CONCAT -@@ -299,26 +292,9 @@ - UNSPEC_VSX_XVCVUXDDP - UNSPEC_VSX_XVCVDPSXDS - UNSPEC_VSX_XVCVDPUXDS -+ UNSPEC_VSX_SIGN_EXTEND - ]) - --;; VSX (P9) moves -- --(define_insn "*p9_vecload_<mode>" -- [(set (match_operand:VSX_M2 0 "vsx_register_operand" "=<VSa>") -- (match_operand:VSX_M2 1 "memory_operand" "Z"))] -- "TARGET_P9_VECTOR" -- "lxvx %x0,%y1" -- [(set_attr "type" "vecload") -- (set_attr "length" "4")]) -- --(define_insn "*p9_vecstore_<mode>" -- [(set (match_operand:VSX_M2 0 "memory_operand" "=Z") -- (match_operand:VSX_M2 1 "vsx_register_operand" "<VSa>"))] -- "TARGET_P9_VECTOR" -- "stxvx %x1,%y0" -- [(set_attr "type" "vecstore") -- (set_attr "length" "4")]) -- - ;; VSX moves - - ;; The patterns for LE permuted loads and stores come before the general -@@ -709,7 +685,7 @@ - } - } - [(set_attr "length" "0,4") -- (set_attr "type" "vecsimple")]) -+ (set_attr "type" "veclogical")]) - - (define_insn_and_split "*vsx_le_perm_load_<mode>" - [(set (match_operand:VSX_LE_128 0 "vsx_register_operand" "=<VSa>") -@@ -787,92 +763,141 @@ - (const_int 64)))] - "") - --(define_insn "*vsx_mov<mode>" -- [(set (match_operand:VSX_M 0 "nonimmediate_operand" "=Z,<VSr>,<VSr>,?Z,?<VSa>,?<VSa>,r,we,wQ,?&r,??Y,??r,??r,<VSr>,?<VSa>,*r,v,wZ,v") -- (match_operand:VSX_M 1 "input_operand" "<VSr>,Z,<VSr>,<VSa>,Z,<VSa>,we,b,r,wQ,r,Y,r,j,j,j,W,v,wZ"))] -- "VECTOR_MEM_VSX_P (<MODE>mode) -- && (register_operand (operands[0], <MODE>mode) -- || register_operand (operands[1], <MODE>mode))" -+;; Vector constants that can be generated with XXSPLTIB that was added in ISA -+;; 3.0. Both (const_vector [..]) and (vec_duplicate ...) forms are recognized. -+(define_insn "xxspltib_v16qi" -+ [(set (match_operand:V16QI 0 "vsx_register_operand" "=wa") -+ (vec_duplicate:V16QI (match_operand:SI 1 "s8bit_cint_operand" "n")))] -+ "TARGET_P9_VECTOR" - { -- return rs6000_output_move_128bit (operands); -+ operands[2] = GEN_INT (INTVAL (operands[1]) & 0xff); -+ return "xxspltib %x0,%2"; - } -- [(set_attr "type" "vecstore,vecload,vecsimple,vecstore,vecload,vecsimple,mffgpr,mftgpr,load,store,store,load, *,vecsimple,vecsimple,*, *,vecstore,vecload") -- (set_attr "length" "4,4,4,4,4,4,8,4,12,12,12,12,16,4,4,*,16,4,4")]) -+ [(set_attr "type" "vecperm")]) - --;; Unlike other VSX moves, allow the GPRs even for reloading, since a normal --;; use of TImode is for unions. However for plain data movement, slightly --;; favor the vector loads --(define_insn "*vsx_movti_64bit" -- [(set (match_operand:TI 0 "nonimmediate_operand" "=Z,wa,wa,wa,r,we,v,v,wZ,wQ,&r,Y,r,r,?r") -- (match_operand:TI 1 "input_operand" "wa,Z,wa,O,we,b,W,wZ,v,r,wQ,r,Y,r,n"))] -- "TARGET_POWERPC64 && VECTOR_MEM_VSX_P (TImode) -- && (register_operand (operands[0], TImode) -- || register_operand (operands[1], TImode))" -+(define_insn "xxspltib_<mode>_nosplit" -+ [(set (match_operand:VSINT_842 0 "vsx_register_operand" "=wa,wa") -+ (match_operand:VSINT_842 1 "xxspltib_constant_nosplit" "jwM,wE"))] -+ "TARGET_P9_VECTOR" - { -- return rs6000_output_move_128bit (operands); -+ rtx op1 = operands[1]; -+ int value = 256; -+ int num_insns = -1; -+ -+ if (!xxspltib_constant_p (op1, <MODE>mode, &num_insns, &value) -+ || num_insns != 1) -+ gcc_unreachable (); -+ -+ operands[2] = GEN_INT (value & 0xff); -+ return "xxspltib %x0,%2"; - } -- [(set_attr "type" "vecstore,vecload,vecsimple,vecsimple,mffgpr,mftgpr,vecsimple,vecstore,vecload,store,load,store,load,*,*") -- (set_attr "length" "4,4,4,4,8,4,16,4,4,8,8,8,8,8,8")]) -+ [(set_attr "type" "vecperm")]) - --(define_insn "*vsx_movti_32bit" -- [(set (match_operand:TI 0 "nonimmediate_operand" "=Z,wa,wa,wa,v, v,wZ,Q,Y,????r,????r,????r,r") -- (match_operand:TI 1 "input_operand" "wa, Z,wa, O,W,wZ, v,r,r, Q, Y, r,n"))] -- "! TARGET_POWERPC64 && VECTOR_MEM_VSX_P (TImode) -- && (register_operand (operands[0], TImode) -- || register_operand (operands[1], TImode))" -+(define_insn_and_split "*xxspltib_<mode>_split" -+ [(set (match_operand:VSINT_842 0 "altivec_register_operand" "=v") -+ (match_operand:VSINT_842 1 "xxspltib_constant_split" "wS"))] -+ "TARGET_P9_VECTOR" -+ "#" -+ "&& 1" -+ [(const_int 0)] - { -- switch (which_alternative) -- { -- case 0: -- return "stxvd2x %x1,%y0"; -+ int value = 256; -+ int num_insns = -1; -+ rtx op0 = operands[0]; -+ rtx op1 = operands[1]; -+ rtx tmp = ((can_create_pseudo_p ()) -+ ? gen_reg_rtx (V16QImode) -+ : gen_lowpart (V16QImode, op0)); - -- case 1: -- return "lxvd2x %x0,%y1"; -+ if (!xxspltib_constant_p (op1, <MODE>mode, &num_insns, &value) -+ || num_insns != 2) -+ gcc_unreachable (); - -- case 2: -- return "xxlor %x0,%x1,%x1"; -+ emit_insn (gen_xxspltib_v16qi (tmp, GEN_INT (value))); - -- case 3: -- return "xxlxor %x0,%x0,%x0"; -+ if (<MODE>mode == V2DImode) -+ emit_insn (gen_vsx_sign_extend_qi_v2di (op0, tmp)); - -- case 4: -- return output_vec_const_move (operands); -+ else if (<MODE>mode == V4SImode) -+ emit_insn (gen_vsx_sign_extend_qi_v4si (op0, tmp)); - -- case 5: -- return "stvx %1,%y0"; -+ else if (<MODE>mode == V8HImode) -+ emit_insn (gen_altivec_vupkhsb (op0, tmp)); - -- case 6: -- return "lvx %0,%y1"; -- -- case 7: -- if (TARGET_STRING) -- return \"stswi %1,%P0,16\"; -- -- case 8: -- return \"#\"; -- -- case 9: -- /* If the address is not used in the output, we can use lsi. Otherwise, -- fall through to generating four loads. */ -- if (TARGET_STRING -- && ! reg_overlap_mentioned_p (operands[0], operands[1])) -- return \"lswi %0,%P1,16\"; -- /* ... fall through ... */ -- -- case 10: -- case 11: -- case 12: -- return \"#\"; -- default: -- gcc_unreachable (); -- } -+ else -+ gcc_unreachable (); -+ -+ DONE; - } -- [(set_attr "type" "vecstore,vecload,vecsimple,vecsimple,vecsimple,vecstore,vecload,store,store,load,load, *, *") -- (set_attr "update" " *, *, *, *, *, *, *, yes, yes, yes, yes, *, *") -- (set_attr "length" " 4, 4, 4, 4, 8, 4, 4, 16, 16, 16, 16,16,16") -- (set (attr "cell_micro") (if_then_else (match_test "TARGET_STRING") -- (const_string "always") -- (const_string "conditional")))]) -+ [(set_attr "type" "vecperm") -+ (set_attr "length" "8")]) -+ -+ -+;; Prefer using vector registers over GPRs. Prefer using ISA 3.0's XXSPLTISB -+;; or Altivec VSPLITW 0/-1 over XXLXOR/XXLORC to set a register to all 0's or -+;; all 1's, since the machine does not have to wait for the previous -+;; instruction using the register being set (such as a store waiting on a slow -+;; instruction). But generate XXLXOR/XXLORC if it will avoid a register move. -+ -+;; VSX store VSX load VSX move VSX->GPR GPR->VSX LQ (GPR) -+;; STQ (GPR) GPR load GPR store GPR move XXSPLTIB VSPLTISW -+;; VSX 0/-1 GPR 0/-1 VMX const GPR const LVX (VMX) STVX (VMX) -+(define_insn "*vsx_mov<mode>_64bit" -+ [(set (match_operand:VSX_M 0 "nonimmediate_operand" -+ "=ZwO, <VSa>, <VSa>, r, we, ?wQ, -+ ?&r, ??r, ??Y, ??r, wo, v, -+ ?<VSa>, *r, v, ??r, wZ, v") -+ -+ (match_operand:VSX_M 1 "input_operand" -+ "<VSa>, ZwO, <VSa>, we, r, r, -+ wQ, Y, r, r, wE, jwM, -+ ?jwM, jwM, W, W, v, wZ"))] -+ -+ "TARGET_POWERPC64 && VECTOR_MEM_VSX_P (<MODE>mode) -+ && (register_operand (operands[0], <MODE>mode) -+ || register_operand (operands[1], <MODE>mode))" -+{ -+ return rs6000_output_move_128bit (operands); -+} -+ [(set_attr "type" -+ "vecstore, vecload, vecsimple, mffgpr, mftgpr, load, -+ store, load, store, *, vecsimple, vecsimple, -+ vecsimple, *, *, *, vecstore, vecload") -+ -+ (set_attr "length" -+ "4, 4, 4, 8, 4, 8, -+ 8, 8, 8, 8, 4, 4, -+ 4, 8, 20, 20, 4, 4")]) -+ -+;; VSX store VSX load VSX move GPR load GPR store GPR move -+;; XXSPLTIB VSPLTISW VSX 0/-1 GPR 0/-1 VMX const GPR const -+;; LVX (VMX) STVX (VMX) -+(define_insn "*vsx_mov<mode>_32bit" -+ [(set (match_operand:VSX_M 0 "nonimmediate_operand" -+ "=ZwO, <VSa>, <VSa>, ??r, ??Y, ??r, -+ wo, v, ?<VSa>, *r, v, ??r, -+ wZ, v") -+ -+ (match_operand:VSX_M 1 "input_operand" -+ "<VSa>, ZwO, <VSa>, Y, r, r, -+ wE, jwM, ?jwM, jwM, W, W, -+ v, wZ"))] -+ -+ "!TARGET_POWERPC64 && VECTOR_MEM_VSX_P (<MODE>mode) -+ && (register_operand (operands[0], <MODE>mode) -+ || register_operand (operands[1], <MODE>mode))" -+{ -+ return rs6000_output_move_128bit (operands); -+} -+ [(set_attr "type" -+ "vecstore, vecload, vecsimple, load, store, *, -+ vecsimple, vecsimple, vecsimple, *, *, *, -+ vecstore, vecload") -+ -+ (set_attr "length" -+ "4, 4, 4, 16, 16, 16, -+ 4, 4, 4, 16, 20, 32, -+ 4, 4")]) - - ;; Explicit load/store expanders for the builtin functions - (define_expand "vsx_load_<mode>" -@@ -887,6 +912,140 @@ - "VECTOR_MEM_VSX_P (<MODE>mode)" - "") - -+;; Explicit load/store expanders for the builtin functions for lxvd2x, etc., -+;; when you really want their element-reversing behavior. -+(define_insn "vsx_ld_elemrev_v2di" -+ [(set (match_operand:V2DI 0 "vsx_register_operand" "=wa") -+ (vec_select:V2DI -+ (match_operand:V2DI 1 "memory_operand" "Z") -+ (parallel [(const_int 1) (const_int 0)])))] -+ "VECTOR_MEM_VSX_P (V2DImode) && !BYTES_BIG_ENDIAN" -+ "lxvd2x %x0,%y1" -+ [(set_attr "type" "vecload")]) -+ -+(define_insn "vsx_ld_elemrev_v2df" -+ [(set (match_operand:V2DF 0 "vsx_register_operand" "=wa") -+ (vec_select:V2DF -+ (match_operand:V2DF 1 "memory_operand" "Z") -+ (parallel [(const_int 1) (const_int 0)])))] -+ "VECTOR_MEM_VSX_P (V2DFmode) && !BYTES_BIG_ENDIAN" -+ "lxvd2x %x0,%y1" -+ [(set_attr "type" "vecload")]) -+ -+(define_insn "vsx_ld_elemrev_v4si" -+ [(set (match_operand:V4SI 0 "vsx_register_operand" "=wa") -+ (vec_select:V4SI -+ (match_operand:V4SI 1 "memory_operand" "Z") -+ (parallel [(const_int 3) (const_int 2) -+ (const_int 1) (const_int 0)])))] -+ "VECTOR_MEM_VSX_P (V4SImode) && !BYTES_BIG_ENDIAN" -+ "lxvw4x %x0,%y1" -+ [(set_attr "type" "vecload")]) -+ -+(define_insn "vsx_ld_elemrev_v4sf" -+ [(set (match_operand:V4SF 0 "vsx_register_operand" "=wa") -+ (vec_select:V4SF -+ (match_operand:V4SF 1 "memory_operand" "Z") -+ (parallel [(const_int 3) (const_int 2) -+ (const_int 1) (const_int 0)])))] -+ "VECTOR_MEM_VSX_P (V4SFmode) && !BYTES_BIG_ENDIAN" -+ "lxvw4x %x0,%y1" -+ [(set_attr "type" "vecload")]) -+ -+(define_insn "vsx_ld_elemrev_v8hi" -+ [(set (match_operand:V8HI 0 "vsx_register_operand" "=wa") -+ (vec_select:V8HI -+ (match_operand:V8HI 1 "memory_operand" "Z") -+ (parallel [(const_int 7) (const_int 6) -+ (const_int 5) (const_int 4) -+ (const_int 3) (const_int 2) -+ (const_int 1) (const_int 0)])))] -+ "VECTOR_MEM_VSX_P (V8HImode) && !BYTES_BIG_ENDIAN && TARGET_P9_VECTOR" -+ "lxvh8x %x0,%y1" -+ [(set_attr "type" "vecload")]) -+ -+(define_insn "vsx_ld_elemrev_v16qi" -+ [(set (match_operand:V16QI 0 "vsx_register_operand" "=wa") -+ (vec_select:V16QI -+ (match_operand:V16QI 1 "memory_operand" "Z") -+ (parallel [(const_int 15) (const_int 14) -+ (const_int 13) (const_int 12) -+ (const_int 11) (const_int 10) -+ (const_int 9) (const_int 8) -+ (const_int 7) (const_int 6) -+ (const_int 5) (const_int 4) -+ (const_int 3) (const_int 2) -+ (const_int 1) (const_int 0)])))] -+ "VECTOR_MEM_VSX_P (V16QImode) && !BYTES_BIG_ENDIAN && TARGET_P9_VECTOR" -+ "lxvb16x %x0,%y1" -+ [(set_attr "type" "vecload")]) -+ -+(define_insn "vsx_st_elemrev_v2df" -+ [(set (match_operand:V2DF 0 "memory_operand" "=Z") -+ (vec_select:V2DF -+ (match_operand:V2DF 1 "vsx_register_operand" "wa") -+ (parallel [(const_int 1) (const_int 0)])))] -+ "VECTOR_MEM_VSX_P (V2DFmode) && !BYTES_BIG_ENDIAN" -+ "stxvd2x %x1,%y0" -+ [(set_attr "type" "vecstore")]) -+ -+(define_insn "vsx_st_elemrev_v2di" -+ [(set (match_operand:V2DI 0 "memory_operand" "=Z") -+ (vec_select:V2DI -+ (match_operand:V2DI 1 "vsx_register_operand" "wa") -+ (parallel [(const_int 1) (const_int 0)])))] -+ "VECTOR_MEM_VSX_P (V2DImode) && !BYTES_BIG_ENDIAN" -+ "stxvd2x %x1,%y0" -+ [(set_attr "type" "vecstore")]) -+ -+(define_insn "vsx_st_elemrev_v4sf" -+ [(set (match_operand:V4SF 0 "memory_operand" "=Z") -+ (vec_select:V4SF -+ (match_operand:V4SF 1 "vsx_register_operand" "wa") -+ (parallel [(const_int 3) (const_int 2) -+ (const_int 1) (const_int 0)])))] -+ "VECTOR_MEM_VSX_P (V4SFmode) && !BYTES_BIG_ENDIAN" -+ "stxvw4x %x1,%y0" -+ [(set_attr "type" "vecstore")]) -+ -+(define_insn "vsx_st_elemrev_v4si" -+ [(set (match_operand:V4SI 0 "memory_operand" "=Z") -+ (vec_select:V4SI -+ (match_operand:V4SI 1 "vsx_register_operand" "wa") -+ (parallel [(const_int 3) (const_int 2) -+ (const_int 1) (const_int 0)])))] -+ "VECTOR_MEM_VSX_P (V4SImode) && !BYTES_BIG_ENDIAN" -+ "stxvw4x %x1,%y0" -+ [(set_attr "type" "vecstore")]) -+ -+(define_insn "vsx_st_elemrev_v8hi" -+ [(set (match_operand:V8HI 0 "memory_operand" "=Z") -+ (vec_select:V8HI -+ (match_operand:V8HI 1 "vsx_register_operand" "wa") -+ (parallel [(const_int 7) (const_int 6) -+ (const_int 5) (const_int 4) -+ (const_int 3) (const_int 2) -+ (const_int 1) (const_int 0)])))] -+ "VECTOR_MEM_VSX_P (V8HImode) && !BYTES_BIG_ENDIAN && TARGET_P9_VECTOR" -+ "stxvh8x %x1,%y0" -+ [(set_attr "type" "vecstore")]) -+ -+(define_insn "vsx_st_elemrev_v16qi" -+ [(set (match_operand:V16QI 0 "memory_operand" "=Z") -+ (vec_select:V16QI -+ (match_operand:V16QI 1 "vsx_register_operand" "wa") -+ (parallel [(const_int 15) (const_int 14) -+ (const_int 13) (const_int 12) -+ (const_int 11) (const_int 10) -+ (const_int 9) (const_int 8) -+ (const_int 7) (const_int 6) -+ (const_int 5) (const_int 4) -+ (const_int 3) (const_int 2) -+ (const_int 1) (const_int 0)])))] -+ "VECTOR_MEM_VSX_P (V16QImode) && !BYTES_BIG_ENDIAN && TARGET_P9_VECTOR" -+ "stxvb16x %x1,%y0" -+ [(set_attr "type" "vecstore")]) -+ - - ;; VSX vector floating point arithmetic instructions. The VSX scalar - ;; instructions are now combined with the insn for the traditional floating -@@ -1333,7 +1492,7 @@ - (match_operand:VSX_L 3 "vsx_register_operand" "<VSr>,<VSa>")))] - "VECTOR_MEM_VSX_P (<MODE>mode)" - "xxsel %x0,%x3,%x2,%x1" -- [(set_attr "type" "vecperm")]) -+ [(set_attr "type" "vecmove")]) - - (define_insn "*vsx_xxsel<mode>_uns" - [(set (match_operand:VSX_L 0 "vsx_register_operand" "=<VSr>,?<VSa>") -@@ -1344,7 +1503,7 @@ - (match_operand:VSX_L 3 "vsx_register_operand" "<VSr>,<VSa>")))] - "VECTOR_MEM_VSX_P (<MODE>mode)" - "xxsel %x0,%x3,%x2,%x1" -- [(set_attr "type" "vecperm")]) -+ [(set_attr "type" "vecmove")]) - - ;; Copy sign - (define_insn "vsx_copysign<mode>3" -@@ -1583,10 +1742,15 @@ - { - rtx op0 = operands[0]; - rtx op1 = operands[1]; -- rtx tmp = gen_reg_rtx (V2DFmode); -- int scale = INTVAL(operands[2]); -- if (scale != 0) -- rs6000_scale_v2df (tmp, op1, scale); -+ rtx tmp; -+ int scale = INTVAL (operands[2]); -+ if (scale == 0) -+ tmp = op1; -+ else -+ { -+ tmp = gen_reg_rtx (V2DFmode); -+ rs6000_scale_v2df (tmp, op1, scale); -+ } - emit_insn (gen_vsx_xvcvdpsxds (op0, tmp)); - DONE; - }) -@@ -1607,10 +1771,15 @@ - { - rtx op0 = operands[0]; - rtx op1 = operands[1]; -- rtx tmp = gen_reg_rtx (V2DFmode); -- int scale = INTVAL(operands[2]); -- if (scale != 0) -- rs6000_scale_v2df (tmp, op1, scale); -+ rtx tmp; -+ int scale = INTVAL (operands[2]); -+ if (scale == 0) -+ tmp = op1; -+ else -+ { -+ tmp = gen_reg_rtx (V2DFmode); -+ rs6000_scale_v2df (tmp, op1, scale); -+ } - emit_insn (gen_vsx_xvcvdpuxds (op0, tmp)); - DONE; - }) -@@ -1960,7 +2129,7 @@ - - return "xxlor %x0,%x1,%x1"; - } -- [(set_attr "type" "fp,vecsimple,mftgpr,mftgpr") -+ [(set_attr "type" "fpsimple,veclogical,mftgpr,mftgpr") - (set_attr "length" "4")]) - - (define_insn "*vsx_extract_<mode>_internal2" -@@ -1995,7 +2164,7 @@ - operands[3] = GEN_INT (fldDM); - return "xxpermdi %x0,%x1,%x1,%3"; - } -- [(set_attr "type" "fp,vecsimple,vecperm") -+ [(set_attr "type" "fpsimple,veclogical,vecperm") - (set_attr "length" "4")]) - - ;; Optimize extracting a single scalar element from memory if the scalar is in -@@ -2215,20 +2384,61 @@ - - ;; V2DF/V2DI splat - (define_insn "vsx_splat_<mode>" -- [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wd,wd,wd,?<VSa>,?<VSa>,?<VSa>") -+ [(set (match_operand:VSX_D 0 "vsx_register_operand" "=<VSa>,<VSa>,we") - (vec_duplicate:VSX_D -- (match_operand:<VS_scalar> 1 "splat_input_operand" "<VS_64reg>,f,Z,<VSa>,<VSa>,Z")))] -+ (match_operand:<VS_scalar> 1 "splat_input_operand" "<VS_64reg>,Z,b")))] - "VECTOR_MEM_VSX_P (<MODE>mode)" - "@ - xxpermdi %x0,%x1,%x1,0 -- xxpermdi %x0,%x1,%x1,0 - lxvdsx %x0,%y1 -- xxpermdi %x0,%x1,%x1,0 -- xxpermdi %x0,%x1,%x1,0 -- lxvdsx %x0,%y1" -- [(set_attr "type" "vecperm,vecperm,vecload,vecperm,vecperm,vecload")]) -+ mtvsrdd %x0,%1,%1" -+ [(set_attr "type" "vecperm,vecload,mftgpr")]) -+ -+;; V4SI splat (ISA 3.0) -+;; When SI's are allowed in VSX registers, add XXSPLTW support -+(define_expand "vsx_splat_<mode>" -+ [(set (match_operand:VSX_W 0 "vsx_register_operand" "") -+ (vec_duplicate:VSX_W -+ (match_operand:<VS_scalar> 1 "splat_input_operand" "")))] -+ "TARGET_P9_VECTOR" -+{ -+ if (MEM_P (operands[1])) -+ operands[1] = rs6000_address_for_fpconvert (operands[1]); -+ else if (!REG_P (operands[1])) -+ operands[1] = force_reg (<VS_scalar>mode, operands[1]); -+}) - --;; V4SF/V4SI splat -+(define_insn "*vsx_splat_v4si_internal" -+ [(set (match_operand:V4SI 0 "vsx_register_operand" "=wa,wa") -+ (vec_duplicate:V4SI -+ (match_operand:SI 1 "splat_input_operand" "r,Z")))] -+ "TARGET_P9_VECTOR" -+ "@ -+ mtvsrws %x0,%1 -+ lxvwsx %x0,%y1" -+ [(set_attr "type" "mftgpr,vecload")]) -+ -+;; V4SF splat (ISA 3.0) -+(define_insn_and_split "*vsx_splat_v4sf_internal" -+ [(set (match_operand:V4SF 0 "vsx_register_operand" "=wa,wa,wa") -+ (vec_duplicate:V4SF -+ (match_operand:SF 1 "splat_input_operand" "Z,wy,r")))] -+ "TARGET_P9_VECTOR" -+ "@ -+ lxvwsx %x0,%y1 -+ # -+ mtvsrws %x0,%1" -+ "&& reload_completed && vsx_register_operand (operands[1], SFmode)" -+ [(set (match_dup 0) -+ (unspec:V4SF [(match_dup 1)] UNSPEC_VSX_CVDPSPN)) -+ (set (match_dup 0) -+ (unspec:V4SF [(match_dup 0) -+ (const_int 0)] UNSPEC_VSX_XXSPLTW))] -+ "" -+ [(set_attr "type" "vecload,vecperm,mftgpr") -+ (set_attr "length" "4,8,4")]) -+ -+;; V4SF/V4SI splat from a vector element - (define_insn "vsx_xxspltw_<mode>" - [(set (match_operand:VSX_W 0 "vsx_register_operand" "=wf,?<VSa>") - (vec_duplicate:VSX_W -@@ -2471,21 +2681,50 @@ - (define_peephole - [(set (match_operand:P 0 "base_reg_operand" "") - (match_operand:P 1 "short_cint_operand" "")) -- (set (match_operand:VSX_M2 2 "vsx_register_operand" "") -- (mem:VSX_M2 (plus:P (match_dup 0) -- (match_operand:P 3 "int_reg_operand" ""))))] -+ (set (match_operand:VSX_M 2 "vsx_register_operand" "") -+ (mem:VSX_M (plus:P (match_dup 0) -+ (match_operand:P 3 "int_reg_operand" ""))))] - "TARGET_VSX && TARGET_P8_FUSION && !TARGET_P9_VECTOR" -- "li %0,%1\t\t\t# vector load fusion\;lx<VSX_M2:VSm>x %x2,%0,%3" -+ "li %0,%1\t\t\t# vector load fusion\;lx<VSX_M:VSm>x %x2,%0,%3" - [(set_attr "length" "8") - (set_attr "type" "vecload")]) - - (define_peephole - [(set (match_operand:P 0 "base_reg_operand" "") - (match_operand:P 1 "short_cint_operand" "")) -- (set (match_operand:VSX_M2 2 "vsx_register_operand" "") -- (mem:VSX_M2 (plus:P (match_operand:P 3 "int_reg_operand" "") -- (match_dup 0))))] -+ (set (match_operand:VSX_M 2 "vsx_register_operand" "") -+ (mem:VSX_M (plus:P (match_operand:P 3 "int_reg_operand" "") -+ (match_dup 0))))] - "TARGET_VSX && TARGET_P8_FUSION && !TARGET_P9_VECTOR" -- "li %0,%1\t\t\t# vector load fusion\;lx<VSX_M2:VSm>x %x2,%0,%3" -+ "li %0,%1\t\t\t# vector load fusion\;lx<VSX_M:VSm>x %x2,%0,%3" - [(set_attr "length" "8") - (set_attr "type" "vecload")]) -+ -+ -+;; ISA 3.0 vector extend sign support -+ -+(define_insn "vsx_sign_extend_qi_<mode>" -+ [(set (match_operand:VSINT_84 0 "vsx_register_operand" "=v") -+ (unspec:VSINT_84 -+ [(match_operand:V16QI 1 "vsx_register_operand" "v")] -+ UNSPEC_VSX_SIGN_EXTEND))] -+ "TARGET_P9_VECTOR" -+ "vextsb2<wd> %0,%1" -+ [(set_attr "type" "vecexts")]) -+ -+(define_insn "*vsx_sign_extend_hi_<mode>" -+ [(set (match_operand:VSINT_84 0 "vsx_register_operand" "=v") -+ (unspec:VSINT_84 -+ [(match_operand:V8HI 1 "vsx_register_operand" "v")] -+ UNSPEC_VSX_SIGN_EXTEND))] -+ "TARGET_P9_VECTOR" -+ "vextsh2<wd> %0,%1" -+ [(set_attr "type" "vecexts")]) -+ -+(define_insn "*vsx_sign_extend_si_v2di" -+ [(set (match_operand:V2DI 0 "vsx_register_operand" "=v") -+ (unspec:V2DI [(match_operand:V4SI 1 "vsx_register_operand" "v")] -+ UNSPEC_VSX_SIGN_EXTEND))] -+ "TARGET_P9_VECTOR" -+ "vextsw2d %0,%1" -+ [(set_attr "type" "vecexts")]) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rs6000/xfpu.md gcc-6-20160721/gcc/config/rs6000/xfpu.md ---- gcc-6.1.0/gcc/config/rs6000/xfpu.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rs6000/xfpu.md 2016-07-05 19:19:42.000000000 +0000 -@@ -55,7 +55,7 @@ - - (define_insn_reservation "fp-default" 2 - (and (and -- (eq_attr "type" "fp") -+ (eq_attr "type" "fp,fpsimple") - (eq_attr "fp_type" "fp_default")) - (eq_attr "cpu" "ppc405")) - "Xfpu_issue*2") -@@ -67,14 +67,14 @@ - - (define_insn_reservation "fp-addsub-s" 14 - (and (and -- (eq_attr "type" "fp") -+ (eq_attr "type" "fp,fpsimple") - (eq_attr "fp_type" "fp_addsub_s")) - (eq_attr "cpu" "ppc405")) - "Xfpu_issue*2,Xfpu_addsub") - - (define_insn_reservation "fp-addsub-d" 18 - (and (and -- (eq_attr "type" "fp") -+ (eq_attr "type" "fp,fpsimple") - (eq_attr "fp_type" "fp_addsub_d")) - (eq_attr "cpu" "ppc405")) - "Xfpu_issue*2,Xfpu_addsub") -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/rtems.h gcc-6-20160721/gcc/config/rtems.h ---- gcc-6.1.0/gcc/config/rtems.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/rtems.h 2016-05-10 07:03:07.000000000 +0000 -@@ -45,6 +45,6 @@ - #define LIB_SPEC "%{!qrtems: " STD_LIB_SPEC "} " \ - "%{!nostdlib: %{qrtems: --start-group \ - -lrtemsbsp -lrtemscpu \ -- -lc -lgcc --end-group %{!qnolinkcmds: -T linkcmds%s}}}" -+ -latomic -lc -lgcc --end-group %{!qnolinkcmds: -T linkcmds%s}}}" - - #define TARGET_POSIX_IO -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/s390/s390.c gcc-6-20160721/gcc/config/s390/s390.c ---- gcc-6.1.0/gcc/config/s390/s390.c 2016-04-20 07:16:03.000000000 +0000 -+++ gcc-6-20160721/gcc/config/s390/s390.c 2016-07-20 18:35:04.000000000 +0000 -@@ -791,7 +791,7 @@ - machine_mode mode ATTRIBUTE_UNUSED, - int ignore ATTRIBUTE_UNUSED) - { --#define MAX_ARGS 5 -+#define MAX_ARGS 6 - - tree fndecl = TREE_OPERAND (CALL_EXPR_FN (exp), 0); - unsigned int fcode = DECL_FUNCTION_CODE (fndecl); -@@ -12405,17 +12405,13 @@ - { - /* Store the alignment to be able to check if we can use - a larl/load-relative instruction. We only handle the cases -- that can go wrong (i.e. no FUNC_DECLs). If a symref does -- not have any flag we assume it to be correctly aligned. */ -- -- if (DECL_ALIGN (decl) % 64) -- SYMBOL_FLAG_SET_NOTALIGN8 (XEXP (rtl, 0)); -- -- if (DECL_ALIGN (decl) % 32) -- SYMBOL_FLAG_SET_NOTALIGN4 (XEXP (rtl, 0)); -- -+ that can go wrong (i.e. no FUNC_DECLs). */ - if (DECL_ALIGN (decl) == 0 || DECL_ALIGN (decl) % 16) - SYMBOL_FLAG_SET_NOTALIGN2 (XEXP (rtl, 0)); -+ else if (DECL_ALIGN (decl) % 32) -+ SYMBOL_FLAG_SET_NOTALIGN4 (XEXP (rtl, 0)); -+ else if (DECL_ALIGN (decl) % 64) -+ SYMBOL_FLAG_SET_NOTALIGN8 (XEXP (rtl, 0)); - } - - /* Literal pool references don't have a decl so they are handled -@@ -12423,18 +12419,14 @@ - entry to decide upon the alignment. */ - if (MEM_P (rtl) - && GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF -- && TREE_CONSTANT_POOL_ADDRESS_P (XEXP (rtl, 0)) -- && MEM_ALIGN (rtl) != 0 -- && GET_MODE_BITSIZE (GET_MODE (rtl)) != 0) -+ && TREE_CONSTANT_POOL_ADDRESS_P (XEXP (rtl, 0))) - { -- if (MEM_ALIGN (rtl) % 64) -- SYMBOL_FLAG_SET_NOTALIGN8 (XEXP (rtl, 0)); -- -- if (MEM_ALIGN (rtl) % 32) -- SYMBOL_FLAG_SET_NOTALIGN4 (XEXP (rtl, 0)); -- - if (MEM_ALIGN (rtl) == 0 || MEM_ALIGN (rtl) % 16) - SYMBOL_FLAG_SET_NOTALIGN2 (XEXP (rtl, 0)); -+ else if (MEM_ALIGN (rtl) % 32) -+ SYMBOL_FLAG_SET_NOTALIGN4 (XEXP (rtl, 0)); -+ else if (MEM_ALIGN (rtl) % 64) -+ SYMBOL_FLAG_SET_NOTALIGN8 (XEXP (rtl, 0)); - } - } - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/s390/s390.md gcc-6-20160721/gcc/config/s390/s390.md ---- gcc-6.1.0/gcc/config/s390/s390.md 2016-04-20 07:16:03.000000000 +0000 -+++ gcc-6-20160721/gcc/config/s390/s390.md 2016-05-10 09:02:37.000000000 +0000 -@@ -1295,7 +1295,7 @@ - (compare:VFCMP (match_operand:DF 0 "register_operand" "v") - (match_operand:DF 1 "register_operand" "v"))) - (clobber (match_scratch:V2DI 2 "=v"))] -- "TARGET_Z13 && TARGET_HARD_FLOAT" -+ "TARGET_VX && TARGET_HARD_FLOAT" - "wfc<asm_fcmp>dbs\t%v2,%v0,%v1" - [(set_attr "op_type" "VRR")]) - -@@ -4649,7 +4649,7 @@ - (unsigned_fix:DI (match_operand:DF 1 "register_operand" "f,v"))) - (unspec:DI [(match_operand:DI 2 "immediate_operand" "K,K")] UNSPEC_ROUND) - (clobber (reg:CC CC_REGNUM))] -- "TARGET_Z13 && TARGET_HARD_FLOAT" -+ "TARGET_VX && TARGET_HARD_FLOAT" - "@ - clgdbr\t%0,%h2,%1,0 - wclgdb\t%v0,%v1,0,%h2" -@@ -4664,7 +4664,7 @@ - (unspec:GPR [(match_operand:GPR 2 "immediate_operand" "K")] UNSPEC_ROUND) - (clobber (reg:CC CC_REGNUM))] - "TARGET_Z196 && TARGET_HARD_FLOAT -- && (!TARGET_Z13 || <GPR:MODE>mode != DImode || <FP:MODE>mode != DFmode)" -+ && (!TARGET_VX || <GPR:MODE>mode != DImode || <FP:MODE>mode != DFmode)" - "cl<GPR:gf><FP:xde><FP:bt>r\t%0,%h2,%1,0" - [(set_attr "op_type" "RRF") - (set_attr "type" "ftoi")]) -@@ -4684,7 +4684,7 @@ - (fix:DI (match_operand:DF 1 "register_operand" "f,v"))) - (unspec:DI [(match_operand:DI 2 "immediate_operand" "K,K")] UNSPEC_ROUND) - (clobber (reg:CC CC_REGNUM))] -- "TARGET_Z13 && TARGET_HARD_FLOAT" -+ "TARGET_VX && TARGET_HARD_FLOAT" - "@ - cgdbr\t%0,%h2,%1 - wcgdb\t%v0,%v1,0,%h2" -@@ -4792,7 +4792,7 @@ - (define_insn "*floatunsdidf2_z13" - [(set (match_operand:DF 0 "register_operand" "=f,v") - (unsigned_float:DF (match_operand:DI 1 "register_operand" "d,v")))] -- "TARGET_Z13 && TARGET_HARD_FLOAT" -+ "TARGET_VX && TARGET_HARD_FLOAT" - "@ - cdlgbr\t%0,0,%1,0 - wcdlgb\t%v0,%v1,0,0" -@@ -4896,7 +4896,7 @@ - (define_insn "*extendsfdf2_z13" - [(set (match_operand:DF 0 "register_operand" "=f,f,v") - (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "f,R,v")))] -- "TARGET_Z13 && TARGET_HARD_FLOAT" -+ "TARGET_VX && TARGET_HARD_FLOAT" - "@ - ldebr\t%0,%1 - ldeb\t%0,%1 -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/sparc/driver-sparc.c gcc-6-20160721/gcc/config/sparc/driver-sparc.c ---- gcc-6.1.0/gcc/config/sparc/driver-sparc.c 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/sparc/driver-sparc.c 2016-06-08 19:13:37.000000000 +0000 -@@ -75,6 +75,8 @@ - { "UltraSparc T4", "niagara4" }, - { "LEON", "leon3" }, - #endif -+ { "SPARC-M7", "niagara7" }, -+ { "SPARC-S7", "niagara7" }, - { NULL, NULL } - }; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/sparc/linux64.h gcc-6-20160721/gcc/config/sparc/linux64.h ---- gcc-6.1.0/gcc/config/sparc/linux64.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/sparc/linux64.h 2016-06-08 13:34:25.000000000 +0000 -@@ -164,22 +164,42 @@ - #endif - - /* Support for a compile-time default CPU, et cetera. The rules are: -- --with-cpu is ignored if -mcpu is specified. -- --with-tune is ignored if -mtune is specified. -+ --with-cpu is ignored if -mcpu is specified; likewise --with-cpu-32 -+ and --with-cpu-64. -+ --with-tune is ignored if -mtune is specified; likewise --with-tune-32 -+ and --with-tune-64. - --with-float is ignored if -mhard-float, -msoft-float, -mfpu, or -mno-fpu - are specified. - In the SPARC_BI_ARCH compiler we cannot pass %{!mcpu=*:-mcpu=%(VALUE)} - here, otherwise say -mcpu=v7 would be passed even when -m64. -- CC1_SPEC above takes care of this instead. */ -+ CC1_SPEC above takes care of this instead. -+ -+ Note that the order of the cpu* and tune* options matters: the -+ config.gcc file always sets with_cpu to some value, even if the -+ user didn't use --with-cpu when invoking the configure script. -+ This value is based on the target name. Therefore we have to make -+ sure that --with-cpu-32 takes precedence to --with-cpu in < v9 -+ systems, and that --with-cpu-64 takes precedence to --with-cpu in -+ >= v9 systems. As for the tune* options, in some platforms -+ config.gcc also sets a default value for it if the user didn't use -+ --with-tune when invoking the configure script. */ - #undef OPTION_DEFAULT_SPECS - #if DEFAULT_ARCH32_P - #define OPTION_DEFAULT_SPECS \ -+ {"cpu_32", "%{!m64:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \ -+ {"cpu_64", "%{m64:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \ - {"cpu", "%{!m64:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \ -+ {"tune_32", "%{!m64:%{!mtune=*:-mtune=%(VALUE)}}" }, \ -+ {"tune_64", "%{m64:%{!mtune=*:-mtune=%(VALUE)}}" }, \ - {"tune", "%{!mtune=*:-mtune=%(VALUE)}" }, \ - {"float", "%{!msoft-float:%{!mhard-float:%{!mfpu:%{!mno-fpu:-m%(VALUE)-float}}}}" } - #else - #define OPTION_DEFAULT_SPECS \ -+ {"cpu_32", "%{m32:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \ -+ {"cpu_64", "%{!m32:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \ - {"cpu", "%{!m32:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \ -+ {"tune_32", "%{m32:%{!mtune=*:-mtune=%(VALUE)}}" }, \ -+ {"tune_64", "%{!m32:%{!mtune=*:-mtune=%(VALUE)}}" }, \ - {"tune", "%{!mtune=*:-mtune=%(VALUE)}" }, \ - {"float", "%{!msoft-float:%{!mhard-float:%{!mfpu:%{!mno-fpu:-m%(VALUE)-float}}}}" } - #endif -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/sparc/niagara4.md gcc-6-20160721/gcc/config/sparc/niagara4.md ---- gcc-6.1.0/gcc/config/sparc/niagara4.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/sparc/niagara4.md 2016-06-08 13:34:25.000000000 +0000 -@@ -75,6 +75,13 @@ - (eq_attr "fptype" "double"))) - "n4_slot1") - -+;; The latency numbers for VIS instructions in the reservations below -+;; reflect empirical results, and don't match with the documented -+;; latency numbers in the T4 Processor Supplement. This is because -+;; the HW chaps didn't feel it necessary to document the complexity in -+;; the PRM, and just assigned a latency of 11 to all/most of the VIS -+;; instructions. -+ - (define_insn_reservation "n4_vis_move_11cycle" 11 - (and (eq_attr "cpu" "niagara4") - (and (eq_attr "type" "vismv") -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/sparc/niagara7.md gcc-6-20160721/gcc/config/sparc/niagara7.md ---- gcc-6.1.0/gcc/config/sparc/niagara7.md 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/config/sparc/niagara7.md 2016-06-08 13:34:25.000000000 +0000 -@@ -0,0 +1,136 @@ -+;; Scheduling description for Niagara-7 -+;; Copyright (C) 2016 Free Software Foundation, Inc. -+;; -+;; This file is part of GCC. -+;; -+;; GCC is free software; you can redistribute it and/or modify -+;; it under the terms of the GNU General Public License as published by -+;; the Free Software Foundation; either version 3, or (at your option) -+;; any later version. -+;; -+;; GCC is distributed in the hope that it will be useful, -+;; but WITHOUT ANY WARRANTY; without even the implied warranty of -+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+;; GNU General Public License for more details. -+;; -+;; You should have received a copy of the GNU General Public License -+;; along with GCC; see the file COPYING3. If not see -+;; <http://www.gnu.org/licenses/>. -+ -+(define_automaton "niagara7_0") -+ -+(define_cpu_unit "n7_slot0,n7_slot1,n7_slot2" "niagara7_0") -+(define_reservation "n7_single_issue" "n7_slot0 + n7_slot1 + n7_slot2") -+ -+(define_cpu_unit "n7_load_store" "niagara7_0") -+ -+(define_insn_reservation "n7_single" 1 -+ (and (eq_attr "cpu" "niagara7") -+ (eq_attr "type" "multi,savew,flushw,trap")) -+ "n7_single_issue") -+ -+(define_insn_reservation "n7_iflush" 27 -+ (and (eq_attr "cpu" "niagara7") -+ (eq_attr "type" "iflush")) -+ "(n7_slot0 | n7_slot1), nothing*26") -+ -+(define_insn_reservation "n7_integer" 1 -+ (and (eq_attr "cpu" "niagara7") -+ (eq_attr "type" "ialu,ialuX,shift,cmove,compare")) -+ "(n7_slot0 | n7_slot1)") -+ -+(define_insn_reservation "n7_imul" 12 -+ (and (eq_attr "cpu" "niagara7") -+ (eq_attr "type" "imul")) -+ "n7_slot1, nothing*11") -+ -+(define_insn_reservation "n7_idiv" 35 -+ (and (eq_attr "cpu" "niagara7") -+ (eq_attr "type" "idiv")) -+ "n7_slot1, nothing*34") -+ -+(define_insn_reservation "n7_load" 5 -+ (and (eq_attr "cpu" "niagara7") -+ (eq_attr "type" "load,fpload,sload")) -+ "(n7_slot0 + n7_load_store), nothing*4") -+ -+(define_insn_reservation "n7_store" 1 -+ (and (eq_attr "cpu" "niagara7") -+ (eq_attr "type" "store,fpstore")) -+ "(n7_slot0 | n7_slot2) + n7_load_store") -+ -+(define_insn_reservation "n7_cti" 1 -+ (and (eq_attr "cpu" "niagara7") -+ (eq_attr "type" "cbcond,uncond_cbcond,branch,call,sibcall,call_no_delay_slot,uncond_branch,return")) -+ "n7_slot1") -+ -+(define_insn_reservation "n7_fp" 11 -+ (and (eq_attr "cpu" "niagara7") -+ (eq_attr "type" "fpmove,fpcmove,fpcrmove,fp,fpcmp,fpmul")) -+ "n7_slot1, nothing*10") -+ -+(define_insn_reservation "n7_array" 12 -+ (and (eq_attr "cpu" "niagara7") -+ (eq_attr "type" "array,edge,edgen")) -+ "n7_slot1, nothing*11") -+ -+(define_insn_reservation "n7_fpdivs" 24 -+ (and (eq_attr "cpu" "niagara7") -+ (eq_attr "type" "fpdivs,fpsqrts")) -+ "n7_slot1, nothing*23") -+ -+(define_insn_reservation "n7_fpdivd" 37 -+ (and (eq_attr "cpu" "niagara7") -+ (eq_attr "type" "fpdivd,fpsqrtd")) -+ "n7_slot1, nothing*36") -+ -+(define_insn_reservation "n7_lzd" 12 -+ (and (eq_attr "cpu" "niagara7") -+ (eq_attr "type" "lzd")) -+ "(n7_slot0 | n7_slot1), nothing*11") -+ -+;; There is an internal unit called the "V3 pipe", that was originally -+;; intended to process some of the short cryptographic instructions. -+;; However, as soon as in the T4 several of the VIS instructions -+;; (notably non-FP instructions) have been moved to the V3 pipe. -+;; Consequently, these instructions feature a latency of 3 instead of -+;; 11 or 12 cycles, provided their consumers also execute in the V3 -+;; pipe. -+;; -+;; This is modelled here with a bypass. -+ -+(define_insn_reservation "n7_vis_fga" 11 -+ (and (eq_attr "cpu" "niagara7") -+ (eq_attr "type" "fga,gsr")) -+ "n7_slot1, nothing*10") -+ -+(define_insn_reservation "n7_vis_fgm" 11 -+ (and (eq_attr "cpu" "niagara7") -+ (eq_attr "type" "fgm_pack,fgm_mul,pdist")) -+ "n7_slot1, nothing*10") -+ -+(define_insn_reservation "n7_vis_move_v3pipe" 11 -+ (and (eq_attr "cpu" "niagara7") -+ (and (eq_attr "type" "vismv") -+ (eq_attr "v3pipe" "true"))) -+ "n7_slot1") -+ -+(define_insn_reservation "n7_vis_move_11cycle" 11 -+ (and (eq_attr "cpu" "niagara7") -+ (and (eq_attr "type" "vismv") -+ (eq_attr "v3pipe" "false"))) -+ "n7_slot1, nothing*10") -+ -+(define_insn_reservation "n7_vis_logical_v3pipe" 11 -+ (and (eq_attr "cpu" "niagara7") -+ (and (eq_attr "type" "visl,pdistn") -+ (eq_attr "v3pipe" "true"))) -+ "n7_slot1, nothing*2") -+ -+(define_insn_reservation "n7_vis_logical_11cycle" 11 -+ (and (eq_attr "cpu" "niagara7") -+ (and (eq_attr "type" "visl") -+ (eq_attr "v3pipe" "false"))) -+ "n7_slot1, nothing*10") -+ -+(define_bypass 3 "*_v3pipe" "*_v3pipe") -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/sparc/sol2.h gcc-6-20160721/gcc/config/sparc/sol2.h ---- gcc-6.1.0/gcc/config/sparc/sol2.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/sparc/sol2.h 2016-06-08 13:34:25.000000000 +0000 -@@ -165,13 +165,22 @@ - #define ASM_CPU64_DEFAULT_SPEC AS_SPARC64_FLAG AS_NIAGARA4_FLAG - #endif - -+#if TARGET_CPU_DEFAULT == TARGET_CPU_niagara7 -+#undef CPP_CPU64_DEFAULT_SPEC -+#define CPP_CPU64_DEFAULT_SPEC "" -+#undef ASM_CPU32_DEFAULT_SPEC -+#define ASM_CPU32_DEFAUILT_SPEC AS_SPARC32_FLAG AS_NIAGARA7_FLAG -+#undef ASM_CPU64_DEFAULT_SPEC -+#define ASM_CPU64_DEFAULT_SPEC AS_SPARC64_FLAG AS_NIAGARA7_FLAG -+#endif -+ - #undef CPP_CPU_SPEC - #define CPP_CPU_SPEC "\ - %{mcpu=sparclet|mcpu=tsc701:-D__sparclet__} \ - %{mcpu=sparclite|mcpu-f930|mcpu=f934:-D__sparclite__} \ - %{mcpu=v8:" DEF_ARCH32_SPEC("-D__sparcv8") "} \ - %{mcpu=supersparc:-D__supersparc__ " DEF_ARCH32_SPEC("-D__sparcv8") "} \ --%{mcpu=v9|mcpu=ultrasparc|mcpu=ultrasparc3|mcpu=niagara|mcpu=niagara2|mcpu=niagara3|mcpu=niagara4:" DEF_ARCH32_SPEC("-D__sparcv8") "} \ -+%{mcpu=v9|mcpu=ultrasparc|mcpu=ultrasparc3|mcpu=niagara|mcpu=niagara2|mcpu=niagara3|mcpu=niagara4|mcpu=niagara7:" DEF_ARCH32_SPEC("-D__sparcv8") "} \ - %{!mcpu*:%(cpp_cpu_default)} \ - " - -@@ -231,22 +240,42 @@ - #endif - - /* Support for a compile-time default CPU, et cetera. The rules are: -- --with-cpu is ignored if -mcpu is specified. -- --with-tune is ignored if -mtune is specified. -+ --with-cpu is ignored if -mcpu is specified; likewise --with-cpu-32 -+ and --with-cpu-64. -+ --with-tune is ignored if -mtune is specified; likewise --with-tune-32 -+ and --with-tune-64. - --with-float is ignored if -mhard-float, -msoft-float, -mfpu, or -mno-fpu - are specified. - In the SPARC_BI_ARCH compiler we cannot pass %{!mcpu=*:-mcpu=%(VALUE)} - here, otherwise say -mcpu=v7 would be passed even when -m64. -- CC1_SPEC above takes care of this instead. */ -+ CC1_SPEC above takes care of this instead. -+ -+ Note that the order of the cpu* and tune* options matters: the -+ config.gcc file always sets with_cpu to some value, even if the -+ user didn't use --with-cpu when invoking the configure script. -+ This value is based on the target name. Therefore we have to make -+ sure that --with-cpu-32 takes precedence to --with-cpu in < v9 -+ systems, and that --with-cpu-64 takes precedence to --with-cpu in -+ >= v9 systems. As for the tune* options, in some platforms -+ config.gcc also sets a default value for it if the user didn't use -+ --with-tune when invoking the configure script. */ - #undef OPTION_DEFAULT_SPECS - #if DEFAULT_ARCH32_P - #define OPTION_DEFAULT_SPECS \ -+ {"cpu_32", "%{!m64:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \ -+ {"cpu_64", "%{m64:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \ - {"cpu", "%{!m64:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \ -+ {"tune_32", "%{!m64:%{!mtune=*:-mtune=%(VALUE)}}" }, \ -+ {"tune_64", "%{m64:%{!mtune=*:-mtune=%(VALUE)}}" }, \ - {"tune", "%{!mtune=*:-mtune=%(VALUE)}" }, \ - {"float", "%{!msoft-float:%{!mhard-float:%{!mfpu:%{!mno-fpu:-m%(VALUE)-float}}}}" } - #else - #define OPTION_DEFAULT_SPECS \ -+ {"cpu_32", "%{m32:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \ -+ {"cpu_64", "%{!m32:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \ - {"cpu", "%{!m32:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \ -+ {"tune_32", "%{m32:%{!mtune=*:-mtune=%(VALUE)}}" }, \ -+ {"tune_64", "%{!m32:%{!mtune=*:-mtune=%(VALUE)}}" }, \ - {"tune", "%{!mtune=*:-mtune=%(VALUE)}" }, \ - {"float", "%{!msoft-float:%{!mhard-float:%{!mfpu:%{!mno-fpu:-m%(VALUE)-float}}}}" } - #endif -@@ -260,7 +289,8 @@ - %{mcpu=niagara2:" DEF_ARCH32_SPEC("-xarch=v8plusb") DEF_ARCH64_SPEC("-xarch=v9b") "} \ - %{mcpu=niagara3:" DEF_ARCH32_SPEC("-xarch=v8plus" AS_NIAGARA3_FLAG) DEF_ARCH64_SPEC("-xarch=v9" AS_NIAGARA3_FLAG) "} \ - %{mcpu=niagara4:" DEF_ARCH32_SPEC(AS_SPARC32_FLAG AS_NIAGARA4_FLAG) DEF_ARCH64_SPEC(AS_SPARC64_FLAG AS_NIAGARA4_FLAG) "} \ --%{!mcpu=niagara4:%{!mcpu=niagara3:%{!mcpu=niagara2:%{!mcpu=niagara:%{!mcpu=ultrasparc3:%{!mcpu=ultrasparc:%{!mcpu=v9:%{mcpu*:" DEF_ARCH32_SPEC("-xarch=v8") DEF_ARCH64_SPEC("-xarch=v9") "}}}}}}}} \ -+%{mcpu=niagara7:" DEF_ARCH32_SPEC(AS_SPARC32_FLAG AS_NIAGARA7_FLAG) DEF_ARCH64_SPEC(AS_SPARC64_FLAG AS_NIAGARA7_FLAG) "} \ -+%{!mcpu=niagara7:%{!mcpu=niagara4:%{!mcpu=niagara3:%{!mcpu=niagara2:%{!mcpu=niagara:%{!mcpu=ultrasparc3:%{!mcpu=ultrasparc:%{!mcpu=v9:%{mcpu*:" DEF_ARCH32_SPEC("-xarch=v8") DEF_ARCH64_SPEC("-xarch=v9") "}}}}}}}}} \ - %{!mcpu*:%(asm_cpu_default)} \ - " - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/sparc/sparc-c.c gcc-6-20160721/gcc/config/sparc/sparc-c.c ---- gcc-6.1.0/gcc/config/sparc/sparc-c.c 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/sparc/sparc-c.c 2016-06-08 13:34:25.000000000 +0000 -@@ -40,7 +40,12 @@ - cpp_assert (parse_in, "machine=sparc"); - } - -- if (TARGET_VIS3) -+ if (TARGET_VIS4) -+ { -+ cpp_define (parse_in, "__VIS__=0x400"); -+ cpp_define (parse_in, "__VIS__=0x400"); -+ } -+ else if (TARGET_VIS3) - { - cpp_define (parse_in, "__VIS__=0x300"); - cpp_define (parse_in, "__VIS=0x300"); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/sparc/sparc-opts.h gcc-6-20160721/gcc/config/sparc/sparc-opts.h ---- gcc-6.1.0/gcc/config/sparc/sparc-opts.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/sparc/sparc-opts.h 2016-06-08 13:34:25.000000000 +0000 -@@ -45,6 +45,7 @@ - PROCESSOR_NIAGARA2, - PROCESSOR_NIAGARA3, - PROCESSOR_NIAGARA4, -+ PROCESSOR_NIAGARA7, - PROCESSOR_NATIVE - }; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/sparc/sparc.c gcc-6-20160721/gcc/config/sparc/sparc.c ---- gcc-6.1.0/gcc/config/sparc/sparc.c 2016-04-12 20:55:05.000000000 +0000 -+++ gcc-6-20160721/gcc/config/sparc/sparc.c 2016-06-08 13:34:25.000000000 +0000 -@@ -423,6 +423,30 @@ - 0, /* shift penalty */ - }; - -+static const -+struct processor_costs niagara7_costs = { -+ COSTS_N_INSNS (5), /* int load */ -+ COSTS_N_INSNS (5), /* int signed load */ -+ COSTS_N_INSNS (5), /* int zeroed load */ -+ COSTS_N_INSNS (5), /* float load */ -+ COSTS_N_INSNS (11), /* fmov, fneg, fabs */ -+ COSTS_N_INSNS (11), /* fadd, fsub */ -+ COSTS_N_INSNS (11), /* fcmp */ -+ COSTS_N_INSNS (11), /* fmov, fmovr */ -+ COSTS_N_INSNS (11), /* fmul */ -+ COSTS_N_INSNS (24), /* fdivs */ -+ COSTS_N_INSNS (37), /* fdivd */ -+ COSTS_N_INSNS (24), /* fsqrts */ -+ COSTS_N_INSNS (37), /* fsqrtd */ -+ COSTS_N_INSNS (12), /* imul */ -+ COSTS_N_INSNS (12), /* imulX */ -+ 0, /* imul bit factor */ -+ COSTS_N_INSNS (51), /* idiv, average of 42 - 61 cycle range */ -+ COSTS_N_INSNS (35), /* idivX, average of 26 - 44 cycle range */ -+ COSTS_N_INSNS (1), /* movcc/movr */ -+ 0, /* shift penalty */ -+}; -+ - static const struct processor_costs *sparc_costs = &cypress_costs; - - #ifdef HAVE_AS_RELAX_OPTION -@@ -1175,6 +1199,8 @@ - fprintf (stderr, "VIS2 "); - if (flags & MASK_VIS3) - fprintf (stderr, "VIS3 "); -+ if (flags & MASK_VIS4) -+ fprintf (stderr, "VIS4 "); - if (flags & MASK_CBCOND) - fprintf (stderr, "CBCOND "); - if (flags & MASK_DEPRECATED_V8_INSNS) -@@ -1238,6 +1264,7 @@ - { TARGET_CPU_niagara2, PROCESSOR_NIAGARA2 }, - { TARGET_CPU_niagara3, PROCESSOR_NIAGARA3 }, - { TARGET_CPU_niagara4, PROCESSOR_NIAGARA4 }, -+ { TARGET_CPU_niagara7, PROCESSOR_NIAGARA7 }, - { -1, PROCESSOR_V7 } - }; - const struct cpu_default *def; -@@ -1287,6 +1314,9 @@ - /* UltraSPARC T4 */ - { "niagara4", MASK_ISA, - MASK_V9|MASK_POPC|MASK_VIS2|MASK_VIS3|MASK_FMAF|MASK_CBCOND }, -+ /* UltraSPARC M7 */ -+ { "niagara7", MASK_ISA, -+ MASK_V9|MASK_POPC|MASK_VIS2|MASK_VIS3|MASK_VIS4|MASK_FMAF|MASK_CBCOND }, - }; - const struct cpu_table *cpu; - unsigned int i; -@@ -1416,6 +1446,9 @@ - #ifndef HAVE_AS_SPARC4 - & ~MASK_CBCOND - #endif -+#ifndef HAVE_AS_SPARC5_VIS4 -+ & ~MASK_VIS4 -+#endif - #ifndef HAVE_AS_LEON - & ~(MASK_LEON | MASK_LEON3) - #endif -@@ -1434,10 +1467,15 @@ - if (TARGET_VIS3) - target_flags |= MASK_VIS2 | MASK_VIS; - -- /* Don't allow -mvis, -mvis2, -mvis3, or -mfmaf if FPU is -+ /* -mvis4 implies -mvis3, -mvis2 and -mvis */ -+ if (TARGET_VIS4) -+ target_flags |= MASK_VIS3 | MASK_VIS2 | MASK_VIS; -+ -+ /* Don't allow -mvis, -mvis2, -mvis3, -mvis4 or -mfmaf if FPU is - disabled. */ - if (! TARGET_FPU) -- target_flags &= ~(MASK_VIS | MASK_VIS2 | MASK_VIS3 | MASK_FMAF); -+ target_flags &= ~(MASK_VIS | MASK_VIS2 | MASK_VIS3 | MASK_VIS4 -+ | MASK_FMAF); - - /* -mvis assumes UltraSPARC+, so we are sure v9 instructions - are available. -@@ -1471,7 +1509,8 @@ - || sparc_cpu == PROCESSOR_NIAGARA - || sparc_cpu == PROCESSOR_NIAGARA2 - || sparc_cpu == PROCESSOR_NIAGARA3 -- || sparc_cpu == PROCESSOR_NIAGARA4)) -+ || sparc_cpu == PROCESSOR_NIAGARA4 -+ || sparc_cpu == PROCESSOR_NIAGARA7)) - align_functions = 32; - - /* Validate PCC_STRUCT_RETURN. */ -@@ -1535,6 +1574,9 @@ - case PROCESSOR_NIAGARA4: - sparc_costs = &niagara4_costs; - break; -+ case PROCESSOR_NIAGARA7: -+ sparc_costs = &niagara7_costs; -+ break; - case PROCESSOR_NATIVE: - gcc_unreachable (); - }; -@@ -1566,6 +1608,29 @@ - if (TARGET_DEBUG_OPTIONS) - dump_target_flags ("Final target_flags", target_flags); - -+ /* PARAM_SIMULTANEOUS_PREFETCHES is the number of prefetches that -+ can run at the same time. More important, it is the threshold -+ defining when additional prefetches will be dropped by the -+ hardware. -+ -+ The UltraSPARC-III features a documented prefetch queue with a -+ size of 8. Additional prefetches issued in the cpu are -+ dropped. -+ -+ Niagara processors are different. In these processors prefetches -+ are handled much like regular loads. The L1 miss buffer is 32 -+ entries, but prefetches start getting affected when 30 entries -+ become occupied. That occupation could be a mix of regular loads -+ and prefetches though. And that buffer is shared by all threads. -+ Once the threshold is reached, if the core is running a single -+ thread the prefetch will retry. If more than one thread is -+ running, the prefetch will be dropped. -+ -+ All this makes it very difficult to determine how many -+ simultaneous prefetches can be issued simultaneously, even in a -+ single-threaded program. Experimental results show that setting -+ this parameter to 32 works well when the number of threads is not -+ high. */ - maybe_set_param_value (PARAM_SIMULTANEOUS_PREFETCHES, - ((sparc_cpu == PROCESSOR_ULTRASPARC - || sparc_cpu == PROCESSOR_NIAGARA -@@ -1574,20 +1639,55 @@ - || sparc_cpu == PROCESSOR_NIAGARA4) - ? 2 - : (sparc_cpu == PROCESSOR_ULTRASPARC3 -- ? 8 : 3)), -+ ? 8 : (sparc_cpu == PROCESSOR_NIAGARA7 -+ ? 32 : 3))), - global_options.x_param_values, - global_options_set.x_param_values); -- maybe_set_param_value (PARAM_L1_CACHE_LINE_SIZE, -+ -+ /* For PARAM_L1_CACHE_LINE_SIZE we use the default 32 bytes (see -+ params.def), so no maybe_set_param_value is needed. -+ -+ The Oracle SPARC Architecture (previously the UltraSPARC -+ Architecture) specification states that when a PREFETCH[A] -+ instruction is executed an implementation-specific amount of data -+ is prefetched, and that it is at least 64 bytes long (aligned to -+ at least 64 bytes). -+ -+ However, this is not correct. The M7 (and implementations prior -+ to that) does not guarantee a 64B prefetch into a cache if the -+ line size is smaller. A single cache line is all that is ever -+ prefetched. So for the M7, where the L1D$ has 32B lines and the -+ L2D$ and L3 have 64B lines, a prefetch will prefetch 64B into the -+ L2 and L3, but only 32B are brought into the L1D$. (Assuming it -+ is a read_n prefetch, which is the only type which allocates to -+ the L1.) */ -+ -+ /* PARAM_L1_CACHE_SIZE is the size of the L1D$ (most SPARC chips use -+ Hardvard level-1 caches) in kilobytes. Both UltraSPARC and -+ Niagara processors feature a L1D$ of 16KB. */ -+ maybe_set_param_value (PARAM_L1_CACHE_SIZE, - ((sparc_cpu == PROCESSOR_ULTRASPARC - || sparc_cpu == PROCESSOR_ULTRASPARC3 - || sparc_cpu == PROCESSOR_NIAGARA - || sparc_cpu == PROCESSOR_NIAGARA2 - || sparc_cpu == PROCESSOR_NIAGARA3 -- || sparc_cpu == PROCESSOR_NIAGARA4) -- ? 64 : 32), -+ || sparc_cpu == PROCESSOR_NIAGARA4 -+ || sparc_cpu == PROCESSOR_NIAGARA7) -+ ? 16 : 64), - global_options.x_param_values, - global_options_set.x_param_values); - -+ -+ /* PARAM_L2_CACHE_SIZE is the size fo the L2 in kilobytes. Note -+ that 512 is the default in params.def. */ -+ maybe_set_param_value (PARAM_L2_CACHE_SIZE, -+ (sparc_cpu == PROCESSOR_NIAGARA4 -+ ? 128 : (sparc_cpu == PROCESSOR_NIAGARA7 -+ ? 256 : 512)), -+ global_options.x_param_values, -+ global_options_set.x_param_values); -+ -+ - /* Disable save slot sharing for call-clobbered registers by default. - The IRA sharing algorithm works on single registers only and this - pessimizes for double floating-point registers. */ -@@ -9178,7 +9278,8 @@ - && sparc_cpu != PROCESSOR_NIAGARA - && sparc_cpu != PROCESSOR_NIAGARA2 - && sparc_cpu != PROCESSOR_NIAGARA3 -- && sparc_cpu != PROCESSOR_NIAGARA4) -+ && sparc_cpu != PROCESSOR_NIAGARA4 -+ && sparc_cpu != PROCESSOR_NIAGARA7) - emit_insn (gen_flushsi (validize_mem (adjust_address (m_tramp, SImode, 8)))); - - /* Call __enable_execute_stack after writing onto the stack to make sure -@@ -9223,7 +9324,8 @@ - && sparc_cpu != PROCESSOR_NIAGARA - && sparc_cpu != PROCESSOR_NIAGARA2 - && sparc_cpu != PROCESSOR_NIAGARA3 -- && sparc_cpu != PROCESSOR_NIAGARA4) -+ && sparc_cpu != PROCESSOR_NIAGARA4 -+ && sparc_cpu != PROCESSOR_NIAGARA7) - emit_insn (gen_flushdi (validize_mem (adjust_address (m_tramp, DImode, 8)))); - - /* Call __enable_execute_stack after writing onto the stack to make sure -@@ -9419,7 +9521,8 @@ - || sparc_cpu == PROCESSOR_NIAGARA2 - || sparc_cpu == PROCESSOR_NIAGARA3) - return 0; -- if (sparc_cpu == PROCESSOR_NIAGARA4) -+ if (sparc_cpu == PROCESSOR_NIAGARA4 -+ || sparc_cpu == PROCESSOR_NIAGARA7) - return 2; - if (sparc_cpu == PROCESSOR_ULTRASPARC - || sparc_cpu == PROCESSOR_ULTRASPARC3) -@@ -9442,6 +9545,7 @@ - default: - return 1; - case PROCESSOR_NIAGARA4: -+ case PROCESSOR_NIAGARA7: - case PROCESSOR_V9: - /* Assume V9 processors are capable of at least dual-issue. */ - return 2; -@@ -10007,6 +10111,34 @@ - SPARC_BUILTIN_XMULX, - SPARC_BUILTIN_XMULXHI, - -+ /* VIS 4.0 builtins. */ -+ SPARC_BUILTIN_FPADD8, -+ SPARC_BUILTIN_FPADDS8, -+ SPARC_BUILTIN_FPADDUS8, -+ SPARC_BUILTIN_FPADDUS16, -+ SPARC_BUILTIN_FPCMPLE8, -+ SPARC_BUILTIN_FPCMPGT8, -+ SPARC_BUILTIN_FPCMPULE16, -+ SPARC_BUILTIN_FPCMPUGT16, -+ SPARC_BUILTIN_FPCMPULE32, -+ SPARC_BUILTIN_FPCMPUGT32, -+ SPARC_BUILTIN_FPMAX8, -+ SPARC_BUILTIN_FPMAX16, -+ SPARC_BUILTIN_FPMAX32, -+ SPARC_BUILTIN_FPMAXU8, -+ SPARC_BUILTIN_FPMAXU16, -+ SPARC_BUILTIN_FPMAXU32, -+ SPARC_BUILTIN_FPMIN8, -+ SPARC_BUILTIN_FPMIN16, -+ SPARC_BUILTIN_FPMIN32, -+ SPARC_BUILTIN_FPMINU8, -+ SPARC_BUILTIN_FPMINU16, -+ SPARC_BUILTIN_FPMINU32, -+ SPARC_BUILTIN_FPSUB8, -+ SPARC_BUILTIN_FPSUBS8, -+ SPARC_BUILTIN_FPSUBUS8, -+ SPARC_BUILTIN_FPSUBUS16, -+ - SPARC_BUILTIN_MAX - }; - -@@ -10483,6 +10615,83 @@ - def_builtin_const ("__builtin_vis_xmulxhi", CODE_FOR_xmulxhi_vis, - SPARC_BUILTIN_XMULXHI, di_ftype_di_di); - } -+ -+ if (TARGET_VIS4) -+ { -+ def_builtin_const ("__builtin_vis_fpadd8", CODE_FOR_addv8qi3, -+ SPARC_BUILTIN_FPADD8, v8qi_ftype_v8qi_v8qi); -+ def_builtin_const ("__builtin_vis_fpadds8", CODE_FOR_ssaddv8qi3, -+ SPARC_BUILTIN_FPADDS8, v8qi_ftype_v8qi_v8qi); -+ def_builtin_const ("__builtin_vis_fpaddus8", CODE_FOR_usaddv8qi3, -+ SPARC_BUILTIN_FPADDUS8, v8qi_ftype_v8qi_v8qi); -+ def_builtin_const ("__builtin_vis_fpaddus16", CODE_FOR_usaddv4hi3, -+ SPARC_BUILTIN_FPADDUS16, v4hi_ftype_v4hi_v4hi); -+ -+ -+ if (TARGET_ARCH64) -+ { -+ def_builtin_const ("__builtin_vis_fpcmple8", CODE_FOR_fpcmple8di_vis, -+ SPARC_BUILTIN_FPCMPLE8, di_ftype_v8qi_v8qi); -+ def_builtin_const ("__builtin_vis_fpcmpgt8", CODE_FOR_fpcmpgt8di_vis, -+ SPARC_BUILTIN_FPCMPGT8, di_ftype_v8qi_v8qi); -+ def_builtin_const ("__builtin_vis_fpcmpule16", CODE_FOR_fpcmpule16di_vis, -+ SPARC_BUILTIN_FPCMPULE16, di_ftype_v4hi_v4hi); -+ def_builtin_const ("__builtin_vis_fpcmpugt16", CODE_FOR_fpcmpugt16di_vis, -+ SPARC_BUILTIN_FPCMPUGT16, di_ftype_v4hi_v4hi); -+ def_builtin_const ("__builtin_vis_fpcmpule32", CODE_FOR_fpcmpule32di_vis, -+ SPARC_BUILTIN_FPCMPULE32, di_ftype_v2si_v2si); -+ def_builtin_const ("__builtin_vis_fpcmpugt32", CODE_FOR_fpcmpugt32di_vis, -+ SPARC_BUILTIN_FPCMPUGT32, di_ftype_v2si_v2si); -+ } -+ else -+ { -+ def_builtin_const ("__builtin_vis_fpcmple8", CODE_FOR_fpcmple8si_vis, -+ SPARC_BUILTIN_FPCMPLE8, si_ftype_v8qi_v8qi); -+ def_builtin_const ("__builtin_vis_fpcmpgt8", CODE_FOR_fpcmpgt8si_vis, -+ SPARC_BUILTIN_FPCMPGT8, si_ftype_v8qi_v8qi); -+ def_builtin_const ("__builtin_vis_fpcmpule16", CODE_FOR_fpcmpule16si_vis, -+ SPARC_BUILTIN_FPCMPULE16, si_ftype_v4hi_v4hi); -+ def_builtin_const ("__builtin_vis_fpcmpugt16", CODE_FOR_fpcmpugt16si_vis, -+ SPARC_BUILTIN_FPCMPUGT16, si_ftype_v4hi_v4hi); -+ def_builtin_const ("__builtin_vis_fpcmpule32", CODE_FOR_fpcmpule32si_vis, -+ SPARC_BUILTIN_FPCMPULE32, di_ftype_v2si_v2si); -+ def_builtin_const ("__builtin_vis_fpcmpugt32", CODE_FOR_fpcmpugt32si_vis, -+ SPARC_BUILTIN_FPCMPUGT32, di_ftype_v2si_v2si); -+ } -+ -+ def_builtin_const ("__builtin_vis_fpmax8", CODE_FOR_maxv8qi3, -+ SPARC_BUILTIN_FPMAX8, v8qi_ftype_v8qi_v8qi); -+ def_builtin_const ("__builtin_vis_fpmax16", CODE_FOR_maxv4hi3, -+ SPARC_BUILTIN_FPMAX16, v4hi_ftype_v4hi_v4hi); -+ def_builtin_const ("__builtin_vis_fpmax32", CODE_FOR_maxv2si3, -+ SPARC_BUILTIN_FPMAX32, v2si_ftype_v2si_v2si); -+ def_builtin_const ("__builtin_vis_fpmaxu8", CODE_FOR_maxuv8qi3, -+ SPARC_BUILTIN_FPMAXU8, v8qi_ftype_v8qi_v8qi); -+ def_builtin_const ("__builtin_vis_fpmaxu16", CODE_FOR_maxuv4hi3, -+ SPARC_BUILTIN_FPMAXU16, v4hi_ftype_v4hi_v4hi); -+ def_builtin_const ("__builtin_vis_fpmaxu32", CODE_FOR_maxuv2si3, -+ SPARC_BUILTIN_FPMAXU32, v2si_ftype_v2si_v2si); -+ def_builtin_const ("__builtin_vis_fpmin8", CODE_FOR_minv8qi3, -+ SPARC_BUILTIN_FPMIN8, v8qi_ftype_v8qi_v8qi); -+ def_builtin_const ("__builtin_vis_fpmin16", CODE_FOR_minv4hi3, -+ SPARC_BUILTIN_FPMIN16, v4hi_ftype_v4hi_v4hi); -+ def_builtin_const ("__builtin_vis_fpmin32", CODE_FOR_minv2si3, -+ SPARC_BUILTIN_FPMIN32, v2si_ftype_v2si_v2si); -+ def_builtin_const ("__builtin_vis_fpminu8", CODE_FOR_minuv8qi3, -+ SPARC_BUILTIN_FPMINU8, v8qi_ftype_v8qi_v8qi); -+ def_builtin_const ("__builtin_vis_fpminu16", CODE_FOR_minuv4hi3, -+ SPARC_BUILTIN_FPMINU16, v4hi_ftype_v4hi_v4hi); -+ def_builtin_const ("__builtin_vis_fpminu32", CODE_FOR_minuv2si3, -+ SPARC_BUILTIN_FPMINU32, v2si_ftype_v2si_v2si); -+ def_builtin_const ("__builtin_vis_fpsub8", CODE_FOR_subv8qi3, -+ SPARC_BUILTIN_FPSUB8, v8qi_ftype_v8qi_v8qi); -+ def_builtin_const ("__builtin_vis_fpsubs8", CODE_FOR_sssubv8qi3, -+ SPARC_BUILTIN_FPSUBS8, v8qi_ftype_v8qi_v8qi); -+ def_builtin_const ("__builtin_vis_fpsubus8", CODE_FOR_ussubv8qi3, -+ SPARC_BUILTIN_FPSUBUS8, v8qi_ftype_v8qi_v8qi); -+ def_builtin_const ("__builtin_vis_fpsubus16", CODE_FOR_ussubv4hi3, -+ SPARC_BUILTIN_FPSUBUS16, v4hi_ftype_v4hi_v4hi); -+ } - } - - /* Implement TARGET_BUILTIN_DECL hook. */ -@@ -11042,7 +11251,8 @@ - || sparc_cpu == PROCESSOR_NIAGARA - || sparc_cpu == PROCESSOR_NIAGARA2 - || sparc_cpu == PROCESSOR_NIAGARA3 -- || sparc_cpu == PROCESSOR_NIAGARA4) -+ || sparc_cpu == PROCESSOR_NIAGARA4 -+ || sparc_cpu == PROCESSOR_NIAGARA7) - return 12; - - return 6; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/sparc/sparc.h gcc-6-20160721/gcc/config/sparc/sparc.h ---- gcc-6.1.0/gcc/config/sparc/sparc.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/sparc/sparc.h 2016-06-08 13:34:25.000000000 +0000 -@@ -142,6 +142,7 @@ - #define TARGET_CPU_niagara2 14 - #define TARGET_CPU_niagara3 15 - #define TARGET_CPU_niagara4 16 -+#define TARGET_CPU_niagara7 19 - - #if TARGET_CPU_DEFAULT == TARGET_CPU_v9 \ - || TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc \ -@@ -149,7 +150,8 @@ - || TARGET_CPU_DEFAULT == TARGET_CPU_niagara \ - || TARGET_CPU_DEFAULT == TARGET_CPU_niagara2 \ - || TARGET_CPU_DEFAULT == TARGET_CPU_niagara3 \ -- || TARGET_CPU_DEFAULT == TARGET_CPU_niagara4 -+ || TARGET_CPU_DEFAULT == TARGET_CPU_niagara4 \ -+ || TARGET_CPU_DEFAULT == TARGET_CPU_niagara7 - - #define CPP_CPU32_DEFAULT_SPEC "" - #define ASM_CPU32_DEFAULT_SPEC "" -@@ -186,6 +188,10 @@ - #define CPP_CPU64_DEFAULT_SPEC "-D__sparc_v9__" - #define ASM_CPU64_DEFAULT_SPEC AS_NIAGARA4_FLAG - #endif -+#if TARGET_CPU_DEFAULT == TARGET_CPU_niagara7 -+#define CPP_CPU64_DEFAULT_SPEC "-D__sparc_v9__" -+#define ASM_CPU64_DEFAULT_SPEC AS_NIAGARA7_FLAG -+#endif - - #else - -@@ -288,6 +294,7 @@ - %{mcpu=niagara2:-D__sparc_v9__} \ - %{mcpu=niagara3:-D__sparc_v9__} \ - %{mcpu=niagara4:-D__sparc_v9__} \ -+%{mcpu=niagara7:-D__sparc_v9__} \ - %{!mcpu*:%(cpp_cpu_default)} \ - " - #define CPP_ARCH32_SPEC "" -@@ -339,6 +346,7 @@ - %{mcpu=niagara2:%{!mv8plus:-Av9b}} \ - %{mcpu=niagara3:%{!mv8plus:-Av9" AS_NIAGARA3_FLAG "}} \ - %{mcpu=niagara4:%{!mv8plus:" AS_NIAGARA4_FLAG "}} \ -+%{mcpu=niagara7:%{!mv8plus:" AS_NIAGARA7_FLAG "}} \ - %{!mcpu*:%(asm_cpu_default)} \ - " - -@@ -1777,6 +1785,12 @@ - #define AS_NIAGARA4_FLAG "-Av9" AS_NIAGARA3_FLAG - #endif - -+#ifdef HAVE_AS_SPARC5_VIS4 -+#define AS_NIAGARA7_FLAG "-xarch=sparc5" -+#else -+#define AS_NIAGARA7_FLAG AS_NIAGARA4_FLAG -+#endif -+ - #ifdef HAVE_AS_LEON - #define AS_LEON_FLAG "-Aleon" - #define AS_LEONV7_FLAG "-Aleon" -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/sparc/sparc.md gcc-6-20160721/gcc/config/sparc/sparc.md ---- gcc-6.1.0/gcc/config/sparc/sparc.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/sparc/sparc.md 2016-06-08 13:34:25.000000000 +0000 -@@ -234,7 +234,8 @@ - niagara, - niagara2, - niagara3, -- niagara4" -+ niagara4, -+ niagara7" - (const (symbol_ref "sparc_cpu_attr"))) - - ;; Attribute for the instruction set. -@@ -247,7 +248,7 @@ - (symbol_ref "TARGET_SPARCLET") (const_string "sparclet")] - (const_string "v7")))) - --(define_attr "cpu_feature" "none,fpu,fpunotv9,v9,vis,vis3" (const_string "none")) -+(define_attr "cpu_feature" "none,fpu,fpunotv9,v9,vis,vis3,vis4" (const_string "none")) - - (define_attr "enabled" "" - (cond [(eq_attr "cpu_feature" "none") (const_int 1) -@@ -255,7 +256,8 @@ - (eq_attr "cpu_feature" "fpunotv9") (symbol_ref "TARGET_FPU && ! TARGET_V9") - (eq_attr "cpu_feature" "v9") (symbol_ref "TARGET_V9") - (eq_attr "cpu_feature" "vis") (symbol_ref "TARGET_VIS") -- (eq_attr "cpu_feature" "vis3") (symbol_ref "TARGET_VIS3")] -+ (eq_attr "cpu_feature" "vis3") (symbol_ref "TARGET_VIS3") -+ (eq_attr "cpu_feature" "vis4") (symbol_ref "TARGET_VIS4")] - (const_int 0))) - - ;; Insn type. -@@ -274,7 +276,7 @@ - fga,visl,vismv,fgm_pack,fgm_mul,pdist,pdistn,edge,edgen,gsr,array, - cmove, - ialuX, -- multi,savew,flushw,iflush,trap" -+ multi,savew,flushw,iflush,trap,lzd" - (const_string "ialu")) - - ;; True if branch/call has empty delay slot and will emit a nop in it -@@ -476,6 +478,10 @@ - (const_string "true") - ] (const_string "false"))) - -+;; True if the instruction executes in the V3 pipeline, in M7 and -+;; later processors. -+(define_attr "v3pipe" "false,true" (const_string "false")) -+ - (define_delay (eq_attr "type" "call") - [(eq_attr "in_call_delay" "true") (nil) (nil)]) - -@@ -504,6 +510,7 @@ - (include "niagara.md") - (include "niagara2.md") - (include "niagara4.md") -+(include "niagara7.md") - - - ;; Operand and operator predicates and constraints -@@ -1457,6 +1464,7 @@ - fzeros\t%0 - fones\t%0" - [(set_attr "type" "*,*,load,store,vismv,vismv,fpmove,fpload,fpstore,visl,visl") -+ (set_attr "v3pipe" "*,*,*,*,true,true,*,*,*,true,true") - (set_attr "cpu_feature" "*,*,*,*,vis3,vis3,*,*,*,vis,vis")]) - - (define_insn "*movsi_lo_sum" -@@ -1622,6 +1630,7 @@ - fzero\t%0 - fone\t%0" - [(set_attr "type" "store,store,store,load,*,*,*,*,fpstore,fpload,*,*,fpmove,*,*,*,fpload,fpstore,visl,visl") -+ (set_attr "v3pipe" "false, false, false, false,false,false,false,false,false,false,false,false,false,false,false,false,false,false, true, true") - (set_attr "length" "*,2,*,*,2,2,2,2,*,*,2,2,*,2,2,2,*,*,*,*") - (set_attr "fptype" "*,*,*,*,*,*,*,*,*,*,*,*,double,*,*,*,*,*,double,double") - (set_attr "cpu_feature" "v9,*,*,*,*,*,*,*,fpu,fpu,fpu,fpu,v9,fpunotv9,vis3,vis3,fpu,fpu,vis,vis")]) -@@ -1645,6 +1654,7 @@ - fzero\t%0 - fone\t%0" - [(set_attr "type" "*,*,load,store,vismv,vismv,fpmove,fpload,fpstore,visl,visl") -+ (set_attr "v3pipe" "*, *, *, *, *, *, *, *, *, true, true") - (set_attr "fptype" "*,*,*,*,*,*,double,*,*,double,double") - (set_attr "cpu_feature" "*,*,*,*,vis3,vis3,*,*,*,vis,vis")]) - -@@ -2208,6 +2218,7 @@ - } - } - [(set_attr "type" "visl,visl,fpmove,*,*,*,vismv,vismv,fpload,load,fpstore,store") -+ (set_attr "v3pipe" "true, true, *, *, *, *, true, true, *, *, *, *") - (set_attr "cpu_feature" "vis,vis,fpu,*,*,*,vis3,vis3,fpu,*,fpu,*")]) - - ;; The following 3 patterns build SFmode constants in integer registers. -@@ -2276,6 +2287,7 @@ - # - #" - [(set_attr "type" "visl,visl,fpmove,*,*,*,fpload,store,fpstore,load,store,*,*,*,*") -+ (set_attr "v3pipe" "true, true, *, *, *, *, *, *, *, *, *, *, *, *, *") - (set_attr "length" "*,*,*,2,2,2,*,*,*,*,*,2,2,2,2") - (set_attr "fptype" "double,double,double,*,*,*,*,*,*,*,*,*,*,*,*") - (set_attr "cpu_feature" "vis,vis,v9,fpunotv9,vis3,vis3,fpu,v9,fpu,*,*,fpu,*,*,fpu")]) -@@ -2299,6 +2311,7 @@ - stx\t%r1, %0 - #" - [(set_attr "type" "visl,visl,fpmove,vismv,vismv,load,store,*,load,store,*") -+ (set_attr "v3pipe" "true, true, *, *, *, *, *, *, *, *, *") - (set_attr "length" "*,*,*,*,*,*,*,*,*,*,2") - (set_attr "fptype" "double,double,double,double,double,*,*,*,*,*,*") - (set_attr "cpu_feature" "vis,vis,fpu,vis3,vis3,fpu,fpu,*,*,*,*")]) -@@ -2980,6 +2993,7 @@ - lduw\t%1, %0 - movstouw\t%1, %0" - [(set_attr "type" "shift,load,*") -+ (set_attr "v3pipe" "*,*,true") - (set_attr "cpu_feature" "*,*,vis3")]) - - (define_insn_and_split "*zero_extendsidi2_insn_sp32" -@@ -3294,6 +3308,7 @@ - ldsw\t%1, %0 - movstosw\t%1, %0" - [(set_attr "type" "shift,sload,*") -+ (set_attr "v3pipe" "*,*,true") - (set_attr "us3load_type" "*,3cycle,*") - (set_attr "cpu_feature" "*,*,vis3")]) - -@@ -6770,7 +6785,8 @@ - [(set (match_operand:DI 0 "register_operand" "=r") - (clz:DI (match_operand:DI 1 "register_operand" "r")))] - "TARGET_VIS3 && TARGET_ARCH64" -- "lzd\t%1, %0") -+ "lzd\t%1, %0" -+ [(set_attr "type" "lzd")]) - - (define_insn "clzdi_v8plus" - [(set (match_operand:DI 0 "register_operand" "=r") -@@ -6811,7 +6827,8 @@ - (truncate:SI - (clz:DI (match_operand:DI 1 "register_operand" "r"))))] - "TARGET_VIS3 && TARGET_ARCH64" -- "lzd\t%1, %0") -+ "lzd\t%1, %0" -+ [(set_attr "type" "lzd")]) - - (define_insn "clzsi_v8plus" - [(set (match_operand:SI 0 "register_operand" "=r") -@@ -7777,7 +7794,7 @@ - (define_mode_iterator VM64 [V1DI V2SI V4HI V8QI]) - (define_mode_iterator VMALL [V1SI V2HI V4QI V1DI V2SI V4HI V8QI]) - --(define_mode_attr vbits [(V2SI "32") (V4HI "16") (V1SI "32s") (V2HI "16s")]) -+(define_mode_attr vbits [(V2SI "32") (V4HI "16") (V1SI "32s") (V2HI "16s") (V8QI "8")]) - (define_mode_attr vconstr [(V1SI "f") (V2HI "f") (V4QI "f") - (V1DI "e") (V2SI "e") (V4HI "e") (V8QI "e")]) - (define_mode_attr vfptype [(V1SI "single") (V2HI "single") (V4QI "single") -@@ -7812,6 +7829,7 @@ - movstouw\t%1, %0 - movwtos\t%1, %0" - [(set_attr "type" "visl,visl,vismv,fpload,fpstore,store,load,store,*,vismv,vismv") -+ (set_attr "v3pipe" "true,true,true,false,false,false,false,false,false,true,true") - (set_attr "cpu_feature" "vis,vis,vis,*,*,*,*,*,*,vis3,vis3")]) - - (define_insn "*mov<VM64:mode>_insn_sp64" -@@ -7834,6 +7852,7 @@ - movxtod\t%1, %0 - mov\t%1, %0" - [(set_attr "type" "visl,visl,vismv,fpload,fpstore,store,load,store,vismv,vismv,*") -+ (set_attr "v3pipe" "true, true, true, false, false, false, false, false, false, false, false") - (set_attr "cpu_feature" "vis,vis,vis,*,*,*,*,*,vis3,vis3,*")]) - - (define_insn "*mov<VM64:mode>_insn_sp32" -@@ -7857,6 +7876,7 @@ - # - #" - [(set_attr "type" "visl,visl,vismv,*,*,fpload,fpstore,store,load,store,*,*") -+ (set_attr "v3pipe" "true, true, true, false, false, false, false, false, false, false, false, false") - (set_attr "length" "*,*,*,2,2,*,*,*,*,*,2,2") - (set_attr "cpu_feature" "vis,vis,vis,vis3,vis3,*,*,*,*,*,*,*")]) - -@@ -7936,7 +7956,8 @@ - "TARGET_VIS" - "fp<plusminus_insn><vbits>\t%1, %2, %0" - [(set_attr "type" "fga") -- (set_attr "fptype" "<vfptype>")]) -+ (set_attr "fptype" "<vfptype>") -+ (set_attr "v3pipe" "true")]) - - (define_mode_iterator VL [V1SI V2HI V4QI V1DI V2SI V4HI V8QI]) - (define_mode_attr vlsuf [(V1SI "s") (V2HI "s") (V4QI "s") -@@ -7952,6 +7973,7 @@ - "TARGET_VIS" - "f<vlinsn><vlsuf>\t%1, %2, %0" - [(set_attr "type" "visl") -+ (set_attr "v3pipe" "true") - (set_attr "fptype" "<vfptype>")]) - - (define_insn "*not_<code><mode>3" -@@ -7961,6 +7983,7 @@ - "TARGET_VIS" - "f<vlninsn><vlsuf>\t%1, %2, %0" - [(set_attr "type" "visl") -+ (set_attr "v3pipe" "true") - (set_attr "fptype" "<vfptype>")]) - - ;; (ior (not (op1)) (not (op2))) is the canonical form of NAND. -@@ -7971,6 +7994,7 @@ - "TARGET_VIS" - "fnand<vlsuf>\t%1, %2, %0" - [(set_attr "type" "visl") -+ (set_attr "v3pipe" "true") - (set_attr "fptype" "<vfptype>")]) - - (define_code_iterator vlnotop [ior and]) -@@ -7982,6 +8006,7 @@ - "TARGET_VIS" - "f<vlinsn>not1<vlsuf>\t%1, %2, %0" - [(set_attr "type" "visl") -+ (set_attr "v3pipe" "true") - (set_attr "fptype" "<vfptype>")]) - - (define_insn "*<code>_not2<mode>_vis" -@@ -7991,6 +8016,7 @@ - "TARGET_VIS" - "f<vlinsn>not2<vlsuf>\t%1, %2, %0" - [(set_attr "type" "visl") -+ (set_attr "v3pipe" "true") - (set_attr "fptype" "<vfptype>")]) - - (define_insn "one_cmpl<mode>2" -@@ -7999,6 +8025,7 @@ - "TARGET_VIS" - "fnot1<vlsuf>\t%1, %0" - [(set_attr "type" "visl") -+ (set_attr "v3pipe" "true") - (set_attr "fptype" "<vfptype>")]) - - ;; Hard to generate VIS instructions. We have builtins for these. -@@ -8225,7 +8252,8 @@ - "TARGET_VIS" - "faligndata\t%1, %2, %0" - [(set_attr "type" "fga") -- (set_attr "fptype" "double")]) -+ (set_attr "fptype" "double") -+ (set_attr "v3pipe" "true")]) - - (define_insn "alignaddrsi_vis" - [(set (match_operand:SI 0 "register_operand" "=r") -@@ -8235,7 +8263,8 @@ - (zero_extend:DI (plus:SI (match_dup 1) (match_dup 2))))] - "TARGET_VIS" - "alignaddr\t%r1, %r2, %0" -- [(set_attr "type" "gsr")]) -+ [(set_attr "type" "gsr") -+ (set_attr "v3pipe" "true")]) - - (define_insn "alignaddrdi_vis" - [(set (match_operand:DI 0 "register_operand" "=r") -@@ -8245,7 +8274,8 @@ - (plus:DI (match_dup 1) (match_dup 2)))] - "TARGET_VIS" - "alignaddr\t%r1, %r2, %0" -- [(set_attr "type" "gsr")]) -+ [(set_attr "type" "gsr") -+ (set_attr "v3pipe" "true")]) - - (define_insn "alignaddrlsi_vis" - [(set (match_operand:SI 0 "register_operand" "=r") -@@ -8256,7 +8286,8 @@ - (const_int 7)))] - "TARGET_VIS" - "alignaddrl\t%r1, %r2, %0" -- [(set_attr "type" "gsr")]) -+ [(set_attr "type" "gsr") -+ (set_attr "v3pipe" "true")]) - - (define_insn "alignaddrldi_vis" - [(set (match_operand:DI 0 "register_operand" "=r") -@@ -8267,7 +8298,8 @@ - (const_int 7)))] - "TARGET_VIS" - "alignaddrl\t%r1, %r2, %0" -- [(set_attr "type" "gsr")]) -+ [(set_attr "type" "gsr") -+ (set_attr "v3pipe" "true")]) - - (define_insn "pdist_vis" - [(set (match_operand:DI 0 "register_operand" "=e") -@@ -8360,6 +8392,17 @@ - "TARGET_VIS" - "fcmp<code><GCM:gcm_name>\t%1, %2, %0" - [(set_attr "type" "visl") -+ (set_attr "v3pipe" "true") -+ (set_attr "fptype" "double")]) -+ -+(define_insn "fpcmp<code>8<P:mode>_vis" -+ [(set (match_operand:P 0 "register_operand" "=r") -+ (unspec:P [(gcond:V8QI (match_operand:V8QI 1 "register_operand" "e") -+ (match_operand:V8QI 2 "register_operand" "e"))] -+ UNSPEC_FCMP))] -+ "TARGET_VIS4" -+ "fpcmp<code>8\t%1, %2, %0" -+ [(set_attr "type" "visl") - (set_attr "fptype" "double")]) - - (define_expand "vcond<mode><mode>" -@@ -8427,7 +8470,8 @@ - (plus:DI (match_dup 1) (match_dup 2)))] - "TARGET_VIS2" - "bmask\t%r1, %r2, %0" -- [(set_attr "type" "array")]) -+ [(set_attr "type" "array") -+ (set_attr "v3pipe" "true")]) - - (define_insn "bmasksi_vis" - [(set (match_operand:SI 0 "register_operand" "=r") -@@ -8437,7 +8481,8 @@ - (zero_extend:DI (plus:SI (match_dup 1) (match_dup 2))))] - "TARGET_VIS2" - "bmask\t%r1, %r2, %0" -- [(set_attr "type" "array")]) -+ [(set_attr "type" "array") -+ (set_attr "v3pipe" "true")]) - - (define_insn "bshuffle<VM64:mode>_vis" - [(set (match_operand:VM64 0 "register_operand" "=e") -@@ -8448,7 +8493,8 @@ - "TARGET_VIS2" - "bshuffle\t%1, %2, %0" - [(set_attr "type" "fga") -- (set_attr "fptype" "double")]) -+ (set_attr "fptype" "double") -+ (set_attr "v3pipe" "true")]) - - ;; The rtl expanders will happily convert constant permutations on other - ;; modes down to V8QI. Rely on this to avoid the complexity of the byte -@@ -8550,7 +8596,8 @@ - UNSPEC_CMASK8))] - "TARGET_VIS3" - "cmask8\t%r0" -- [(set_attr "type" "fga")]) -+ [(set_attr "type" "fga") -+ (set_attr "v3pipe" "true")]) - - (define_insn "cmask16<P:mode>_vis" - [(set (reg:DI GSR_REG) -@@ -8559,7 +8606,8 @@ - UNSPEC_CMASK16))] - "TARGET_VIS3" - "cmask16\t%r0" -- [(set_attr "type" "fga")]) -+ [(set_attr "type" "fga") -+ (set_attr "v3pipe" "true")]) - - (define_insn "cmask32<P:mode>_vis" - [(set (reg:DI GSR_REG) -@@ -8568,7 +8616,8 @@ - UNSPEC_CMASK32))] - "TARGET_VIS3" - "cmask32\t%r0" -- [(set_attr "type" "fga")]) -+ [(set_attr "type" "fga") -+ (set_attr "v3pipe" "true")]) - - (define_insn "fchksm16_vis" - [(set (match_operand:V4HI 0 "register_operand" "=e") -@@ -8601,6 +8650,7 @@ - "TARGET_VIS3" - "pdistn\t%1, %2, %0" - [(set_attr "type" "pdistn") -+ (set_attr "v3pipe" "true") - (set_attr "fptype" "double")]) - - (define_insn "fmean16_vis" -@@ -8628,6 +8678,14 @@ - "fp<plusminus_insn>64\t%1, %2, %0" - [(set_attr "type" "fga")]) - -+(define_insn "<plusminus_insn>v8qi3" -+ [(set (match_operand:V8QI 0 "register_operand" "=e") -+ (plusminus:V8QI (match_operand:V8QI 1 "register_operand" "e") -+ (match_operand:V8QI 2 "register_operand" "e")))] -+ "TARGET_VIS4" -+ "fp<plusminus_insn>8\t%1, %2, %0" -+ [(set_attr "type" "fga")]) -+ - (define_mode_iterator VASS [V4HI V2SI V2HI V1SI]) - (define_code_iterator vis3_addsub_ss [ss_plus ss_minus]) - (define_code_attr vis3_addsub_ss_insn -@@ -8641,8 +8699,63 @@ - (match_operand:VASS 2 "register_operand" "<vconstr>")))] - "TARGET_VIS3" - "<vis3_addsub_ss_insn><vbits>\t%1, %2, %0" -+ [(set_attr "type" "fga") -+ (set_attr "v3pipe" "true")]) -+ -+(define_mode_iterator VMMAX [V8QI V4HI V2SI]) -+(define_code_iterator vis4_minmax [smin smax]) -+(define_code_attr vis4_minmax_insn -+ [(smin "fpmin") (smax "fpmax")]) -+(define_code_attr vis4_minmax_patname -+ [(smin "min") (smax "max")]) -+ -+(define_insn "<vis4_minmax_patname><mode>3" -+ [(set (match_operand:VMMAX 0 "register_operand" "=<vconstr>") -+ (vis4_minmax:VMMAX (match_operand:VMMAX 1 "register_operand" "<vconstr>") -+ (match_operand:VMMAX 2 "register_operand" "<vconstr>")))] -+ "TARGET_VIS4" -+ "<vis4_minmax_insn><vbits>\t%1, %2, %0" -+ [(set_attr "type" "fga")]) -+ -+(define_code_iterator vis4_uminmax [umin umax]) -+(define_code_attr vis4_uminmax_insn -+ [(umin "fpminu") (umax "fpmaxu")]) -+(define_code_attr vis4_uminmax_patname -+ [(umin "minu") (umax "maxu")]) -+ -+(define_insn "<vis4_uminmax_patname><mode>3" -+ [(set (match_operand:VMMAX 0 "register_operand" "=<vconstr>") -+ (vis4_uminmax:VMMAX (match_operand:VMMAX 1 "register_operand" "<vconstr>") -+ (match_operand:VMMAX 2 "register_operand" "<vconstr>")))] -+ "TARGET_VIS4" -+ "<vis4_uminmax_insn><vbits>\t%1, %2, %0" -+ [(set_attr "type" "fga")]) -+ -+;; The use of vis3_addsub_ss_patname in the VIS4 instruction below is -+;; intended. -+(define_insn "<vis3_addsub_ss_patname>v8qi3" -+ [(set (match_operand:V8QI 0 "register_operand" "=e") -+ (vis3_addsub_ss:V8QI (match_operand:V8QI 1 "register_operand" "e") -+ (match_operand:V8QI 2 "register_operand" "e")))] -+ "TARGET_VIS4" -+ "<vis3_addsub_ss_insn>8\t%1, %2, %0" - [(set_attr "type" "fga")]) - -+(define_mode_iterator VAUS [V4HI V8QI]) -+(define_code_iterator vis4_addsub_us [us_plus us_minus]) -+(define_code_attr vis4_addsub_us_insn -+ [(us_plus "fpaddus") (us_minus "fpsubus")]) -+(define_code_attr vis4_addsub_us_patname -+ [(us_plus "usadd") (us_minus "ussub")]) -+ -+(define_insn "<vis4_addsub_us_patname><mode>3" -+ [(set (match_operand:VAUS 0 "register_operand" "=<vconstr>") -+ (vis4_addsub_us:VAUS (match_operand:VAUS 1 "register_operand" "<vconstr>") -+ (match_operand:VAUS 2 "register_operand" "<vconstr>")))] -+ "TARGET_VIS4" -+ "<vis4_addsub_us_insn><vbits>\t%1, %2, %0" -+ [(set_attr "type" "fga")]) -+ - (define_insn "fucmp<code>8<P:mode>_vis" - [(set (match_operand:P 0 "register_operand" "=r") - (unspec:P [(gcond:V8QI (match_operand:V8QI 1 "register_operand" "e") -@@ -8650,7 +8763,18 @@ - UNSPEC_FUCMP))] - "TARGET_VIS3" - "fucmp<code>8\t%1, %2, %0" -- [(set_attr "type" "visl")]) -+ [(set_attr "type" "visl") -+ (set_attr "v3pipe" "true")]) -+ -+(define_insn "fpcmpu<code><GCM:gcm_name><P:mode>_vis" -+ [(set (match_operand:P 0 "register_operand" "=r") -+ (unspec:P [(gcond:GCM (match_operand:GCM 1 "register_operand" "e") -+ (match_operand:GCM 2 "register_operand" "e"))] -+ UNSPEC_FUCMP))] -+ "TARGET_VIS4" -+ "fpcmpu<code><GCM:gcm_name>\t%1, %2, %0" -+ [(set_attr "type" "visl") -+ (set_attr "fptype" "double")]) - - (define_insn "*naddsf3" - [(set (match_operand:SF 0 "register_operand" "=f") -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/sparc/sparc.opt gcc-6-20160721/gcc/config/sparc/sparc.opt ---- gcc-6.1.0/gcc/config/sparc/sparc.opt 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/sparc/sparc.opt 2016-06-08 13:34:25.000000000 +0000 -@@ -73,6 +73,10 @@ - Target Report Mask(VIS3) - Use UltraSPARC Visual Instruction Set version 3.0 extensions. - -+mvis4 -+Target Report Mask(VIS4) -+Use UltraSPARC Visual Instruction Set version 4.0 extensions. -+ - mcbcond - Target Report Mask(CBCOND) - Use UltraSPARC Compare-and-Branch extensions. -@@ -194,6 +198,9 @@ - EnumValue - Enum(sparc_processor_type) String(niagara4) Value(PROCESSOR_NIAGARA4) - -+EnumValue -+Enum(sparc_processor_type) String(niagara7) Value(PROCESSOR_NIAGARA7) -+ - mcmodel= - Target RejectNegative Joined Var(sparc_cmodel_string) - Use given SPARC-V9 code model. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/sparc/visintrin.h gcc-6-20160721/gcc/config/sparc/visintrin.h ---- gcc-6.1.0/gcc/config/sparc/visintrin.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/sparc/visintrin.h 2016-06-08 13:34:25.000000000 +0000 -@@ -704,6 +704,192 @@ - - #endif /* __VIS__ >= 0x300 */ - -+#if __VIS__ >= 0x400 -+ -+extern __inline __v8qi -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpadd8 (__v8qi __A, __v8qi __B) -+{ -+ return __builtin_vis_fpadd8 (__A, __B); -+} -+ -+extern __inline __v8qi -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpadds8 (__v8qi __A, __v8qi __B) -+{ -+ return __builtin_vis_fpadds8 (__A, __B); -+} -+ -+extern __inline __v8qi -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpaddus8 (__v8qi __A, __v8qi __B) -+{ -+ return __builtin_vis_fpaddus8 (__A, __B); -+} -+ -+extern __inline __v4hi -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpaddus16 (__v4hi __A, __v4hi __B) -+{ -+ return __builtin_vis_fpaddus16 (__A, __B); -+} -+ -+extern __inline long -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpcmple8 (__v8qi __A, __v8qi __B) -+{ -+ return __builtin_vis_fpcmple8 (__A, __B); -+} -+ -+extern __inline long -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpcmpgt8 (__v8qi __A, __v8qi __B) -+{ -+ return __builtin_vis_fpcmpgt8 (__A, __B); -+} -+ -+extern __inline long -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpcmpule16 (__v4hi __A, __v4hi __B) -+{ -+ return __builtin_vis_fpcmpule16 (__A, __B); -+} -+ -+extern __inline long -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpcmpugt16 (__v4hi __A, __v4hi __B) -+{ -+ return __builtin_vis_fpcmpugt16 (__A, __B); -+} -+ -+extern __inline long -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpcmpule32 (__v2si __A, __v2si __B) -+{ -+ return __builtin_vis_fpcmpule32 (__A, __B); -+} -+ -+extern __inline long -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpcmpugt32 (__v2si __A, __v2si __B) -+{ -+ return __builtin_vis_fpcmpugt32 (__A, __B); -+} -+ -+extern __inline __v8qi -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpmax8 (__v8qi __A, __v8qi __B) -+{ -+ return __builtin_vis_fpmax8 (__A, __B); -+} -+ -+extern __inline __v4hi -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpmax16 (__v4hi __A, __v4hi __B) -+{ -+ return __builtin_vis_fpmax16 (__A, __B); -+} -+ -+extern __inline __v2si -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpmax32 (__v2si __A, __v2si __B) -+{ -+ return __builtin_vis_fpmax32 (__A, __B); -+} -+ -+extern __inline __v8qi -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpmaxu8 (__v8qi __A, __v8qi __B) -+{ -+ return __builtin_vis_fpmaxu8 (__A, __B); -+} -+ -+extern __inline __v4hi -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpmaxu16 (__v4hi __A, __v4hi __B) -+{ -+ return __builtin_vis_fpmaxu16 (__A, __B); -+} -+ -+extern __inline __v2si -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpmaxu32 (__v2si __A, __v2si __B) -+{ -+ return __builtin_vis_fpmaxu32 (__A, __B); -+} -+ -+extern __inline __v8qi -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpmin8 (__v8qi __A, __v8qi __B) -+{ -+ return __builtin_vis_fpmin8 (__A, __B); -+} -+ -+extern __inline __v4hi -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpmin16 (__v4hi __A, __v4hi __B) -+{ -+ return __builtin_vis_fpmin16 (__A, __B); -+} -+ -+extern __inline __v2si -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpmin32 (__v2si __A, __v2si __B) -+{ -+ return __builtin_vis_fpmin32 (__A, __B); -+} -+ -+extern __inline __v8qi -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpminu8 (__v8qi __A, __v8qi __B) -+{ -+ return __builtin_vis_fpminu8 (__A, __B); -+} -+ -+extern __inline __v4hi -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpminu16 (__v4hi __A, __v4hi __B) -+{ -+ return __builtin_vis_fpminu16 (__A, __B); -+} -+ -+extern __inline __v2si -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpminu32 (__v2si __A, __v2si __B) -+{ -+ return __builtin_vis_fpminu32 (__A, __B); -+} -+ -+extern __inline __v8qi -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpsub8 (__v8qi __A, __v8qi __B) -+{ -+ return __builtin_vis_fpsub8 (__A, __B); -+} -+ -+extern __inline __v8qi -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpsubs8 (__v8qi __A, __v8qi __B) -+{ -+ return __builtin_vis_fpsubs8 (__A, __B); -+} -+ -+extern __inline __v8qi -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpsubus8 (__v8qi __A, __v8qi __B) -+{ -+ return __builtin_vis_fpsubus8 (__A, __B); -+} -+ -+extern __inline __v4hi -+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -+__vis_fpsubus16 (__v4hi __A, __v4hi __B) -+{ -+ return __builtin_vis_fpsubus16 (__A, __B); -+} -+ -+#endif /* __VIS__ >= 0x400 */ -+ - #endif /* __VIS__ */ - - #endif /* _VISINTRIN_H_INCLUDED */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/visium/visium-protos.h gcc-6-20160721/gcc/config/visium/visium-protos.h ---- gcc-6.1.0/gcc/config/visium/visium-protos.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/visium/visium-protos.h 2016-05-27 15:09:38.000000000 +0000 -@@ -49,7 +49,8 @@ - extern const char *output_ubranch (rtx, rtx_insn *); - extern const char *output_cbranch (rtx, enum rtx_code, enum machine_mode, int, - rtx_insn *); --extern void split_double_move (rtx *, enum machine_mode); -+extern void visium_split_double_move (rtx *, enum machine_mode); -+extern void visium_split_double_add (enum rtx_code, rtx, rtx, rtx); - extern void visium_expand_copysign (rtx *, enum machine_mode); - extern void visium_expand_int_cstore (rtx *, enum machine_mode); - extern void visium_expand_fp_cstore (rtx *, enum machine_mode); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/visium/visium.c gcc-6-20160721/gcc/config/visium/visium.c ---- gcc-6.1.0/gcc/config/visium/visium.c 2016-02-17 11:17:15.000000000 +0000 -+++ gcc-6-20160721/gcc/config/visium/visium.c 2016-05-30 08:48:32.000000000 +0000 -@@ -2026,7 +2026,7 @@ - /* Split a double move of OPERANDS in MODE. */ - - void --split_double_move (rtx *operands, enum machine_mode mode) -+visium_split_double_move (rtx *operands, enum machine_mode mode) - { - bool swap = false; - -@@ -2076,14 +2076,74 @@ - } - } - -+/* Split a double addition or subtraction of operands. */ -+ -+void -+visium_split_double_add (enum rtx_code code, rtx op0, rtx op1, rtx op2) -+{ -+ rtx op3 = gen_lowpart (SImode, op0); -+ rtx op4 = gen_lowpart (SImode, op1); -+ rtx op5; -+ rtx op6 = gen_highpart (SImode, op0); -+ rtx op7 = (op1 == const0_rtx ? op1 : gen_highpart (SImode, op1)); -+ rtx op8; -+ rtx x, pat, flags; -+ -+ /* If operand #2 is a small constant, then its high part is null. */ -+ if (CONST_INT_P (op2)) -+ { -+ HOST_WIDE_INT val = INTVAL (op2); -+ -+ if (val < 0) -+ { -+ code = (code == MINUS ? PLUS : MINUS); -+ val = -val; -+ } -+ -+ op5 = gen_int_mode (val, SImode); -+ op8 = const0_rtx; -+ } -+ else -+ { -+ op5 = gen_lowpart (SImode, op2); -+ op8 = gen_highpart (SImode, op2); -+ } -+ -+ /* This is the {add,sub,neg}si3_insn_set_flags pattern. */ -+ if (op4 == const0_rtx) -+ x = gen_rtx_NEG (SImode, op5); -+ else -+ x = gen_rtx_fmt_ee (code, SImode, op4, op5); -+ pat = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (2)); -+ XVECEXP (pat, 0, 0) = gen_rtx_SET (op3, x); -+ flags = gen_rtx_REG (CC_NOOVmode, FLAGS_REGNUM); -+ x = gen_rtx_COMPARE (CC_NOOVmode, shallow_copy_rtx (x), const0_rtx); -+ XVECEXP (pat, 0, 1) = gen_rtx_SET (flags, x); -+ emit_insn (pat); -+ -+ /* This is the plus_[plus_]sltu_flags or minus_[minus_]sltu_flags pattern. */ -+ if (op8 == const0_rtx) -+ x = op7; -+ else -+ x = gen_rtx_fmt_ee (code, SImode, op7, op8); -+ x = gen_rtx_fmt_ee (code, SImode, x, gen_rtx_LTU (SImode, flags, const0_rtx)); -+ pat = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (2)); -+ XVECEXP (pat, 0, 0) = gen_rtx_SET (op6, x); -+ flags = gen_rtx_REG (CCmode, FLAGS_REGNUM); -+ XVECEXP (pat, 0, 1) = gen_rtx_CLOBBER (VOIDmode, flags); -+ emit_insn (pat); -+ -+ visium_flags_exposed = true; -+} -+ - /* Expand a copysign of OPERANDS in MODE. */ - - void - visium_expand_copysign (rtx *operands, enum machine_mode mode) - { -- rtx dest = operands[0]; -- rtx op0 = operands[1]; -- rtx op1 = operands[2]; -+ rtx op0 = operands[0]; -+ rtx op1 = operands[1]; -+ rtx op2 = operands[2]; - rtx mask = force_reg (SImode, GEN_INT (0x7fffffff)); - rtx x; - -@@ -2091,37 +2151,37 @@ - the FPU on the MCM have a non-standard behavior wrt NaNs. */ - gcc_assert (mode == SFmode); - -- /* First get all the non-sign bits of OP0. */ -- if (GET_CODE (op0) == CONST_DOUBLE) -+ /* First get all the non-sign bits of op1. */ -+ if (GET_CODE (op1) == CONST_DOUBLE) - { -- if (real_isneg (CONST_DOUBLE_REAL_VALUE (op0))) -- op0 = simplify_unary_operation (ABS, mode, op0, mode); -- if (op0 != CONST0_RTX (mode)) -+ if (real_isneg (CONST_DOUBLE_REAL_VALUE (op1))) -+ op1 = simplify_unary_operation (ABS, mode, op1, mode); -+ if (op1 != CONST0_RTX (mode)) - { - long l; -- REAL_VALUE_TO_TARGET_SINGLE (*CONST_DOUBLE_REAL_VALUE (op0), l); -- op0 = force_reg (SImode, GEN_INT (trunc_int_for_mode (l, SImode))); -+ REAL_VALUE_TO_TARGET_SINGLE (*CONST_DOUBLE_REAL_VALUE (op1), l); -+ op1 = force_reg (SImode, gen_int_mode (l, SImode)); - } - } - else - { -- op0 = copy_to_mode_reg (SImode, gen_lowpart (SImode, op0)); -- op0 = force_reg (SImode, gen_rtx_AND (SImode, op0, mask)); -+ op1 = copy_to_mode_reg (SImode, gen_lowpart (SImode, op1)); -+ op1 = force_reg (SImode, gen_rtx_AND (SImode, op1, mask)); - } - -- /* Then get the sign bit of OP1. */ -+ /* Then get the sign bit of op2. */ - mask = force_reg (SImode, gen_rtx_NOT (SImode, mask)); -- op1 = copy_to_mode_reg (SImode, gen_lowpart (SImode, op1)); -- op1 = force_reg (SImode, gen_rtx_AND (SImode, op1, mask)); -+ op2 = copy_to_mode_reg (SImode, gen_lowpart (SImode, op2)); -+ op2 = force_reg (SImode, gen_rtx_AND (SImode, op2, mask)); - - /* Finally OR the two values. */ -- if (op0 == CONST0_RTX (SFmode)) -- x = op1; -+ if (op1 == CONST0_RTX (SFmode)) -+ x = op2; - else -- x = force_reg (SImode, gen_rtx_IOR (SImode, op0, op1)); -+ x = force_reg (SImode, gen_rtx_IOR (SImode, op1, op2)); - - /* And move the result to the destination. */ -- emit_insn (gen_rtx_SET (dest, gen_lowpart (SFmode, x))); -+ emit_insn (gen_rtx_SET (op0, gen_lowpart (SFmode, x))); - } - - /* Expand a cstore of OPERANDS in MODE for EQ/NE/LTU/GTU/GEU/LEU. We generate -@@ -3537,18 +3597,15 @@ - int - visium_initial_elimination_offset (int from, int to ATTRIBUTE_UNUSED) - { -- const int frame_size = visium_compute_frame_size (get_frame_size ()); - const int save_fp = current_frame_info.save_fp; - const int save_lr = current_frame_info.save_lr; - const int lr_slot = current_frame_info.lr_slot; -- const int local_frame_offset -- = (save_fp + save_lr + lr_slot) * UNITS_PER_WORD; - int offset; - - if (from == FRAME_POINTER_REGNUM) -- offset = local_frame_offset; -+ offset = (save_fp + save_lr + lr_slot) * UNITS_PER_WORD; - else if (from == ARG_POINTER_REGNUM) -- offset = frame_size; -+ offset = visium_compute_frame_size (get_frame_size ()); - else - gcc_unreachable (); - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config/visium/visium.md gcc-6-20160721/gcc/config/visium/visium.md ---- gcc-6.1.0/gcc/config/visium/visium.md 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/config/visium/visium.md 2016-05-27 15:09:38.000000000 +0000 -@@ -627,7 +627,7 @@ - [(set (match_dup 2) (match_dup 3)) - (set (match_dup 4) (match_dup 5))] - { -- split_double_move (operands, DImode); -+ visium_split_double_move (operands, DImode); - }) - - ;; -@@ -726,7 +726,7 @@ - [(set (match_dup 2) (match_dup 3)) - (set (match_dup 4) (match_dup 5))] - { -- split_double_move (operands, DFmode); -+ visium_split_double_move (operands, DFmode); - }) - - ;; -@@ -815,31 +815,20 @@ - (match_operand:DI 2 "add_operand" "")))] - "") - -+; Disfavour the use of add.l because of the early clobber. -+ - (define_insn_and_split "*addi3_insn" - [(set (match_operand:DI 0 "register_operand" "=r,r,&r") - (plus:DI (match_operand:DI 1 "register_operand" "%0,0, r") -- (match_operand:DI 2 "add_operand" " J,L, r")))] -+ (match_operand:DI 2 "add_operand" " L,J, r")))] - "ok_for_simple_arith_logic_operands (operands, DImode)" - "#" - "reload_completed" -- [(parallel [(set (match_dup 0) -- (plus:DI (match_dup 1) (match_dup 2))) -- (clobber (reg:CC R_FLAGS))])] -- "" -- [(set_attr "type" "arith2")]) -- --; Disfavour the use of add.l because of the early clobber. -- --(define_insn "*adddi3_insn_flags" -- [(set (match_operand:DI 0 "register_operand" "=r,r,&r") -- (plus:DI (match_operand:DI 1 "register_operand" "%0,0, r") -- (match_operand:DI 2 "add_operand" " J,L, r"))) -- (clobber (reg:CC R_FLAGS))] -- "reload_completed" -- "@ -- addi %d0,%2\n\tadc.l %0,%0,r0 -- subi %d0,%n2\n\tsubc.l %0,%0,r0 -- add.l %d0,%d1,%d2\n\tadc.l %0,%1,%2" -+ [(const_int 0)] -+{ -+ visium_split_double_add (PLUS, operands[0], operands[1], operands[2]); -+ DONE; -+} - [(set_attr "type" "arith2")]) - - ;; -@@ -847,7 +836,7 @@ - ;; - ;; Integer Add with Carry - ;; --;; Only SI mode is supported as slt[u] for the sake of cstore. -+;; Only SI mode is supported. - ;; - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - ;; -@@ -869,6 +858,16 @@ - "adc.l %0,%1,r0" - [(set_attr "type" "arith")]) - -+(define_insn "*plus_plus_sltu<subst_arith>" -+ [(set (match_operand:SI 0 "register_operand" "=r") -+ (plus:SI (plus:SI (match_operand:SI 1 "register_operand" "r") -+ (match_operand:SI 2 "register_operand" "r")) -+ (ltu:SI (reg R_FLAGS) (const_int 0)))) -+ (clobber (reg:CC R_FLAGS))] -+ "reload_completed" -+ "adc.l %0,%1,%2" -+ [(set_attr "type" "arith")]) -+ - ;; - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - ;; -@@ -955,31 +954,20 @@ - (match_operand:DI 2 "add_operand" "")))] - "") - -+; Disfavour the use of the sub.l because of the early clobber. -+ - (define_insn_and_split "*subdi3_insn" - [(set (match_operand:DI 0 "register_operand" "=r,r,&r") - (minus:DI (match_operand:DI 1 "register_operand" " 0,0, r") -- (match_operand:DI 2 "add_operand" " J,L, r")))] -+ (match_operand:DI 2 "add_operand" " L,J, r")))] - "ok_for_simple_arith_logic_operands (operands, DImode)" - "#" - "reload_completed" -- [(parallel [(set (match_dup 0) -- (minus:DI (match_dup 1) (match_dup 2))) -- (clobber (reg:CC R_FLAGS))])] -- "" -- [(set_attr "type" "arith2")]) -- --; Disfavour the use of the sub.l because of the early clobber. -- --(define_insn "*subdi3_insn_flags" -- [(set (match_operand:DI 0 "register_operand" "=r,r,&r") -- (minus:DI (match_operand:DI 1 "register_operand" " 0,0, r") -- (match_operand:DI 2 "add_operand" " J,L, r"))) -- (clobber (reg:CC R_FLAGS))] -- "reload_completed" -- "@ -- subi %d0,%2\n\tsubc.l %0,%0,r0 -- addi %d0,%n2\n\tadc.l %0,%0,r0 -- sub.l %d0,%d1,%d2\n\tsubc.l %0,%1,%2" -+ [(const_int 0)] -+{ -+ visium_split_double_add (MINUS, operands[0], operands[1], operands[2]); -+ DONE; -+} - [(set_attr "type" "arith2")]) - - ;; -@@ -987,7 +975,7 @@ - ;; - ;; Integer Subtract with Carry - ;; --;; Only SI mode is supported as neg<slt[u]> for the sake of cstore. -+;; Only SI mode is supported. - ;; - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - ;; -@@ -1009,6 +997,16 @@ - "subc.l %0,%1,r0" - [(set_attr "type" "arith")]) - -+(define_insn "*minus_minus_sltu<subst_arith>" -+ [(set (match_operand:SI 0 "register_operand" "=r") -+ (minus:SI (minus:SI (match_operand:SI 1 "reg_or_0_operand" "rO") -+ (match_operand:SI 2 "register_operand" "r")) -+ (ltu:SI (reg R_FLAGS) (const_int 0)))) -+ (clobber (reg:CC R_FLAGS))] -+ "reload_completed" -+ "subc.l %0,%r1,%2" -+ [(set_attr "type" "arith")]) -+ - ;; - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - ;; -@@ -1054,17 +1052,11 @@ - "ok_for_simple_arith_logic_operands (operands, DImode)" - "#" - "reload_completed" -- [(parallel [(set (match_dup 0) (neg:DI (match_dup 1))) -- (clobber (reg:CC R_FLAGS))])] -- "" -- [(set_attr "type" "arith2")]) -- --(define_insn "*negdi2_insn_flags" -- [(set (match_operand:DI 0 "register_operand" "=&r") -- (neg:DI (match_operand:DI 1 "register_operand" "r"))) -- (clobber (reg:CC R_FLAGS))] -- "reload_completed" -- "sub.l %d0,r0,%d1\n\tsubc.l %0,r0,%1" -+ [(const_int 0)] -+{ -+ visium_split_double_add (MINUS, operands[0], const0_rtx, operands[1]); -+ DONE; -+} - [(set_attr "type" "arith2")]) - - ;; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config.gcc gcc-6-20160721/gcc/config.gcc ---- gcc-6.1.0/gcc/config.gcc 2016-04-11 10:14:59.000000000 +0000 -+++ gcc-6-20160721/gcc/config.gcc 2016-06-08 13:34:25.000000000 +0000 -@@ -1058,11 +1058,9 @@ - case $target in - armv6*-*-freebsd*) - tm_defines="${tm_defines} TARGET_FREEBSD_ARMv6=1" -- ;; -- esac -- case $target in -- arm*hf-*-freebsd*) -- tm_defines="${tm_defines} TARGET_FREEBSD_ARM_HARD_FLOAT=1" -+ if test $fbsd_major -ge 11; then -+ tm_defines="${tm_defines} TARGET_FREEBSD_ARM_HARD_FLOAT=1" -+ fi - ;; - esac - with_tls=${with_tls:-gnu} -@@ -4280,9 +4278,9 @@ - esac - ;; - sparc*-*-*) -- supported_defaults="cpu float tune" -+ supported_defaults="cpu cpu_32 cpu_64 float tune tune_32 tune_64" - -- for which in cpu tune; do -+ for which in cpu cpu_32 cpu_64 tune tune_32 tune_64; do - eval "val=\$with_$which" - case ${val} in - "" | sparc | sparcv9 | sparc64 \ -@@ -4291,7 +4289,7 @@ - | sparclite | f930 | f934 | sparclite86x \ - | sparclet | tsc701 \ - | v9 | ultrasparc | ultrasparc3 | niagara | niagara2 \ -- | niagara3 | niagara4) -+ | niagara3 | niagara4 | niagara7) - # OK - ;; - *) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/config.in gcc-6-20160721/gcc/config.in ---- gcc-6.1.0/gcc/config.in 2016-04-27 08:22:11.000000000 +0000 -+++ gcc-6-20160721/gcc/config.in 2016-07-21 22:33:06.000000000 +0000 -@@ -622,6 +622,12 @@ - #endif - - -+/* Define if your assembler supports SPARC5 and VIS 4.0 instructions. */ -+#ifndef USED_FOR_TARGET -+#undef HAVE_AS_SPARC5_VIS4 -+#endif -+ -+ - /* Define if your assembler and linker support GOTDATA_OP relocs. */ - #ifndef USED_FOR_TARGET - #undef HAVE_AS_SPARC_GOTDATA_OP -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/configure gcc-6-20160721/gcc/configure ---- gcc-6.1.0/gcc/configure 2016-01-27 16:54:48.000000000 +0000 -+++ gcc-6-20160721/gcc/configure 2016-06-08 13:34:25.000000000 +0000 -@@ -25092,6 +25092,42 @@ - - fi - -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for SPARC5 and VIS 4.0 instructions" >&5 -+$as_echo_n "checking assembler for SPARC5 and VIS 4.0 instructions... " >&6; } -+if test "${gcc_cv_as_sparc_sparc5+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ gcc_cv_as_sparc_sparc5=no -+ if test x$gcc_cv_as != x; then -+ $as_echo '.text -+ .register %g2, #scratch -+ .register %g3, #scratch -+ .align 4 -+ subxc %g1, %g2, %g3 -+ fpadd8 %f0, %f2, %f4' > conftest.s -+ if { ac_try='$gcc_cv_as $gcc_cv_as_flags -xarch=sparc5 -o conftest.o conftest.s >&5' -+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 -+ (eval $ac_try) 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -+ test $ac_status = 0; }; } -+ then -+ gcc_cv_as_sparc_sparc5=yes -+ else -+ echo "configure: failed program was" >&5 -+ cat conftest.s >&5 -+ fi -+ rm -f conftest.o conftest.s -+ fi -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_sparc_sparc5" >&5 -+$as_echo "$gcc_cv_as_sparc_sparc5" >&6; } -+if test $gcc_cv_as_sparc_sparc5 = yes; then -+ -+$as_echo "#define HAVE_AS_SPARC5_VIS4 1" >>confdefs.h -+ -+fi -+ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for LEON instructions" >&5 - $as_echo_n "checking assembler for LEON instructions... " >&6; } - if test "${gcc_cv_as_sparc_leon+set}" = set; then : -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/configure.ac gcc-6-20160721/gcc/configure.ac ---- gcc-6.1.0/gcc/configure.ac 2016-01-27 16:54:48.000000000 +0000 -+++ gcc-6-20160721/gcc/configure.ac 2016-06-08 13:34:25.000000000 +0000 -@@ -3906,6 +3906,18 @@ - [AC_DEFINE(HAVE_AS_SPARC4, 1, - [Define if your assembler supports SPARC4 instructions.])]) - -+ gcc_GAS_CHECK_FEATURE([SPARC5 and VIS 4.0 instructions], -+ gcc_cv_as_sparc_sparc5,, -+ [-xarch=sparc5], -+ [.text -+ .register %g2, #scratch -+ .register %g3, #scratch -+ .align 4 -+ subxc %g1, %g2, %g3 -+ fpadd8 %f0, %f2, %f4],, -+ [AC_DEFINE(HAVE_AS_SPARC5_VIS4, 1, -+ [Define if your assembler supports SPARC5 and VIS 4.0 instructions.])]) -+ - gcc_GAS_CHECK_FEATURE([LEON instructions], - gcc_cv_as_sparc_leon,, - [-Aleon], -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/ChangeLog gcc-6-20160721/gcc/cp/ChangeLog ---- gcc-6.1.0/gcc/cp/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/ChangeLog 2016-07-21 18:24:48.000000000 +0000 -@@ -1,3 +1,456 @@ -+2016-07-21 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71728 -+ * constexpr.c (potential_constant_expression_1) <case GOTO_EXPR>: -+ Replace assert with test, return false if the goto isn't break -+ or continue. Formatting fix. -+ -+2016-07-21 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71941 -+ * cp-gimplify.c (cp_genericize): For nested cp_genericize calls -+ save/restore bc_label array. -+ -+2016-07-21 Patrick Palka <ppalka@gcc.gnu.org> -+ -+ PR c++/70822 -+ PR c++/70106 -+ * cp-tree.h (REF_PARENTHESIZED_P): Make this flag apply to -+ SCOPE_REFs too. -+ * pt.c (tsubst_qualified_id): If REF_PARENTHESIZED_P is set -+ on the qualified_id then propagate it to the resulting -+ expression. -+ (do_auto_deduction): Check REF_PARENTHESIZED_P on SCOPE_REFs -+ too. -+ * semantics.c (force_paren_expr): If given a SCOPE_REF, just set -+ its REF_PARENTHESIZED_P flag. -+ -+2016-07-21 Andrew Sutton <andrew.n.sutton@gmail.com> -+ Jason Merrill <jason@redhat.com> -+ -+ Improving concepts performance and diagnostics. -+ PR c++/67565 -+ PR c++/67579 -+ PR c++/71843 -+ * cp-tree.def (CHECK_CONSTR): New. -+ * cp-tree.h (CHECK_CONSTR_CONCEPT): New. -+ (CHECK_CONSTR_ARGS): New. -+ * constraint.cc (make_predicate_constraint): Remove in favor of -+ normalize_expression. -+ (resolve_constraint_check): Actually return error_mark_node when -+ resolution fails. -+ (resolve_variable_concept_check): Perform coercion as if processing -+ a template. Also return errors on resolution failure. -+ (lift_*): Remove all of these functions. Don't unnecessarily inline -+ concepts. -+ (learn_*): Add facilities to memoize implications for subsumption -+ during normalization. -+ (expanding_concept): New. -+ (expand_concept): New. Return the inlined and normalized definition -+ of a concept when needed. -+ (transform_*, xform_*): Rename to normalize_* to better reflect the -+ responsibility of those functions. -+ (normalize_template_id_expression): Check for non-boolean operands -+ when possible. Generate check constraints instead of normal variable -+ references. -+ (normalize_call_expression): Report errors when resolution fails. -+ (check_for_logical_overloads): Rewrite this check to more accurately -+ report the error. -+ (normalize_atom): Check for overloaded calls and invalid types before -+ determining if the expression refers to a concept. -+ (build_constraints): Don't cache normalized constraints or decomposed -+ assumptions. -+ (finish_shorthand_constraint): Return a normalized expression instead -+ of a predicate constraint. -+ (finish_template_introduction): Same. -+ (placeholder_extract_concept_and_args): Rewrite this since we only -+ ever get check constraints here. -+ (equivalent_placeholder_constraints): Rewrite in terms of check -+ constraints, and handle error_mark_nodes correctly. -+ (tsubst_check_constraint, tsubst_expr_constr, tsubst_type_constr) -+ (tsubst_implicit_conversion_constr) -+ (tsubst_argument_deduction_constr, tsubst_exception_constr) -+ (tsubst_parameterized_constraint, tsubst_constraint): New. -+ (tsbust_conjunection): Replace with tsubst_logical_operator and -+ actually generate the right kind of constraint. -+ (tsubst_requirement_body): Reverse the order of substituted arguments -+ so that they appear in the order written (helps diagnostics). -+ (satisfy_check_constraint): New. -+ (satisfy_conjunction): Simplify. -+ (satisfy_disjunction): Same. -+ (satisfy_constraint_1): Handle check constraints. -+ (eval_constr): New (private) global state. -+ (evaluating_constraints_sentinel): New. Manages eval_constr. -+ (satisfy_constraint): Add timing variables. -+ (satisfy_associated_constraints): Add hooks for memoization. -+ (evaluate_function_concept): Build a check constraint instead of -+ normalizing its definition. -+ (evaluate_variable_concept): Same. -+ (evaluate_constraint_expression): Normalize, but in the current -+ declaration processing context. -+ (evaluating_constraints_p): New. -+ (elide_constraint_failure_p): Actually emit constraint_thresh errors. -+ (diagnose_*): Remove artificial indentation. Add a new parameter to -+ each that tracks the current (complete) constraint prior to any -+ substitutions. -+ (diagnose_expression): Removed. -+ (diagnose_call_expression): Same. -+ (diagnose_template_id): Same. -+ (diagnose_template_id): New. -+ (diagnose_logical_constraint): New. -+ (diagnose_expression_constraint): Show the original expression. -+ (diagnose_type_constraint): Show the original type. -+ (diagnose_implicit_conversion_constraint): Be specific about -+ failures, don't re-diagnose a known-to-be-failed substitutions, -+ and manage elisions properly. -+ (diagnose_argument_deduction_constraint): Same. -+ (diagnose_exception_constraint): Same. -+ (diagnose_parameterized_constraint): Same. -+ (constraint_p): Allow EXPR_PACK_EXPANSION. -+ * logic.cc (next_by_distance): Removed. No longer used. -+ (any_p): Renamed from any_of. -+ (term_entry, term_hasher): New. -+ (term_list): Rewrite to include a hash table for quick lookup. -+ Also, make less stateful. -+ (proof_state): Extend to allow goals to be discharged once -+ satisfied. -+ (non_atomic_constraint_p): New. -+ (any_non_atomic_constraints_p): New. -+ (...rest...): Previous implementation completely replaced with an -+ iterative algorithm that opportunistically prunes the search space -+ before committing to using more memory. -+ * parser.c: (cp_parser_type_parameter): Normalize constraints. -+ (cp_parser_explicit_template_declaration): Same. -+ * pt.c: (finish_template_variable): Be less redundant with this error -+ message. -+ (template_args_equal): No longer static. -+ (tsubst_decl): Don't try to find specializations of variables that -+ have already been instantiated. -+ (build_non_dependent_expr): Avoid infinite recursion during concept -+ expansion. -+ (make_constrained_auto): Normalize constraints. -+ (do_auto_deduction): When doing auto deduction from a -+ partial-concept-id, be sure to include the explicit args checking -+ the constraints. -+ (constraint_sat_*): New. Memoize satisfied constraints. -+ (concept_spec_*): New. Memoize expressions associated with a concept -+ specialization. -+ (constraint_memos, concept_memos): New. -+ (lookup_constraint_satisfaction, memoize_constraint_satisfaction): New. -+ (lookup_concept_satisfaction, memoize_concept_satisfaction): New. -+ (get_concept_expansion, save_concept_expansion): New. -+ (hash_subsumption_args): New. -+ (comp_subsumption_args): New. -+ (subsumption_*): New. Memoize parts of the subsumption relation. -+ (lookup_subsumption_result, save_subsumption_result): New. -+ (init_constraint_processing): Initialize memo tables. -+ (get_constraints): Shortcut if !flag_concepts. -+ * decl.c (grokfndecl): Normalize constraints. -+ * error.c (dump_simple_decl): Print "concept" when appropriate. -+ (dump_function_decl): Same. -+ (dump_template_decl): Don't write requirements when we're not -+ printing the header. -+ (dump_expr): Handle fold expressions. -+ * cxx-pretty-print.c (cxx_pretty_printer::expression): Handle -+ fold expressions. -+ (get_fold_operator): New. -+ (pp_cxx_unary_left_fold_expression): New. -+ (pp_cxx_unary_right_fold_expression): New. -+ (pp_cxx_binary_fold_expression): New. -+ (pp_cxx_check_constraint): New. -+ (pp_cxx_*_constraint): Rewrite the grammar of internal constraints -+ to make them easier to read when debugging. -+ * search.c (accessible_p): Don't shortcut when evaluating constraints. -+ * tree.c (cp_tree_equal): Handle CHECK_CONSTR. -+ -+2016-07-21 Jason Merrill <jason@redhat.com> -+ -+ PR c++/70781 -+ * parser.c (cp_parser_lambda_expression): Unset OK if there was an -+ error parsing the lambda-declarator. -+ -+ PR c++/71896 -+ * constexpr.c (cxx_eval_binary_expression): Handle comparison -+ between lowered and unlowered PTRMEM_CST. -+ -+ PR c++/71092 -+ * constexpr.c (cxx_eval_call_expression): Fail quietly when cgraph -+ threw away DECL_SAVED_TREE. -+ -+ PR c++/71117 -+ Core 2189 -+ * call.c (add_template_conv_candidate): Disable if there are -+ viable candidates. -+ -+ PR c++/71495 -+ * call.c (convert_like_real): Mask complain. -+ -+ PR c++/71511 -+ * typeck2.c (cxx_incomplete_type_diagnostic): Handle DECLTYPE_TYPE. -+ -+ PR c++/71513 -+ * pt.c (tsubst_attributes): Fix loop logic. -+ -+ PR c++/71604 -+ PR c++/54430 -+ * parser.c (cp_parser_range_for): Modify IDENTIFIER_BINDING directly. -+ (cp_parser_simple_declaration): Diagnose type definition in -+ for-range-declaration. -+ -+ PR c++/71711 -+ * operators.def: Add *_FOLD_EXPR. -+ * cp-tree.h (FOLD_EXPR_P): Parenthesize. -+ * mangle.c (write_expression): Handle fold-expressions. -+ * pt.c (tsubst_unary_left_fold, tsubst_binary_left_fold) -+ (tsubst_unary_right_fold, tsubst_binary_right_fold): Handle -+ partial instantiation. -+ -+ PR c++/71814 -+ * mangle.c (write_expression): Handle sizeof... an argument pack. -+ -+ PR c++/71718 -+ * pt.c (push_tinst_level_loc): Set at_eof before fatal_error. -+ -+ PR c++/70824 -+ * init.c (constant_value_1): Don't instantiated DECL_INITIAL of -+ artificial variables. -+ -+ * lambda.c (maybe_add_lambda_conv_op): Fix null object argument. -+ -+2016-07-20 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71909 -+ * parser.c (cp_parser_save_member_function_body): Consume -+ __transaction_relaxed or __transaction_atomic with optional -+ attribute. Only skip catch with block if try keyword is seen. -+ -+2016-07-19 Jakub Jelinek <jakub@redhat.com> -+ -+ Backported from mainline -+ 2016-07-18 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71835 -+ * call.c (build_op_call_1): Use convert_like_with_context only -+ if cand->fn is a decl. -+ -+ PR c++/71828 -+ * constexpr.c (cxx_eval_constant_expression) <case REALPART_EXPR>: -+ For lval don't use cxx_eval_unary_expression and instead recurse -+ and if needed rebuild the reference. -+ -+ PR c++/71822 -+ * cp-gimplify.c (cp_gimplify_expr) <case VEC_INIT_EXPR>: Recursively -+ fold *expr_p before genericizing it. -+ -+ PR c++/71871 -+ * typeck.c (build_x_conditional_expr): Revert the 2012-10-25 change. -+ -+ 2016-07-07 Jakub Jelinek <jakub@redhat.com> -+ Kai Tietz <ktietz70@googlemail.com> -+ -+ PR c++/70869 -+ PR c++/71054 -+ * cp-gimplify.c (cp_genericize_r): For DECL_EXPR for non-static -+ artificial vars, genericize their initializers. -+ -+2016-06-21 Jakub Jelinek <jakub@redhat.com> -+ -+ Backported from mainline -+ 2016-06-17 Jakub Jelinek <jakub@redhat.com> -+ -+ * semantics.c (handle_omp_array_sections_1): Don't ICE when -+ processing_template_decl when checking for bitfields and unions. -+ Look through REFERENCE_REF_P as base of COMPONENT_REF. -+ (finish_omp_clauses): Look through REFERENCE_REF_P even for -+ array sections with COMPONENT_REF bases. -+ -+ 2016-06-16 Jakub Jelinek <jakub@redhat.com> -+ -+ * parser.c (cp_parser_omp_var_list_no_open): Call -+ convert_from_reference before cp_parser_postfix_dot_deref_expression. -+ * semantics.c (finish_omp_clauses): Don't ICE when -+ processing_template_decl when checking for bitfields and unions. -+ Look through REFERENCE_REF_P as base of COMPONENT_REF. -+ -+ 2016-06-14 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71528 -+ * decl.c (duplicate_decls): For DECL_INITIALIZED_P non-external -+ olddecl vars, preserve their TREE_READONLY bit. -+ -+2016-06-14 Paolo Carlini <paolo.carlini@oracle.com> -+ -+ PR c++/70572 -+ * decl.c (cp_finish_decl): Check do_auto_deduction return value -+ and return immediately in case of erroneous code. -+ -+2016-06-14 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71516 -+ * decl.c (complete_vars): Handle gracefully type == error_mark_node. -+ -+2016-06-10 Thomas Schwinge <thomas@codesourcery.com> -+ -+ PR c/71381 -+ Backport from trunk r237290: -+ * parser.c (cp_parser_omp_var_list_no_open) <OMP_CLAUSE__CACHE_>: -+ Loosen checking. -+ -+2016-06-08 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71442 -+ * pt.c (tsubst_copy): Only set TREE_USED on DECLs. -+ -+2016-06-06 Jakub Jelinek <jakub@redhat.com> -+ Patrick Palka <ppalka@gcc.gnu.org> -+ -+ PR c++/70847 -+ PR c++/71330 -+ PR c++/71393 -+ * cp-gimplify.c (cp_fold_r): Set *walk_subtrees = 0 and return NULL -+ right after cp_fold call if cp_fold has returned the same stmt -+ already in some earlier cp_fold_r call. -+ (cp_fold_function): Add pset automatic variable, pass its address -+ to cp_walk_tree. -+ -+2016-06-02 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71372 -+ * cp-gimplify.c (cp_fold): For INDIRECT_REF, if the folded expression -+ is INDIRECT_REF or MEM_REF, copy over TREE_READONLY, TREE_SIDE_EFFECTS -+ and TREE_THIS_VOLATILE flags. For ARRAY_REF and ARRAY_RANGE_REF, copy -+ over TREE_READONLY, TREE_SIDE_EFFECTS and TREE_THIS_VOLATILE flags -+ to the newly built tree. -+ -+2016-06-02 Paolo Carlini <paolo.carlini@oracle.com> -+ -+ PR c++/70972 -+ * method.c (forward_parm): Use cp_build_reference_type. -+ -+2016-05-31 Jason Merrill <jason@redhat.com> -+ -+ PR c++/71166 -+ * decl2.c (c_parse_final_cleanups): Don't call fini_constexpr. -+ -+ PR c++/71227 -+ * pt.c (check_explicit_specialization): Give better diagnostic about -+ specializing a hidden friend. -+ -+ PR c++/60095 -+ PR c++/69515 -+ PR c++/69009 -+ * pt.c (instantiate_template_1): Don't put the partial -+ specialization in DECL_TI_TEMPLATE. -+ (partial_specialization_p, impartial_args): Remove. -+ (regenerate_decl_from_template): Add args parm. -+ (instantiate_decl): Look up the partial specialization again. -+ -+ PR c++/71173 -+ PR c++/70522 -+ * cp-tree.h (enum tag_types): Add scope_type. -+ * parser.c (cp_parser_class_name): Use scope_type. -+ (prefer_type_arg): Handle scope_type. -+ (cp_parser_lookup_name): Use prefer_type_arg. -+ * name-lookup.c (lookup_qualified_name): Change bool is_type_p to -+ int prefer_type, use lookup_flags. -+ * name-lookup.h: Adjust. -+ -+ PR c++/70584 -+ * cp-gimplify.c (cp_fold_maybe_rvalue): Loop in case cp_fold -+ returns a decl. -+ (cp_fold) [INDIRECT_REF]: Call maybe_undo_parenthesized_ref. -+ -+ PR c++/70735 -+ * pt.c (tsubst_copy): Just return a local variable from -+ non-template context. Don't call rest_of_decl_compilation for -+ duplicated static locals. -+ (tsubst_decl): Set DECL_CONTEXT of local static from another -+ function. -+ -+2016-05-31 Martin Sebor <msebor@redhat.com> -+ -+ PR c++/71306 -+ * init.c (warn_placement_new_too_small): Handle placement new arguments -+ that are elements of arrays more carefully. Remove a pointless loop. -+ -+2016-05-30 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71349 -+ * parser.c (cp_parser_omp_for): Don't disallow nowait clause -+ when combined with target construct. -+ (cp_parser_omp_parallel): Pass cclauses == NULL as last argument -+ to cp_parser_omp_all_clauses. -+ -+2016-05-29 Paolo Carlini <paolo.carlini@oracle.com> -+ -+ PR c++/71105 -+ * lambda.c (maybe_add_lambda_conv_op): Early return also when -+ LAMBDA_EXPR_DEFAULT_CAPTURE_MODE != CPLD_NONE. -+ -+2016-05-24 Martin Sebor <msebor@redhat.com> -+ -+ PR c++/71147 -+ * decl.c (layout_var_decl, grokdeclarator): Use -+ complete_or_array_type_p. -+ * pt.c (instantiate_class_template_1): Try to complete the element -+ type of a flexible array member. -+ (can_complete_type_without_circularity): Handle arrays of unknown bound. -+ * typeck.c (complete_type): Also complete the type of the elements of -+ arrays with an unspecified bound. -+ -+2016-05-24 Paolo Carlini <paolo.carlini@oracle.com> -+ -+ PR c++/69872 -+ * typeck2.c (check_narrowing): Check pedwarn return value. -+ -+2016-05-24 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71257 -+ * semantics.c (finish_omp_clauses) <case OMP_CLAUSE_LINEAR>: -+ For OMP_CLAUSE_LINEAR_REF don't require type to be -+ integral or pointer. -+ -+2016-05-23 Jason Merrill <jason@redhat.com> -+ -+ PR c++/70344 -+ * constexpr.c (cxx_eval_call_expression): Check for -+ fun == current_function_decl again. -+ -+2016-05-19 David Malcolm <dmalcolm@redhat.com> -+ -+ Backport from trunk r236483. -+ PR c++/71184 -+ * parser.c (cp_parser_operator): For array new/delete, check that -+ cp_parser_require returned a non-NULL token before dereferencing -+ it. -+ -+2016-05-19 Bernd Edlinger <bernd.edlinger@hotmail.de> -+ -+ Backport from mainline -+ 2016-05-19 Bernd Edlinger <bernd.edlinger@hotmail.de> -+ -+ * decl.c (finish_enum_value_list): Use the specified mode. -+ -+2016-05-18 Paolo Carlini <paolo.carlini@oracle.com> -+ -+ PR c++/70466 -+ * call.c (convert_like_real): Check that we are actually converting -+ from an init list. -+ -+2016-04-29 Cesar Philippidis <cesar@codesourcery.com> -+ -+ PR middle-end/70626 -+ * parser.c (cp_parser_oacc_loop): Don't augment mask with -+ OACC_LOOP_CLAUSE_MASK. -+ (cp_parser_oacc_kernels_parallel): Update call to -+ c_oacc_split_loop_clauses. -+ -+2016-04-28 Paolo Carlini <paolo.carlini@oracle.com> -+ -+ PR c++/70540 -+ * semantics.c (process_outer_var_ref): Unconditionally return -+ error_mark_node when mark_used returns false. -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/call.c gcc-6-20160721/gcc/cp/call.c ---- gcc-6.1.0/gcc/cp/call.c 2016-04-14 16:23:06.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/call.c 2016-07-21 06:16:11.000000000 +0000 -@@ -3184,6 +3184,12 @@ - tree return_type, tree access_path, - tree conversion_path, tsubst_flags_t complain) - { -+ /* Making this work broke PR 71117, so until the committee resolves core -+ issue 2189, let's disable this candidate if there are any viable call -+ operators. */ -+ if (any_strictly_viable (*candidates)) -+ return NULL; -+ - return - add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE, - NULL_TREE, arglist, return_type, access_path, -@@ -4386,8 +4392,11 @@ - result = build_over_call (cand, LOOKUP_NORMAL, complain); - else - { -- obj = convert_like_with_context (cand->convs[0], obj, cand->fn, -1, -- complain); -+ if (DECL_P (cand->fn)) -+ obj = convert_like_with_context (cand->convs[0], obj, cand->fn, -+ -1, complain); -+ else -+ obj = convert_like (cand->convs[0], obj, complain); - obj = convert_from_reference (obj); - result = cp_build_function_call_vec (obj, args, complain); - } -@@ -6360,8 +6369,9 @@ - /* When converting from an init list we consider explicit - constructors, but actually trying to call one is an error. */ - if (DECL_NONCONVERTING_P (convfn) && DECL_CONSTRUCTOR_P (convfn) -+ && BRACE_ENCLOSED_INITIALIZER_P (expr) - /* Unless this is for direct-list-initialization. */ -- && !DIRECT_LIST_INIT_P (expr) -+ && !CONSTRUCTOR_IS_DIRECT_INIT (expr) - /* And in C++98 a default constructor can't be explicit. */ - && cxx_dialect >= cxx11) - { -@@ -6546,7 +6556,7 @@ - expr = decay_conversion (expr, complain); - if (expr == error_mark_node) - { -- if (complain) -+ if (complain & tf_error) - { - maybe_print_user_conv_context (convs); - if (fn) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/constexpr.c gcc-6-20160721/gcc/cp/constexpr.c ---- gcc-6.1.0/gcc/cp/constexpr.c 2016-04-22 15:39:03.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/constexpr.c 2016-07-21 18:24:48.000000000 +0000 -@@ -1371,11 +1371,17 @@ - else - { - new_call.fundef = retrieve_constexpr_fundef (fun); -- if (new_call.fundef == NULL || new_call.fundef->body == NULL) -+ if (new_call.fundef == NULL || new_call.fundef->body == NULL -+ || fun == current_function_decl) - { - if (!ctx->quiet) - { -- if (DECL_INITIAL (fun) == error_mark_node) -+ /* We need to check for current_function_decl here in case we're -+ being called during cp_fold_function, because at that point -+ DECL_INITIAL is set properly and we have a fundef but we -+ haven't lowered invisirefs yet (c++/70344). */ -+ if (DECL_INITIAL (fun) == error_mark_node -+ || fun == current_function_decl) - error_at (loc, "%qD called in a constant expression before its " - "definition is complete", fun); - else if (DECL_INITIAL (fun)) -@@ -1444,9 +1450,19 @@ - } - else - { -- if (!result || result == error_mark_node) -+ if (result && result != error_mark_node) -+ /* OK */; -+ else if (!DECL_SAVED_TREE (fun)) -+ { -+ /* When at_eof >= 2, cgraph has started throwing away -+ DECL_SAVED_TREE, so fail quietly. FIXME we get here because of -+ late code generation for VEC_INIT_EXPR, which needs to be -+ completely reconsidered. */ -+ gcc_assert (at_eof >= 2 && ctx->quiet); -+ *non_constant_p = true; -+ } -+ else - { -- gcc_assert (DECL_SAVED_TREE (fun)); - tree body, parms, res; - - /* Reuse or create a new unshared copy of this function's body. */ -@@ -1750,6 +1766,10 @@ - && (null_member_pointer_value_p (lhs) - || null_member_pointer_value_p (rhs))) - r = constant_boolean_node (!is_code_eq, type); -+ else if (TREE_CODE (lhs) == PTRMEM_CST) -+ lhs = cplus_expand_constant (lhs); -+ else if (TREE_CODE (rhs) == PTRMEM_CST) -+ rhs = cplus_expand_constant (rhs); - } - - if (r == NULL_TREE) -@@ -3714,6 +3734,19 @@ - - case REALPART_EXPR: - case IMAGPART_EXPR: -+ if (lval) -+ { -+ r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0), lval, -+ non_constant_p, overflow_p); -+ if (r == error_mark_node) -+ ; -+ else if (r == TREE_OPERAND (t, 0)) -+ r = t; -+ else -+ r = fold_build1 (TREE_CODE (t), TREE_TYPE (t), r); -+ break; -+ } -+ /* FALLTHRU */ - case CONJ_EXPR: - case FIX_TRUNC_EXPR: - case FLOAT_EXPR: -@@ -5140,10 +5173,12 @@ - case GOTO_EXPR: - { - tree *target = &TREE_OPERAND (t, 0); -- /* Gotos representing break and continue are OK; we should have -- rejected other gotos in parsing. */ -- gcc_assert (breaks (target) || continues (target)); -- return true; -+ /* Gotos representing break and continue are OK. */ -+ if (breaks (target) || continues (target)) -+ return true; -+ if (flags & tf_error) -+ error ("%<goto%> is not a constant-expression"); -+ return false; - } - - default: -@@ -5151,7 +5186,7 @@ - return false; - - sorry ("unexpected AST of kind %s", get_tree_code_name (TREE_CODE (t))); -- gcc_unreachable(); -+ gcc_unreachable (); - return false; - } - #undef RECUR -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/constraint.cc gcc-6-20160721/gcc/cp/constraint.cc ---- gcc-6.1.0/gcc/cp/constraint.cc 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/constraint.cc 2016-07-21 06:18:06.000000000 +0000 -@@ -22,6 +22,7 @@ - #include "system.h" - #include "coretypes.h" - #include "tm.h" -+#include "timevar.h" - #include "hash-set.h" - #include "machmode.h" - #include "vec.h" -@@ -55,7 +56,9 @@ - static inline bool - constraint_p (tree_code c) - { -- return (PRED_CONSTR <= c && c <= DISJ_CONSTR) || c == ERROR_MARK; -+ return ((PRED_CONSTR <= c && c <= DISJ_CONSTR) -+ || c == EXPR_PACK_EXPANSION -+ || c == ERROR_MARK); - } - - /* Returns true if T is a constraint. Note that error_mark_node -@@ -67,14 +70,6 @@ - return constraint_p (TREE_CODE (t)); - } - --/* Make a predicate constraint from the given expression. */ -- --tree --make_predicate_constraint (tree expr) --{ -- return build_nt (PRED_CONSTR, expr); --} -- - /* Returns the conjunction of two constraints A and B. Note that - conjoining a non-null constraint with NULL_TREE is an identity - operation. That is, for non-null A, -@@ -132,6 +127,53 @@ - return false; - } - -+/* Returns true if any of the arguments in the template -+ argument list is a wildcard or wildcard pack. */ -+ -+bool -+contains_wildcard_p (tree args) -+{ -+ for (int i = 0; i < TREE_VEC_LENGTH (args); ++i) -+ { -+ tree arg = TREE_VEC_ELT (args, i); -+ if (TREE_CODE (arg) == WILDCARD_DECL) -+ return true; -+ } -+ return false; -+} -+ -+/* Build a new call expression, but don't actually generate a -+ new function call. We just want the tree, not the semantics. */ -+ -+inline tree -+build_call_check (tree id) -+{ -+ ++processing_template_decl; -+ vec<tree, va_gc> *fargs = make_tree_vector(); -+ tree call = finish_call_expr (id, &fargs, false, false, tf_none); -+ release_tree_vector (fargs); -+ --processing_template_decl; -+ return call; -+} -+ -+/* Build an expression that will check a variable concept. If any -+ argument contains a wildcard, don't try to finish the variable -+ template because we can't substitute into a non-existent -+ declaration. */ -+ -+tree -+build_variable_check (tree id) -+{ -+ gcc_assert (TREE_CODE (id) == TEMPLATE_ID_EXPR); -+ if (contains_wildcard_p (TREE_OPERAND (id, 1))) -+ return id; -+ -+ ++processing_template_decl; -+ tree var = finish_template_variable (id); -+ --processing_template_decl; -+ return var; -+} -+ - /*--------------------------------------------------------------------------- - Resolution of qualified concept names - ---------------------------------------------------------------------------*/ -@@ -160,6 +202,7 @@ - static tree - resolve_constraint_check (tree ovl, tree args) - { -+ int nerrs = 0; - tree cands = NULL_TREE; - for (tree p = ovl; p != NULL_TREE; p = OVL_NEXT (p)) - { -@@ -185,15 +228,21 @@ - ++processing_template_decl; - tree parms = TREE_VALUE (DECL_TEMPLATE_PARMS (tmpl)); - if (tree subst = coerce_template_parms (parms, args, tmpl)) -- if (subst != error_mark_node) -- cands = tree_cons (subst, fn, cands); -+ { -+ if (subst == error_mark_node) -+ ++nerrs; -+ else -+ cands = tree_cons (subst, fn, cands); -+ } - --processing_template_decl; - } - -- // If we didn't find a unique candidate, then this is -- // not a constraint check. -- if (!cands || TREE_CHAIN (cands)) -- return NULL_TREE; -+ if (!cands) -+ /* We either had no candidates or failed deductions. */ -+ return nerrs ? error_mark_node : NULL_TREE; -+ else if (TREE_CHAIN (cands)) -+ /* There are multiple candidates. */ -+ return error_mark_node; - - return cands; - } -@@ -250,14 +299,16 @@ - assuming that it works. Note that failing to deduce - will result in diagnostics. */ - tree parms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (tmpl)); -+ ++processing_template_decl; - tree result = coerce_template_parms (parms, args, tmpl); -+ --processing_template_decl; - if (result != error_mark_node) - { - tree decl = DECL_TEMPLATE_RESULT (tmpl); - return build_tree_list (result, decl); - } - else -- return NULL_TREE; -+ return error_mark_node; - } - - -@@ -315,45 +366,119 @@ - namespace { - - /*--------------------------------------------------------------------------- -- Lifting of concept definitions -+ Constraint implication learning - ---------------------------------------------------------------------------*/ - --/* Part of constraint normalization. Whenever we find a reference to -- a variable concept or a call to a function concept, we lift or -- inline that concept's definition into the constraint. This ensures -- that constraints are always checked in the immediate instantiation -- context. */ -+/* The implication context determines how we memoize concept checks. -+ Given two checks C1 and C2, the direction of implication depends -+ on whether we are learning implications of a conjunction or disjunction. -+ For example: - --tree lift_expression (tree); -+ template<typename T> concept bool C = ...; -+ template<typenaem T> concept bool D = C<T> && true; - --/* If the tree T has operands, then lift any concepts out of them. */ --tree --lift_operands (tree t) -+ From this, we can learn that D<T> implies C<T>. We cannot learn, -+ without further testing, that C<T> does not imply D<T>. If, for -+ example, C<T> were defined as true, then these constraints would -+ be logically equivalent. -+ -+ In rare cases, we may start with a logical equivalence. For example: -+ -+ template<typename T> concept bool C = ...; -+ template<typename T> concept bool D = C<T>; -+ -+ Here, we learn that C<T> implies D<T> and vice versa. */ -+ -+enum implication_context - { -- if (int n = tree_operand_length (t)) -+ conjunction_cxt, /* C1 implies C2. */ -+ disjunction_cxt, /* C2 implies C1. */ -+ equivalence_cxt /* C1 implies C2, C2 implies C1. */ -+}; -+ -+void learn_implications(tree, tree, implication_context); -+ -+void -+learn_implication (tree parent, tree child, implication_context cxt) -+{ -+ switch (cxt) - { -- t = copy_node (t); -- for (int i = 0; i < n; ++i) -- TREE_OPERAND (t, i) = lift_expression (TREE_OPERAND (t, i)); -+ case conjunction_cxt: -+ save_subsumption_result (parent, child, true); -+ break; -+ case disjunction_cxt: -+ save_subsumption_result (child, parent, true); -+ break; -+ case equivalence_cxt: -+ save_subsumption_result (parent, child, true); -+ save_subsumption_result (child, parent, true); -+ break; - } -- return t; - } - --/* Recursively lift all operands of the function call. Also, check -- that the call target is not accidentally a variable concept -- since that's ill-formed. */ --tree --lift_function_call (tree t) -+void -+learn_logical_operation (tree parent, tree constr, implication_context cxt) - { -- gcc_assert (TREE_CODE (t) == CALL_EXPR); -- gcc_assert (!VAR_P (CALL_EXPR_FN (t))); -- return lift_operands (t); -+ learn_implications (parent, TREE_OPERAND (constr, 0), cxt); -+ learn_implications (parent, TREE_OPERAND (constr, 1), cxt); - } - --/* Inline a function (concept) definition by substituting -- ARGS into its body. */ -+void -+learn_implications (tree parent, tree constr, implication_context cxt) -+{ -+ switch (TREE_CODE (constr)) -+ { -+ case CHECK_CONSTR: -+ return learn_implication (parent, constr, cxt); -+ -+ case CONJ_CONSTR: -+ if (cxt == disjunction_cxt) -+ return; -+ return learn_logical_operation (parent, constr, cxt); -+ -+ case DISJ_CONSTR: -+ if (cxt == conjunction_cxt) -+ return; -+ return learn_logical_operation (parent, constr, cxt); -+ -+ default: -+ break; -+ } -+} -+ -+/* Quickly scan the top-level constraints of CONSTR to learn and -+ cache logical relations between concepts. The search does not -+ include conjunctions of disjunctions or vice versa. */ -+ -+void -+learn_implications (tree tmpl, tree args, tree constr) -+{ -+ /* Don't memoize relations between non-dependent arguemnts. It's not -+ helpful. */ -+ if (!uses_template_parms (args)) -+ return; -+ -+ /* Build a check constraint for the purpose of caching. */ -+ tree parent = build_nt (CHECK_CONSTR, tmpl, args); -+ -+ /* Start learning based on the kind of the top-level contraint. */ -+ if (TREE_CODE (constr) == CONJ_CONSTR) -+ return learn_logical_operation (parent, constr, conjunction_cxt); -+ else if (TREE_CODE (constr) == DISJ_CONSTR) -+ return learn_logical_operation (parent, constr, disjunction_cxt); -+ else if (TREE_CODE (constr) == CHECK_CONSTR) -+ /* This is the rare concept alias case. */ -+ return learn_implication (parent, constr, equivalence_cxt); -+} -+ -+/*--------------------------------------------------------------------------- -+ Expansion of concept definitions -+---------------------------------------------------------------------------*/ -+ -+/* Returns the expression of a function concept. */ -+ - tree --lift_function_definition (tree fn, tree args) -+get_returned_expression (tree fn) - { - /* Extract the body of the function minus the return expression. */ - tree body = DECL_SAVED_TREE (fn); -@@ -364,202 +489,107 @@ - if (TREE_CODE (body) != RETURN_EXPR) - return error_mark_node; - -- body = TREE_OPERAND (body, 0); -- -- /* Substitute template arguments to produce our inline expression. */ -- tree result = tsubst_expr (body, args, tf_none, NULL_TREE, false); -- if (result == error_mark_node) -- return error_mark_node; -- -- return lift_expression (result); -+ return TREE_OPERAND (body, 0); - } - --/* Inline a reference to a function concept. */ --tree --lift_call_expression (tree t) --{ -- /* Try to resolve this function call as a concept. If not, then -- it can be returned as-is. */ -- tree check = resolve_constraint_check (t); -- if (!check) -- return lift_function_call (t); -- if (check == error_mark_node) -- return error_mark_node; -- -- tree fn = TREE_VALUE (check); -- tree args = TREE_PURPOSE (check); -- return lift_function_definition (fn, args); --} -+/* Returns the initializer of a variable concept. */ - - tree --lift_variable_initializer (tree var, tree args) -+get_variable_initializer (tree var) - { -- /* Extract the body from the variable initializer. */ - tree init = DECL_INITIAL (var); - if (!init) - return error_mark_node; -+ return init; -+} - -- /* Substitute the arguments to form our new inline expression. */ -- tree result = tsubst_expr (init, args, tf_none, NULL_TREE, false); -- if (result == error_mark_node) -- return error_mark_node; -+/* Returns the definition of a variable or function concept. */ - -- return lift_expression (result); -+tree -+get_concept_definition (tree decl) -+{ -+ if (TREE_CODE (decl) == VAR_DECL) -+ return get_variable_initializer (decl); -+ else if (TREE_CODE (decl) == FUNCTION_DECL) -+ return get_returned_expression (decl); -+ gcc_unreachable (); - } - --/* Determine if a template-id is a variable concept and inline. */ -+int expansion_level = 0; - --tree --lift_template_id (tree t) -+struct expanding_concept_sentinel - { -- if (tree info = resolve_variable_concept_check (t)) -- { -- tree decl = TREE_VALUE (info); -- tree args = TREE_PURPOSE (info); -- return lift_variable_initializer (decl, args); -- } -+ expanding_concept_sentinel () -+ { -+ ++expansion_level; -+ } - -- /* Check that we didn't refer to a function concept like -- a variable. -+ ~expanding_concept_sentinel() -+ { -+ --expansion_level; -+ } -+}; - -- TODO: Add a note on how to fix this. */ -- tree tmpl = TREE_OPERAND (t, 0); -- if (TREE_CODE (tmpl) == OVERLOAD) -- { -- tree fn = OVL_FUNCTION (tmpl); -- if (TREE_CODE (fn) == TEMPLATE_DECL -- && DECL_DECLARED_CONCEPT_P (DECL_TEMPLATE_RESULT (fn))) -- { -- error_at (location_of (t), -- "invalid reference to function concept %qD", fn); -- return error_mark_node; -- } -- } - -- return t; --} -+} /* namespace */ - --/* Lift any constraints appearing in a nested requirement of -- a requires-expression. */ --tree --lift_requires_expression (tree t) -+/* Returns true when a concept is being expanded. */ -+ -+bool -+expanding_concept() - { -- tree parms = TREE_OPERAND (t, 0); -- tree reqs = TREE_OPERAND (t, 1); -- tree result = NULL_TREE; -- for (; reqs != NULL_TREE; reqs = TREE_CHAIN (reqs)) -- { -- tree req = TREE_VALUE (reqs); -- if (TREE_CODE (req) == NESTED_REQ) -- { -- tree expr = lift_expression (TREE_OPERAND (req, 0)); -- req = finish_nested_requirement (expr); -- } -- result = tree_cons (NULL_TREE, req, result); -- } -- return finish_requires_expr (parms, result); -+ return expansion_level > 0; - } - --/* Inline references to specializations of concepts. */ -+/* Expand a concept declaration (not a template) and its arguments to -+ a constraint defined by the concept's initializer or definition. */ -+ - tree --lift_expression (tree t) -+expand_concept (tree decl, tree args) - { -- if (t == NULL_TREE) -- return NULL_TREE; -+ expanding_concept_sentinel sentinel; - -- if (t == error_mark_node) -- return error_mark_node; -- -- /* Concepts can be referred to by call or variable. All other -- nodes are preserved. */ -- switch (TREE_CODE (t)) -- { -- case CALL_EXPR: -- return lift_call_expression (t); -+ if (TREE_CODE (decl) == TEMPLATE_DECL) -+ decl = DECL_TEMPLATE_RESULT (decl); -+ tree tmpl = DECL_TI_TEMPLATE (decl); - -- case TEMPLATE_ID_EXPR: -- return lift_template_id (t); -+ /* Check for a previous specialization. */ -+ if (tree spec = get_concept_expansion (tmpl, args)) -+ return spec; - -- case REQUIRES_EXPR: -- return lift_requires_expression (t); -+ /* Substitute the arguments to form a new definition expression. */ -+ tree def = get_concept_definition (decl); - -- case EXPR_PACK_EXPANSION: -- /* Use copy_node rather than make_pack_expansion so that -- PACK_EXPANSION_PARAMETER_PACKS stays the same. */ -- t = copy_node (t); -- SET_PACK_EXPANSION_PATTERN -- (t, lift_expression (PACK_EXPANSION_PATTERN (t))); -- return t; -- -- case TREE_LIST: -- { -- t = copy_node (t); -- TREE_VALUE (t) = lift_expression (TREE_VALUE (t)); -- TREE_CHAIN (t) = lift_expression (TREE_CHAIN (t)); -- return t; -- } -+ ++processing_template_decl; -+ tree result = tsubst_expr (def, args, tf_none, NULL_TREE, true); -+ --processing_template_decl; -+ if (result == error_mark_node) -+ return error_mark_node; - -- default: -- return lift_operands (t); -- } -+ /* And lastly, normalize it, check for implications, and save -+ the specialization for later. */ -+ tree norm = normalize_expression (result); -+ learn_implications (tmpl, args, norm); -+ return save_concept_expansion (tmpl, args, norm); - } - --/*--------------------------------------------------------------------------- -- Transformation of expressions into constraints -----------------------------------------------------------------------------*/ -- --/* Part of constraint normalization. The following functions rewrite -- expressions as constraints. */ -- --tree transform_expression (tree); - --/* Check that the logical-or or logical-and expression does -- not result in a call to a user-defined user-defined operator -- (temp.constr.op). Returns true if the logical operator is -- admissible and false otherwise. */ -- --bool --check_logical_expr (tree t) --{ -- /* We can't do much for type dependent expressions. */ -- if (type_dependent_expression_p (t)) -- return true; -+/*--------------------------------------------------------------------------- -+ Stepwise normalization of expressions - -- /* Resolve the logical operator. Note that template processing is -- disabled so we get the actual call or target expression back. -- not_processing_template_sentinel sentinel. -- -- TODO: This check is actually subsumed by the requirement that -- constraint operands have type bool. I'm not sure we need it -- unless we allow conversions. */ -- tree arg1 = TREE_OPERAND (t, 0); -- tree arg2 = TREE_OPERAND (t, 1); -- tree ovl = NULL_TREE; -- tree expr = build_x_binary_op (EXPR_LOC_OR_LOC (arg2, input_location), -- TREE_CODE (t), -- arg1, TREE_CODE (arg1), -- arg2, TREE_CODE (arg2), -- &ovl, -- tf_none); -- if (TREE_CODE (expr) != TREE_CODE (t)) -- { -- error ("user-defined operator %qs in constraint %q+E", -- operator_name_info[TREE_CODE (t)].name, t); -- return false; -- } -- return true; --} -+This set of functions will transform an expression into a constraint -+in a sequence of steps. Normalization does not not look into concept -+definitions. -+---------------------------------------------------------------------------*/ - - /* Transform a logical-or or logical-and expression into either - a conjunction or disjunction. */ - - tree --xform_logical (tree t, tree_code c) -+normalize_logical_operation (tree t, tree_code c) - { -- if (!check_logical_expr (t)) -- return error_mark_node; -- tree t0 = transform_expression (TREE_OPERAND (t, 0)); -- tree t1 = transform_expression (TREE_OPERAND (t, 1)); -+ tree t0 = normalize_expression (TREE_OPERAND (t, 0)); -+ tree t1 = normalize_expression (TREE_OPERAND (t, 1)); - return build_nt (c, t0, t1); - } - -@@ -567,7 +597,7 @@ - for its expression. */ - - inline tree --xform_simple_requirement (tree t) -+normalize_simple_requirement (tree t) - { - return build_nt (EXPR_CONSTR, TREE_OPERAND (t, 0)); - } -@@ -575,7 +605,7 @@ - /* A type requirement T introduce a type constraint for its type. */ - - inline tree --xform_type_requirement (tree t) -+normalize_type_requirement (tree t) - { - return build_nt (TYPE_CONSTR, TREE_OPERAND (t, 0)); - } -@@ -589,7 +619,7 @@ - includes an exception constraint. */ - - tree --xform_compound_requirement (tree t) -+normalize_compound_requirement (tree t) - { - tree expr = TREE_OPERAND (t, 0); - tree constr = build_nt (EXPR_CONSTR, TREE_OPERAND (t, 0)); -@@ -627,29 +657,29 @@ - will guarantee that the constraint is never satisfied. */ - - inline tree --xform_nested_requirement (tree t) -+normalize_nested_requirement (tree t) - { -- return transform_expression (TREE_OPERAND (t, 0)); -+ return normalize_expression (TREE_OPERAND (t, 0)); - } - - /* Transform a requirement T into one or more constraints. */ - - tree --xform_requirement (tree t) -+normalize_requirement (tree t) - { - switch (TREE_CODE (t)) - { - case SIMPLE_REQ: -- return xform_simple_requirement (t); -+ return normalize_simple_requirement (t); - - case TYPE_REQ: -- return xform_type_requirement (t); -+ return normalize_type_requirement (t); - - case COMPOUND_REQ: -- return xform_compound_requirement (t); -+ return normalize_compound_requirement (t); - - case NESTED_REQ: -- return xform_nested_requirement (t); -+ return normalize_nested_requirement (t); - - default: - gcc_unreachable (); -@@ -661,46 +691,165 @@ - constraints. */ - - tree --xform_requirements (tree t) -+normalize_requirements (tree t) - { - tree result = NULL_TREE; - for (; t; t = TREE_CHAIN (t)) - { -- tree constr = xform_requirement (TREE_VALUE (t)); -+ tree constr = normalize_requirement (TREE_VALUE (t)); - result = conjoin_constraints (result, constr); - } - return result; - } - --/* Transform a requires-expression into a parameterized constraint. */ -+/* The normal form of a requires-expression is a parameterized -+ constraint having the same parameters and a conjunction of -+ constraints representing the normal form of requirements. */ - - tree --xform_requires_expr (tree t) -+normalize_requires_expression (tree t) - { -- tree operand = xform_requirements (TREE_OPERAND (t, 1)); -+ tree operand = normalize_requirements (TREE_OPERAND (t, 1)); - if (tree parms = TREE_OPERAND (t, 0)) - return build_nt (PARM_CONSTR, parms, operand); - else - return operand; - } - --/* Transform an expression into an atomic predicate constraint. -- After substitution, the expression of a predicate constraint -- shall have type bool (temp.constr.pred). For non-type-dependent -- expressions, we can check that now. */ -+/* For a template-id referring to a variable concept, returns -+ a check constraint. Otherwise, returns a predicate constraint. */ - - tree --xform_atomic (tree t) -+normalize_template_id_expression (tree t) - { -- if (TREE_TYPE (t) && !type_dependent_expression_p (t)) -- { -- tree type = cv_unqualified (TREE_TYPE (t)); -- if (!same_type_p (type, boolean_type_node)) -- { -- error ("predicate constraint %q+E does not have type %<bool%>", t); -+ if (tree info = resolve_variable_concept_check (t)) -+ { -+ if (info == error_mark_node) -+ { -+ /* We get this when the template arguments don't match -+ the variable concept. */ -+ error ("invalid reference to concept %qE", t); -+ return error_mark_node; -+ } -+ -+ tree decl = TREE_VALUE (info); -+ tree args = TREE_PURPOSE (info); -+ return build_nt (CHECK_CONSTR, decl, args); -+ } -+ -+ /* Check that we didn't refer to a function concept like a variable. */ -+ tree tmpl = TREE_OPERAND (t, 0); -+ if (TREE_CODE (tmpl) == OVERLOAD) -+ { -+ tree fn = OVL_FUNCTION (tmpl); -+ if (TREE_CODE (fn) == TEMPLATE_DECL -+ && DECL_DECLARED_CONCEPT_P (DECL_TEMPLATE_RESULT (fn))) -+ { -+ error_at (location_of (t), -+ "invalid reference to function concept %qD", fn); -+ return error_mark_node; -+ } -+ } -+ -+ return build_nt (PRED_CONSTR, t); -+} -+ -+/* For a call expression to a function concept, returns a check -+ constraint. Otherwise, returns a predicate constraint. */ -+ -+tree -+normalize_call_expression (tree t) -+{ -+ /* Try to resolve this function call as a concept. If not, then -+ it can be returned as a predicate constraint. */ -+ tree check = resolve_constraint_check (t); -+ if (!check) -+ return build_nt (PRED_CONSTR, t); -+ if (check == error_mark_node) -+ { -+ /* TODO: Improve diagnostics. We could report why the reference -+ is invalid. */ -+ error ("invalid reference to concept %qE", t); -+ return error_mark_node; -+ } -+ -+ tree fn = TREE_VALUE (check); -+ tree args = TREE_PURPOSE (check); -+ return build_nt (CHECK_CONSTR, fn, args); -+} -+ -+/* If T is a call to an overloaded && or || operator, diagnose that -+ as a non-SFINAEable error. Returns true if an error is emitted. -+ -+ TODO: It would be better to diagnose this at the point of definition, -+ if possible. Perhaps we should immediately do a first-pass normalization -+ of a concept definition to catch obvious non-dependent errors like -+ this. */ -+ -+bool -+check_for_logical_overloads (tree t) -+{ -+ if (TREE_CODE (t) != CALL_EXPR) -+ return false; -+ -+ tree fn = CALL_EXPR_FN (t); -+ -+ /* For member calls, try extracting the function from the -+ component ref. */ -+ if (TREE_CODE (fn) == COMPONENT_REF) -+ { -+ fn = TREE_OPERAND (fn, 1); -+ if (TREE_CODE (fn) == BASELINK) -+ fn = BASELINK_FUNCTIONS (fn); -+ } -+ -+ if (TREE_CODE (fn) != FUNCTION_DECL) -+ return false; -+ -+ if (DECL_OVERLOADED_OPERATOR_P (fn)) -+ { -+ location_t loc = EXPR_LOC_OR_LOC (t, input_location); -+ error_at (loc, "constraint %qE, uses overloaded operator", t); -+ return true; -+ } -+ -+ return false; -+} -+ -+/* The normal form of an atom depends on the expression. The normal -+ form of a function call to a function concept is a check constraint -+ for that concept. The normal form of a reference to a variable -+ concept is a check constraint for that concept. Otherwise, the -+ constraint is a predicate constraint. */ -+ -+tree -+normalize_atom (tree t) -+{ -+ /* We can get constraints pushed down through pack expansions, so -+ just return them. */ -+ if (constraint_p (t)) -+ return t; -+ -+ tree type = TREE_TYPE (t); -+ if (!type || type_unknown_p (t) || TREE_CODE (type) == TEMPLATE_TYPE_PARM) -+ ; -+ else if (!dependent_type_p (type)) -+ { -+ if (check_for_logical_overloads (t)) - return error_mark_node; -- } -- } -+ -+ type = cv_unqualified (type); -+ if (!same_type_p (type, boolean_type_node)) -+ { -+ error ("predicate constraint %q+E does not have type %<bool%>", t); -+ return error_mark_node; -+ } -+ } -+ -+ if (TREE_CODE (t) == TEMPLATE_ID_EXPR) -+ return normalize_template_id_expression (t); -+ if (TREE_CODE (t) == CALL_EXPR) -+ return normalize_call_expression (t); - return build_nt (PRED_CONSTR, t); - } - -@@ -735,49 +884,48 @@ - leaves of the constraint so that partial ordering will work. */ - - tree --xform_pack_expansion (tree t) -+normalize_pack_expansion (tree t) - { -- tree pat = transform_expression (PACK_EXPANSION_PATTERN (t)); -+ tree pat = normalize_expression (PACK_EXPANSION_PATTERN (t)); - return push_down_pack_expansion (t, pat); - } - - /* Transform an expression into a constraint. */ - - tree --xform_expr (tree t) -+normalize_any_expression (tree t) - { - switch (TREE_CODE (t)) - { - case TRUTH_ANDIF_EXPR: -- return xform_logical (t, CONJ_CONSTR); -+ return normalize_logical_operation (t, CONJ_CONSTR); - - case TRUTH_ORIF_EXPR: -- return xform_logical (t, DISJ_CONSTR); -+ return normalize_logical_operation (t, DISJ_CONSTR); - - case REQUIRES_EXPR: -- return xform_requires_expr (t); -+ return normalize_requires_expression (t); - - case BIND_EXPR: -- return transform_expression (BIND_EXPR_BODY (t)); -+ return normalize_expression (BIND_EXPR_BODY (t)); - - case EXPR_PACK_EXPANSION: -- return xform_pack_expansion (t); -+ return normalize_pack_expansion (t); - - default: - /* All other constraints are atomic. */ -- return xform_atomic (t); -+ return normalize_atom (t); - } - } - - /* Transform a statement into an expression. */ -- - tree --xform_stmt (tree t) -+normalize_any_statement (tree t) - { - switch (TREE_CODE (t)) - { - case RETURN_EXPR: -- return transform_expression (TREE_OPERAND (t, 0)); -+ return normalize_expression (TREE_OPERAND (t, 0)); - default: - gcc_unreachable (); - } -@@ -787,24 +935,22 @@ - /* Reduction rules for the declaration T. */ - - tree --xform_decl (tree t) -+normalize_any_declaration (tree t) - { - switch (TREE_CODE (t)) - { - case VAR_DECL: -- return xform_atomic (t); -+ return normalize_atom (t); - default: - gcc_unreachable (); - } - return error_mark_node; - } - --/* Transform a lifted expression into a constraint. This either -- returns a constraint, or it returns error_mark_node when -- a constraint cannot be formed. */ -+/* Returns the normal form of a constraint expression. */ - - tree --transform_expression (tree t) -+normalize_expression (tree t) - { - if (!t) - return NULL_TREE; -@@ -818,20 +964,20 @@ - case tcc_binary: - case tcc_expression: - case tcc_vl_exp: -- return xform_expr (t); -+ return normalize_any_expression (t); - - case tcc_statement: -- return xform_stmt (t); -+ return normalize_any_statement (t); - - case tcc_declaration: -- return xform_decl (t); -+ return normalize_any_declaration (t); - - case tcc_exceptional: - case tcc_constant: - case tcc_reference: - case tcc_comparison: - /* These are all atomic predicate constraints. */ -- return xform_atomic (t); -+ return normalize_atom (t); - - default: - /* Unhandled node kind. */ -@@ -840,6 +986,7 @@ - return error_mark_node; - } - -+ - /*--------------------------------------------------------------------------- - Constraint normalization - ---------------------------------------------------------------------------*/ -@@ -879,8 +1026,7 @@ - { - ++processing_template_decl; - tree expr = PRED_CONSTR_EXPR (t); -- tree lifted = lift_expression (expr); -- tree constr = transform_expression (lifted); -+ tree constr = normalize_expression (expr); - --processing_template_decl; - return constr; - } -@@ -938,7 +1084,6 @@ - return error_mark_node; - } - --} /* namespace */ - - - // -------------------------------------------------------------------------- // -@@ -1028,61 +1173,11 @@ - ci->declarator_reqs = decl_reqs; - ci->associated_constr = conjoin_constraints (tmpl_reqs, decl_reqs); - -- ++processing_template_decl; -- ci->normalized_constr = normalize_constraint (ci->associated_constr); -- --processing_template_decl; -- -- ci->assumptions = decompose_assumptions (ci->normalized_constr); - return (tree)ci; - } - - namespace { - --/* Returns true if any of the arguments in the template -- argument list is a wildcard or wildcard pack. */ --bool --contains_wildcard_p (tree args) --{ -- for (int i = 0; i < TREE_VEC_LENGTH (args); ++i) -- { -- tree arg = TREE_VEC_ELT (args, i); -- if (TREE_CODE (arg) == WILDCARD_DECL) -- return true; -- } -- return false; --} -- --/* Build a new call expression, but don't actually generate -- a new function call. We just want the tree, not the -- semantics. */ --inline tree --build_call_check (tree id) --{ -- ++processing_template_decl; -- vec<tree, va_gc> *fargs = make_tree_vector(); -- tree call = finish_call_expr (id, &fargs, false, false, tf_none); -- release_tree_vector (fargs); -- --processing_template_decl; -- return call; --} -- --/* Build an expression that will check a variable concept. If any -- argument contains a wildcard, don't try to finish the variable -- template because we can't substitute into a non-existent -- declaration. */ --tree --build_variable_check (tree id) --{ -- gcc_assert (TREE_CODE (id) == TEMPLATE_ID_EXPR); -- if (contains_wildcard_p (TREE_OPERAND (id, 1))) -- return id; -- -- ++processing_template_decl; -- tree var = finish_template_variable (id); -- --processing_template_decl; -- return var; --} -- - /* Construct a sequence of template arguments by prepending - ARG to REST. Either ARG or REST may be null. */ - tree -@@ -1158,7 +1253,9 @@ - - Note that the constraints are neither reduced nor decomposed. - That is done only after the requires clause has been parsed -- (or not). */ -+ (or not). -+ -+ This will always return a CHECK_CONSTR. */ - tree - finish_shorthand_constraint (tree decl, tree constr) - { -@@ -1207,7 +1304,7 @@ - TREE_TYPE (check) = boolean_type_node; - } - -- return make_predicate_constraint (check); -+ return normalize_expression (check); - } - - /* Returns a conjunction of shorthand requirements for the template -@@ -1346,7 +1443,7 @@ - - /* Associate the constraint. */ - tree check = build_concept_check (tmpl_decl, NULL_TREE, check_args); -- tree constr = make_predicate_constraint (check); -+ tree constr = normalize_expression (check); - TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = constr; - - return parm_list; -@@ -1362,41 +1459,28 @@ - { - if (TREE_CODE (t) == TYPE_DECL) - { -- /* A constrained parameter. */ -- tmpl = DECL_TI_TEMPLATE (CONSTRAINED_PARM_CONCEPT (t)); -- args = CONSTRAINED_PARM_EXTRA_ARGS (t); -+ /* A constrained parameter. Build a constraint check -+ based on the prototype parameter and then extract the -+ arguments from that. */ -+ tree proto = CONSTRAINED_PARM_PROTOTYPE (t); -+ tree check = finish_shorthand_constraint (proto, t); -+ placeholder_extract_concept_and_args (check, tmpl, args); - return; - } - -- gcc_assert (TREE_CODE (t) == PRED_CONSTR); -- t = PRED_CONSTR_EXPR (t); -- gcc_assert (TREE_CODE (t) == CALL_EXPR -- || TREE_CODE (t) == TEMPLATE_ID_EXPR -- || VAR_P (t)); -- -- if (TREE_CODE (t) == CALL_EXPR) -- t = CALL_EXPR_FN (t); -- if (TREE_CODE (t) == TEMPLATE_ID_EXPR) -+ if (TREE_CODE (t) == CHECK_CONSTR) - { -- tmpl = TREE_OPERAND (t, 0); -- if (TREE_CODE (tmpl) == OVERLOAD) -- { -- gcc_assert (OVL_CHAIN (tmpl) == NULL_TREE); -- tmpl = OVL_FUNCTION (tmpl); -- } -- args = TREE_OPERAND (t, 1); -- } -- else if (DECL_P (t)) -- { -- tmpl = DECL_TI_TEMPLATE (t); -- args = DECL_TI_ARGS (t); -+ tree decl = CHECK_CONSTR_CONCEPT (t); -+ tmpl = DECL_TI_TEMPLATE (decl); -+ args = CHECK_CONSTR_ARGS (t); -+ return; - } -- else -+ - gcc_unreachable (); - } - - /* Returns true iff the placeholders C1 and C2 are equivalent. C1 -- and C2 can be either PRED_CONSTR_EXPR or TEMPLATE_TYPE_PARM. */ -+ and C2 can be either CHECK_CONSTR or TEMPLATE_TYPE_PARM. */ - - bool - equivalent_placeholder_constraints (tree c1, tree c2) -@@ -1411,6 +1495,11 @@ - return true; - if (!c1 || !c2) - return false; -+ if (c1 == error_mark_node || c2 == error_mark_node) -+ /* We get here during satisfaction; when a deduction constraint -+ fails, substitution can produce an error_mark_node for the -+ placeholder constraints. */ -+ return false; - - tree t1, t2, a1, a2; - placeholder_extract_concept_and_args (c1, t1, a1); -@@ -1419,21 +1508,20 @@ - if (t1 != t2) - return false; - -- /* Skip the first argument to avoid infinite recursion on the -- placeholder auto itself. */ -- bool skip1 = (TREE_CODE (c1) == PRED_CONSTR); -- bool skip2 = (TREE_CODE (c2) == PRED_CONSTR); -- -- int len1 = (a1 ? TREE_VEC_LENGTH (a1) : 0) - skip1; -- int len2 = (a2 ? TREE_VEC_LENGTH (a2) : 0) - skip2; -- -+ int len1 = TREE_VEC_LENGTH (a1); -+ int len2 = TREE_VEC_LENGTH (a2); - if (len1 != len2) - return false; - -- for (int i = 0; i < len1; ++i) -- if (!cp_tree_equal (TREE_VEC_ELT (a1, i + skip1), -- TREE_VEC_ELT (a2, i + skip2))) -+ /* Skip the first argument so we don't infinitely recurse. -+ Also, they may differ in template parameter index. */ -+ for (int i = 1; i < len1; ++i) -+ { -+ tree t1 = TREE_VEC_ELT (a1, i); -+ tree t2 = TREE_VEC_ELT (a2, i); -+ if (!template_args_equal (t1, t2)) - return false; -+ } - return true; - } - -@@ -1492,40 +1580,139 @@ - return build_nt (PRED_CONSTR, result); - } - -+/* Substitute into a check constraint. */ -+ -+tree -+tsubst_check_constraint (tree t, tree args, -+ tsubst_flags_t complain, tree in_decl) -+{ -+ tree decl = CHECK_CONSTR_CONCEPT (t); -+ tree tmpl = DECL_TI_TEMPLATE (decl); -+ tree targs = CHECK_CONSTR_ARGS (t); -+ -+ /* Substitute through by building an template-id expression -+ and then substituting into that. */ -+ tree expr = build_nt(TEMPLATE_ID_EXPR, tmpl, targs); -+ ++processing_template_decl; -+ tree result = tsubst_expr (expr, args, complain, in_decl, false); -+ --processing_template_decl; -+ -+ if (result == error_mark_node) -+ return error_mark_node; -+ -+ /* Extract the results and rebuild the check constraint. */ -+ decl = DECL_TEMPLATE_RESULT (TREE_OPERAND (result, 0)); -+ args = TREE_OPERAND (result, 1); -+ -+ return build_nt (CHECK_CONSTR, decl, args); -+} -+ - /* Substitute into the conjunction of constraints. Returns - error_mark_node if substitution into either operand fails. */ -+ - tree --tsubst_conjunction (tree t, tree args, -- tsubst_flags_t complain, tree in_decl) -+tsubst_logical_operator (tree t, tree args, -+ tsubst_flags_t complain, tree in_decl) - { - tree t0 = TREE_OPERAND (t, 0); - tree r0 = tsubst_constraint (t0, args, complain, in_decl); -+ if (r0 == error_mark_node) -+ return error_mark_node; - tree t1 = TREE_OPERAND (t, 1); - tree r1 = tsubst_constraint (t1, args, complain, in_decl); -- return build_nt (CONJ_CONSTR, r0, r1); -+ if (r1 == error_mark_node) -+ return error_mark_node; -+ return build_nt (TREE_CODE (t), r0, r1); -+} -+ -+namespace { -+ -+/* Substitute ARGS into the expression constraint T. */ -+ -+tree -+tsubst_expr_constr (tree t, tree args, tsubst_flags_t complain, tree in_decl) -+{ -+ cp_unevaluated guard; -+ tree expr = EXPR_CONSTR_EXPR (t); -+ tree ret = tsubst_expr (expr, args, complain, in_decl, false); -+ if (ret == error_mark_node) -+ return error_mark_node; -+ return build_nt (EXPR_CONSTR, ret); -+} -+ -+/* Substitute ARGS into the type constraint T. */ -+ -+tree -+tsubst_type_constr (tree t, tree args, tsubst_flags_t complain, tree in_decl) -+{ -+ tree type = TYPE_CONSTR_TYPE (t); -+ tree ret = tsubst (type, args, complain, in_decl); -+ if (ret == error_mark_node) -+ return error_mark_node; -+ return build_nt (TYPE_CONSTR, ret); -+} -+ -+/* Substitute ARGS into the implicit conversion constraint T. */ -+ -+tree -+tsubst_implicit_conversion_constr (tree t, tree args, tsubst_flags_t complain, -+ tree in_decl) -+{ -+ cp_unevaluated guard; -+ tree expr = ICONV_CONSTR_EXPR (t); -+ tree type = ICONV_CONSTR_TYPE (t); -+ tree new_expr = tsubst_expr (expr, args, complain, in_decl, false); -+ if (new_expr == error_mark_node) -+ return error_mark_node; -+ tree new_type = tsubst (type, args, complain, in_decl); -+ if (new_type == error_mark_node) -+ return error_mark_node; -+ return build_nt (ICONV_CONSTR, new_expr, new_type); - } - --/* Substitute ARGS into the constraint T. */ -+/* Substitute ARGS into the argument deduction constraint T. */ -+ - tree --tsubst_constraint (tree t, tree args, tsubst_flags_t complain, tree in_decl) -+tsubst_argument_deduction_constr (tree t, tree args, tsubst_flags_t complain, -+ tree in_decl) - { -- if (t == NULL_TREE) -- return t; -- if (TREE_CODE (t) == CONJ_CONSTR) -- return tsubst_conjunction (t, args, complain, in_decl); -- else if (TREE_CODE (t) == PRED_CONSTR) -- return tsubst_predicate_constraint (t, args, complain, in_decl); -- else -- gcc_unreachable (); -- return error_mark_node; -+ cp_unevaluated guard; -+ tree expr = DEDUCT_CONSTR_EXPR (t); -+ tree pattern = DEDUCT_CONSTR_PATTERN (t); -+ tree autos = DEDUCT_CONSTR_PLACEHOLDER(t); -+ tree new_expr = tsubst_expr (expr, args, complain, in_decl, false); -+ if (new_expr == error_mark_node) -+ return error_mark_node; -+ /* It seems like substituting through the pattern will not affect the -+ placeholders. We should (?) be able to reuse the existing list -+ without any problems. If not, then we probably want to create a -+ new list of placeholders and then instantiate the pattern using -+ those. */ -+ tree new_pattern = tsubst (pattern, args, complain, in_decl); -+ if (new_pattern == error_mark_node) -+ return error_mark_node; -+ return build_nt (DEDUCT_CONSTR, new_expr, new_pattern, autos); - } - --namespace { -+/* Substitute ARGS into the exception constraint T. */ -+ -+tree -+tsubst_exception_constr (tree t, tree args, tsubst_flags_t complain, -+ tree in_decl) -+{ -+ cp_unevaluated guard; -+ tree expr = EXCEPT_CONSTR_EXPR (t); -+ tree ret = tsubst_expr (expr, args, complain, in_decl, false); -+ if (ret == error_mark_node) -+ return error_mark_node; -+ return build_nt (EXCEPT_CONSTR, ret); -+} - - /* A subroutine of tsubst_constraint_variables. Register local - specializations for each of parameter in PARMS and its - corresponding substituted constraint variable in VARS. - Returns VARS. */ -+ - tree - declare_constraint_vars (tree parms, tree vars) - { -@@ -1553,6 +1740,7 @@ - Note that the caller must establish a local specialization stack - prior to calling this function since this substitution will - declare the substituted parameters. */ -+ - tree - tsubst_constraint_variables (tree t, tree args, - tsubst_flags_t complain, tree in_decl) -@@ -1568,10 +1756,29 @@ - return declare_constraint_vars (t, vars); - } - -+/* Substitute ARGS into the parameterized constraint T. */ -+ -+tree -+tsubst_parameterized_constraint (tree t, tree args, -+ tsubst_flags_t complain, tree in_decl) -+{ -+ local_specialization_stack stack; -+ tree vars = tsubst_constraint_variables (PARM_CONSTR_PARMS (t), -+ args, complain, in_decl); -+ if (vars == error_mark_node) -+ return error_mark_node; -+ tree expr = tsubst_constraint (PARM_CONSTR_OPERAND (t), args, -+ complain, in_decl); -+ if (expr == error_mark_node) -+ return error_mark_node; -+ return build_nt (PARM_CONSTR, vars, expr); -+} -+ - /* Substitute ARGS into the simple requirement T. Note that - substitution may result in an ill-formed expression without - causing the program to be ill-formed. In such cases, the - requirement wraps an error_mark_node. */ -+ - inline tree - tsubst_simple_requirement (tree t, tree args, - tsubst_flags_t complain, tree in_decl) -@@ -1627,6 +1834,8 @@ - return finish_nested_requirement (expr); - } - -+/* Substitute ARGS into the requirement T. */ -+ - inline tree - tsubst_requirement (tree t, tree args, tsubst_flags_t complain, tree in_decl) - { -@@ -1662,7 +1871,8 @@ - r = tree_cons (NULL_TREE, e, r); - t = TREE_CHAIN (t); - } -- return r; -+ /* Ensure that the order of constraints is the same as the original. */ -+ return nreverse (r); - } - - } /* namespace */ -@@ -1696,6 +1906,7 @@ - - /* Substitute ARGS into the constraint information CI, producing a new - constraint record. */ -+ - tree - tsubst_constraint_info (tree t, tree args, - tsubst_flags_t complain, tree in_decl) -@@ -1714,6 +1925,39 @@ - return build_constraints (tmpl_constr, decl_constr); - } - -+/* Substitute ARGS into the constraint T. */ -+ -+tree -+tsubst_constraint (tree t, tree args, tsubst_flags_t complain, tree in_decl) -+{ -+ if (t == NULL_TREE) -+ return t; -+ switch (TREE_CODE (t)) -+ { -+ case PRED_CONSTR: -+ return tsubst_predicate_constraint (t, args, complain, in_decl); -+ case CHECK_CONSTR: -+ return tsubst_check_constraint (t, args, complain, in_decl); -+ case CONJ_CONSTR: -+ case DISJ_CONSTR: -+ return tsubst_logical_operator (t, args, complain, in_decl); -+ case PARM_CONSTR: -+ return tsubst_parameterized_constraint (t, args, complain, in_decl); -+ case EXPR_CONSTR: -+ return tsubst_expr_constr (t, args, complain, in_decl); -+ case TYPE_CONSTR: -+ return tsubst_type_constr (t, args, complain, in_decl); -+ case ICONV_CONSTR: -+ return tsubst_implicit_conversion_constr (t, args, complain, in_decl); -+ case DEDUCT_CONSTR: -+ return tsubst_argument_deduction_constr (t, args, complain, in_decl); -+ case EXCEPT_CONSTR: -+ return tsubst_exception_constr (t, args, complain, in_decl); -+ default: -+ gcc_unreachable (); -+ } -+ return error_mark_node; -+} - - /*--------------------------------------------------------------------------- - Constraint satisfaction -@@ -1738,11 +1982,14 @@ - gen_elem_of_pack_expansion_instantiation will check that each element of - the expansion is satisfied. */ - tree exprs = tsubst_pack_expansion (t, args, complain, in_decl); -+ - if (exprs == error_mark_node) - return boolean_false_node; -- int n = TREE_VEC_LENGTH (exprs); - -- for (int i = 0; i < n; ++i) -+ /* TODO: It might be better to normalize each expanded term -+ and evaluate them separately. That would provide better -+ opportunities for diagnostics. */ -+ for (int i = 0; i < TREE_VEC_LENGTH (exprs); ++i) - if (TREE_VEC_ELT (exprs, i) != boolean_true_node) - return boolean_false_node; - return boolean_true_node; -@@ -1760,12 +2007,14 @@ - satisfy_predicate_constraint (tree t, tree args, - tsubst_flags_t complain, tree in_decl) - { -- tree original = TREE_OPERAND (t, 0); -+ tree expr = TREE_OPERAND (t, 0); - - /* We should never have a naked pack expansion in a predicate constraint. */ -- gcc_assert (TREE_CODE (original) != EXPR_PACK_EXPANSION); -+ gcc_assert (TREE_CODE (expr) != EXPR_PACK_EXPANSION); - -- tree expr = tsubst_expr (original, args, complain, in_decl, false); -+ /* If substitution into the expression fails, the constraint -+ is not satisfied. */ -+ expr = tsubst_expr (expr, args, complain, in_decl, false); - if (expr == error_mark_node) - return boolean_false_node; - -@@ -1781,8 +2030,37 @@ - return boolean_false_node; - } - -- tree value = cxx_constant_value (expr); -- return value; -+ return cxx_constant_value (expr); -+} -+ -+/* A concept check constraint like C<CARGS> is satisfied if substituting ARGS -+ into CARGS succeeds and C is satisfied for the resulting arguments. */ -+ -+tree -+satisfy_check_constraint (tree t, tree args, -+ tsubst_flags_t complain, tree in_decl) -+{ -+ tree decl = CHECK_CONSTR_CONCEPT (t); -+ tree tmpl = DECL_TI_TEMPLATE (decl); -+ tree cargs = CHECK_CONSTR_ARGS (t); -+ -+ /* Instantiate the concept check arguments. */ -+ tree targs = tsubst (cargs, args, tf_none, NULL_TREE); -+ if (targs == error_mark_node) -+ return boolean_false_node; -+ -+ /* Search for a previous value. */ -+ if (tree prev = lookup_concept_satisfaction (tmpl, targs)) -+ return prev; -+ -+ /* Expand the concept; failure here implies non-satisfaction. */ -+ tree def = expand_concept (decl, targs); -+ if (def == error_mark_node) -+ return memoize_concept_satisfaction (tmpl, args, boolean_false_node); -+ -+ /* Recursively satisfy the constraint. */ -+ tree result = satisfy_constraint_1 (def, targs, complain, in_decl); -+ return memoize_concept_satisfaction (tmpl, targs, result); - } - - /* Check an expression constraint. The constraint is satisfied if -@@ -1803,7 +2081,6 @@ - return boolean_false_node; - if (!perform_deferred_access_checks (tf_none)) - return boolean_false_node; -- - return boolean_true_node; - } - -@@ -1822,7 +2099,6 @@ - return boolean_false_node; - if (!perform_deferred_access_checks (complain)) - return boolean_false_node; -- - return boolean_true_node; - } - -@@ -1932,11 +2208,8 @@ - { - tree t0 = satisfy_constraint_1 (TREE_OPERAND (t, 0), args, complain, in_decl); - if (t0 == boolean_false_node) -- return t0; -- tree t1 = satisfy_constraint_1 (TREE_OPERAND (t, 1), args, complain, in_decl); -- if (t1 == boolean_false_node) -- return t1; -- return boolean_true_node; -+ return boolean_false_node; -+ return satisfy_constraint_1 (TREE_OPERAND (t, 1), args, complain, in_decl); - } - - /* Check that the disjunction of constraints is satisfied. Note -@@ -1949,10 +2222,7 @@ - tree t0 = satisfy_constraint_1 (TREE_OPERAND (t, 0), args, complain, in_decl); - if (t0 == boolean_true_node) - return boolean_true_node; -- tree t1 = satisfy_constraint_1 (TREE_OPERAND (t, 1), args, complain, in_decl); -- if (t1 == boolean_true_node) -- return boolean_true_node; -- return boolean_false_node; -+ return satisfy_constraint_1 (TREE_OPERAND (t, 1), args, complain, in_decl); - } - - /* Dispatch to an appropriate satisfaction routine depending on the -@@ -1974,6 +2244,9 @@ - case PRED_CONSTR: - return satisfy_predicate_constraint (t, args, complain, in_decl); - -+ case CHECK_CONSTR: -+ return satisfy_check_constraint (t, args, complain, in_decl); -+ - case EXPR_CONSTR: - return satisfy_expression_constraint (t, args, complain, in_decl); - -@@ -2014,15 +2287,19 @@ - tree - satisfy_constraint (tree t, tree args) - { -+ auto_timevar time (TV_CONSTRAINT_SAT); -+ - /* Turn off template processing. Constraint satisfaction only applies -- to non-dependent terms, so we want full checking here. */ -- processing_template_decl_sentinel sentinel (true); -+ to non-dependent terms, so we want to ensure full checking here. */ -+ processing_template_decl_sentinel proc (true); -+ - /* Avoid early exit in tsubst and tsubst_copy from null args; since earlier - substitution was done with processing_template_decl forced on, there will - be expressions that still need semantic processing, possibly buried in - decltype or a template argument. */ - if (args == NULL_TREE) - args = make_tree_vec (1); -+ - return satisfy_constraint_1 (t, args, tf_none, NULL_TREE); - } - -@@ -2042,11 +2319,13 @@ - if (args && uses_template_parms (args)) - return boolean_true_node; - -- /* Invalid requirements cannot be satisfied. */ -- if (!valid_constraints_p (ci)) -- return boolean_false_node; -- -- return satisfy_constraint (CI_NORMALIZED_CONSTRAINTS (ci), args); -+ /* Check if we've seen a previous result. */ -+ if (tree prev = lookup_constraint_satisfaction (ci, args)) -+ return prev; -+ -+ /* Actually test for satisfaction. */ -+ tree result = satisfy_constraint (CI_ASSOCIATED_CONSTRAINTS (ci), args); -+ return memoize_constraint_satisfaction (ci, args, result); - } - - } /* namespace */ -@@ -2059,7 +2338,7 @@ - evaluate_constraints (tree constr, tree args) - { - gcc_assert (constraint_p (constr)); -- return satisfy_constraint (normalize_constraint (constr), args); -+ return satisfy_constraint (constr, args); - } - - /* Evaluate the function concept FN by substituting its own args -@@ -2070,14 +2349,7 @@ - tree - evaluate_function_concept (tree fn, tree args) - { -- ++processing_template_decl; -- /* We lift using DECL_TI_ARGS because we want to delay producing -- non-dependent expressions until we're doing satisfaction. We can't just -- go without any substitution because we need to lower the level of 'auto's -- in type deduction constraints. */ -- tree constr = transform_expression (lift_function_definition -- (fn, DECL_TI_ARGS (fn))); -- --processing_template_decl; -+ tree constr = build_nt (CHECK_CONSTR, fn, args); - return satisfy_constraint (constr, args); - } - -@@ -2087,12 +2359,9 @@ - boolean_false_node otherwise. */ - - tree --evaluate_variable_concept (tree decl, tree args) -+evaluate_variable_concept (tree var, tree args) - { -- ++processing_template_decl; -- tree constr = transform_expression (lift_variable_initializer -- (decl, DECL_TI_ARGS (decl))); -- --processing_template_decl; -+ tree constr = build_nt (CHECK_CONSTR, var, args); - return satisfy_constraint (constr, args); - } - -@@ -2103,9 +2372,7 @@ - tree - evaluate_constraint_expression (tree expr, tree args) - { -- ++processing_template_decl; -- tree constr = transform_expression (lift_expression (expr)); -- --processing_template_decl; -+ tree constr = normalize_expression (expr); - return satisfy_constraint (constr, args); - } - -@@ -2165,7 +2432,6 @@ - - } /* namespace */ - -- - /*--------------------------------------------------------------------------- - Semantic analysis of requires-expressions - ---------------------------------------------------------------------------*/ -@@ -2309,6 +2575,7 @@ - ---------------------------------------------------------------------------*/ - - /* Returns true when the the constraints in A subsume those in B. */ -+ - bool - subsumes_constraints (tree a, tree b) - { -@@ -2332,6 +2599,7 @@ - - Returns 1 if A is more constrained than B, -1 if B is more constrained - than A, and 0 otherwise. */ -+ - int - more_constrained (tree d1, tree d2) - { -@@ -2348,6 +2616,7 @@ - /* Returns true if D1 is at least as constrained as D2. That is, the - associated constraints of D1 subsume those of D2, or both declarations - are unconstrained. */ -+ - bool - at_least_as_constrained (tree d1, tree d2) - { -@@ -2359,49 +2628,71 @@ - - /*--------------------------------------------------------------------------- - Constraint diagnostics -+ -+FIXME: Normalize expressions into constraints before evaluating them. -+This should be the general pattern for all such diagnostics. - ---------------------------------------------------------------------------*/ - --/* The diagnosis of constraints performs a combination of -- normalization and satisfaction testing. We recursively -- walk through the conjunction (or disjunctions) of associated -- constraints, testing each sub-expression in turn. -- -- We currently restrict diagnostics to just the top-level -- conjunctions within the associated constraints. A fully -- recursive walk is possible, but it can generate a lot -- of errors. */ -+/* The number of detailed constraint failures. */ - -+int constraint_errors = 0; - --namespace { -+/* Do not generate errors after diagnosing this number of constraint -+ failures. - --void diagnose_expression (location_t, tree, tree); --void diagnose_constraint (location_t, tree, tree); -+ FIXME: This is a really arbitrary number. Provide better control of -+ constraint diagnostics with a command line option. */ - --/* Diagnose a conjunction of constraints. */ --void --diagnose_logical_operation (location_t loc, tree t, tree args) -+int constraint_thresh = 20; -+ -+ -+/* Returns true if we should elide the diagnostic for a constraint failure. -+ This is the case when the number of errors has exceeded the pre-configured -+ threshold. */ -+ -+inline bool -+elide_constraint_failure_p () - { -- diagnose_expression (loc, TREE_OPERAND (t, 0), args); -- diagnose_expression (loc, TREE_OPERAND (t, 0), args); -+ bool ret = constraint_thresh <= constraint_errors; -+ ++constraint_errors; -+ return ret; - } - --/* Determine if the trait expression T is satisfied by ARGS. -- Emit a precise diagnostic if it is not. */ -+/* Returns the number of undiagnosed errors. */ -+ -+inline int -+undiagnosed_constraint_failures () -+{ -+ return constraint_errors - constraint_thresh; -+} -+ -+/* The diagnosis of constraints performs a combination of normalization -+ and satisfaction testing. We recursively walk through the conjunction or -+ disjunction of associated constraints, testing each sub-constraint in -+ turn. */ -+ -+namespace { -+ -+void diagnose_constraint (location_t, tree, tree, tree); -+ -+/* Emit a specific diagnostics for a failed trait. */ -+ - void --diagnose_trait_expression (location_t loc, tree t, tree args) -+diagnose_trait_expression (location_t loc, tree, tree cur, tree args) - { -- if (constraint_expression_satisfied_p (t, args)) -+ if (constraint_expression_satisfied_p (cur, args)) -+ return; -+ if (elide_constraint_failure_p()) - return; - -- /* Rebuild the trait expression so we can diagnose the -- specific failure. */ -+ tree expr = PRED_CONSTR_EXPR (cur); - ++processing_template_decl; -- tree expr = tsubst_expr (t, args, tf_none, NULL_TREE, false); -+ expr = tsubst_expr (expr, args, tf_none, NULL_TREE, false); - --processing_template_decl; - - tree t1 = TRAIT_EXPR_TYPE1 (expr); - tree t2 = TRAIT_EXPR_TYPE2 (expr); -- switch (TRAIT_EXPR_KIND (t)) -+ switch (TRAIT_EXPR_KIND (expr)) - { - case CPTK_HAS_NOTHROW_ASSIGN: - inform (loc, " %qT is not nothrow copy assignable", t1); -@@ -2471,93 +2762,52 @@ - } - } - --/* Determine if the call expression T, when normalized as a constraint, -- is satisfied by ARGS. -+/* Diagnose the expression of a predicate constraint. */ - -- TODO: If T is refers to a concept, We could recursively analyze -- its definition to identify the exact failure, but that could -- emit a *lot* of error messages (defeating the purpose of -- improved diagnostics). Consider adding a flag to control the -- depth of diagnostics. */ - void --diagnose_call_expression (location_t loc, tree t, tree args) -+diagnose_other_expression (location_t loc, tree, tree cur, tree args) - { -- if (constraint_expression_satisfied_p (t, args)) -+ if (constraint_expression_satisfied_p (cur, args)) - return; -- -- /* Rebuild the expression for the purpose of diagnostics. */ -- ++processing_template_decl; -- tree expr = tsubst_expr (t, args, tf_none, NULL_TREE, false); -- --processing_template_decl; -- -- /* If the function call is known to be a concept check, then -- diagnose it differently (i.e., we may recurse). */ -- if (resolve_constraint_check (t)) -- inform (loc, " concept %qE was not satisfied", expr); -- else -- inform (loc, " %qE evaluated to false", expr); --} -- --/* Determine if the template-id T, when normalized as a constraint -- is satisfied by ARGS. */ --void --diagnose_template_id (location_t loc, tree t, tree args) --{ -- /* Check for invalid template-ids. */ -- if (!variable_template_p (TREE_OPERAND (t, 0))) -- { -- inform (loc, " invalid constraint %qE", t); -- return; -- } -- -- if (constraint_expression_satisfied_p (t, args)) -+ if (elide_constraint_failure_p()) - return; -+ inform (loc, "%qE evaluated to false", cur); -+} - -- /* Rebuild the expression for the purpose of diagnostics. */ -- ++processing_template_decl; -- tree expr = tsubst_expr (t, args, tf_none, NULL_TREE, false); -- --processing_template_decl; -+/* Do our best to infer meaning from predicates. */ - -- tree var = DECL_TEMPLATE_RESULT (TREE_OPERAND (t, 0)); -- if (DECL_DECLARED_CONCEPT_P (var)) -- inform (loc, " concept %qE was not satisfied", expr); -+inline void -+diagnose_predicate_constraint (location_t loc, tree orig, tree cur, tree args) -+{ -+ if (TREE_CODE (PRED_CONSTR_EXPR (cur)) == TRAIT_EXPR) -+ diagnose_trait_expression (loc, orig, cur, args); - else -- inform (loc, " %qE evaluated to false", expr); -+ diagnose_other_expression (loc, orig, cur, args); - } - --/* Determine if the requires-expression, when normalized as a -- constraint is satisfied by ARGS. -+/* Diagnose a failed pack expansion, possibly containing constraints. */ - -- TODO: Build sets of expressions, types, and constraints -- based on the requirements in T and emit specific diagnostics -- for those. */ - void --diagnose_requires_expression (location_t loc, tree t, tree args) -+diagnose_pack_expansion (location_t loc, tree, tree cur, tree args) - { -- if (constraint_expression_satisfied_p (t, args)) -+ if (constraint_expression_satisfied_p (cur, args)) - return; -- inform (loc, "requirements not satisfied"); --} -- --void --diagnose_pack_expansion (location_t loc, tree t, tree args) --{ -- if (constraint_expression_satisfied_p (t, args)) -+ if (elide_constraint_failure_p()) - return; - - /* Make sure that we don't have naked packs that we don't expect. */ -- if (!same_type_p (TREE_TYPE (t), boolean_type_node)) -+ if (!same_type_p (TREE_TYPE (cur), boolean_type_node)) - { -- inform (loc, "invalid pack expansion in constraint %qE", t); -+ inform (loc, "invalid pack expansion in constraint %qE", cur); - return; - } - -- inform (loc, " in the expansion of %qE", t); -+ inform (loc, "in the expansion of %qE", cur); - - /* Get the vector of expanded arguments. Note that n must not - be 0 since this constraint is not satisfied. */ - ++processing_template_decl; -- tree exprs = tsubst_pack_expansion (t, args, tf_none, NULL_TREE); -+ tree exprs = tsubst_pack_expansion (cur, args, tf_none, NULL_TREE); - --processing_template_decl; - if (exprs == error_mark_node) - { -@@ -2576,82 +2826,276 @@ - } - } - --/* Diagnose an expression that would be characterized as -- a predicate constraint. */ -+/* Diagnose a potentially unsatisfied concept check constraint DECL<CARGS>. -+ Parameters are as for diagnose_constraint. */ -+ - void --diagnose_other_expression (location_t loc, tree t, tree args) -+diagnose_check_constraint (location_t loc, tree orig, tree cur, tree args) - { -- if (constraint_expression_satisfied_p (t, args)) -+ if (constraints_satisfied_p (cur, args)) - return; -- inform (loc, " %qE evaluated to false", t); -+ -+ tree decl = CHECK_CONSTR_CONCEPT (cur); -+ tree cargs = CHECK_CONSTR_ARGS (cur); -+ tree tmpl = DECL_TI_TEMPLATE (decl); -+ tree check = build_nt (CHECK_CONSTR, decl, cargs); -+ -+ /* Instantiate the concept check arguments. */ -+ tree targs = tsubst (cargs, args, tf_none, NULL_TREE); -+ if (targs == error_mark_node) -+ { -+ if (elide_constraint_failure_p ()) -+ return; -+ inform (loc, "invalid use of the concept %qE", check); -+ tsubst (cargs, args, tf_warning_or_error, NULL_TREE); -+ return; -+ } -+ -+ tree sub = build_tree_list (tmpl, targs); -+ /* Update to the expanded definitions. */ -+ cur = expand_concept (decl, targs); -+ if (cur == error_mark_node) -+ { -+ if (elide_constraint_failure_p ()) -+ return; -+ inform (loc, "in the expansion of concept %qE %S", check, sub); -+ cur = get_concept_definition (decl); -+ tsubst_expr (cur, targs, tf_warning_or_error, NULL_TREE, false); -+ return; -+ } -+ -+ orig = get_concept_definition (CHECK_CONSTR_CONCEPT (orig)); -+ orig = normalize_expression (orig); -+ -+ location_t dloc = DECL_SOURCE_LOCATION (decl); -+ inform (dloc, "within %qS", sub); -+ diagnose_constraint (dloc, orig, cur, targs); - } - -+/* Diagnose a potentially unsatisfied conjunction or disjunction. Parameters -+ are as for diagnose_constraint. */ -+ - void --diagnose_expression (location_t loc, tree t, tree args) -+diagnose_logical_constraint (location_t loc, tree orig, tree cur, tree args) - { -- switch (TREE_CODE (t)) -- { -- case TRUTH_ANDIF_EXPR: -- diagnose_logical_operation (loc, t, args); -- break; -+ tree t0 = TREE_OPERAND (cur, 0); -+ tree t1 = TREE_OPERAND (cur, 1); -+ if (!constraints_satisfied_p (t0, args)) -+ diagnose_constraint (loc, TREE_OPERAND (orig, 0), t0, args); -+ else if (TREE_CODE (orig) == TRUTH_ORIF_EXPR) -+ return; -+ if (!constraints_satisfied_p (t1, args)) -+ diagnose_constraint (loc, TREE_OPERAND (orig, 1), t1, args); -+} - -- case TRUTH_ORIF_EXPR: -- diagnose_logical_operation (loc, t, args); -- break; -+/* Diagnose a potential expression constraint failure. */ - -- case CALL_EXPR: -- diagnose_call_expression (loc, t, args); -- break; -+void -+diagnose_expression_constraint (location_t loc, tree orig, tree cur, tree args) -+{ -+ if (constraints_satisfied_p (cur, args)) -+ return; -+ if (elide_constraint_failure_p()) -+ return; - -- case TEMPLATE_ID_EXPR: -- diagnose_template_id (loc, t, args); -- break; -+ tree expr = EXPR_CONSTR_EXPR (orig); -+ inform (loc, "the required expression %qE would be ill-formed", expr); - -- case REQUIRES_EXPR: -- diagnose_requires_expression (loc, t, args); -- break; -+ // TODO: We should have a flag that controls this substitution. -+ // I'm finding it very useful for resolving concept check errors. - -- case TRAIT_EXPR: -- diagnose_trait_expression (loc, t, args); -- break; -+ // inform (input_location, "==== BEGIN DUMP ===="); -+ // tsubst_expr (EXPR_CONSTR_EXPR (orig), args, tf_warning_or_error, NULL_TREE, false); -+ // inform (input_location, "==== END DUMP ===="); -+} - -- case EXPR_PACK_EXPANSION: -- diagnose_pack_expansion (loc, t, args); -- break; -+/* Diagnose a potentially failed type constraint. */ - -- default: -- diagnose_other_expression (loc, t, args); -- break; -+void -+diagnose_type_constraint (location_t loc, tree orig, tree cur, tree args) -+{ -+ if (constraints_satisfied_p (cur, args)) -+ return; -+ if (elide_constraint_failure_p()) -+ return; -+ -+ tree type = TYPE_CONSTR_TYPE (orig); -+ inform (loc, "the required type %qT would be ill-formed", type); -+} -+ -+/* Diagnose a potentially unsatisfied conversion constraint. */ -+ -+void -+diagnose_implicit_conversion_constraint (location_t loc, tree orig, tree cur, -+ tree args) -+{ -+ if (constraints_satisfied_p (cur, args)) -+ return; -+ -+ /* The expression and type will previously have been substituted into, -+ and therefore may already be an error. Also, we will have already -+ diagnosed substitution failures into an expression since this must be -+ part of a compound requirement. */ -+ tree expr = ICONV_CONSTR_EXPR (cur); -+ if (error_operand_p (expr)) -+ return; -+ -+ /* Don't elide a previously diagnosed failure. */ -+ if (elide_constraint_failure_p()) -+ return; -+ -+ tree type = ICONV_CONSTR_TYPE (cur); -+ if (error_operand_p (type)) -+ { -+ inform (loc, "substitution into type %qT failed", -+ ICONV_CONSTR_TYPE (orig)); -+ return; - } -+ -+ inform(loc, "%qE is not implicitly convertible to %qT", expr, type); - } - --inline void --diagnose_predicate_constraint (location_t loc, tree t, tree args) -+/* Diagnose an argument deduction constraint. */ -+ -+void -+diagnose_argument_deduction_constraint (location_t loc, tree orig, tree cur, -+ tree args) - { -- diagnose_expression (loc, PRED_CONSTR_EXPR (t), args); -+ if (constraints_satisfied_p (cur, args)) -+ return; -+ -+ /* The expression and type will previously have been substituted into, -+ and therefore may already be an error. Also, we will have already -+ diagnosed substution failures into an expression since this must be -+ part of a compound requirement. */ -+ tree expr = DEDUCT_CONSTR_EXPR (cur); -+ if (error_operand_p (expr)) -+ return; -+ -+ /* Don't elide a previously diagnosed failure. */ -+ if (elide_constraint_failure_p ()) -+ return; -+ -+ tree pattern = DEDUCT_CONSTR_PATTERN (cur); -+ if (error_operand_p (pattern)) -+ { -+ inform (loc, "substitution into type %qT failed", -+ DEDUCT_CONSTR_PATTERN (orig)); -+ return; -+ } -+ -+ inform (loc, "unable to deduce placeholder type %qT from %qE", -+ pattern, expr); - } - --inline void --diagnose_conjunction (location_t loc, tree t, tree args) -+/* Diagnose an exception constraint. */ -+ -+void -+diagnose_exception_constraint (location_t loc, tree orig, tree cur, tree args) - { -- diagnose_constraint (loc, TREE_OPERAND (t, 0), args); -- diagnose_constraint (loc, TREE_OPERAND (t, 1), args); -+ if (constraints_satisfied_p (cur, args)) -+ return; -+ if (elide_constraint_failure_p ()) -+ return; -+ -+ /* Rebuild a noexcept expression. */ -+ tree expr = EXCEPT_CONSTR_EXPR (cur); -+ if (error_operand_p (expr)) -+ return; -+ -+ inform (loc, "%qE evaluated to false", EXCEPT_CONSTR_EXPR (orig)); - } - --/* Diagnose the constraint T for the given ARGS. This is only -- ever invoked on the associated constraints, so we can -- only have conjunctions of predicate constraints. */ -+/* Diagnose a potentially unsatisfied parameterized constraint. */ -+ - void --diagnose_constraint (location_t loc, tree t, tree args) -+diagnose_parameterized_constraint (location_t loc, tree orig, tree cur, -+ tree args) - { -- switch (TREE_CODE (t)) -+ if (constraints_satisfied_p (cur, args)) -+ return; -+ -+ local_specialization_stack stack; -+ tree parms = PARM_CONSTR_PARMS (cur); -+ tree vars = tsubst_constraint_variables (parms, args, tf_warning_or_error, -+ NULL_TREE); -+ if (vars == error_mark_node) -+ { -+ if (elide_constraint_failure_p ()) -+ return; -+ -+ /* TODO: Check which variable failed and use orig to diagnose -+ that substitution error. */ -+ inform (loc, "failed to instantiate constraint variables"); -+ return; -+ } -+ -+ /* TODO: It would be better write these in a list. */ -+ while (vars) -+ { -+ inform (loc, " with %q#D", vars); -+ vars = TREE_CHAIN (vars); -+ } -+ orig = PARM_CONSTR_OPERAND (orig); -+ cur = PARM_CONSTR_OPERAND (cur); -+ return diagnose_constraint (loc, orig, cur, args); -+} -+ -+/* Diagnose the constraint CUR for the given ARGS. This is only ever invoked -+ on the associated constraints, so we can only have conjunctions of -+ predicate constraints. The ORIGinal (dependent) constructs follow -+ the current constraints to enable better diagnostics. Note that ORIG -+ and CUR must be the same kinds of node, except when CUR is an error. */ -+ -+void -+diagnose_constraint (location_t loc, tree orig, tree cur, tree args) -+{ -+ switch (TREE_CODE (cur)) - { -+ case EXPR_CONSTR: -+ diagnose_expression_constraint (loc, orig, cur, args); -+ break; -+ -+ case TYPE_CONSTR: -+ diagnose_type_constraint (loc, orig, cur, args); -+ break; -+ -+ case ICONV_CONSTR: -+ diagnose_implicit_conversion_constraint (loc, orig, cur, args); -+ break; -+ -+ case DEDUCT_CONSTR: -+ diagnose_argument_deduction_constraint (loc, orig, cur, args); -+ break; -+ -+ case EXCEPT_CONSTR: -+ diagnose_exception_constraint (loc, orig, cur, args); -+ break; -+ - case CONJ_CONSTR: -- diagnose_conjunction (loc, t, args); -+ case DISJ_CONSTR: -+ diagnose_logical_constraint (loc, orig, cur, args); - break; - - case PRED_CONSTR: -- diagnose_predicate_constraint (loc, t, args); -+ diagnose_predicate_constraint (loc, orig, cur, args); -+ break; -+ -+ case PARM_CONSTR: -+ diagnose_parameterized_constraint (loc, orig, cur, args); -+ break; -+ -+ case CHECK_CONSTR: -+ diagnose_check_constraint (loc, orig, cur, args); -+ break; -+ -+ case EXPR_PACK_EXPANSION: -+ diagnose_pack_expansion (loc, orig, cur, args); -+ break; -+ -+ case ERROR_MARK: -+ /* TODO: Can we improve the diagnostic with the original? */ -+ inform (input_location, "ill-formed constraint"); - break; - - default: -@@ -2676,16 +3120,10 @@ - args = TI_ARGS (ti); - } - -- /* Check that the constraints are actually valid. */ -- tree ci = get_constraints (decl); -- if (!valid_constraints_p (ci)) -- { -- inform (loc, " invalid constraints"); -- return; -- } -- - /* Recursively diagnose the associated constraints. */ -- diagnose_constraint (loc, CI_ASSOCIATED_CONSTRAINTS (ci), args); -+ tree ci = get_constraints (decl); -+ tree t = CI_ASSOCIATED_CONSTRAINTS (ci); -+ diagnose_constraint (loc, t, t, args); - } - - } // namespace -@@ -2697,8 +3135,17 @@ - void - diagnose_constraints (location_t loc, tree t, tree args) - { -+ constraint_errors = 0; -+ - if (constraint_p (t)) -- diagnose_constraint (loc, t, args); -- else -+ diagnose_constraint (loc, t, t, args); -+ else if (DECL_P (t)) - diagnose_declaration_constraints (loc, t, args); -+ else -+ gcc_unreachable (); -+ -+ /* Note the number of elided failures. */ -+ int n = undiagnosed_constraint_failures (); -+ if (n > 0) -+ inform (loc, "... and %d more constraint errors not shown", n); - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/cp-gimplify.c gcc-6-20160721/gcc/cp/cp-gimplify.c ---- gcc-6.1.0/gcc/cp/cp-gimplify.c 2016-04-13 14:33:53.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/cp-gimplify.c 2016-07-21 07:13:42.000000000 +0000 -@@ -592,6 +592,8 @@ - init, VEC_INIT_EXPR_VALUE_INIT (*expr_p), - from_array, - tf_warning_or_error); -+ hash_set<tree> pset; -+ cp_walk_tree (expr_p, cp_fold_r, &pset, NULL); - cp_genericize_tree (expr_p); - ret = GS_OK; - input_location = loc; -@@ -939,6 +941,17 @@ - - *stmt_p = stmt = cp_fold (*stmt_p); - -+ if (((hash_set<tree> *) data)->add (stmt)) -+ { -+ /* Don't walk subtrees of stmts we've already walked once, otherwise -+ we can have exponential complexity with e.g. lots of nested -+ SAVE_EXPRs or TARGET_EXPRs. cp_fold uses a cache and will return -+ always the same tree, which the first time cp_fold_r has been -+ called on it had the subtrees walked. */ -+ *walk_subtrees = 0; -+ return NULL; -+ } -+ - code = TREE_CODE (stmt); - if (code == OMP_FOR || code == OMP_SIMD || code == OMP_DISTRIBUTE - || code == OMP_TASKLOOP || code == CILK_FOR || code == CILK_SIMD -@@ -996,7 +1009,8 @@ - void - cp_fold_function (tree fndecl) - { -- cp_walk_tree (&DECL_SAVED_TREE (fndecl), cp_fold_r, NULL, NULL); -+ hash_set<tree> pset; -+ cp_walk_tree (&DECL_SAVED_TREE (fndecl), cp_fold_r, &pset, NULL); - } - - /* Perform any pre-gimplification lowering of C++ front end trees to -@@ -1266,7 +1280,15 @@ - { - tree d = DECL_EXPR_DECL (stmt); - if (TREE_CODE (d) == VAR_DECL) -- gcc_assert (CP_DECL_THREAD_LOCAL_P (d) == DECL_THREAD_LOCAL_P (d)); -+ { -+ gcc_assert (CP_DECL_THREAD_LOCAL_P (d) == DECL_THREAD_LOCAL_P (d)); -+ /* User var initializers should be genericized during containing -+ BIND_EXPR genericization when walk_tree walks DECL_INITIAL -+ of BIND_EXPR_VARS. Artificial temporaries might not be -+ mentioned there though, so walk them now. */ -+ if (DECL_ARTIFICIAL (d) && !TREE_STATIC (d) && DECL_INITIAL (d)) -+ cp_walk_tree (&DECL_INITIAL (d), cp_genericize_r, data, NULL); -+ } - } - else if (TREE_CODE (stmt) == OMP_PARALLEL - || TREE_CODE (stmt) == OMP_TASK -@@ -1547,6 +1569,13 @@ - if (DECL_CLONED_FUNCTION_P (fndecl)) - return; - -+ /* Allow cp_genericize calls to be nested. */ -+ tree save_bc_label[2]; -+ save_bc_label[bc_break] = bc_label[bc_break]; -+ save_bc_label[bc_continue] = bc_label[bc_continue]; -+ bc_label[bc_break] = NULL_TREE; -+ bc_label[bc_continue] = NULL_TREE; -+ - /* Expand all the array notations here. */ - if (flag_cilkplus - && contains_array_notation_expr (DECL_SAVED_TREE (fndecl))) -@@ -1566,6 +1595,8 @@ - - gcc_assert (bc_label[bc_break] == NULL); - gcc_assert (bc_label[bc_continue] == NULL); -+ bc_label[bc_break] = save_bc_label[bc_break]; -+ bc_label[bc_continue] = save_bc_label[bc_continue]; - } - - /* Build code to apply FN to each member of ARG1 and ARG2. FN may be -@@ -1877,13 +1908,21 @@ - static tree - cp_fold_maybe_rvalue (tree x, bool rval) - { -- if (rval && DECL_P (x)) -+ while (true) - { -- tree v = decl_constant_value (x); -- if (v != error_mark_node) -- x = v; -+ x = cp_fold (x); -+ if (rval && DECL_P (x)) -+ { -+ tree v = decl_constant_value (x); -+ if (v != x && v != error_mark_node) -+ { -+ x = v; -+ continue; -+ } -+ } -+ break; - } -- return cp_fold (x); -+ return x; - } - - /* Fold expression X which is used as an rvalue. */ -@@ -1995,6 +2034,15 @@ - - break; - -+ case INDIRECT_REF: -+ /* We don't need the decltype(auto) obfuscation anymore. */ -+ if (REF_PARENTHESIZED_P (x)) -+ { -+ tree p = maybe_undo_parenthesized_ref (x); -+ return cp_fold (p); -+ } -+ goto unary; -+ - case ADDR_EXPR: - case REALPART_EXPR: - case IMAGPART_EXPR: -@@ -2007,7 +2055,7 @@ - case BIT_NOT_EXPR: - case TRUTH_NOT_EXPR: - case FIXED_CONVERT_EXPR: -- case INDIRECT_REF: -+ unary: - - loc = EXPR_LOCATION (x); - op0 = cp_fold_maybe_rvalue (TREE_OPERAND (x, 0), rval_ops); -@@ -2017,7 +2065,16 @@ - if (op0 == error_mark_node) - x = error_mark_node; - else -- x = fold_build1_loc (loc, code, TREE_TYPE (x), op0); -+ { -+ x = fold_build1_loc (loc, code, TREE_TYPE (x), op0); -+ if (code == INDIRECT_REF -+ && (INDIRECT_REF_P (x) || TREE_CODE (x) == MEM_REF)) -+ { -+ TREE_READONLY (x) = TREE_READONLY (org_x); -+ TREE_SIDE_EFFECTS (x) = TREE_SIDE_EFFECTS (org_x); -+ TREE_THIS_VOLATILE (x) = TREE_THIS_VOLATILE (org_x); -+ } -+ } - } - else - x = fold (x); -@@ -2294,7 +2351,12 @@ - || op3 == error_mark_node) - x = error_mark_node; - else -- x = build4_loc (loc, code, TREE_TYPE (x), op0, op1, op2, op3); -+ { -+ x = build4_loc (loc, code, TREE_TYPE (x), op0, op1, op2, op3); -+ TREE_READONLY (x) = TREE_READONLY (org_x); -+ TREE_SIDE_EFFECTS (x) = TREE_SIDE_EFFECTS (org_x); -+ TREE_THIS_VOLATILE (x) = TREE_THIS_VOLATILE (org_x); -+ } - } - - x = fold (x); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/cp-tree.def gcc-6-20160721/gcc/cp/cp-tree.def ---- gcc-6.1.0/gcc/cp/cp-tree.def 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/cp-tree.def 2016-07-21 06:18:06.000000000 +0000 -@@ -536,6 +536,14 @@ - PRED_CONSTR_EXPR has the expression to be evaluated. */ - DEFTREECODE (PRED_CONSTR, "pred_constr", tcc_expression, 1) - -+/* A check constraint represents the checking of a concept -+ C. It has two operands: the template defining the concept -+ and a sequence of template arguments. -+ -+ CHECK_CONSTR_CONCEPT has the concept definition -+ CHECK_CONSTR_ARGUMENTS are the template arguments */ -+DEFTREECODE (CHECK_CONSTR, "check_constr", tcc_expression, 2) -+ - /* An expression constraint determines the validity of a expression E. - - EXPR_CONST_EXPR has the expression being validated. */ -@@ -560,7 +568,7 @@ - T must contain at least one place holder. - - DEDUCT_CONSTR_EXPR has the expression E -- DEDUCT_CONSTR_PATTERN has the type patter T. -+ DEDUCT_CONSTR_PATTERN has the type pattern T. - DEDUCT_CONSTR_PLACEHOLDERS has the list of placeholder nodes in T. */ - DEFTREECODE (DEDUCT_CONSTR, "deduct_constr", tcc_expression, 3) - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/cp-tree.h gcc-6-20160721/gcc/cp/cp-tree.h ---- gcc-6.1.0/gcc/cp/cp-tree.h 2016-04-15 14:51:06.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/cp-tree.h 2016-07-21 06:29:32.000000000 +0000 -@@ -170,7 +170,7 @@ - TARGET_EXPR_DIRECT_INIT_P (in TARGET_EXPR) - FNDECL_USED_AUTO (in FUNCTION_DECL) - DECLTYPE_FOR_LAMBDA_PROXY (in DECLTYPE_TYPE) -- REF_PARENTHESIZED_P (in COMPONENT_REF, INDIRECT_REF) -+ REF_PARENTHESIZED_P (in COMPONENT_REF, INDIRECT_REF, SCOPE_REF) - AGGR_INIT_ZERO_FIRST (in AGGR_INIT_EXPR) - CONSTRUCTOR_MUTABLE_POISON (in CONSTRUCTOR) - 3: (TREE_REFERENCE_EXPR) (in NON_LVALUE_EXPR) (commented-out). -@@ -891,10 +891,6 @@ - // - a constraint expression introduced by a function declarator - // - the associated constraints, which are the conjunction of those, - // and used for declaration matching --// - the cached normalized associated constraints which are used --// to support satisfaction and subsumption. --// - assumptions which is the result of decomposing the normalized --// constraints. - // - // The template and declarator requirements are kept to support pretty - // printing constrained declarations. -@@ -903,8 +899,6 @@ - tree template_reqs; - tree declarator_reqs; - tree associated_constr; -- tree normalized_constr; -- tree assumptions; - }; - - // Require that pointer P is non-null before returning. -@@ -943,14 +937,6 @@ - #define CI_ASSOCIATED_CONSTRAINTS(NODE) \ - check_constraint_info (check_nonnull(NODE))->associated_constr - --// The normalized associated constraints. --#define CI_NORMALIZED_CONSTRAINTS(NODE) \ -- check_constraint_info (check_nonnull(NODE))->normalized_constr -- --// Get the set of assumptions associated with the constraint info node. --#define CI_ASSUMPTIONS(NODE) \ -- check_constraint_info (check_nonnull(NODE))->assumptions -- - // Access the logical constraints on the template parameters introduced - // at a given template parameter list level indicated by NODE. - #define TEMPLATE_PARMS_CONSTRAINTS(NODE) \ -@@ -974,6 +960,14 @@ - #define PRED_CONSTR_EXPR(NODE) \ - TREE_OPERAND (TREE_CHECK (NODE, PRED_CONSTR), 0) - -+/* The concept of a concept check. */ -+#define CHECK_CONSTR_CONCEPT(NODE) \ -+ TREE_OPERAND (TREE_CHECK (NODE, CHECK_CONSTR), 0) -+ -+/* The template arguments of a concept check. */ -+#define CHECK_CONSTR_ARGS(NODE) \ -+ TREE_OPERAND (TREE_CHECK (NODE, CHECK_CONSTR), 1) -+ - /* The expression validated by the predicate constraint. */ - #define EXPR_CONSTR_EXPR(NODE) \ - TREE_OPERAND (TREE_CHECK (NODE, EXPR_CONSTR), 0) -@@ -3332,11 +3326,11 @@ - TREE_CHECK2 (NODE, BINARY_LEFT_FOLD_EXPR, BINARY_RIGHT_FOLD_EXPR) - - /* True if NODE is UNARY_FOLD_EXPR or a BINARY_FOLD_EXPR */ --#define FOLD_EXPR_P(NODE) \ -- TREE_CODE (NODE) == UNARY_LEFT_FOLD_EXPR \ -- || TREE_CODE (NODE) == UNARY_RIGHT_FOLD_EXPR \ -- || TREE_CODE (NODE) == BINARY_LEFT_FOLD_EXPR \ -- || TREE_CODE (NODE) == BINARY_RIGHT_FOLD_EXPR -+#define FOLD_EXPR_P(NODE) \ -+ (TREE_CODE (NODE) == UNARY_LEFT_FOLD_EXPR \ -+ || TREE_CODE (NODE) == UNARY_RIGHT_FOLD_EXPR \ -+ || TREE_CODE (NODE) == BINARY_LEFT_FOLD_EXPR \ -+ || TREE_CODE (NODE) == BINARY_RIGHT_FOLD_EXPR) - - /* True when NODE is a fold over a compound assignment operator. */ - #define FOLD_EXPR_MODIFY_P(NODE) \ -@@ -3398,12 +3392,12 @@ - #define PAREN_STRING_LITERAL_P(NODE) \ - TREE_LANG_FLAG_0 (STRING_CST_CHECK (NODE)) - --/* Indicates whether a COMPONENT_REF has been parenthesized, or an -- INDIRECT_REF comes from parenthesizing a _DECL. Currently only set -- some of the time in C++14 mode. */ -+/* Indicates whether a COMPONENT_REF or a SCOPE_REF has been parenthesized, or -+ an INDIRECT_REF comes from parenthesizing a _DECL. Currently only set some -+ of the time in C++14 mode. */ - - #define REF_PARENTHESIZED_P(NODE) \ -- TREE_LANG_FLAG_2 (TREE_CHECK2 ((NODE), COMPONENT_REF, INDIRECT_REF)) -+ TREE_LANG_FLAG_2 (TREE_CHECK3 ((NODE), COMPONENT_REF, INDIRECT_REF, SCOPE_REF)) - - /* Nonzero if this AGGR_INIT_EXPR provides for initialization via a - constructor call, rather than an ordinary function call. */ -@@ -4601,7 +4595,8 @@ - class_type, /* "class" types. */ - union_type, /* "union" types. */ - enum_type, /* "enum" types. */ -- typename_type /* "typename" types. */ -+ typename_type, /* "typename" types. */ -+ scope_type /* namespace or tagged type name followed by :: */ - }; - - /* The various kinds of lvalues we distinguish. */ -@@ -6096,6 +6091,7 @@ - extern tree get_pattern_parm (tree, tree); - extern int comp_template_args (tree, tree, tree * = NULL, - tree * = NULL); -+extern int template_args_equal (tree, tree); - extern tree maybe_process_partial_specialization (tree); - extern tree most_specialized_instantiation (tree); - extern void print_candidates (tree); -@@ -6809,10 +6805,8 @@ - /* in constraint.cc */ - extern void init_constraint_processing (); - extern bool constraint_p (tree); --extern tree make_predicate_constraint (tree); - extern tree conjoin_constraints (tree, tree); - extern tree conjoin_constraints (tree); --extern bool valid_constraints_p (tree); - extern tree get_constraints (tree); - extern void set_constraints (tree, tree); - extern void remove_constraints (tree); -@@ -6843,13 +6837,23 @@ - extern tree tsubst_constraint (tree, tree, tsubst_flags_t, tree); - extern tree tsubst_constraint_info (tree, tree, tsubst_flags_t, tree); - extern bool function_concept_check_p (tree); -- -+extern tree normalize_expression (tree); -+extern tree expand_concept (tree, tree); -+extern bool expanding_concept (); - extern tree evaluate_constraints (tree, tree); - extern tree evaluate_function_concept (tree, tree); - extern tree evaluate_variable_concept (tree, tree); - extern tree evaluate_constraint_expression (tree, tree); - extern bool constraints_satisfied_p (tree); - extern bool constraints_satisfied_p (tree, tree); -+extern tree lookup_constraint_satisfaction (tree, tree); -+extern tree memoize_constraint_satisfaction (tree, tree, tree); -+extern tree lookup_concept_satisfaction (tree, tree); -+extern tree memoize_concept_satisfaction (tree, tree, tree); -+extern tree get_concept_expansion (tree, tree); -+extern tree save_concept_expansion (tree, tree, tree); -+extern bool* lookup_subsumption_result (tree, tree); -+extern bool save_subsumption_result (tree, tree, bool); - - extern bool equivalent_constraints (tree, tree); - extern bool equivalently_constrained (tree, tree); -@@ -6860,7 +6864,6 @@ - extern void diagnose_constraints (location_t, tree, tree); - - /* in logic.cc */ --extern tree decompose_assumptions (tree); - extern tree decompose_conclusions (tree); - extern bool subsumes (tree, tree); - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/cxx-pretty-print.c gcc-6-20160721/gcc/cp/cxx-pretty-print.c ---- gcc-6.1.0/gcc/cp/cxx-pretty-print.c 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/cxx-pretty-print.c 2016-07-21 06:18:06.000000000 +0000 -@@ -35,6 +35,9 @@ - static void pp_cxx_template_parameter (cxx_pretty_printer *, tree); - static void pp_cxx_cast_expression (cxx_pretty_printer *, tree); - static void pp_cxx_typeid_expression (cxx_pretty_printer *, tree); -+static void pp_cxx_unary_left_fold_expression (cxx_pretty_printer *, tree); -+static void pp_cxx_unary_right_fold_expression (cxx_pretty_printer *, tree); -+static void pp_cxx_binary_fold_expression (cxx_pretty_printer *, tree); - - - static inline void -@@ -1140,6 +1143,19 @@ - pp_cxx_ws_string (this, "..."); - break; - -+ case UNARY_LEFT_FOLD_EXPR: -+ pp_cxx_unary_left_fold_expression (this, t); -+ break; -+ -+ case UNARY_RIGHT_FOLD_EXPR: -+ pp_cxx_unary_right_fold_expression (this, t); -+ break; -+ -+ case BINARY_LEFT_FOLD_EXPR: -+ case BINARY_RIGHT_FOLD_EXPR: -+ pp_cxx_binary_fold_expression (this, t); -+ break; -+ - case TEMPLATE_ID_EXPR: - pp_cxx_template_id (this, t); - break; -@@ -1166,6 +1182,7 @@ - break; - - case PRED_CONSTR: -+ case CHECK_CONSTR: - case EXPR_CONSTR: - case TYPE_CONSTR: - case ICONV_CONSTR: -@@ -2199,6 +2216,11 @@ - pp_cxx_constrained_type_spec (cxx_pretty_printer *pp, tree c) - { - tree t, a; -+ if (c == error_mark_node) -+ { -+ pp_cxx_ws_string(pp, "<unsatisfied-constrained-placeholder>"); -+ return; -+ } - placeholder_extract_concept_and_args (c, t, a); - pp->id_expression (t); - if (TREE_VEC_LENGTH (a) > 1) -@@ -2408,6 +2430,102 @@ - pp_cxx_right_paren (pp); - } - -+static char const* -+get_fold_operator (tree t) -+{ -+ int op = int_cst_value (FOLD_EXPR_OP (t)); -+ if (FOLD_EXPR_MODIFY_P (t)) -+ { -+ switch (op) -+ { -+ case NOP_EXPR: return "="; -+ case PLUS_EXPR: return "+="; -+ case MINUS_EXPR: return "-="; -+ case MULT_EXPR: return "*="; -+ case TRUNC_DIV_EXPR: return "/="; -+ case TRUNC_MOD_EXPR: return "%="; -+ case BIT_XOR_EXPR: return "^="; -+ case BIT_AND_EXPR: return "&="; -+ case BIT_IOR_EXPR: return "|="; -+ case LSHIFT_EXPR: return "<<="; -+ case RSHIFT_EXPR: return ">>="; -+ default: gcc_unreachable (); -+ } -+ } -+ else -+ { -+ switch (op) -+ { -+ case PLUS_EXPR: return "+"; -+ case MINUS_EXPR: return "-"; -+ case MULT_EXPR: return "*"; -+ case TRUNC_DIV_EXPR: return "/"; -+ case TRUNC_MOD_EXPR: return "%"; -+ case BIT_XOR_EXPR: return "^"; -+ case BIT_AND_EXPR: return "&"; -+ case BIT_IOR_EXPR: return "|"; -+ case LSHIFT_EXPR: return "<<"; -+ case RSHIFT_EXPR: return ">>"; -+ case EQ_EXPR: return "=="; -+ case NE_EXPR: return "!="; -+ case LT_EXPR: return "<"; -+ case GT_EXPR: return ">"; -+ case LE_EXPR: return "<="; -+ case GE_EXPR: return ">="; -+ case TRUTH_ANDIF_EXPR: return "&&"; -+ case TRUTH_ORIF_EXPR: return "||"; -+ case MEMBER_REF: return "->*"; -+ case DOTSTAR_EXPR: return ".*"; -+ case OFFSET_REF: return ".*"; -+ default: return ","; /* FIXME: Not the right default. */ -+ } -+ } -+} -+ -+void -+pp_cxx_unary_left_fold_expression (cxx_pretty_printer *pp, tree t) -+{ -+ char const* op = get_fold_operator (t); -+ tree expr = PACK_EXPANSION_PATTERN (FOLD_EXPR_PACK (t)); -+ pp_cxx_left_paren (pp); -+ pp_cxx_ws_string (pp, "..."); -+ pp_cxx_ws_string (pp, op); -+ pp->expression (expr); -+ pp_cxx_right_paren (pp); -+} -+ -+void -+pp_cxx_unary_right_fold_expression (cxx_pretty_printer *pp, tree t) -+{ -+ char const* op = get_fold_operator (t); -+ tree expr = PACK_EXPANSION_PATTERN (FOLD_EXPR_PACK (t)); -+ pp_cxx_left_paren (pp); -+ pp->expression (expr); -+ pp_space (pp); -+ pp_cxx_ws_string (pp, op); -+ pp_cxx_ws_string (pp, "..."); -+ pp_cxx_right_paren (pp); -+} -+ -+void -+pp_cxx_binary_fold_expression (cxx_pretty_printer *pp, tree t) -+{ -+ char const* op = get_fold_operator (t); -+ tree t1 = TREE_OPERAND (t, 1); -+ tree t2 = TREE_OPERAND (t, 2); -+ if (t1 == FOLD_EXPR_PACK (t)) -+ t1 = PACK_EXPANSION_PATTERN (t1); -+ else -+ t2 = PACK_EXPANSION_PATTERN (t2); -+ pp_cxx_left_paren (pp); -+ pp->expression (t1); -+ pp_cxx_ws_string (pp, op); -+ pp_cxx_ws_string (pp, "..."); -+ pp_cxx_ws_string (pp, op); -+ pp->expression (t2); -+ pp_cxx_right_paren (pp); -+} -+ - void - pp_cxx_trait_expression (cxx_pretty_printer *pp, tree t) - { -@@ -2618,6 +2736,7 @@ - pp_cxx_ws_string (pp, "->"); - pp->type_id (type); - } -+ pp_cxx_semicolon (pp); - } - - /* nested requirement: -@@ -2633,74 +2752,94 @@ - void - pp_cxx_predicate_constraint (cxx_pretty_printer *pp, tree t) - { -- pp_string (pp, "predicate"); -- pp_left_paren (pp); - pp->expression (TREE_OPERAND (t, 0)); -- pp_right_paren (pp); -+} -+ -+void -+pp_cxx_check_constraint (cxx_pretty_printer *pp, tree t) -+{ -+ tree decl = CHECK_CONSTR_CONCEPT (t); -+ tree tmpl = DECL_TI_TEMPLATE (decl); -+ tree args = CHECK_CONSTR_ARGS (t); -+ tree id = build_nt (TEMPLATE_ID_EXPR, tmpl, args); -+ -+ if (TREE_CODE (decl) == VAR_DECL) -+ pp->expression (id); -+ else if (TREE_CODE (decl) == FUNCTION_DECL) -+ { -+ tree call = build_vl_exp (CALL_EXPR, 2); -+ TREE_OPERAND (call, 0) = integer_two_node; -+ TREE_OPERAND (call, 1) = id; -+ pp->expression (call); -+ } -+ else -+ gcc_unreachable (); - } - - void - pp_cxx_expression_constraint (cxx_pretty_printer *pp, tree t) - { -- pp_string (pp, "valid_expr"); -- pp_left_paren (pp); -+ pp_string (pp, "<valid-expression "); -+ pp_cxx_left_paren (pp); - pp->expression (TREE_OPERAND (t, 0)); -- pp_right_paren (pp); -+ pp_cxx_right_paren (pp); -+ pp_string (pp, ">"); - } - - void - pp_cxx_type_constraint (cxx_pretty_printer *pp, tree t) - { -- pp_string (pp, "valid_type"); -- pp_left_paren (pp); -+ pp_string (pp, "<valid-type "); - pp->type_id (TREE_OPERAND (t, 0)); -- pp_right_paren (pp); -+ pp_string (pp, ">"); - } - - void - pp_cxx_implicit_conversion_constraint (cxx_pretty_printer *pp, tree t) - { -- pp_string (pp, "convertible"); -- pp_left_paren (pp); -+ pp_string (pp, "<implicitly-conversion "); -+ pp_cxx_left_paren (pp); - pp->expression (ICONV_CONSTR_EXPR (t)); -- pp_cxx_separate_with (pp, ','); -- pp->expression (ICONV_CONSTR_TYPE (t)); -- pp_right_paren (pp); -+ pp_cxx_right_paren (pp); -+ pp_cxx_ws_string (pp, "to"); -+ pp->type_id (ICONV_CONSTR_TYPE (t)); -+ pp_string (pp, ">"); - } - - void - pp_cxx_argument_deduction_constraint (cxx_pretty_printer *pp, tree t) - { -- pp_string (pp, "deducible"); -- pp_left_paren (pp); -+ pp_string (pp, "<argument-deduction "); -+ pp_cxx_left_paren (pp); - pp->expression (DEDUCT_CONSTR_EXPR (t)); -- pp_cxx_separate_with (pp, ','); -+ pp_cxx_right_paren (pp); -+ pp_cxx_ws_string (pp, "as"); - pp->expression (DEDUCT_CONSTR_PATTERN (t)); -- pp_right_paren (pp); -+ pp_string (pp, ">"); - } - - void - pp_cxx_exception_constraint (cxx_pretty_printer *pp, tree t) - { - pp_cxx_ws_string (pp, "noexcept"); -- pp_left_paren (pp); -+ pp_cxx_whitespace (pp); -+ pp_cxx_left_paren (pp); - pp->expression (TREE_OPERAND (t, 0)); -- pp_right_paren (pp); -+ pp_cxx_right_paren (pp); - } - - void - pp_cxx_parameterized_constraint (cxx_pretty_printer *pp, tree t) - { - pp_left_paren (pp); -- pp_string (pp, "forall"); -+ pp_string (pp, "<requires "); - if (tree parms = PARM_CONSTR_PARMS (t)) - { -- if (parms) - pp_cxx_parameter_declaration_clause (pp, parms); - pp_cxx_whitespace (pp); - } - pp_cxx_constraint (pp, PARM_CONSTR_OPERAND (t)); -- pp_right_paren (pp); -+ pp_string (pp, ">"); - } - - void -@@ -2731,6 +2870,10 @@ - pp_cxx_predicate_constraint (pp, t); - break; - -+ case CHECK_CONSTR: -+ pp_cxx_check_constraint (pp, t); -+ break; -+ - case EXPR_CONSTR: - pp_cxx_expression_constraint (pp, t); - break; -@@ -2763,6 +2906,10 @@ - pp_cxx_disjunction (pp, t); - break; - -+ case EXPR_PACK_EXPANSION: -+ pp->expression (TREE_OPERAND (t, 0)); -+ break; -+ - default: - gcc_unreachable (); - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/decl.c gcc-6-20160721/gcc/cp/decl.c ---- gcc-6.1.0/gcc/cp/decl.c 2016-04-15 04:02:49.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/decl.c 2016-07-21 06:18:06.000000000 +0000 -@@ -2090,6 +2090,14 @@ - if (VAR_P (newdecl)) - { - DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl); -+ /* For already initialized vars, TREE_READONLY could have been -+ cleared in cp_finish_decl, because the var needs runtime -+ initialization or destruction. Make sure not to set -+ TREE_READONLY on it again. */ -+ if (DECL_INITIALIZED_P (olddecl) -+ && !DECL_EXTERNAL (olddecl) -+ && !TREE_READONLY (olddecl)) -+ TREE_READONLY (newdecl) = 0; - DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl); - DECL_NONTRIVIALLY_INITIALIZED_P (newdecl) - |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl); -@@ -5329,10 +5337,7 @@ - complete_type (type); - if (!DECL_SIZE (decl) - && TREE_TYPE (decl) != error_mark_node -- && (COMPLETE_TYPE_P (type) -- || (TREE_CODE (type) == ARRAY_TYPE -- && !TYPE_DOMAIN (type) -- && COMPLETE_TYPE_P (TREE_TYPE (type))))) -+ && complete_or_array_type_p (type)) - layout_decl (decl, 0); - - if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE) -@@ -6633,6 +6638,13 @@ - adc_variable_type); - if (type == error_mark_node) - return; -+ if (TREE_CODE (type) == FUNCTION_TYPE) -+ { -+ error ("initializer for %<decltype(auto) %D%> has function type " -+ "(did you forget the %<()%> ?)", decl); -+ TREE_TYPE (decl) = error_mark_node; -+ return; -+ } - cp_apply_type_quals_to_decl (cp_type_quals (type), decl); - } - -@@ -7905,7 +7917,7 @@ - - /* Adjust the required expression into a constraint. */ - if (decl_reqs) -- decl_reqs = make_predicate_constraint (decl_reqs); -+ decl_reqs = normalize_expression (decl_reqs); - - tree ci = build_constraints (tmpl_reqs, decl_reqs); - set_constraints (decl, ci); -@@ -11186,8 +11198,7 @@ - } - else if (!staticp && !dependent_type_p (type) - && !COMPLETE_TYPE_P (complete_type (type)) -- && (TREE_CODE (type) != ARRAY_TYPE -- || !COMPLETE_TYPE_P (TREE_TYPE (type)) -+ && (!complete_or_array_type_p (type) - || initialized == 0)) - { - if (TREE_CODE (type) != ARRAY_TYPE -@@ -13382,6 +13393,19 @@ - use_short_enum = flag_short_enums - || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype)); - -+ /* If the precision of the type was specified with an attribute and it -+ was too small, give an error. Otherwise, use it. */ -+ if (TYPE_PRECISION (enumtype)) -+ { -+ if (precision > TYPE_PRECISION (enumtype)) -+ error ("specified mode too small for enumeral values"); -+ else -+ { -+ use_short_enum = true; -+ precision = TYPE_PRECISION (enumtype); -+ } -+ } -+ - for (itk = (use_short_enum ? itk_char : itk_int); - itk != itk_none; - itk++) -@@ -14999,8 +15023,9 @@ - tree var = iv->decl; - tree type = TREE_TYPE (var); - -- if (TYPE_MAIN_VARIANT (strip_array_types (type)) -- == iv->incomplete_type) -+ if (type != error_mark_node -+ && (TYPE_MAIN_VARIANT (strip_array_types (type)) -+ == iv->incomplete_type)) - { - /* Complete the type of the variable. The VAR_DECL itself - will be laid out in expand_expr. */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/decl2.c gcc-6-20160721/gcc/cp/decl2.c ---- gcc-6.1.0/gcc/cp/decl2.c 2016-04-15 14:51:06.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/decl2.c 2016-05-31 21:36:46.000000000 +0000 -@@ -4904,8 +4904,6 @@ - - finish_repo (); - -- fini_constexpr (); -- - /* The entire file is now complete. If requested, dump everything - to a file. */ - dump_tu (); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/error.c gcc-6-20160721/gcc/cp/error.c ---- gcc-6.1.0/gcc/cp/error.c 2016-04-22 11:08:16.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/error.c 2016-07-21 06:18:06.000000000 +0000 -@@ -961,7 +961,12 @@ - { - if (VAR_P (t) - && DECL_DECLARED_CONSTEXPR_P (t)) -- pp_cxx_ws_string (pp, "constexpr"); -+ { -+ if (DECL_DECLARED_CONCEPT_P (t)) -+ pp_cxx_ws_string (pp, "concept"); -+ else -+ pp_cxx_ws_string (pp, "constexpr"); -+ } - dump_type_prefix (pp, type, flags & ~TFF_UNQUALIFIED_NAME); - pp_maybe_space (pp); - } -@@ -1334,16 +1339,19 @@ - if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (t))) - pp_cxx_ws_string (pp, "..."); - } -+ -+ /* Only print the requirements if we're also printing -+ the template header. */ -+ if (flag_concepts) -+ if (tree ci = get_constraints (t)) -+ if (check_constraint_info (ci)) -+ if (tree reqs = CI_TEMPLATE_REQS (ci)) -+ { -+ pp_cxx_requires_clause (pp, reqs); -+ pp_cxx_whitespace (pp); -+ } - } - -- if (flag_concepts) -- if (tree ci = get_constraints (t)) -- if (check_constraint_info (ci)) -- if (tree reqs = CI_TEMPLATE_REQS (ci)) -- { -- pp_cxx_requires_clause (pp, reqs); -- pp_cxx_whitespace (pp); -- } - - if (DECL_CLASS_TEMPLATE_P (t)) - dump_type (pp, TREE_TYPE (t), -@@ -1530,7 +1538,12 @@ - pp_cxx_ws_string (pp, "virtual"); - - if (DECL_DECLARED_CONSTEXPR_P (t)) -- pp_cxx_ws_string (pp, "constexpr"); -+ { -+ if (DECL_DECLARED_CONCEPT_P (t)) -+ pp_cxx_ws_string (pp, "concept"); -+ else -+ pp_cxx_ws_string (pp, "constexpr"); -+ } - } - - /* Print the return type? */ -@@ -2661,6 +2674,10 @@ - break; - - case EXPR_PACK_EXPANSION: -+ case UNARY_LEFT_FOLD_EXPR: -+ case UNARY_RIGHT_FOLD_EXPR: -+ case BINARY_LEFT_FOLD_EXPR: -+ case BINARY_RIGHT_FOLD_EXPR: - case TYPEID_EXPR: - case MEMBER_REF: - case DOTSTAR_EXPR: -@@ -2733,6 +2750,7 @@ - break; - - case PRED_CONSTR: -+ case CHECK_CONSTR: - case EXPR_CONSTR: - case TYPE_CONSTR: - case ICONV_CONSTR: -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/init.c gcc-6-20160721/gcc/cp/init.c ---- gcc-6.1.0/gcc/cp/init.c 2016-04-14 17:35:23.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/init.c 2016-07-21 06:14:51.000000000 +0000 -@@ -2072,8 +2072,13 @@ - && TREE_CODE (init) == TREE_LIST - && TREE_CHAIN (init) == NULL_TREE) - init = TREE_VALUE (init); -- /* Instantiate a non-dependent initializer. */ -- init = instantiate_non_dependent_or_null (init); -+ /* Instantiate a non-dependent initializer for user variables. We -+ mustn't do this for the temporary for an array compound literal; -+ trying to instatiate the initializer will keep creating new -+ temporaries until we crash. Probably it's not useful to do it for -+ other artificial variables, either. */ -+ if (!DECL_ARTIFICIAL (decl)) -+ init = instantiate_non_dependent_or_null (init); - if (!init - || !TREE_TYPE (init) - || !TREE_CONSTANT (init) -@@ -2375,7 +2380,8 @@ - - STRIP_NOPS (oper); - -- if (TREE_CODE (oper) == ARRAY_REF) -+ if (TREE_CODE (oper) == ARRAY_REF -+ && (addr_expr || TREE_CODE (TREE_TYPE (oper)) == ARRAY_TYPE)) - { - /* Similar to the offset computed above, see if the array index - is a compile-time constant. If so, and unless the offset was -@@ -2404,8 +2410,8 @@ - bool compref = TREE_CODE (oper) == COMPONENT_REF; - - /* Descend into a struct or union to find the member whose address -- is being used as the agument. */ -- while (TREE_CODE (oper) == COMPONENT_REF) -+ is being used as the argument. */ -+ if (TREE_CODE (oper) == COMPONENT_REF) - { - tree op0 = oper; - while (TREE_CODE (op0 = TREE_OPERAND (op0, 0)) == COMPONENT_REF); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/lambda.c gcc-6-20160721/gcc/cp/lambda.c ---- gcc-6.1.0/gcc/cp/lambda.c 2016-02-25 15:23:47.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/lambda.c 2016-07-21 06:12:56.000000000 +0000 -@@ -871,8 +871,10 @@ - bool nested = (cfun != NULL); - bool nested_def = decl_function_context (TYPE_MAIN_DECL (type)); - tree callop = lambda_function (type); -+ tree lam = CLASSTYPE_LAMBDA_EXPR (type); - -- if (LAMBDA_EXPR_CAPTURE_LIST (CLASSTYPE_LAMBDA_EXPR (type)) != NULL_TREE) -+ if (LAMBDA_EXPR_CAPTURE_LIST (lam) != NULL_TREE -+ || LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lam) != CPLD_NONE) - return; - - if (processing_template_decl) -@@ -901,6 +903,8 @@ - tree optype = TREE_TYPE (callop); - tree fn_result = TREE_TYPE (optype); - -+ tree thisarg = build_nop (TREE_TYPE (DECL_ARGUMENTS (callop)), -+ null_pointer_node); - if (generic_lambda_p) - { - /* Prepare the dependent member call for the static member function -@@ -908,7 +912,8 @@ - return expression for a deduced return call op to allow for simple - implementation of the conversion operator. */ - -- tree instance = build_nop (type, null_pointer_node); -+ tree instance = cp_build_indirect_ref (thisarg, RO_NULL, -+ tf_warning_or_error); - tree objfn = build_min (COMPONENT_REF, NULL_TREE, - instance, DECL_NAME (callop), NULL_TREE); - int nargs = list_length (DECL_ARGUMENTS (callop)) - 1; -@@ -920,9 +925,7 @@ - else - { - direct_argvec = make_tree_vector (); -- direct_argvec->quick_push (build1 (NOP_EXPR, -- TREE_TYPE (DECL_ARGUMENTS (callop)), -- null_pointer_node)); -+ direct_argvec->quick_push (thisarg); - } - - /* Copy CALLOP's argument list (as per 'copy_list') as FN_ARGS in order to -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/logic.cc gcc-6-20160721/gcc/cp/logic.cc ---- gcc-6.1.0/gcc/cp/logic.cc 2016-04-22 11:09:22.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/logic.cc 2016-07-21 06:18:06.000000000 +0000 -@@ -23,6 +23,7 @@ - #include "system.h" - #include "coretypes.h" - #include "tm.h" -+#include "timevar.h" - #include "hash-set.h" - #include "machmode.h" - #include "vec.h" -@@ -50,19 +51,52 @@ - - // Helper algorithms - --// Increment iter distance(first, last) times. --template<typename I1, typename I2, typename I3> -- I1 next_by_distance (I1 iter, I2 first, I3 last) -- { -- for ( ; first != last; ++first, ++iter) -- ; -- return iter; -- } -+template<typename I> -+inline I -+next (I iter) -+{ -+ return ++iter; -+} -+ -+template<typename I, typename P> -+inline bool -+any_p (I first, I last, P pred) -+{ -+ while (first != last) -+ { -+ if (pred(*first)) -+ return true; -+ ++first; -+ } -+ return false; -+} -+ -+bool prove_implication (tree, tree); - - /*--------------------------------------------------------------------------- - Proof state - ---------------------------------------------------------------------------*/ - -+struct term_entry -+{ -+ tree t; -+}; -+ -+/* Hashing function and equality for constraint entries. */ -+ -+struct term_hasher : ggc_ptr_hash<term_entry> -+{ -+ static hashval_t hash (term_entry *e) -+ { -+ return iterative_hash_template_arg (e->t, 0); -+ } -+ -+ static bool equal (term_entry *e1, term_entry *e2) -+ { -+ return cp_tree_equal (e1->t, e2->t); -+ } -+}; -+ - /* A term list is a list of atomic constraints. It is used - to maintain the lists of assumptions and conclusions in a - proof goal. -@@ -70,109 +104,122 @@ - Each term list maintains an iterator that refers to the current - term. This can be used by various tactics to support iteration - and stateful manipulation of the list. */ --struct term_list : std::list<tree> -+struct term_list - { -- term_list (); -- term_list (const term_list &x); -- term_list& operator= (const term_list &x); -- -- tree current_term () { return *current; } -- const_tree current_term () const { return *current; } -+ typedef std::list<tree>::iterator iterator; - -+ term_list (); -+ term_list (tree); - -- void insert (tree t); -- tree erase (); -+ bool includes (tree); -+ iterator insert (iterator, tree); -+ iterator push_back (tree); -+ iterator erase (iterator); -+ iterator replace (iterator, tree); -+ iterator replace (iterator, tree, tree); - -- void start (); -- void next (); -- bool done() const; -+ iterator begin() { return seq.begin(); } -+ iterator end() { return seq.end(); } - -- iterator current; -+ std::list<tree> seq; -+ hash_table<term_hasher> tab; - }; - - inline - term_list::term_list () -- : std::list<tree> (), current (end ()) --{ } -+ : seq(), tab (11) -+{ -+} - --inline --term_list::term_list (const term_list &x) -- : std::list<tree> (x) -- , current (next_by_distance (begin (), x.begin (), x.current)) --{ } -+/* Initialize a term list with an initial term. */ - --inline term_list& --term_list::operator= (const term_list &x) -+inline -+term_list::term_list (tree t) -+ : seq (), tab (11) - { -- std::list<tree>::operator=(x); -- current = next_by_distance (begin (), x.begin (), x.current); -- return *this; --} -- --/* Try saving the term T into the list of terms. If -- T is already in the list of terms, then no action is -- performed. Otherwise, insert T before the current -- position, making this term current. -- -- Note that not inserting terms is an optimization -- that corresponds to the structural rule of -- contraction. -- -- NOTE: With the contraction rule, this data structure -- would be more efficiently represented as an ordered set -- or hash set. */ --void --term_list::insert (tree t) -+ push_back (t); -+} -+ -+/* Returns true if T is the in the tree. */ -+ -+inline bool -+term_list::includes (tree t) - { -- /* Search the current term list. If there is already -- a matching term, do not add the new one. */ -- for (iterator i = begin(); i != end(); ++i) -- if (cp_tree_equal (*i, t)) -- return; -+ term_entry ent = {t}; -+ return tab.find (&ent); -+} - -- current = std::list<tree>::insert (current, t); -+/* Append a term to the list. */ -+inline term_list::iterator -+term_list::push_back (tree t) -+{ -+ return insert (end(), t); - } - --/* Remove the current term from the list, repositioning to -- the term following the removed term. Note that the new -- position could be past the end of the list. -+/* Insert a new (unseen) term T into the list before the proposition -+ indicated by ITER. Returns the iterator to the newly inserted -+ element. */ - -- The removed term is returned. */ --inline tree --term_list::erase () -+term_list::iterator -+term_list::insert (iterator iter, tree t) - { -- tree t = *current; -- current = std::list<tree>::erase (current); -- return t; -+ gcc_assert (!includes (t)); -+ iter = seq.insert (iter, t); -+ term_entry ent = {t}; -+ term_entry** slot = tab.find_slot (&ent, INSERT); -+ term_entry* ptr = ggc_alloc<term_entry> (); -+ *ptr = ent; -+ *slot = ptr; -+ return iter; - } - --/* Initialize the current term to the first in the list. */ --inline void --term_list::start () -+/* Remove an existing term from the list. Returns an iterator referring -+ to the element after the removed term. This may be end(). */ -+ -+term_list::iterator -+term_list::erase (iterator iter) - { -- current = begin (); -+ gcc_assert (includes (*iter)); -+ term_entry ent = {*iter}; -+ tab.remove_elt (&ent); -+ iter = seq.erase (iter); -+ return iter; - } - --/* Advance to the next term in the list. */ --inline void --term_list::next () -+/* Replace the given term with that specified. If the term has -+ been previously seen, do not insert the term. Returns the -+ first iterator past the current term. */ -+ -+term_list::iterator -+term_list::replace (iterator iter, tree t) - { -- ++current; -+ iter = erase (iter); -+ if (!includes (t)) -+ insert (iter, t); -+ return iter; - } - --/* Returns true when the current position is past the end. */ --inline bool --term_list::done () const -+ -+/* Replace the term at the given position by the supplied T1 -+ followed by t2. This is used in certain logical operators to -+ load a list of assumptions or conclusions. */ -+ -+term_list::iterator -+term_list::replace (iterator iter, tree t1, tree t2) - { -- return current == end (); -+ iter = erase (iter); -+ if (!includes (t1)) -+ insert (iter, t1); -+ if (!includes (t2)) -+ insert (iter, t2); -+ return iter; - } - -- - /* A goal (or subgoal) models a sequent of the form - 'A |- C' where A and C are lists of assumptions and - conclusions written as propositions in the constraint -- language (i.e., lists of trees). --*/ -+ language (i.e., lists of trees). */ -+ - struct proof_goal - { - term_list assumptions; -@@ -182,27 +229,27 @@ - /* A proof state owns a list of goals and tracks the - current sub-goal. The class also provides facilities - for managing subgoals and constructing term lists. */ -+ - struct proof_state : std::list<proof_goal> - { - proof_state (); - - iterator branch (iterator i); -+ iterator discharge (iterator i); - }; - --/* An alias for proof state iterators. */ --typedef proof_state::iterator goal_iterator; -+/* Initialize the state with a single empty goal, and set that goal -+ as the current subgoal. */ - --/* Initialize the state with a single empty goal, -- and set that goal as the current subgoal. */ - inline - proof_state::proof_state () - : std::list<proof_goal> (1) - { } - - --/* Branch the current goal by creating a new subgoal, -- returning a reference to // the new object. This does -- not update the current goal. */ -+/* Branch the current goal by creating a new subgoal, returning a -+ reference to the new object. This does not update the current goal. */ -+ - inline proof_state::iterator - proof_state::branch (iterator i) - { -@@ -211,278 +258,536 @@ - return insert (++i, g); - } - -+/* Discharge the current goal, setting it equal to the -+ next non-satisfied goal. */ -+ -+inline proof_state::iterator -+proof_state::discharge (iterator i) -+{ -+ gcc_assert (i != end()); -+ return erase (i); -+} -+ -+ - /*--------------------------------------------------------------------------- -- Logical rules -+ Debugging - ---------------------------------------------------------------------------*/ - --/*These functions modify the current state and goal by decomposing -- logical expressions using the logical rules of sequent calculus for -- first order logic. -+// void -+// debug (term_list& ts) -+// { -+// for (term_list::iterator i = ts.begin(); i != ts.end(); ++i) -+// verbatim (" # %E", *i); -+// } -+// -+// void -+// debug (proof_goal& g) -+// { -+// debug (g.assumptions); -+// verbatim (" |-"); -+// debug (g.conclusions); -+// } -+ -+/*--------------------------------------------------------------------------- -+ Atomicity of constraints -+---------------------------------------------------------------------------*/ - -- Note that in each decomposition rule, the term T has been erased -- from term list before the specific rule is applied. */ -+/* Returns true if T is not an atomic constraint. */ - --/* The left logical rule for conjunction adds both operands -- to the current set of constraints. */ --void --left_conjunction (proof_state &, goal_iterator i, tree t) -+bool -+non_atomic_constraint_p (tree t) - { -- gcc_assert (TREE_CODE (t) == CONJ_CONSTR); -+ switch (TREE_CODE (t)) -+ { -+ case PRED_CONSTR: -+ case EXPR_CONSTR: -+ case TYPE_CONSTR: -+ case ICONV_CONSTR: -+ case DEDUCT_CONSTR: -+ case EXCEPT_CONSTR: -+ return false; -+ case CHECK_CONSTR: -+ case PARM_CONSTR: -+ case CONJ_CONSTR: -+ case DISJ_CONSTR: -+ return true; -+ default: -+ gcc_unreachable (); -+ } -+} -+ -+/* Returns true if any constraints in T are not atomic. */ - -- /* Insert the operands into the current branch. Note that the -- final order of insertion is left-to-right. */ -- term_list &l = i->assumptions; -- l.insert (TREE_OPERAND (t, 1)); -- l.insert (TREE_OPERAND (t, 0)); -+bool -+any_non_atomic_constraints_p (term_list& t) -+{ -+ return any_p (t.begin(), t.end(), non_atomic_constraint_p); - } - --/* The left logical rule for disjunction creates a new goal, -- adding the first operand to the original set of -- constraints and the second operand to the new set -- of constraints. */ --void --left_disjunction (proof_state &s, goal_iterator i, tree t) -+/*--------------------------------------------------------------------------- -+ Proof validations -+---------------------------------------------------------------------------*/ -+ -+enum proof_result - { -- gcc_assert (TREE_CODE (t) == DISJ_CONSTR); -+ invalid, -+ valid, -+ undecided -+}; -+ -+proof_result check_term (term_list&, tree); -+ - -- /* Branch the current subgoal. */ -- goal_iterator j = s.branch (i); -- term_list &l1 = i->assumptions; -- term_list &l2 = j->assumptions; -+proof_result -+analyze_atom (term_list& ts, tree t) -+{ -+ /* FIXME: Hook into special cases, if any. */ -+ /* -+ term_list::iterator iter = ts.begin(); -+ term_list::iterator end = ts.end(); -+ while (iter != end) -+ { -+ ++iter; -+ } -+ */ - -- /* Insert operands into the different branches. */ -- l1.insert (TREE_OPERAND (t, 0)); -- l2.insert (TREE_OPERAND (t, 1)); -+ if (non_atomic_constraint_p (t)) -+ return undecided; -+ if (any_non_atomic_constraints_p (ts)) -+ return undecided; -+ return invalid; - } - --/* The left logical rules for parameterized constraints -- adds its operand to the current goal. The list of -- parameters are effectively discarded. */ --void --left_parameterized_constraint (proof_state &, goal_iterator i, tree t) -+/* Search for a pack expansion in the list of assumptions that would -+ make this expansion valid. */ -+ -+proof_result -+analyze_pack (term_list& ts, tree t) - { -- gcc_assert (TREE_CODE (t) == PARM_CONSTR); -- term_list &l = i->assumptions; -- l.insert (PARM_CONSTR_OPERAND (t)); -+ tree c1 = normalize_expression (PACK_EXPANSION_PATTERN (t)); -+ term_list::iterator iter = ts.begin(); -+ term_list::iterator end = ts.end(); -+ while (iter != end) -+ { -+ if (TREE_CODE (*iter) == TREE_CODE (t)) -+ { -+ tree c2 = normalize_expression (PACK_EXPANSION_PATTERN (*iter)); -+ if (prove_implication (c2, c1)) -+ return valid; -+ else -+ return invalid; -+ } -+ ++iter; -+ } -+ return invalid; - } - --/*--------------------------------------------------------------------------- -- Decomposition -----------------------------------------------------------------------------*/ -+/* Search for concept checks in TS that we know subsume T. */ - --/* The following algorithms decompose expressions into sets of -- atomic propositions. In terms of the sequent calculus, these -- functions exercise the logical rules only. -- -- This is equivalent, for the purpose of determining subsumption, -- to rewriting a constraint in disjunctive normal form. It also -- allows the resulting assumptions to be used as declarations -- for the purpose of separate checking. */ -+proof_result -+search_known_subsumptions (term_list& ts, tree t) -+{ -+ for (term_list::iterator i = ts.begin(); i != ts.end(); ++i) -+ if (TREE_CODE (*i) == CHECK_CONSTR) -+ { -+ if (bool* b = lookup_subsumption_result (*i, t)) -+ return *b ? valid : invalid; -+ } -+ return undecided; -+} - --/* Apply the left logical rules to the proof state. */ --void --decompose_left_term (proof_state &s, goal_iterator i) -+/* Determine if the terms in TS provide sufficient support for proving -+ the proposition T. If any term in TS is a concept check that is known -+ to subsume T, then the proof is valid. Otherwise, we have to expand T -+ and continue searching for support. */ -+ -+proof_result -+analyze_check (term_list& ts, tree t) -+{ -+ proof_result r = search_known_subsumptions (ts, t); -+ if (r != undecided) -+ return r; -+ -+ tree tmpl = CHECK_CONSTR_CONCEPT (t); -+ tree args = CHECK_CONSTR_ARGS (t); -+ tree c = expand_concept (tmpl, args); -+ return check_term (ts, c); -+} -+ -+/* Recursively check constraints of the parameterized constraint. */ -+ -+proof_result -+analyze_parameterized (term_list& ts, tree t) -+{ -+ return check_term (ts, PARM_CONSTR_OPERAND (t)); -+} -+ -+proof_result -+analyze_conjunction (term_list& ts, tree t) -+{ -+ proof_result r = check_term (ts, TREE_OPERAND (t, 0)); -+ if (r == invalid || r == undecided) -+ return r; -+ return check_term (ts, TREE_OPERAND (t, 1)); -+} -+ -+proof_result -+analyze_disjunction (term_list& ts, tree t) -+{ -+ proof_result r = check_term (ts, TREE_OPERAND (t, 0)); -+ if (r == valid) -+ return r; -+ return check_term (ts, TREE_OPERAND (t, 1)); -+} -+ -+proof_result -+analyze_term (term_list& ts, tree t) - { -- term_list &l = i->assumptions; -- tree t = l.current_term (); - switch (TREE_CODE (t)) - { -+ case CHECK_CONSTR: -+ return analyze_check (ts, t); -+ -+ case PARM_CONSTR: -+ return analyze_parameterized (ts, t); -+ - case CONJ_CONSTR: -- left_conjunction (s, i, l.erase ()); -- break; -+ return analyze_conjunction (ts, t); - case DISJ_CONSTR: -- left_disjunction (s, i, l.erase ()); -- break; -- case PARM_CONSTR: -- left_parameterized_constraint (s, i, l.erase ()); -- break; -+ return analyze_disjunction (ts, t); -+ -+ case PRED_CONSTR: -+ case EXPR_CONSTR: -+ case TYPE_CONSTR: -+ case ICONV_CONSTR: -+ case DEDUCT_CONSTR: -+ case EXCEPT_CONSTR: -+ return analyze_atom (ts, t); -+ -+ case EXPR_PACK_EXPANSION: -+ return analyze_pack (ts, t); -+ -+ case ERROR_MARK: -+ /* Encountering an error anywhere in a constraint invalidates -+ the proof, since the constraint is ill-formed. */ -+ return invalid; - default: -- l.next (); -- break; -+ gcc_unreachable (); - } - } - --/* Apply the left logical rules of the sequent calculus -- until the current goal is fully decomposed into atomic -- constraints. */ -+/* Check if a single term can be proven from a set of assumptions. -+ If the proof is not valid, then it is incomplete when either -+ the given term is non-atomic or any term in the list of assumptions -+ is not-atomic. */ -+ -+proof_result -+check_term (term_list& ts, tree t) -+{ -+ /* Try the easy way; search for an equivalent term. */ -+ if (ts.includes (t)) -+ return valid; -+ -+ /* The hard way; actually consider what the term means. */ -+ return analyze_term (ts, t); -+} -+ -+/* Check to see if any term is proven by the assumptions in the -+ proof goal. The proof is valid if the proof of any term is valid. -+ If validity cannot be determined, but any particular -+ check was undecided, then this goal is undecided. */ -+ -+proof_result -+check_goal (proof_goal& g) -+{ -+ term_list::iterator iter = g.conclusions.begin (); -+ term_list::iterator end = g.conclusions.end (); -+ bool incomplete = false; -+ while (iter != end) -+ { -+ proof_result r = check_term (g.assumptions, *iter); -+ if (r == valid) -+ return r; -+ if (r == undecided) -+ incomplete = true; -+ ++iter; -+ } -+ -+ /* Was the proof complete? */ -+ if (incomplete) -+ return undecided; -+ else -+ return invalid; -+} -+ -+/* Check if the the proof is valid. This is the case when all -+ goals can be discharged. If any goal is invalid, then the -+ entire proof is invalid. Otherwise, the proof is undecided. */ -+ -+proof_result -+check_proof (proof_state& p) -+{ -+ proof_state::iterator iter = p.begin(); -+ proof_state::iterator end = p.end(); -+ while (iter != end) -+ { -+ proof_result r = check_goal (*iter); -+ if (r == invalid) -+ return r; -+ if (r == valid) -+ iter = p.discharge (iter); -+ else -+ ++iter; -+ } -+ -+ /* If all goals are discharged, then the proof is valid. */ -+ if (p.empty()) -+ return valid; -+ else -+ return undecided; -+} -+ -+/*--------------------------------------------------------------------------- -+ Left logical rules -+---------------------------------------------------------------------------*/ -+ -+term_list::iterator -+load_check_assumption (term_list& ts, term_list::iterator i) -+{ -+ tree decl = CHECK_CONSTR_CONCEPT (*i); -+ tree tmpl = DECL_TI_TEMPLATE (decl); -+ tree args = CHECK_CONSTR_ARGS (*i); -+ return ts.replace(i, expand_concept (tmpl, args)); -+} -+ -+term_list::iterator -+load_parameterized_assumption (term_list& ts, term_list::iterator i) -+{ -+ return ts.replace(i, PARM_CONSTR_OPERAND(*i)); -+} -+ -+term_list::iterator -+load_conjunction_assumption (term_list& ts, term_list::iterator i) -+{ -+ tree t1 = TREE_OPERAND (*i, 0); -+ tree t2 = TREE_OPERAND (*i, 1); -+ return ts.replace(i, t1, t2); -+} -+ -+/* Examine the terms in the list, and apply left-logical rules to move -+ terms into the set of assumptions. */ -+ - void --decompose_left_goal (proof_state &s, goal_iterator i) -+load_assumptions (proof_goal& g) - { -- term_list& l = i->assumptions; -- l.start (); -- while (!l.done ()) -- decompose_left_term (s, i); -+ term_list::iterator iter = g.assumptions.begin(); -+ term_list::iterator end = g.assumptions.end(); -+ while (iter != end) -+ { -+ switch (TREE_CODE (*iter)) -+ { -+ case CHECK_CONSTR: -+ iter = load_check_assumption (g.assumptions, iter); -+ break; -+ case PARM_CONSTR: -+ iter = load_parameterized_assumption (g.assumptions, iter); -+ break; -+ case CONJ_CONSTR: -+ iter = load_conjunction_assumption (g.assumptions, iter); -+ break; -+ default: -+ ++iter; -+ break; -+ } -+ } - } - --/* Apply the left logical rules of the sequent calculus -- until the antecedents are fully decomposed into atomic -- constraints. */ -+/* In each subgoal, load constraints into the assumption set. */ -+ - void --decompose_left (proof_state& s) -+load_assumptions(proof_state& p) - { -- goal_iterator iter = s.begin (); -- goal_iterator end = s.end (); -- for ( ; iter != end; ++iter) -- decompose_left_goal (s, iter); --} -- --/* Returns a vector of terms from the term list L. */ --tree --extract_terms (term_list& l) --{ -- tree result = make_tree_vec (l.size()); -- term_list::iterator iter = l.begin(); -- term_list::iterator end = l.end(); -- for (int n = 0; iter != end; ++iter, ++n) -- TREE_VEC_ELT (result, n) = *iter; -- return result; --} -- --/* Extract the assumptions from the proof state S -- as a vector of vectors of atomic constraints. */ --inline tree --extract_assumptions (proof_state& s) --{ -- tree result = make_tree_vec (s.size ()); -- goal_iterator iter = s.begin (); -- goal_iterator end = s.end (); -- for (int n = 0; iter != end; ++iter, ++n) -- TREE_VEC_ELT (result, n) = extract_terms (iter->assumptions); -- return result; --} -- --} // namespace -- --/* Decompose the required expression T into a constraint set: a -- vector of vectors containing only atomic propositions. If T is -- invalid, return an error. */ --tree --decompose_assumptions (tree t) --{ -- if (!t || t == error_mark_node) -- return t; -- -- /* Create a proof state, and insert T as the sole assumption. */ -- proof_state s; -- term_list &l = s.begin ()->assumptions; -- l.insert (t); -- -- /* Decompose the expression into a constraint set, and then -- extract the terms for the AST. */ -- decompose_left (s); -- return extract_assumptions (s); -+ proof_state::iterator iter = p.begin(); -+ while (iter != p.end()) -+ { -+ load_assumptions (*iter); -+ ++iter; -+ } - } - -+void -+explode_disjunction (proof_state& p, proof_state::iterator gi, term_list::iterator ti1) -+{ -+ tree t1 = TREE_OPERAND (*ti1, 0); -+ tree t2 = TREE_OPERAND (*ti1, 1); - --/*--------------------------------------------------------------------------- -- Subsumption Rules -----------------------------------------------------------------------------*/ -+ /* Erase the current term from the goal. */ -+ proof_goal& g1 = *gi; -+ proof_goal& g2 = *p.branch (gi); - --namespace { -+ /* Get an iterator to the equivalent position in th enew goal. */ -+ int n = std::distance (g1.assumptions.begin (), ti1); -+ term_list::iterator ti2 = g2.assumptions.begin (); -+ std::advance (ti2, n); - --bool subsumes_constraint (tree, tree); --bool subsumes_conjunction (tree, tree); --bool subsumes_disjunction (tree, tree); --bool subsumes_parameterized_constraint (tree, tree); --bool subsumes_atomic_constraint (tree, tree); -- --/* Returns true if the assumption A matches the conclusion C. This -- is generally the case when A and C have the same syntax. -- -- NOTE: There will be specialized matching rules to accommodate -- type equivalence, conversion, inheritance, etc. But this is not -- in the current concepts draft. */ --inline bool --match_terms (tree a, tree c) --{ -- return cp_tree_equal (a, c); -+ /* Replace the disjunction in both branches. */ -+ g1.assumptions.replace (ti1, t1); -+ g2.assumptions.replace (ti2, t2); - } - --/* Returns true if the list of assumptions AS subsumes the atomic -- proposition C. This is the case when we can find a proposition -- in AS that entails the conclusion C. */ -+ -+/* Search the assumptions of the goal for the first disjunction. */ -+ - bool --subsumes_atomic_constraint (tree as, tree c) -+explode_goal (proof_state& p, proof_state::iterator gi) - { -- for (int i = 0; i < TREE_VEC_LENGTH (as); ++i) -- if (match_terms (TREE_VEC_ELT (as, i), c)) -- return true; -+ term_list& ts = gi->assumptions; -+ term_list::iterator ti = ts.begin(); -+ term_list::iterator end = ts.end(); -+ while (ti != end) -+ { -+ if (TREE_CODE (*ti) == DISJ_CONSTR) -+ { -+ explode_disjunction (p, gi, ti); -+ return true; -+ } -+ else ++ti; -+ } - return false; - } - --/* Returns true when both operands of C are subsumed by the -- assumptions AS. */ --inline bool --subsumes_conjunction (tree as, tree c) -+/* Search for the first goal with a disjunction, and then branch -+ creating a clone of that subgoal. */ -+ -+void -+explode_assumptions (proof_state& p) - { -- tree l = TREE_OPERAND (c, 0); -- tree r = TREE_OPERAND (c, 1); -- return subsumes_constraint (as, l) && subsumes_constraint (as, r); -+ proof_state::iterator iter = p.begin(); -+ proof_state::iterator end = p.end(); -+ while (iter != end) -+ { -+ if (explode_goal (p, iter)) -+ return; -+ ++iter; -+ } - } - --/* Returns true when either operand of C is subsumed by the -- assumptions AS. */ --inline bool --subsumes_disjunction (tree as, tree c) -+ -+/*--------------------------------------------------------------------------- -+ Right logical rules -+---------------------------------------------------------------------------*/ -+ -+term_list::iterator -+load_disjunction_conclusion (term_list& g, term_list::iterator i) - { -- tree l = TREE_OPERAND (c, 0); -- tree r = TREE_OPERAND (c, 1); -- return subsumes_constraint (as, l) || subsumes_constraint (as, r); -+ tree t1 = TREE_OPERAND (*i, 0); -+ tree t2 = TREE_OPERAND (*i, 1); -+ return g.replace(i, t1, t2); - } - --/* Returns true when the operand of C is subsumed by the -- assumptions in AS. The parameters are not considered in -- the subsumption rules. */ --bool --subsumes_parameterized_constraint (tree as, tree c) -+/* Apply logical rules to the right hand side. This will load the -+ conclusion set with all tpp-level disjunctions. */ -+ -+void -+load_conclusions (proof_goal& g) - { -- tree t = PARM_CONSTR_OPERAND (c); -- return subsumes_constraint (as, t); -+ term_list::iterator iter = g.conclusions.begin(); -+ term_list::iterator end = g.conclusions.end(); -+ while (iter != end) -+ { -+ if (TREE_CODE (*iter) == DISJ_CONSTR) -+ iter = load_disjunction_conclusion (g.conclusions, iter); -+ else -+ ++iter; -+ } -+} -+ -+void -+load_conclusions (proof_state& p) -+{ -+ proof_state::iterator iter = p.begin(); -+ while (iter != p.end()) -+ { -+ load_conclusions (*iter); -+ ++iter; -+ } - } - - --/* Returns true when the list of assumptions AS subsumes the -- concluded proposition C. This is a simple recursive descent -- on C, matching against propositions in the assumption list AS. */ -+/*--------------------------------------------------------------------------- -+ High-level proof tactics -+---------------------------------------------------------------------------*/ -+ -+/* Given two constraints A and C, try to derive a proof that -+ A implies C. */ -+ - bool --subsumes_constraint (tree as, tree c) -+prove_implication (tree a, tree c) - { -- switch (TREE_CODE (c)) -+ /* Quick accept. */ -+ if (cp_tree_equal (a, c)) -+ return true; -+ -+ /* Build the initial proof state. */ -+ proof_state proof; -+ proof_goal& goal = proof.front(); -+ goal.assumptions.push_back(a); -+ goal.conclusions.push_back(c); -+ -+ /* Perform an initial right-expansion in the off-chance that the right -+ hand side contains disjunctions. */ -+ load_conclusions (proof); -+ -+ int step_max = 1 << 10; -+ int step_count = 0; /* FIXME: We shouldn't have this. */ -+ std::size_t branch_limit = 1024; /* FIXME: This needs to be configurable. */ -+ while (step_count < step_max && proof.size() < branch_limit) - { -- case CONJ_CONSTR: -- return subsumes_conjunction (as, c); -- case DISJ_CONSTR: -- return subsumes_disjunction (as, c); -- case PARM_CONSTR: -- return subsumes_parameterized_constraint (as, c); -- default: -- return subsumes_atomic_constraint (as, c); -+ /* Determine if we can prove that the assumptions entail the -+ conclusions. If so, we're done. */ -+ load_assumptions (proof); -+ -+ /* Can we solve the proof based on this? */ -+ proof_result r = check_proof (proof); -+ if (r != undecided) -+ return r == valid; -+ -+ /* If not, then we need to dig into disjunctions. */ -+ explode_assumptions (proof); -+ -+ ++step_count; - } -+ -+ if (step_count == step_max) -+ error ("subsumption failed to resolve"); -+ -+ if (proof.size() == branch_limit) -+ error ("exceeded maximum number of branches"); -+ -+ return false; - } - --/* Returns true if the LEFT constraints subsume the RIGHT constraints. -- This is done by checking that the RIGHT requirements follow from -- each of the LEFT subgoals. */ -+/* Returns true if the LEFT constraint subsume the RIGHT constraints. -+ This is done by deriving a proof of the conclusions on the RIGHT -+ from the assumptions on the LEFT assumptions. */ -+ - bool - subsumes_constraints_nonnull (tree left, tree right) - { - gcc_assert (check_constraint_info (left)); - gcc_assert (check_constraint_info (right)); - -- /* Check that the required expression in RIGHT is subsumed by each -- subgoal in the assumptions of LEFT. */ -- tree as = CI_ASSUMPTIONS (left); -- tree c = CI_NORMALIZED_CONSTRAINTS (right); -- for (int i = 0; i < TREE_VEC_LENGTH (as); ++i) -- if (!subsumes_constraint (TREE_VEC_ELT (as, i), c)) -- return false; -- return true; -+ auto_timevar time (TV_CONSTRAINT_SUB); -+ tree a = CI_ASSOCIATED_CONSTRAINTS (left); -+ tree c = CI_ASSOCIATED_CONSTRAINTS (right); -+ return prove_implication (a, c); - } - - } /* namespace */ - - /* Returns true if the LEFT constraints subsume the RIGHT -- constraints. */ -+ constraints. */ -+ - bool - subsumes (tree left, tree right) - { -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/mangle.c gcc-6-20160721/gcc/cp/mangle.c ---- gcc-6.1.0/gcc/cp/mangle.c 2016-04-11 13:38:34.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/mangle.c 2016-07-21 06:15:23.000000000 +0000 -@@ -2774,6 +2774,39 @@ - write_type (TREE_TYPE (TREE_OPERAND (expr, 0))); - } - else if (TREE_CODE (expr) == SIZEOF_EXPR -+ && ARGUMENT_PACK_P (TREE_OPERAND (expr, 0))) -+ { -+ tree args = ARGUMENT_PACK_ARGS (TREE_OPERAND (expr, 0)); -+ int length = TREE_VEC_LENGTH (args); -+ if (abi_warn_or_compat_version_crosses (10)) -+ G.need_abi_warning = true; -+ if (abi_version_at_least (10)) -+ { -+ /* sP <template-arg>* E # sizeof...(T), size of a captured -+ template parameter pack from an alias template */ -+ write_string ("sP"); -+ for (int i = 0; i < length; ++i) -+ write_template_arg (TREE_VEC_ELT (args, i)); -+ write_char ('E'); -+ } -+ else -+ { -+ /* In GCC 5 we represented this sizeof wrong, with the effect -+ that we mangled it as the last element of the pack. */ -+ tree arg = TREE_VEC_ELT (args, length-1); -+ if (TYPE_P (arg)) -+ { -+ write_string ("st"); -+ write_type (arg); -+ } -+ else -+ { -+ write_string ("sz"); -+ write_expression (arg); -+ } -+ } -+ } -+ else if (TREE_CODE (expr) == SIZEOF_EXPR - && TYPE_P (TREE_OPERAND (expr, 0))) - { - write_string ("st"); -@@ -3094,6 +3127,29 @@ - "cannot be mangled"); - continue; - } -+ else if (FOLD_EXPR_P (expr)) -+ { -+ /* The first 'operand' of a fold-expression is the operator -+ that it folds over. */ -+ if (i == 0) -+ { -+ int fcode = TREE_INT_CST_LOW (operand); -+ write_string (operator_name_info[fcode].mangled_name); -+ continue; -+ } -+ else if (code == BINARY_LEFT_FOLD_EXPR) -+ { -+ /* The order of operands of the binary left and right -+ folds is the same, but we want to mangle them in -+ lexical order, i.e. non-pack first. */ -+ if (i == 1) -+ operand = FOLD_EXPR_INIT (expr); -+ else -+ operand = FOLD_EXPR_PACK (expr); -+ } -+ if (PACK_EXPANSION_P (operand)) -+ operand = PACK_EXPANSION_PATTERN (operand); -+ } - write_expression (operand); - } - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/method.c gcc-6-20160721/gcc/cp/method.c ---- gcc-6.1.0/gcc/cp/method.c 2016-03-04 01:48:33.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/method.c 2016-06-02 11:30:44.000000000 +0000 -@@ -484,6 +484,8 @@ - tree type = TREE_TYPE (parm); - if (DECL_PACK_P (parm)) - type = PACK_EXPANSION_PATTERN (type); -+ if (TREE_CODE (type) != REFERENCE_TYPE) -+ type = cp_build_reference_type (type, /*rval=*/true); - exp = build_static_cast (type, exp, tf_warning_or_error); - if (DECL_PACK_P (parm)) - exp = make_pack_expansion (exp); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/name-lookup.c gcc-6-20160721/gcc/cp/name-lookup.c ---- gcc-6.1.0/gcc/cp/name-lookup.c 2016-04-22 15:38:57.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/name-lookup.c 2016-05-31 21:36:28.000000000 +0000 -@@ -4518,8 +4518,10 @@ - } - - /* Look up NAME (an IDENTIFIER_NODE) in SCOPE (either a NAMESPACE_DECL -- or a class TYPE). If IS_TYPE_P is TRUE, then ignore non-type -- bindings. -+ or a class TYPE). -+ -+ If PREFER_TYPE is > 0, we only return TYPE_DECLs or namespaces. -+ If PREFER_TYPE is > 1, we only return TYPE_DECLs. - - Returns a DECL (or OVERLOAD, or BASELINK) representing the - declaration found. If no suitable declaration can be found, -@@ -4527,28 +4529,25 @@ - neither a class-type nor a namespace a diagnostic is issued. */ - - tree --lookup_qualified_name (tree scope, tree name, bool is_type_p, bool complain, -+lookup_qualified_name (tree scope, tree name, int prefer_type, bool complain, - bool find_hidden) - { -- int flags = 0; - tree t = NULL_TREE; - -- if (find_hidden) -- flags |= LOOKUP_HIDDEN; -- - if (TREE_CODE (scope) == NAMESPACE_DECL) - { - struct scope_binding binding = EMPTY_SCOPE_BINDING; - -- if (is_type_p) -- flags |= LOOKUP_PREFER_TYPES; -+ int flags = lookup_flags (prefer_type, /*namespaces_only*/false); -+ if (find_hidden) -+ flags |= LOOKUP_HIDDEN; - if (qualified_lookup_using_namespace (name, scope, &binding, flags)) - t = binding.value; - } - else if (cxx_dialect != cxx98 && TREE_CODE (scope) == ENUMERAL_TYPE) - t = lookup_enumerator (scope, name); - else if (is_class_type (scope, complain)) -- t = lookup_member (scope, name, 2, is_type_p, tf_warning_or_error); -+ t = lookup_member (scope, name, 2, prefer_type, tf_warning_or_error); - - if (!t) - return error_mark_node; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/name-lookup.h gcc-6-20160721/gcc/cp/name-lookup.h ---- gcc-6.1.0/gcc/cp/name-lookup.h 2016-02-16 19:01:49.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/name-lookup.h 2016-05-31 21:36:28.000000000 +0000 -@@ -327,7 +327,7 @@ - extern void set_namespace_binding (tree, tree, tree); - extern bool hidden_name_p (tree); - extern tree remove_hidden_names (tree); --extern tree lookup_qualified_name (tree, tree, bool, bool, /*hidden*/bool = false); -+extern tree lookup_qualified_name (tree, tree, int, bool, /*hidden*/bool = false); - extern tree lookup_name_nonclass (tree); - extern tree lookup_name_innermost_nonclass_level (tree); - extern bool is_local_extern (tree); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/operators.def gcc-6-20160721/gcc/cp/operators.def ---- gcc-6.1.0/gcc/cp/operators.def 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/operators.def 2016-07-21 06:15:23.000000000 +0000 -@@ -155,3 +155,7 @@ - - /* Variadic templates extension. */ - DEF_SIMPLE_OPERATOR ("...", EXPR_PACK_EXPANSION, "sp", 1) -+DEF_SIMPLE_OPERATOR ("... +", UNARY_LEFT_FOLD_EXPR, "fl", 2) -+DEF_SIMPLE_OPERATOR ("+ ...", UNARY_RIGHT_FOLD_EXPR, "fr", 2) -+DEF_SIMPLE_OPERATOR ("+ ... +", BINARY_LEFT_FOLD_EXPR, "fL", 3) -+DEF_SIMPLE_OPERATOR ("+ ... +", BINARY_RIGHT_FOLD_EXPR, "fR", 3) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/parser.c gcc-6-20160721/gcc/cp/parser.c ---- gcc-6.1.0/gcc/cp/parser.c 2016-04-15 12:24:18.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/parser.c 2016-07-21 06:18:06.000000000 +0000 -@@ -9747,10 +9747,12 @@ - - ok &= cp_parser_lambda_declarator_opt (parser, lambda_expr); - -+ if (ok && cp_parser_error_occurred (parser)) -+ ok = false; -+ - if (ok) - { -- if (!cp_parser_error_occurred (parser) -- && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE) -+ if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE) - && cp_parser_start_tentative_firewall (parser)) - start = token; - cp_parser_lambda_body (parser, lambda_expr); -@@ -11184,11 +11186,17 @@ - bool ivdep) - { - tree stmt, range_expr; -+ cxx_binding *binding = NULL; -+ tree name = NULL_TREE; - - /* Get the range declaration momentarily out of the way so that - the range expression doesn't clash with it. */ - if (range_decl != error_mark_node) -- pop_binding (DECL_NAME (range_decl), range_decl); -+ { -+ name = DECL_NAME (range_decl); -+ binding = IDENTIFIER_BINDING (name); -+ IDENTIFIER_BINDING (name) = binding->previous; -+ } - - if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)) - { -@@ -11200,7 +11208,10 @@ - - /* Put the range declaration back into scope. */ - if (range_decl != error_mark_node) -- push_binding (DECL_NAME (range_decl), range_decl, current_binding_level); -+ { -+ binding->previous = IDENTIFIER_BINDING (name); -+ IDENTIFIER_BINDING (name) = binding; -+ } - - /* If in template, STMT is converted to a normal for-statement - at instantiation. If not, it is done just ahead. */ -@@ -12434,8 +12445,15 @@ - if (token->type == CPP_COMMA) - /* will be consumed next time around */; - /* If it's a `;', we are done. */ -- else if (token->type == CPP_SEMICOLON || maybe_range_for_decl) -+ else if (token->type == CPP_SEMICOLON) - break; -+ else if (maybe_range_for_decl) -+ { -+ if (declares_class_or_enum && token->type == CPP_COLON) -+ pedwarn (decl_specifiers.locations[ds_type_spec], 0, -+ "types may not be defined in a for-range-declaration"); -+ break; -+ } - /* Anything else is an error. */ - else - { -@@ -13793,8 +13811,9 @@ - /* Consume the `[' token. */ - cp_lexer_consume_token (parser->lexer); - /* Look for the `]' token. */ -- end_loc = cp_parser_require (parser, CPP_CLOSE_SQUARE, -- RT_CLOSE_SQUARE)->location; -+ if (cp_token *close_token -+ = cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE)) -+ end_loc = close_token->location; - id = ansi_opname (op == NEW_EXPR - ? VEC_NEW_EXPR : VEC_DELETE_EXPR); - } -@@ -14686,10 +14705,13 @@ - cp_parser_require (parser, CPP_GREATER, RT_GREATER); - - // If template requirements are present, parse them. -- tree reqs = get_shorthand_constraints (current_template_parms); -- if (tree r = cp_parser_requires_clause_opt (parser)) -- reqs = conjoin_constraints (reqs, make_predicate_constraint (r)); -- TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = reqs; -+ if (flag_concepts) -+ { -+ tree reqs = get_shorthand_constraints (current_template_parms); -+ if (tree r = cp_parser_requires_clause_opt (parser)) -+ reqs = conjoin_constraints (reqs, normalize_expression (r)); -+ TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = reqs; -+ } - - /* Look for the `class' or 'typename' keywords. */ - cp_parser_type_parameter_key (parser); -@@ -21178,7 +21200,7 @@ - resolution operator, object, function, and enumerator - names are ignored. */ - if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)) -- tag_type = typename_type; -+ tag_type = scope_type; - /* Look up the name. */ - decl = cp_parser_lookup_name (parser, identifier, - tag_type, -@@ -24569,6 +24591,20 @@ - - /* Support Functions */ - -+/* Return the appropriate prefer_type argument for lookup_name_real based on -+ tag_type. */ -+ -+static inline int -+prefer_type_arg (tag_types tag_type) -+{ -+ switch (tag_type) -+ { -+ case none_type: return 0; // No preference. -+ case scope_type: return 1; // Type or namespace. -+ default: return 2; // Type only. -+ } -+} -+ - /* Looks up NAME in the current scope, as given by PARSER->SCOPE. - NAME should have one of the representations used for an - id-expression. If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE -@@ -24705,7 +24741,7 @@ - errors may be issued. Even if we rollback the current - tentative parse, those errors are valid. */ - decl = lookup_qualified_name (parser->scope, name, -- tag_type != none_type, -+ prefer_type_arg (tag_type), - /*complain=*/true); - - /* 3.4.3.1: In a lookup in which the constructor is an acceptable -@@ -24726,7 +24762,7 @@ - && DECL_SELF_REFERENCE_P (decl) - && same_type_p (DECL_CONTEXT (decl), parser->scope)) - decl = lookup_qualified_name (parser->scope, ctor_identifier, -- tag_type != none_type, -+ prefer_type_arg (tag_type), - /*complain=*/true); - - /* If we have a single function from a using decl, pull it out. */ -@@ -24782,7 +24818,7 @@ - decl = lookup_member (object_type, - name, - /*protect=*/0, -- tag_type != none_type, -+ prefer_type_arg (tag_type), - tf_warning_or_error); - else - decl = NULL_TREE; -@@ -24790,7 +24826,7 @@ - if (!decl) - { - /* Look it up in the enclosing context. */ -- decl = lookup_name_real (name, tag_type != none_type, -+ decl = lookup_name_real (name, prefer_type_arg (tag_type), - /*nonclass=*/0, - /*block_p=*/true, is_namespace, 0); - /* DR 141 says when looking for a template-name after -> or ., only -@@ -24815,7 +24851,7 @@ - } - else - { -- decl = lookup_name_real (name, tag_type != none_type, -+ decl = lookup_name_real (name, prefer_type_arg (tag_type), - /*nonclass=*/0, - /*block_p=*/true, is_namespace, 0); - parser->qualifying_scope = NULL_TREE; -@@ -25667,10 +25703,13 @@ - cp_parser_skip_to_end_of_template_parameter_list (parser); - - /* Manage template requirements */ -- tree reqs = get_shorthand_constraints (current_template_parms); -- if (tree r = cp_parser_requires_clause_opt (parser)) -- reqs = conjoin_constraints (reqs, make_predicate_constraint (r)); -- TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = reqs; -+ if (flag_concepts) -+ { -+ tree reqs = get_shorthand_constraints (current_template_parms); -+ if (tree r = cp_parser_requires_clause_opt (parser)) -+ reqs = conjoin_constraints (reqs, normalize_expression (r)); -+ TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = reqs; -+ } - - cp_parser_template_declaration_after_parameters (parser, parameter_list, - member_p); -@@ -25978,6 +26017,7 @@ - cp_token *first; - cp_token *last; - tree fn; -+ bool function_try_block = false; - - /* Create the FUNCTION_DECL. */ - fn = grokmethod (decl_specifiers, declarator, attributes); -@@ -25999,9 +26039,43 @@ - /* Save away the tokens that make up the body of the - function. */ - first = parser->lexer->next_token; -+ -+ if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRANSACTION_RELAXED)) -+ cp_lexer_consume_token (parser->lexer); -+ else if (cp_lexer_next_token_is_keyword (parser->lexer, -+ RID_TRANSACTION_ATOMIC)) -+ { -+ cp_lexer_consume_token (parser->lexer); -+ /* Match cp_parser_txn_attribute_opt [[ identifier ]]. */ -+ if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE) -+ && cp_lexer_nth_token_is (parser->lexer, 2, CPP_OPEN_SQUARE) -+ && (cp_lexer_nth_token_is (parser->lexer, 3, CPP_NAME) -+ || cp_lexer_nth_token_is (parser->lexer, 3, CPP_KEYWORD)) -+ && cp_lexer_nth_token_is (parser->lexer, 4, CPP_CLOSE_SQUARE) -+ && cp_lexer_nth_token_is (parser->lexer, 5, CPP_CLOSE_SQUARE)) -+ { -+ cp_lexer_consume_token (parser->lexer); -+ cp_lexer_consume_token (parser->lexer); -+ cp_lexer_consume_token (parser->lexer); -+ cp_lexer_consume_token (parser->lexer); -+ cp_lexer_consume_token (parser->lexer); -+ } -+ else -+ while (cp_next_tokens_can_be_gnu_attribute_p (parser) -+ && cp_lexer_nth_token_is (parser->lexer, 2, CPP_OPEN_PAREN)) -+ { -+ cp_lexer_consume_token (parser->lexer); -+ if (cp_parser_cache_group (parser, CPP_CLOSE_PAREN, /*depth=*/0)) -+ break; -+ } -+ } -+ - /* Handle function try blocks. */ - if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY)) -- cp_lexer_consume_token (parser->lexer); -+ { -+ cp_lexer_consume_token (parser->lexer); -+ function_try_block = true; -+ } - /* We can have braced-init-list mem-initializers before the fn body. */ - if (cp_lexer_next_token_is (parser->lexer, CPP_COLON)) - { -@@ -26019,8 +26093,9 @@ - } - cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0); - /* Handle function try blocks. */ -- while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH)) -- cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0); -+ if (function_try_block) -+ while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH)) -+ cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0); - last = parser->lexer->next_token; - - /* Save away the inline definition; we will process it when the -@@ -29949,6 +30024,8 @@ - switch (kind) - { - case OMP_CLAUSE__CACHE_: -+ /* The OpenACC cache directive explicitly only allows "array -+ elements or subarrays". */ - if (cp_lexer_peek_token (parser->lexer)->type != CPP_OPEN_SQUARE) - { - error_at (token->location, "expected %<[%>"); -@@ -29965,6 +30042,7 @@ - = cp_lexer_peek_token (parser->lexer)->location; - cp_id_kind idk = CP_ID_KIND_NONE; - cp_lexer_consume_token (parser->lexer); -+ decl = convert_from_reference (decl); - decl - = cp_parser_postfix_dot_deref_expression (parser, CPP_DOT, - decl, false, -@@ -30000,25 +30078,6 @@ - RT_CLOSE_SQUARE)) - goto skip_comma; - -- if (kind == OMP_CLAUSE__CACHE_) -- { -- if (TREE_CODE (low_bound) != INTEGER_CST -- && !TREE_READONLY (low_bound)) -- { -- error_at (token->location, -- "%qD is not a constant", low_bound); -- decl = error_mark_node; -- } -- -- if (TREE_CODE (length) != INTEGER_CST -- && !TREE_READONLY (length)) -- { -- error_at (token->location, -- "%qD is not a constant", length); -- decl = error_mark_node; -- } -- } -- - decl = tree_cons (low_bound, length, decl); - } - break; -@@ -33884,7 +33943,9 @@ - - strcat (p_name, " for"); - mask |= OMP_FOR_CLAUSE_MASK; -- if (cclauses) -+ /* parallel for{, simd} disallows nowait clause, but for -+ target {teams distribute ,}parallel for{, simd} it should be accepted. */ -+ if (cclauses && (mask & (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_MAP)) == 0) - mask &= ~(OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_NOWAIT); - /* Composite distribute parallel for{, simd} disallows ordered clause. */ - if ((mask & (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_DIST_SCHEDULE)) != 0) -@@ -34223,7 +34284,8 @@ - } - } - -- clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok); -+ clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok, -+ cclauses == NULL); - if (cclauses) - { - cp_omp_split_clauses (loc, OMP_PARALLEL, mask, clauses, cclauses); -@@ -35396,6 +35458,8 @@ - cp_parser_oacc_loop (cp_parser *parser, cp_token *pragma_tok, char *p_name, - omp_clause_mask mask, tree *cclauses, bool *if_p) - { -+ bool is_parallel = ((mask >> PRAGMA_OACC_CLAUSE_REDUCTION) & 1) == 1; -+ - strcat (p_name, " loop"); - mask |= OACC_LOOP_CLAUSE_MASK; - -@@ -35403,7 +35467,7 @@ - cclauses == NULL); - if (cclauses) - { -- clauses = c_oacc_split_loop_clauses (clauses, cclauses); -+ clauses = c_oacc_split_loop_clauses (clauses, cclauses, is_parallel); - if (*cclauses) - *cclauses = finish_omp_clauses (*cclauses, false); - if (clauses) -@@ -35496,8 +35560,6 @@ - if (strcmp (p, "loop") == 0) - { - cp_lexer_consume_token (parser->lexer); -- mask |= OACC_LOOP_CLAUSE_MASK; -- - tree block = begin_omp_parallel (); - tree clauses; - cp_parser_oacc_loop (parser, pragma_tok, p_name, mask, &clauses, -@@ -37807,7 +37869,13 @@ - implicit template scope, and we're trying to synthesize a - constrained parameter, try to find a previous parameter with - the same name. This is the same-type rule for abbreviated -- function templates. */ -+ function templates. -+ -+ NOTE: We can generate implicit parameters when tentatively -+ parsing a nested name specifier, only to reject that parse -+ later. However, matching the same template-id as part of a -+ direct-declarator should generate an identical template -+ parameter, so this rule will merge them. */ - if (parser->implicit_template_scope && constr) - { - tree t = parser->implicit_template_parms; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/pt.c gcc-6-20160721/gcc/cp/pt.c ---- gcc-6.1.0/gcc/cp/pt.c 2016-04-26 06:08:20.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/pt.c 2016-07-21 06:29:32.000000000 +0000 -@@ -182,7 +182,6 @@ - static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree); - static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree); - static tree tsubst_template_parms (tree, tree, tsubst_flags_t); --static void regenerate_decl_from_template (tree, tree); - static tree most_specialized_partial_spec (tree, tsubst_flags_t); - static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int); - static tree tsubst_arg_types (tree, tree, tree, tsubst_flags_t, tree); -@@ -196,7 +195,6 @@ - static int coerce_template_template_parms (tree, tree, tsubst_flags_t, - tree, tree); - static bool template_template_parm_bindings_ok_p (tree, tree); --static int template_args_equal (tree, tree); - static void tsubst_default_arguments (tree, tsubst_flags_t); - static tree for_each_template_parm_r (tree *, int *, void *); - static tree copy_default_args_to_explicit_spec_1 (tree, tree); -@@ -2808,6 +2806,13 @@ - context. */ - fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname, - false, true); -+ if (fns == error_mark_node) -+ /* If lookup fails, look for a friend declaration so we can -+ give a better diagnostic. */ -+ fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname, -+ /*type*/false, /*complain*/true, -+ /*hidden*/true); -+ - if (fns == error_mark_node || !is_overloaded_fn (fns)) - { - error ("%qD is not a template function", dname); -@@ -2953,6 +2958,15 @@ - CP_DECL_CONTEXT (tmpl))) - error ("%qD is not declared in %qD", - tmpl, current_namespace); -+ else if (TREE_CODE (decl) == FUNCTION_DECL -+ && DECL_HIDDEN_FRIEND_P (tmpl)) -+ { -+ if (pedwarn (DECL_SOURCE_LOCATION (decl), 0, -+ "friend declaration %qD is not visible to " -+ "explicit specialization", tmpl)) -+ inform (DECL_SOURCE_LOCATION (tmpl), -+ "friend declaration here"); -+ } - - tree gen_tmpl = most_general_template (tmpl); - -@@ -7823,7 +7837,7 @@ - - /* Returns 1 if template args OT and NT are equivalent. */ - --static int -+int - template_args_equal (tree ot, tree nt) - { - if (nt == ot) -@@ -8680,7 +8694,7 @@ - { - if (complain & tf_error) - { -- error ("constraints for %qD not satisfied", templ); -+ error ("use of invalid variable template %qE", var); - diagnose_constraints (location_of (var), templ, arglist); - } - return error_mark_node; -@@ -9071,6 +9085,8 @@ - - if (tinst_depth >= max_tinst_depth) - { -+ /* Tell error.c not to try to instantiate any templates. */ -+ at_eof = 2; - fatal_error (input_location, - "template instantiation depth exceeds maximum of %d" - " (use -ftemplate-depth= to increase the maximum)", -@@ -9554,7 +9570,7 @@ - return 0; - else if (COMPLETE_TYPE_P (type)) - return 1; -- else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type)) -+ else if (TREE_CODE (type) == ARRAY_TYPE) - return can_complete_type_without_circularity (TREE_TYPE (type)); - else if (CLASS_TYPE_P (type) - && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type))) -@@ -9649,20 +9665,23 @@ - } - - if (last_dep) -- for (tree *p = &attributes; *p; p = &TREE_CHAIN (*p)) -+ for (tree *p = &attributes; *p; ) - { - tree t = *p; - if (ATTR_IS_DEPENDENT (t)) - { - tree subst = tsubst_attribute (t, NULL, args, complain, in_decl); -- if (subst == t) -- continue; -- *p = subst; -- do -- p = &TREE_CHAIN (*p); -- while (*p); -- *p = TREE_CHAIN (t); -+ if (subst != t) -+ { -+ *p = subst; -+ do -+ p = &TREE_CHAIN (*p); -+ while (*p); -+ *p = TREE_CHAIN (t); -+ continue; -+ } - } -+ p = &TREE_CHAIN (*p); - } - - return attributes; -@@ -10118,17 +10137,12 @@ - if (can_complete_type_without_circularity (rtype)) - complete_type (rtype); - -- if (TREE_CODE (r) == FIELD_DECL -- && TREE_CODE (rtype) == ARRAY_TYPE -- && COMPLETE_TYPE_P (TREE_TYPE (rtype)) -- && !COMPLETE_TYPE_P (rtype)) -- { -- /* Flexible array mmembers of elements -- of complete type have an incomplete type -- and that's okay. */ -- } -- else if (!COMPLETE_TYPE_P (rtype)) -+ if (!complete_or_array_type_p (rtype)) - { -+ /* If R's type couldn't be completed and -+ it isn't a flexible array member (whose -+ type is incomplete by definition) give -+ an error. */ - cxx_incomplete_type_error (r, rtype); - TREE_TYPE (r) = error_mark_node; - } -@@ -10732,6 +10746,12 @@ - tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl); - if (pack == error_mark_node) - return error_mark_node; -+ if (PACK_EXPANSION_P (pack)) -+ { -+ tree r = copy_node (t); -+ FOLD_EXPR_PACK (r) = pack; -+ return r; -+ } - if (TREE_VEC_LENGTH (pack) == 0) - return expand_empty_fold (t, complain); - else -@@ -10754,6 +10774,14 @@ - if (init == error_mark_node) - return error_mark_node; - -+ if (PACK_EXPANSION_P (pack)) -+ { -+ tree r = copy_node (t); -+ FOLD_EXPR_PACK (r) = pack; -+ FOLD_EXPR_INIT (r) = init; -+ return r; -+ } -+ - tree vec = make_tree_vec (TREE_VEC_LENGTH (pack) + 1); - TREE_VEC_ELT (vec, 0) = init; - for (int i = 0; i < TREE_VEC_LENGTH (pack); ++i) -@@ -10795,6 +10823,12 @@ - tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl); - if (pack == error_mark_node) - return error_mark_node; -+ if (PACK_EXPANSION_P (pack)) -+ { -+ tree r = copy_node (t); -+ FOLD_EXPR_PACK (r) = pack; -+ return r; -+ } - if (TREE_VEC_LENGTH (pack) == 0) - return expand_empty_fold (t, complain); - else -@@ -10817,6 +10851,14 @@ - if (init == error_mark_node) - return error_mark_node; - -+ if (PACK_EXPANSION_P (pack)) -+ { -+ tree r = copy_node (t); -+ FOLD_EXPR_PACK (r) = pack; -+ FOLD_EXPR_INIT (r) = init; -+ return r; -+ } -+ - int n = TREE_VEC_LENGTH (pack); - tree vec = make_tree_vec (n + 1); - for (int i = 0; i < n; ++i) -@@ -12285,6 +12327,14 @@ - local_p = true; - /* Subsequent calls to pushdecl will fill this in. */ - ctx = NULL_TREE; -+ /* Unless this is a reference to a static variable from an -+ enclosing function, in which case we need to fill it in now. */ -+ if (TREE_STATIC (t)) -+ { -+ tree fn = tsubst (DECL_CONTEXT (t), args, complain, in_decl); -+ if (fn != current_function_decl) -+ ctx = fn; -+ } - spec = retrieve_local_specialization (t); - } - /* If we already have the specialization we need, there is -@@ -13740,8 +13790,10 @@ - { - if (is_template) - expr = build_min_nt_loc (loc, TEMPLATE_ID_EXPR, expr, template_args); -- return build_qualified_name (NULL_TREE, scope, expr, -- QUALIFIED_NAME_IS_TEMPLATE (qualified_id)); -+ tree r = build_qualified_name (NULL_TREE, scope, expr, -+ QUALIFIED_NAME_IS_TEMPLATE (qualified_id)); -+ REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (qualified_id); -+ return r; - } - - if (!BASELINK_P (name) && !DECL_P (expr)) -@@ -13821,6 +13873,9 @@ - && TREE_CODE (expr) != OFFSET_REF) - expr = convert_from_reference (expr); - -+ if (REF_PARENTHESIZED_P (qualified_id)) -+ expr = force_paren_expr (expr); -+ - return expr; - } - -@@ -13996,7 +14051,8 @@ - case FUNCTION_DECL: - if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)) - r = tsubst (t, args, complain, in_decl); -- else if (local_variable_p (t)) -+ else if (local_variable_p (t) -+ && uses_template_parms (DECL_CONTEXT (t))) - { - r = retrieve_local_specialization (t); - if (r == NULL_TREE) -@@ -14040,14 +14096,9 @@ - gcc_assert (cp_unevaluated_operand || TREE_STATIC (r) - || decl_constant_var_p (r) - || errorcount || sorrycount); -- if (!processing_template_decl) -- { -- if (TREE_STATIC (r)) -- rest_of_decl_compilation (r, toplevel_bindings_p (), -- at_eof); -- else -- r = process_outer_var_ref (r, complain); -- } -+ if (!processing_template_decl -+ && !TREE_STATIC (r)) -+ r = process_outer_var_ref (r, complain); - } - /* Remember this for subsequent uses. */ - if (local_specializations) -@@ -14145,7 +14196,8 @@ - len = TREE_VEC_LENGTH (expanded); - /* Set TREE_USED for the benefit of -Wunused. */ - for (int i = 0; i < len; i++) -- TREE_USED (TREE_VEC_ELT (expanded, i)) = true; -+ if (DECL_P (TREE_VEC_ELT (expanded, i))) -+ TREE_USED (TREE_VEC_ELT (expanded, i)) = true; - } - - if (expanded == error_mark_node) -@@ -17376,6 +17428,7 @@ - - tree pattern = DECL_TEMPLATE_RESULT (gen_tmpl); - -+ fndecl = NULL_TREE; - if (VAR_P (pattern)) - { - /* We need to determine if we're using a partial or explicit -@@ -17387,14 +17440,16 @@ - pattern = error_mark_node; - else if (elt) - { -- tmpl = TREE_VALUE (elt); -- pattern = DECL_TEMPLATE_RESULT (tmpl); -- targ_ptr = TREE_PURPOSE (elt); -+ tree partial_tmpl = TREE_VALUE (elt); -+ tree partial_args = TREE_PURPOSE (elt); -+ tree partial_pat = DECL_TEMPLATE_RESULT (partial_tmpl); -+ fndecl = tsubst (partial_pat, partial_args, complain, gen_tmpl); - } - } - - /* Substitute template parameters to obtain the specialization. */ -- fndecl = tsubst (pattern, targ_ptr, complain, gen_tmpl); -+ if (fndecl == NULL_TREE) -+ fndecl = tsubst (pattern, targ_ptr, complain, gen_tmpl); - if (DECL_CLASS_SCOPE_P (gen_tmpl)) - pop_nested_class (); - pop_from_top_level (); -@@ -20848,36 +20903,6 @@ - return decl; - } - --/* True iff the TEMPLATE_DECL tmpl is a partial specialization. */ -- --static bool --partial_specialization_p (tree tmpl) --{ -- /* Any specialization has DECL_TEMPLATE_SPECIALIZATION. */ -- if (!DECL_TEMPLATE_SPECIALIZATION (tmpl)) -- return false; -- tree t = DECL_TI_TEMPLATE (tmpl); -- /* A specialization that fully specializes one of the containing classes is -- not a partial specialization. */ -- return (list_length (DECL_TEMPLATE_PARMS (tmpl)) -- == list_length (DECL_TEMPLATE_PARMS (t))); --} -- --/* If TMPL is a partial specialization, return the arguments for its primary -- template. */ -- --static tree --impartial_args (tree tmpl, tree args) --{ -- if (!partial_specialization_p (tmpl)) -- return args; -- -- /* If TMPL is a partial specialization, we need to substitute to get -- the args for the primary template. */ -- return tsubst_template_args (DECL_TI_ARGS (tmpl), args, -- tf_warning_or_error, tmpl); --} -- - /* Return the most specialized of the template partial specializations - which can produce TARGET, a specialization of some class or variable - template. The value returned is actually a TREE_LIST; the TREE_VALUE is -@@ -21379,14 +21404,12 @@ - to instantiate the DECL, we regenerate it. */ - - static void --regenerate_decl_from_template (tree decl, tree tmpl) -+regenerate_decl_from_template (tree decl, tree tmpl, tree args) - { - /* The arguments used to instantiate DECL, from the most general - template. */ -- tree args; - tree code_pattern; - -- args = DECL_TI_ARGS (decl); - code_pattern = DECL_TEMPLATE_RESULT (tmpl); - - /* Make sure that we can see identifiers, and compute access -@@ -21702,7 +21725,7 @@ - return d; - - gen_tmpl = most_general_template (tmpl); -- gen_args = impartial_args (tmpl, DECL_TI_ARGS (d)); -+ gen_args = DECL_TI_ARGS (d); - - if (tmpl != gen_tmpl) - /* We should already have the extra args. */ -@@ -21721,6 +21744,20 @@ - /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern - for the instantiation. */ - td = template_for_substitution (d); -+ args = gen_args; -+ -+ if (VAR_P (d)) -+ { -+ /* Look up an explicit specialization, if any. */ -+ tree tid = lookup_template_variable (gen_tmpl, gen_args); -+ tree elt = most_specialized_partial_spec (tid, tf_warning_or_error); -+ if (elt && elt != error_mark_node) -+ { -+ td = TREE_VALUE (elt); -+ args = TREE_PURPOSE (elt); -+ } -+ } -+ - code_pattern = DECL_TEMPLATE_RESULT (td); - - /* We should never be trying to instantiate a member of a class -@@ -21733,9 +21770,7 @@ - outside the class, we may have too many arguments. Drop the - ones we don't need. The same is true for specializations. */ - args = get_innermost_template_args -- (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td))); -- else -- args = gen_args; -+ (args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td))); - - if (TREE_CODE (d) == FUNCTION_DECL) - { -@@ -21901,7 +21936,7 @@ - - /* Regenerate the declaration in case the template has been modified - by a subsequent redeclaration. */ -- regenerate_decl_from_template (d, td); -+ regenerate_decl_from_template (d, td, args); - - /* We already set the file and line above. Reset them now in case - they changed as a result of calling regenerate_decl_from_template. */ -@@ -23628,7 +23663,10 @@ - if (0 && flag_checking && cxx_dialect >= cxx11 - /* Don't do this during nsdmi parsing as it can lead to - unexpected recursive instantiations. */ -- && !parsing_nsdmi ()) -+ && !parsing_nsdmi () -+ /* Don't do this during concept expansion either and for -+ the same reason. */ -+ && !expanding_concept ()) - fold_non_dependent_expr (expr); - - /* Preserve OVERLOADs; the functions must be available to resolve -@@ -23766,7 +23804,7 @@ - else - expr = build_concept_check (build_overload (tmpl, NULL_TREE), type, args); - -- tree constr = make_predicate_constraint (expr); -+ tree constr = normalize_expression (expr); - PLACEHOLDER_TYPE_CONSTRAINTS (type) = constr; - - /* Our canonical type depends on the constraint. */ -@@ -23918,7 +23956,10 @@ - /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced - from INIT. AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE. - The CONTEXT determines the context in which auto deduction is performed -- and is used to control error diagnostics. */ -+ and is used to control error diagnostics. -+ -+ For partial-concept-ids, extra args may be appended to the list of deduced -+ template arguments prior to determining constraint satisfaction. */ - - tree - do_auto_deduction (tree type, tree init, tree auto_node, -@@ -23965,8 +24006,10 @@ - - if (AUTO_IS_DECLTYPE (auto_node)) - { -- bool id = (DECL_P (init) || (TREE_CODE (init) == COMPONENT_REF -- && !REF_PARENTHESIZED_P (init))); -+ bool id = (DECL_P (init) -+ || ((TREE_CODE (init) == COMPONENT_REF -+ || TREE_CODE (init) == SCOPE_REF) -+ && !REF_PARENTHESIZED_P (init))); - targs = make_tree_vec (1); - TREE_VEC_ELT (targs, 0) - = finish_decltype_type (init, id, tf_warning_or_error); -@@ -24023,8 +24066,19 @@ - if (flag_concepts && !processing_template_decl) - if (tree constr = PLACEHOLDER_TYPE_CONSTRAINTS (auto_node)) - { -- /* Use the deduced type to check the associated constraints. */ -- if (!constraints_satisfied_p (constr, targs)) -+ /* Use the deduced type to check the associated constraints. If we -+ have a partial-concept-id, rebuild the argument list so that -+ we check using the extra arguments. */ -+ gcc_assert (TREE_CODE (constr) == CHECK_CONSTR); -+ tree cargs = CHECK_CONSTR_ARGS (constr); -+ if (TREE_VEC_LENGTH (cargs) > 1) -+ { -+ cargs = copy_node (cargs); -+ TREE_VEC_ELT (cargs, 0) = TREE_VEC_ELT (targs, 0); -+ } -+ else -+ cargs = targs; -+ if (!constraints_satisfied_p (constr, cargs)) - { - if (complain & tf_warning_or_error) - { -@@ -24344,24 +24398,15 @@ - - static GTY (()) hash_table<constr_hasher> *decl_constraints; - --/* Returns true iff cinfo contains a valid set of constraints. -- This is the case when the associated requirements have been -- successfully decomposed into lists of atomic constraints. -- That is, when the saved assumptions are not error_mark_node. */ -- --bool --valid_constraints_p (tree cinfo) --{ -- gcc_assert (cinfo); -- return CI_ASSUMPTIONS (cinfo) != error_mark_node; --} -- - /* Returns the template constraints of declaration T. If T is not - constrained, return NULL_TREE. Note that T must be non-null. */ - - tree - get_constraints (tree t) - { -+ if (!flag_concepts) -+ return NULL_TREE; -+ - gcc_assert (DECL_P (t)); - if (TREE_CODE (t) == TEMPLATE_DECL) - t = DECL_TEMPLATE_RESULT (t); -@@ -24383,7 +24428,7 @@ - { - if (!ci) - return; -- gcc_assert (t); -+ gcc_assert (t && flag_concepts); - if (TREE_CODE (t) == TEMPLATE_DECL) - t = DECL_TEMPLATE_RESULT (t); - gcc_assert (!get_constraints (t)); -@@ -24409,12 +24454,244 @@ - decl_constraints->clear_slot (slot); - } - -+/* Memoized satisfaction results for declarations. This -+ maps the pair (constraint_info, arguments) to the result computed -+ by constraints_satisfied_p. */ -+ -+struct GTY((for_user)) constraint_sat_entry -+{ -+ tree ci; -+ tree args; -+ tree result; -+}; -+ -+/* Hashing function and equality for constraint entries. */ -+ -+struct constraint_sat_hasher : ggc_ptr_hash<constraint_sat_entry> -+{ -+ static hashval_t hash (constraint_sat_entry *e) -+ { -+ hashval_t val = iterative_hash_object(e->ci, 0); -+ return iterative_hash_template_arg (e->args, val); -+ } -+ -+ static bool equal (constraint_sat_entry *e1, constraint_sat_entry *e2) -+ { -+ return e1->ci == e2->ci && comp_template_args (e1->args, e2->args); -+ } -+}; -+ -+/* Memoized satisfaction results for concept checks. */ -+ -+struct GTY((for_user)) concept_spec_entry -+{ -+ tree tmpl; -+ tree args; -+ tree result; -+}; -+ -+/* Hashing function and equality for constraint entries. */ -+ -+struct concept_spec_hasher : ggc_ptr_hash<concept_spec_entry> -+{ -+ static hashval_t hash (concept_spec_entry *e) -+ { -+ return hash_tmpl_and_args (e->tmpl, e->args); -+ } -+ -+ static bool equal (concept_spec_entry *e1, concept_spec_entry *e2) -+ { -+ ++comparing_specializations; -+ bool eq = e1->tmpl == e2->tmpl && comp_template_args (e1->args, e2->args); -+ --comparing_specializations; -+ return eq; -+ } -+}; -+ -+static GTY (()) hash_table<constraint_sat_hasher> *constraint_memos; -+static GTY (()) hash_table<concept_spec_hasher> *concept_memos; -+ -+/* Search for a memoized satisfaction result. Returns one of the -+ truth value nodes if previously memoized, or NULL_TREE otherwise. */ -+ -+tree -+lookup_constraint_satisfaction (tree ci, tree args) -+{ -+ constraint_sat_entry elt = { ci, args, NULL_TREE }; -+ constraint_sat_entry* found = constraint_memos->find (&elt); -+ if (found) -+ return found->result; -+ else -+ return NULL_TREE; -+} -+ -+/* Memoize the result of a satisfication test. Returns the saved result. */ -+ -+tree -+memoize_constraint_satisfaction (tree ci, tree args, tree result) -+{ -+ constraint_sat_entry elt = {ci, args, result}; -+ constraint_sat_entry** slot = constraint_memos->find_slot (&elt, INSERT); -+ constraint_sat_entry* entry = ggc_alloc<constraint_sat_entry> (); -+ *entry = elt; -+ *slot = entry; -+ return result; -+} -+ -+/* Search for a memoized satisfaction result for a concept. */ -+ -+tree -+lookup_concept_satisfaction (tree tmpl, tree args) -+{ -+ concept_spec_entry elt = { tmpl, args, NULL_TREE }; -+ concept_spec_entry* found = concept_memos->find (&elt); -+ if (found) -+ return found->result; -+ else -+ return NULL_TREE; -+} -+ -+/* Memoize the result of a concept check. Returns the saved result. */ -+ -+tree -+memoize_concept_satisfaction (tree tmpl, tree args, tree result) -+{ -+ concept_spec_entry elt = {tmpl, args, result}; -+ concept_spec_entry** slot = concept_memos->find_slot (&elt, INSERT); -+ concept_spec_entry* entry = ggc_alloc<concept_spec_entry> (); -+ *entry = elt; -+ *slot = entry; -+ return result; -+} -+ -+static GTY (()) hash_table<concept_spec_hasher> *concept_expansions; -+ -+/* Returns a prior concept specialization. This returns the substituted -+ and normalized constraints defined by the concept. */ -+ -+tree -+get_concept_expansion (tree tmpl, tree args) -+{ -+ concept_spec_entry elt = { tmpl, args, NULL_TREE }; -+ concept_spec_entry* found = concept_expansions->find (&elt); -+ if (found) -+ return found->result; -+ else -+ return NULL_TREE; -+} -+ -+/* Save a concept expansion for later. */ -+ -+tree -+save_concept_expansion (tree tmpl, tree args, tree def) -+{ -+ concept_spec_entry elt = {tmpl, args, def}; -+ concept_spec_entry** slot = concept_expansions->find_slot (&elt, INSERT); -+ concept_spec_entry* entry = ggc_alloc<concept_spec_entry> (); -+ *entry = elt; -+ *slot = entry; -+ return def; -+} -+ -+static hashval_t -+hash_subsumption_args (tree t1, tree t2) -+{ -+ gcc_assert (TREE_CODE (t1) == CHECK_CONSTR); -+ gcc_assert (TREE_CODE (t2) == CHECK_CONSTR); -+ int val = 0; -+ val = iterative_hash_object (CHECK_CONSTR_CONCEPT (t1), val); -+ val = iterative_hash_template_arg (CHECK_CONSTR_ARGS (t1), val); -+ val = iterative_hash_object (CHECK_CONSTR_CONCEPT (t2), val); -+ val = iterative_hash_template_arg (CHECK_CONSTR_ARGS (t2), val); -+ return val; -+} -+ -+/* Compare the constraints of two subsumption entries. The LEFT1 and -+ LEFT2 arguments comprise the first subsumption pair and the RIGHT1 -+ and RIGHT2 arguments comprise the second. These are all CHECK_CONSTRs. */ -+ -+static bool -+comp_subsumption_args (tree left1, tree left2, tree right1, tree right2) -+{ -+ if (CHECK_CONSTR_CONCEPT (left1) == CHECK_CONSTR_CONCEPT (right1)) -+ if (CHECK_CONSTR_CONCEPT (left2) == CHECK_CONSTR_CONCEPT (right2)) -+ if (comp_template_args (CHECK_CONSTR_ARGS (left1), -+ CHECK_CONSTR_ARGS (right1))) -+ return comp_template_args (CHECK_CONSTR_ARGS (left2), -+ CHECK_CONSTR_ARGS (right2)); -+ return false; -+} -+ -+/* Key/value pair for learning and memoizing subsumption results. This -+ associates a pair of check constraints (including arguments) with -+ a boolean value indicating the result. */ -+ -+struct GTY((for_user)) subsumption_entry -+{ -+ tree t1; -+ tree t2; -+ bool result; -+}; -+ -+/* Hashing function and equality for constraint entries. */ -+ -+struct subsumption_hasher : ggc_ptr_hash<subsumption_entry> -+{ -+ static hashval_t hash (subsumption_entry *e) -+ { -+ return hash_subsumption_args (e->t1, e->t2); -+ } -+ -+ static bool equal (subsumption_entry *e1, subsumption_entry *e2) -+ { -+ ++comparing_specializations; -+ bool eq = comp_subsumption_args(e1->t1, e1->t2, e2->t1, e2->t2); -+ --comparing_specializations; -+ return eq; -+ } -+}; -+ -+static GTY (()) hash_table<subsumption_hasher> *subsumption_table; -+ -+/* Search for a previously cached subsumption result. */ -+ -+bool* -+lookup_subsumption_result (tree t1, tree t2) -+{ -+ subsumption_entry elt = { t1, t2, false }; -+ subsumption_entry* found = subsumption_table->find (&elt); -+ if (found) -+ return &found->result; -+ else -+ return 0; -+} -+ -+/* Save a subsumption result. */ -+ -+bool -+save_subsumption_result (tree t1, tree t2, bool result) -+{ -+ subsumption_entry elt = {t1, t2, result}; -+ subsumption_entry** slot = subsumption_table->find_slot (&elt, INSERT); -+ subsumption_entry* entry = ggc_alloc<subsumption_entry> (); -+ *entry = elt; -+ *slot = entry; -+ return result; -+} -+ - /* Set up the hash table for constraint association. */ - - void - init_constraint_processing (void) - { -+ if (!flag_concepts) -+ return; -+ - decl_constraints = hash_table<constr_hasher>::create_ggc(37); -+ constraint_memos = hash_table<constraint_sat_hasher>::create_ggc(37); -+ concept_memos = hash_table<concept_spec_hasher>::create_ggc(37); -+ concept_expansions = hash_table<concept_spec_hasher>::create_ggc(37); -+ subsumption_table = hash_table<subsumption_hasher>::create_ggc(37); - } - - /* Set up the hash tables for template instantiations. */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/ptree.c gcc-6-20160721/gcc/cp/ptree.c ---- gcc-6.1.0/gcc/cp/ptree.c 2016-02-10 15:34:45.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/ptree.c 2016-07-21 06:18:06.000000000 +0000 -@@ -260,7 +260,6 @@ - indent+4); - print_node (file, "associated_constr", - cinfo->associated_constr, indent+4); -- print_node_brief (file, "assumptions", cinfo->assumptions, indent+4); - break; - } - case ARGUMENT_PACK_SELECT: -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/search.c gcc-6-20160721/gcc/cp/search.c ---- gcc-6.1.0/gcc/cp/search.c 2016-03-18 01:26:50.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/search.c 2016-07-21 06:18:06.000000000 +0000 -@@ -947,6 +947,7 @@ - in default arguments for template parameters), and access - checking should be performed in the outermost parameter list. */ - if (processing_template_decl -+ && !expanding_concept () - && (!processing_template_parmlist || processing_template_decl > 1)) - return 1; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/semantics.c gcc-6-20160721/gcc/cp/semantics.c ---- gcc-6.1.0/gcc/cp/semantics.c 2016-04-20 13:24:17.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/semantics.c 2016-07-21 06:29:32.000000000 +0000 -@@ -1647,17 +1647,10 @@ - && TREE_CODE (expr) != SCOPE_REF) - return expr; - -- if (TREE_CODE (expr) == COMPONENT_REF) -+ if (TREE_CODE (expr) == COMPONENT_REF -+ || TREE_CODE (expr) == SCOPE_REF) - REF_PARENTHESIZED_P (expr) = true; -- else if (type_dependent_expression_p (expr) -- /* When processing_template_decl, a SCOPE_REF may actually be -- referring to a non-static data member of the current class, in -- which case its TREE_TYPE may not be properly cv-qualified (the -- cv-qualifiers of the implicit *this object haven't yet been taken -- into account) so we have to delay building a static_cast until -- instantiation. */ -- || (processing_template_decl -- && TREE_CODE (expr) == SCOPE_REF)) -+ else if (type_dependent_expression_p (expr)) - expr = build1 (PAREN_EXPR, TREE_TYPE (expr), expr); - else if (VAR_P (expr) && DECL_HARD_REGISTER (expr)) - /* We can't bind a hard register variable to a reference. */; -@@ -3276,7 +3269,7 @@ - tree initializer = convert_from_reference (decl); - - /* Mark it as used now even if the use is ill-formed. */ -- if (!mark_used (decl, complain) && !(complain & tf_error)) -+ if (!mark_used (decl, complain)) - return error_mark_node; - - bool saw_generic_lambda = false; -@@ -4507,7 +4500,8 @@ - || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FROM) - && !type_dependent_expression_p (t)) - { -- if (DECL_BIT_FIELD (TREE_OPERAND (t, 1))) -+ if (TREE_CODE (TREE_OPERAND (t, 1)) == FIELD_DECL -+ && DECL_BIT_FIELD (TREE_OPERAND (t, 1))) - { - error_at (OMP_CLAUSE_LOCATION (c), - "bit-field %qE in %qs clause", -@@ -4516,7 +4510,8 @@ - } - while (TREE_CODE (t) == COMPONENT_REF) - { -- if (TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == UNION_TYPE) -+ if (TREE_TYPE (TREE_OPERAND (t, 0)) -+ && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == UNION_TYPE) - { - error_at (OMP_CLAUSE_LOCATION (c), - "%qE is a member of a union", t); -@@ -4524,6 +4519,8 @@ - } - t = TREE_OPERAND (t, 0); - } -+ if (REFERENCE_REF_P (t)) -+ t = TREE_OPERAND (t, 0); - } - if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL) - { -@@ -5884,7 +5881,8 @@ - } - if (TREE_CODE (type) == REFERENCE_TYPE) - type = TREE_TYPE (type); -- if (!INTEGRAL_TYPE_P (type) -+ if (OMP_CLAUSE_LINEAR_KIND (c) != OMP_CLAUSE_LINEAR_REF -+ && !INTEGRAL_TYPE_P (type) - && TREE_CODE (type) != POINTER_TYPE) - { - error ("linear clause applied to non-integral non-pointer " -@@ -6583,6 +6581,8 @@ - { - while (TREE_CODE (t) == COMPONENT_REF) - t = TREE_OPERAND (t, 0); -+ if (REFERENCE_REF_P (t)) -+ t = TREE_OPERAND (t, 0); - if (bitmap_bit_p (&map_field_head, DECL_UID (t))) - break; - if (bitmap_bit_p (&map_head, DECL_UID (t))) -@@ -6621,7 +6621,8 @@ - { - if (type_dependent_expression_p (t)) - break; -- if (DECL_BIT_FIELD (TREE_OPERAND (t, 1))) -+ if (TREE_CODE (TREE_OPERAND (t, 1)) == FIELD_DECL -+ && DECL_BIT_FIELD (TREE_OPERAND (t, 1))) - { - error_at (OMP_CLAUSE_LOCATION (c), - "bit-field %qE in %qs clause", -@@ -6637,8 +6638,9 @@ - } - while (TREE_CODE (t) == COMPONENT_REF) - { -- if (TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) -- == UNION_TYPE) -+ if (TREE_TYPE (TREE_OPERAND (t, 0)) -+ && (TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) -+ == UNION_TYPE)) - { - error_at (OMP_CLAUSE_LOCATION (c), - "%qE is a member of a union", t); -@@ -6649,6 +6651,8 @@ - } - if (remove) - break; -+ if (REFERENCE_REF_P (t)) -+ t = TREE_OPERAND (t, 0); - if (VAR_P (t) || TREE_CODE (t) == PARM_DECL) - { - if (bitmap_bit_p (&map_field_head, DECL_UID (t))) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/tree.c gcc-6-20160721/gcc/cp/tree.c ---- gcc-6.1.0/gcc/cp/tree.c 2016-04-13 00:06:51.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/tree.c 2016-07-21 06:18:06.000000000 +0000 -@@ -3139,6 +3139,11 @@ - return cp_tree_equal (CI_ASSOCIATED_CONSTRAINTS (t1), - CI_ASSOCIATED_CONSTRAINTS (t2)); - -+ case CHECK_CONSTR: -+ return (CHECK_CONSTR_CONCEPT (t1) == CHECK_CONSTR_CONCEPT (t2) -+ && comp_template_args (CHECK_CONSTR_ARGS (t1), -+ CHECK_CONSTR_ARGS (t2))); -+ - case TREE_VEC: - { - unsigned ix; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/typeck.c gcc-6-20160721/gcc/cp/typeck.c ---- gcc-6.1.0/gcc/cp/typeck.c 2016-04-13 00:06:51.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/typeck.c 2016-07-19 08:40:37.000000000 +0000 -@@ -111,7 +111,7 @@ - - if (type == error_mark_node || COMPLETE_TYPE_P (type)) - ; -- else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type)) -+ else if (TREE_CODE (type) == ARRAY_TYPE) - { - tree t = complete_type (TREE_TYPE (type)); - unsigned int needs_constructing, has_nontrivial_dtor; -@@ -6270,8 +6270,7 @@ - } - - expr = build_conditional_expr (loc, ifexp, op1, op2, complain); -- if (processing_template_decl && expr != error_mark_node -- && TREE_CODE (expr) != VEC_COND_EXPR) -+ if (processing_template_decl && expr != error_mark_node) - { - tree min = build_min_non_dep (COND_EXPR, expr, - orig_ifexp, orig_op1, orig_op2); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/cp/typeck2.c gcc-6-20160721/gcc/cp/typeck2.c ---- gcc-6.1.0/gcc/cp/typeck2.c 2016-04-15 04:02:49.000000000 +0000 -+++ gcc-6-20160721/gcc/cp/typeck2.c 2016-07-21 06:15:58.000000000 +0000 -@@ -539,6 +539,7 @@ - break; - - case TYPENAME_TYPE: -+ case DECLTYPE_TYPE: - emit_diagnostic (diag_kind, loc, 0, - "invalid use of dependent type %qT", type); - break; -@@ -951,10 +952,12 @@ - { - if (complain & tf_warning_or_error) - { -- if (!almost_ok || pedantic) -- pedwarn (loc, OPT_Wnarrowing, "narrowing conversion of %qE " -- "from %qT to %qT inside { }", init, ftype, type); -- if (pedantic && almost_ok) -+ if ((!almost_ok || pedantic) -+ && pedwarn (loc, OPT_Wnarrowing, -+ "narrowing conversion of %qE " -+ "from %qT to %qT inside { }", -+ init, ftype, type) -+ && almost_ok) - inform (loc, " the expression has a constant value but is not " - "a C++ constant-expression"); - ok = true; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/df-problems.c gcc-6-20160721/gcc/df-problems.c ---- gcc-6.1.0/gcc/df-problems.c 2016-02-23 14:01:51.000000000 +0000 -+++ gcc-6-20160721/gcc/df-problems.c 2016-06-29 15:15:25.000000000 +0000 -@@ -3498,13 +3498,13 @@ - - FOR_BB_INSNS_REVERSE (bb, insn) - { -+ if (!INSN_P (insn)) -+ continue; -+ - df_insn_info *insn_info = DF_INSN_INFO_GET (insn); - df_mw_hardreg *mw; - int debug_insn; - -- if (!INSN_P (insn)) -- continue; -- - debug_insn = DEBUG_INSN_P (insn); - - bitmap_clear (do_not_gen); -Only in gcc-6.1.0/gcc/doc: aot-compile.1 -Only in gcc-6.1.0/gcc/doc: cpp.1 -Only in gcc-6.1.0/gcc/doc: cpp.info -Only in gcc-6.1.0/gcc/doc: cppinternals.info -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/doc/extend.texi gcc-6-20160721/gcc/doc/extend.texi ---- gcc-6.1.0/gcc/doc/extend.texi 2016-04-14 17:35:23.000000000 +0000 -+++ gcc-6-20160721/gcc/doc/extend.texi 2016-07-07 19:42:07.000000000 +0000 -@@ -962,8 +962,13 @@ - would use the following syntax to declare @code{_Complex128} to be a - complex @code{__float128} type: - -+On the PowerPC Linux VSX targets, you can declare complex types using -+the corresponding internal complex type, @code{KCmode} for -+@code{__float128} type and @code{ICmode} for @code{__ibm128} type: -+ - @smallexample --typedef _Complex float __attribute__((mode(KC))) _Complex128; -+typedef _Complex float __attribute__((mode(KC))) _Complex_float128; -+typedef _Complex float __attribute__((mode(IC))) _Complex_ibm128; - @end smallexample - - Not all targets support additional floating-point types. -@@ -13840,6 +13845,40 @@ - returns the Time Base Register value as an unsigned long, throwing away - the most significant word on 32-bit environments. - -+Additional built-in functions are available for the 64-bit PowerPC -+family of processors, for efficient use of 128-bit floating point -+(@code{__float128}) values. -+ -+The following floating-point built-in functions are available with -+@code{-mfloat128} and Altivec support. All of them implement the -+function that is part of the name. -+ -+@smallexample -+__float128 __builtin_fabsq (__float128) -+__float128 __builtin_copysignq (__float128, __float128) -+@end smallexample -+ -+The following built-in functions are available with @code{-mfloat128} -+and Altivec support. -+ -+@table @code -+@item __float128 __builtin_infq (void) -+Similar to @code{__builtin_inf}, except the return type is @code{__float128}. -+@findex __builtin_infq -+ -+@item __float128 __builtin_huge_valq (void) -+Similar to @code{__builtin_huge_val}, except the return type is @code{__float128}. -+@findex __builtin_huge_valq -+ -+@item __float128 __builtin_nanq (void) -+Similar to @code{__builtin_nan}, except the return type is @code{__float128}. -+@findex __builtin_nanq -+ -+@item __float128 __builtin_nansq (void) -+Similar to @code{__builtin_nans}, except the return type is @code{__float128}. -+@findex __builtin_nansq -+@end table -+ - The following built-in functions are available for the PowerPC family - of processors, starting with ISA 2.06 or later (@option{-mcpu=power7} - or @option{-mpopcntd}): -@@ -13863,6 +13902,74 @@ - 64-bit environment support ISA 2.06 or later. - - The following built-in functions are available for the PowerPC family -+of processors, starting with ISA 3.0 or later (@option{-mcpu=power9}): -+@smallexample -+long long __builtin_darn (void); -+long long __builtin_darn_raw (void); -+int __builtin_darn_32 (void); -+ -+int __builtin_dfp_dtstsfi_lt (unsigned int comparison, _Decimal64 value); -+int __builtin_dfp_dtstsfi_lt (unsigned int comparison, _Decimal128 value); -+int __builtin_dfp_dtstsfi_lt_dd (unsigned int comparison, _Decimal64 value); -+int __builtin_dfp_dtstsfi_lt_td (unsigned int comparison, _Decimal128 value); -+ -+int __builtin_dfp_dtstsfi_gt (unsigned int comparison, _Decimal64 value); -+int __builtin_dfp_dtstsfi_gt (unsigned int comparison, _Decimal128 value); -+int __builtin_dfp_dtstsfi_gt_dd (unsigned int comparison, _Decimal64 value); -+int __builtin_dfp_dtstsfi_gt_td (unsigned int comparison, _Decimal128 value); -+ -+int __builtin_dfp_dtstsfi_eq (unsigned int comparison, _Decimal64 value); -+int __builtin_dfp_dtstsfi_eq (unsigned int comparison, _Decimal128 value); -+int __builtin_dfp_dtstsfi_eq_dd (unsigned int comparison, _Decimal64 value); -+int __builtin_dfp_dtstsfi_eq_td (unsigned int comparison, _Decimal128 value); -+ -+int __builtin_dfp_dtstsfi_ov (unsigned int comparison, _Decimal64 value); -+int __builtin_dfp_dtstsfi_ov (unsigned int comparison, _Decimal128 value); -+int __builtin_dfp_dtstsfi_ov_dd (unsigned int comparison, _Decimal64 value); -+int __builtin_dfp_dtstsfi_ov_td (unsigned int comparison, _Decimal128 value); -+@end smallexample -+ -+The @code{__builtin_darn} and @code{__builtin_darn_raw} -+functions require a -+64-bit environment supporting ISA 3.0 or later. -+The @code{__builtin_darn} function provides a 64-bit conditioned -+random number. The @code{__builtin_darn_raw} function provides a -+64-bit raw random number. The @code{__builtin_darn_32} function -+provides a 32-bit random number. -+ -+The @code{__builtin_dfp_dtstsfi_lt} function returns a non-zero value -+if and only if the number of signficant digits of its @code{value} argument -+is less than its @code{comparison} argument. The -+@code{__builtin_dfp_dtstsfi_lt_dd} and -+@code{__builtin_dfp_dtstsfi_lt_td} functions behave similarly, but -+require that the type of the @code{value} argument be -+@code{__Decimal64} and @code{__Decimal128} respectively. -+ -+The @code{__builtin_dfp_dtstsfi_gt} function returns a non-zero value -+if and only if the number of signficant digits of its @code{value} argument -+is greater than its @code{comparison} argument. The -+@code{__builtin_dfp_dtstsfi_gt_dd} and -+@code{__builtin_dfp_dtstsfi_gt_td} functions behave similarly, but -+require that the type of the @code{value} argument be -+@code{__Decimal64} and @code{__Decimal128} respectively. -+ -+The @code{__builtin_dfp_dtstsfi_eq} function returns a non-zero value -+if and only if the number of signficant digits of its @code{value} argument -+equals its @code{comparison} argument. The -+@code{__builtin_dfp_dtstsfi_eq_dd} and -+@code{__builtin_dfp_dtstsfi_eq_td} functions behave similarly, but -+require that the type of the @code{value} argument be -+@code{__Decimal64} and @code{__Decimal128} respectively. -+ -+The @code{__builtin_dfp_dtstsfi_ov} function returns a non-zero value -+if and only if its @code{value} argument has an undefined number of -+significant digits, such as when @code{value} is an encoding of @code{NaN}. -+The @code{__builtin_dfp_dtstsfi_ov_dd} and -+@code{__builtin_dfp_dtstsfi_ov_td} functions behave similarly, but -+require that the type of the @code{value} argument be -+@code{__Decimal64} and @code{__Decimal128} respectively. -+ -+The following built-in functions are available for the PowerPC family - of processors when hardware decimal floating point - (@option{-mhard-dfp}) is available: - @smallexample -@@ -15932,6 +16039,18 @@ - void vec_st (vector double, int, double *); - vector double vec_sub (vector double, vector double); - vector double vec_trunc (vector double); -+vector double vec_xl (int, vector double *); -+vector double vec_xl (int, double *); -+vector long long vec_xl (int, vector long long *); -+vector long long vec_xl (int, long long *); -+vector unsigned long long vec_xl (int, vector unsigned long long *); -+vector unsigned long long vec_xl (int, unsigned long long *); -+vector float vec_xl (int, vector float *); -+vector float vec_xl (int, float *); -+vector int vec_xl (int, vector int *); -+vector int vec_xl (int, int *); -+vector unsigned int vec_xl (int, vector unsigned int *); -+vector unsigned int vec_xl (int, unsigned int *); - vector double vec_xor (vector double, vector double); - vector double vec_xor (vector double, vector bool long); - vector double vec_xor (vector bool long, vector double); -@@ -15941,6 +16060,18 @@ - vector unsigned long vec_xor (vector unsigned long, vector unsigned long); - vector unsigned long vec_xor (vector unsigned long, vector bool long); - vector unsigned long vec_xor (vector bool long, vector unsigned long); -+void vec_xst (vector double, int, vector double *); -+void vec_xst (vector double, int, double *); -+void vec_xst (vector long long, int, vector long long *); -+void vec_xst (vector long long, int, long long *); -+void vec_xst (vector unsigned long long, int, vector unsigned long long *); -+void vec_xst (vector unsigned long long, int, unsigned long long *); -+void vec_xst (vector float, int, vector float *); -+void vec_xst (vector float, int, float *); -+void vec_xst (vector int, int, vector int *); -+void vec_xst (vector int, int, int *); -+void vec_xst (vector unsigned int, int, vector unsigned int *); -+void vec_xst (vector unsigned int, int, unsigned int *); - int vec_all_eq (vector double, vector double); - int vec_all_ge (vector double, vector double); - int vec_all_gt (vector double, vector double); -@@ -16055,7 +16186,7 @@ - @samp{LXVW4X}, @samp{STXVD2X}, and @samp{STXVW4X} instructions. - - If the ISA 2.07 additions to the vector/scalar (power8-vector) --instruction set is available, the following additional functions are -+instruction set are available, the following additional functions are - available for both 32-bit and 64-bit targets. For 64-bit targets, you - can use @var{vector long} instead of @var{vector long long}, - @var{vector bool long} instead of @var{vector bool long long}, and -@@ -16368,7 +16499,7 @@ - @end smallexample - - If the ISA 2.07 additions to the vector/scalar (power8-vector) --instruction set is available, the following additional functions are -+instruction set are available, the following additional functions are - available for 64-bit targets. New vector types - (@var{vector __int128_t} and @var{vector __uint128_t}) are available - to hold the @var{__int128_t} and @var{__uint128_t} types to use these -@@ -16423,6 +16554,115 @@ - int __builtin_bcdsub_ov (vector __int128_t, vector__int128_t); - @end smallexample - -+If the ISA 3.00 additions to the vector/scalar (power9-vector) -+instruction set are available: -+ -+@smallexample -+vector long long vec_vctz (vector long long); -+vector unsigned long long vec_vctz (vector unsigned long long); -+vector int vec_vctz (vector int); -+vector unsigned int vec_vctz (vector int); -+vector short vec_vctz (vector short); -+vector unsigned short vec_vctz (vector unsigned short); -+vector signed char vec_vctz (vector signed char); -+vector unsigned char vec_vctz (vector unsigned char); -+ -+vector signed char vec_vctzb (vector signed char); -+vector unsigned char vec_vctzb (vector unsigned char); -+ -+vector long long vec_vctzd (vector long long); -+vector unsigned long long vec_vctzd (vector unsigned long long); -+ -+vector short vec_vctzh (vector short); -+vector unsigned short vec_vctzh (vector unsigned short); -+ -+vector int vec_vctzw (vector int); -+vector unsigned int vec_vctzw (vector int); -+ -+vector int vec_vprtyb (vector int); -+vector unsigned int vec_vprtyb (vector unsigned int); -+vector long long vec_vprtyb (vector long long); -+vector unsigned long long vec_vprtyb (vector unsigned long long); -+ -+vector int vec_vprtybw (vector int); -+vector unsigned int vec_vprtybw (vector unsigned int); -+ -+vector long long vec_vprtybd (vector long long); -+vector unsigned long long vec_vprtybd (vector unsigned long long); -+@end smallexample -+ -+ -+If the ISA 3.00 additions to the vector/scalar (power9-vector) -+instruction set are available for 64-bit targets: -+ -+@smallexample -+vector long vec_vprtyb (vector long); -+vector unsigned long vec_vprtyb (vector unsigned long); -+vector __int128_t vec_vprtyb (vector __int128_t); -+vector __uint128_t vec_vprtyb (vector __uint128_t); -+ -+vector long vec_vprtybd (vector long); -+vector unsigned long vec_vprtybd (vector unsigned long); -+ -+vector __int128_t vec_vprtybq (vector __int128_t); -+vector __uint128_t vec_vprtybd (vector __uint128_t); -+@end smallexample -+ -+The following built-in vector functions are available for the PowerPC family -+of processors, starting with ISA 3.0 or later (@option{-mcpu=power9}) -+or with @option{-mpower9-vector}: -+ -+@smallexample -+__vector unsigned char -+vec_absd (__vector unsigned char arg1, __vector unsigned char arg2); -+__vector unsigned short -+vec_absd (__vector unsigned short arg1, __vector unsigned short arg2); -+__vector unsigned int -+vec_absd (__vector unsigned int arg1, __vector unsigned int arg2); -+ -+__vector unsigned char -+vec_absdb (__vector unsigned char arg1, __vector unsigned char arg2); -+__vector unsigned short -+vec_absdh (__vector unsigned short arg1, __vector unsigned short arg2); -+__vector unsigned int -+vec_absdw (__vector unsigned int arg1, __vector unsigned int arg2); -+ -+__vector unsigned char -+vec_slv (__vector unsigned char src, __vector unsigned char shift_distance); -+__vector unsigned char -+vec_srv (__vector unsigned char src, __vector unsigned char shift_distance); -+@end smallexample -+ -+The @code{vec_absd}, @code{vec_absdb}, @code{vec_absdh}, and -+@code{vec_absdw} built-in functions each computes the absolute -+differences of the pairs of vector elements supplied in its two vector -+arguments, placing the absolute differences into the corresponding -+elements of the vector result. -+ -+The @code{vec_slv} and @code{vec_srv} functions operate on -+all of the bytes of their @code{src} and @code{shift_distance} -+arguments in parallel. The behavior of the @code{vec_slv} is as if -+there existed a temporary array of 17 unsigned characters -+@code{slv_array} within which elements 0 through 15 are the same as -+the entries in the @code{src} array and element 16 equals 0. The -+result returned from the @code{vec_slv} function is a -+@code{__vector} of 16 unsigned characters within which element -+@code{i} is computed using the C expression -+@code{0xff & (*((unsigned short *)(slv_array + i)) << (0x07 & -+shift_distance[i]))}, -+with this resulting value coerced to the @code{unsigned char} type. -+The behavior of the @code{vec_srv} is as if -+there existed a temporary array of 17 unsigned characters -+@code{srv_array} within which element 0 equals zero and -+elements 1 through 16 equal the elements 0 through 15 of -+the @code{src} array. The -+result returned from the @code{vec_srv} function is a -+@code{__vector} of 16 unsigned characters within which element -+@code{i} is computed using the C expression -+@code{0xff & (*((unsigned short *)(srv_array + i)) >> -+(0x07 & shift_distance[i]))}, -+with this resulting value coerced to the @code{unsigned char} type. -+ - If the cryptographic instructions are enabled (@option{-mcrypto} or - @option{-mcpu=power8}), the following builtins are enabled. - -@@ -16483,6 +16723,28 @@ - integer that is 0 or 1. The third argument to these builtin functions - must be a constant integer in the range of 0 to 15. - -+If the ISA 3.00 additions to the vector/scalar (power9-vector) -+instruction set are available, the following additional functions are -+available for both 32-bit and 64-bit targets. -+ -+vector short vec_xl (int, vector short *); -+vector short vec_xl (int, short *); -+vector unsigned short vec_xl (int, vector unsigned short *); -+vector unsigned short vec_xl (int, unsigned short *); -+vector char vec_xl (int, vector char *); -+vector char vec_xl (int, char *); -+vector unsigned char vec_xl (int, vector unsigned char *); -+vector unsigned char vec_xl (int, unsigned char *); -+ -+void vec_xst (vector short, int, vector short *); -+void vec_xst (vector short, int, short *); -+void vec_xst (vector unsigned short, int, vector unsigned short *); -+void vec_xst (vector unsigned short, int, unsigned short *); -+void vec_xst (vector char, int, vector char *); -+void vec_xst (vector char, int, char *); -+void vec_xst (vector unsigned char, int, vector unsigned char *); -+void vec_xst (vector unsigned char, int, unsigned char *); -+ - @node PowerPC Hardware Transactional Memory Built-in Functions - @subsection PowerPC Hardware Transactional Memory Built-in Functions - GCC provides two interfaces for accessing the Hardware Transactional -@@ -17116,6 +17378,45 @@ - int64_t __builtin_vis_xmulxhi (int64_t, int64_t); - @end smallexample - -+When you use the @option{-mvis4} switch, the VIS version 4.0 built-in -+functions also become available: -+ -+@smallexample -+v8qi __builtin_vis_fpadd8 (v8qi, v8qi); -+v8qi __builtin_vis_fpadds8 (v8qi, v8qi); -+v8qi __builtin_vis_fpaddus8 (v8qi, v8qi); -+v4hi __builtin_vis_fpaddus16 (v4hi, v4hi); -+ -+v8qi __builtin_vis_fpsub8 (v8qi, v8qi); -+v8qi __builtin_vis_fpsubs8 (v8qi, v8qi); -+v8qi __builtin_vis_fpsubus8 (v8qi, v8qi); -+v4hi __builtin_vis_fpsubus16 (v4hi, v4hi); -+ -+long __builtin_vis_fpcmple8 (v8qi, v8qi); -+long __builtin_vis_fpcmpgt8 (v8qi, v8qi); -+long __builtin_vis_fpcmpule16 (v4hi, v4hi); -+long __builtin_vis_fpcmpugt16 (v4hi, v4hi); -+long __builtin_vis_fpcmpule32 (v2si, v2si); -+long __builtin_vis_fpcmpugt32 (v2si, v2si); -+ -+v8qi __builtin_vis_fpmax8 (v8qi, v8qi); -+v4hi __builtin_vis_fpmax16 (v4hi, v4hi); -+v2si __builtin_vis_fpmax32 (v2si, v2si); -+ -+v8qi __builtin_vis_fpmaxu8 (v8qi, v8qi); -+v4hi __builtin_vis_fpmaxu16 (v4hi, v4hi); -+v2si __builtin_vis_fpmaxu32 (v2si, v2si); -+ -+ -+v8qi __builtin_vis_fpmin8 (v8qi, v8qi); -+v4hi __builtin_vis_fpmin16 (v4hi, v4hi); -+v2si __builtin_vis_fpmin32 (v2si, v2si); -+ -+v8qi __builtin_vis_fpminu8 (v8qi, v8qi); -+v4hi __builtin_vis_fpminu16 (v4hi, v4hi); -+v2si __builtin_vis_fpminu32 (v2si, v2si); -+@end smallexample -+ - @node SPU Built-in Functions - @subsection SPU Built-in Functions - -Only in gcc-6.1.0/gcc/doc: fsf-funding.7 -Only in gcc-6.1.0/gcc/doc: g++.1 -Only in gcc-6.1.0/gcc/doc: gc-analyze.1 -Only in gcc-6.1.0/gcc/doc: gcc.1 -Only in gcc-6.1.0/gcc/doc: gcc.info -Only in gcc-6.1.0/gcc/doc: gccinstall.info -Only in gcc-6.1.0/gcc/doc: gccint.info -Only in gcc-6.1.0/gcc/doc: gcj-dbtool.1 -Only in gcc-6.1.0/gcc/doc: gcj.1 -Only in gcc-6.1.0/gcc/doc: gcj.info -Only in gcc-6.1.0/gcc/doc: gcov-tool.1 -Only in gcc-6.1.0/gcc/doc: gcov.1 -Only in gcc-6.1.0/gcc/doc: gfdl.7 -Only in gcc-6.1.0/gcc/doc: gfortran.1 -Only in gcc-6.1.0/gcc/doc: gij.1 -Only in gcc-6.1.0/gcc/doc: gpl.7 -Only in gcc-6.1.0/gcc/doc: grmic.1 -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/doc/install.texi gcc-6-20160721/gcc/doc/install.texi ---- gcc-6.1.0/gcc/doc/install.texi 2016-04-18 18:42:41.000000000 +0000 -+++ gcc-6-20160721/gcc/doc/install.texi 2016-06-08 13:34:25.000000000 +0000 -@@ -1241,7 +1241,7 @@ - PowerPC, and SPARC@. It is mandatory for ARC@. The @option{--with-cpu-32} and - @option{--with-cpu-64} options specify separate default CPUs for - 32-bit and 64-bit modes; these options are only supported for i386, --x86-64 and PowerPC. -+x86-64, PowerPC, and SPARC@. - - @item --with-schedule=@var{cpu} - @itemx --with-arch=@var{cpu} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/doc/invoke.texi gcc-6-20160721/gcc/doc/invoke.texi ---- gcc-6.1.0/gcc/doc/invoke.texi 2016-04-22 13:17:26.000000000 +0000 -+++ gcc-6-20160721/gcc/doc/invoke.texi 2016-07-08 14:51:44.000000000 +0000 -@@ -996,14 +996,15 @@ - -mpointers-to-nested-functions -mno-pointers-to-nested-functions @gol - -msave-toc-indirect -mno-save-toc-indirect @gol - -mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector @gol ---mcrypto -mno-crypto -mdirect-move -mno-direct-move @gol -+-mcrypto -mno-crypto -mhtm -mno-htm -mdirect-move -mno-direct-move @gol - -mquad-memory -mno-quad-memory @gol - -mquad-memory-atomic -mno-quad-memory-atomic @gol - -mcompat-align-parm -mno-compat-align-parm @gol - -mupper-regs-df -mno-upper-regs-df -mupper-regs-sf -mno-upper-regs-sf @gol - -mupper-regs -mno-upper-regs -mmodulo -mno-modulo @gol - -mfloat128 -mno-float128 -mfloat128-hardware -mno-float128-hardware @gol ---mpower9-fusion -mno-mpower9-fusion -mpower9-vector -mno-power9-vector} -+-mpower9-fusion -mno-mpower9-fusion -mpower9-vector -mno-power9-vector @gol -+-mpower9-dform -mno-power9-dform -mlra -mno-lra} - - @emph{RX Options} - @gccoptlist{-m64bit-doubles -m32bit-doubles -fpu -nofpu@gol -@@ -13669,7 +13670,6 @@ - optimizers then assume that indexed stores exist, which is not - the case. - --@item -mlra - @opindex mlra - Enable Local Register Allocation. This is still experimental for ARC, - so by default the compiler uses standard reload -@@ -19879,9 +19879,9 @@ - -mpopcntb -mpopcntd -mpowerpc64 @gol - -mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float @gol - -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx @gol ---mcrypto -mdirect-move -mpower8-fusion -mpower8-vector @gol -+-mcrypto -mdirect-move -mhtm -mpower8-fusion -mpower8-vector @gol - -mquad-memory -mquad-memory-atomic -mmodulo -mfloat128 -mfloat128-hardware @gol ---mpower9-fusion -mpower9-vector} -+-mpower9-fusion -mpower9-vector -mpower9-dform} - - The particular options set for any particular CPU varies between - compiler versions, depending on what setting seems to produce optimal -@@ -20005,6 +20005,12 @@ - This switch has been deprecated. Use @option{-misel} and - @option{-mno-isel} instead. - -+@item -mlra -+@opindex mlra -+Enable Local Register Allocation. This is still experimental for PowerPC, -+so by default the compiler uses standard reload -+(i.e. @option{-mno-lra}). -+ - @item -mspe - @itemx -mno-spe - @opindex mspe -@@ -20047,6 +20053,14 @@ - between the general purpose registers and the vector/scalar (VSX) - registers that were added in version 2.07 of the PowerPC ISA. - -+@item -mhtm -+@itemx -mno-htm -+@opindex mhtm -+@opindex mno-htm -+Enable (disable) the use of the built-in functions that allow direct -+access to the Hardware Transactional Memory (HTM) instructions that -+were added in version 2.07 of the PowerPC ISA. -+ - @item -mpower8-fusion - @itemx -mno-power8-fusion - @opindex mpower8-fusion -@@ -20123,9 +20137,14 @@ - - The VSX instruction set (@option{-mvsx}, @option{-mcpu=power7}, or - @option{-mcpu=power8}) must be enabled to use the @option{-mfloat128} --option. The @code{-mfloat128} option only works on PowerPC 64-bit -+option. The @option{-mfloat128} option only works on PowerPC 64-bit - Linux systems. - -+If you use the ISA 3.0 instruction set (@option{-mcpu=power9}), the -+@option{-mfloat128} option will also enable the generation of ISA 3.0 -+IEEE 128-bit floating point instructions. Otherwise, IEEE 128-bit -+floating point will be done with software emulation. -+ - @item -mfloat128-hardware - @itemx -mno-float128-hardware - @opindex mfloat128-hardware -@@ -20133,6 +20152,13 @@ - Enable/disable using ISA 3.0 hardware instructions to support the - @var{__float128} data type. - -+If you use @option{-mfloat128-hardware}, it will enable the option -+@option{-mfloat128} as well. -+ -+If you select ISA 3.0 instructions with @option{-mcpu=power9}, but do -+not use either @option{-mfloat128} or @option{-mfloat128-hardware}, -+the IEEE 128-bit floating point support will not be enabled. -+ - @item -mmodulo - @itemx -mno-modulo - @opindex mmodulo -@@ -20154,10 +20180,19 @@ - @opindex mpower9-vector - @opindex mno-power9-vector - Generate code that uses (does not use) the vector and scalar --instructions that were added in version 2.07 of the PowerPC ISA. Also -+instructions that were added in version 3.0 of the PowerPC ISA. Also - enable the use of built-in functions that allow more direct access to - the vector instructions. - -+@item -mpower9-dform -+@itemx -mno-power9-dform -+@opindex mpower9-dform -+@opindex mno-power9-dform -+Enable (disable) scalar d-form (register + offset) memory instructions -+to load/store traditional Altivec registers. If the @var{LRA} register -+allocator is enabled, also enable (disable) vector d-form memory -+instructions. -+ - @item -mfloat-gprs=@var{yes/single/double/no} - @itemx -mfloat-gprs - @opindex mfloat-gprs -@@ -22070,7 +22105,7 @@ - @samp{leon}, @samp{leon3}, @samp{leon3v7}, @samp{sparclite}, @samp{f930}, - @samp{f934}, @samp{sparclite86x}, @samp{sparclet}, @samp{tsc701}, @samp{v9}, - @samp{ultrasparc}, @samp{ultrasparc3}, @samp{niagara}, @samp{niagara2}, --@samp{niagara3} and @samp{niagara4}. -+@samp{niagara3}, @samp{niagara4} and @samp{niagara7}. - - Native Solaris and GNU/Linux toolchains also support the value @samp{native}, - which selects the best architecture option for the host processor. -@@ -22098,7 +22133,7 @@ - tsc701 - - @item v9 --ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4 -+ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4, niagara7 - @end table - - By default (unless configured otherwise), GCC generates code for the V7 -@@ -22140,7 +22175,9 @@ - additionally optimizes it for Sun UltraSPARC T2 chips. With - @option{-mcpu=niagara3}, the compiler additionally optimizes it for Sun - UltraSPARC T3 chips. With @option{-mcpu=niagara4}, the compiler --additionally optimizes it for Sun UltraSPARC T4 chips. -+additionally optimizes it for Sun UltraSPARC T4 chips. With -+@option{-mcpu=niagara7}, the compiler additionally optimizes it for -+Oracle SPARC M7 chips. - - @item -mtune=@var{cpu_type} - @opindex mtune -@@ -22150,12 +22187,13 @@ - - The same values for @option{-mcpu=@var{cpu_type}} can be used for - @option{-mtune=@var{cpu_type}}, but the only useful values are those --that select a particular CPU implementation. Those are @samp{cypress}, --@samp{supersparc}, @samp{hypersparc}, @samp{leon}, @samp{leon3}, --@samp{leon3v7}, @samp{f930}, @samp{f934}, @samp{sparclite86x}, @samp{tsc701}, --@samp{ultrasparc}, @samp{ultrasparc3}, @samp{niagara}, @samp{niagara2}, --@samp{niagara3} and @samp{niagara4}. With native Solaris and GNU/Linux --toolchains, @samp{native} can also be used. -+that select a particular CPU implementation. Those are -+@samp{cypress}, @samp{supersparc}, @samp{hypersparc}, @samp{leon}, -+@samp{leon3}, @samp{leon3v7}, @samp{f930}, @samp{f934}, -+@samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc}, -+@samp{ultrasparc3}, @samp{niagara}, @samp{niagara2}, @samp{niagara3}, -+@samp{niagara4} and @samp{niagara7}. With native Solaris and -+GNU/Linux toolchains, @samp{native} can also be used. - - @item -mv8plus - @itemx -mno-v8plus -@@ -22193,6 +22231,16 @@ - instructions, such as niagara-3 and later. Setting @option{-mvis3} - also sets @option{-mvis2} and @option{-mvis}. - -+@item -mvis4 -+@itemx -mno-vis4 -+@opindex mvis4 -+@opindex mno-vis4 -+With @option{-mvis4}, GCC generates code that takes advantage of -+version 4.0 of the UltraSPARC Visual Instruction Set extensions. The -+default is @option{-mvis4} when targeting a cpu that supports such -+instructions, such as niagara-7 and later. Setting @option{-mvis4} -+also sets @option{-mvis3}, @option{-mvis2} and @option{-mvis}. -+ - @item -mcbcond - @itemx -mno-cbcond - @opindex mcbcond -Only in gcc-6.1.0/gcc/doc: jcf-dump.1 -Only in gcc-6.1.0/gcc/doc: jv-convert.1 -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/doc/md.texi gcc-6-20160721/gcc/doc/md.texi ---- gcc-6.1.0/gcc/doc/md.texi 2016-02-22 21:27:08.000000000 +0000 -+++ gcc-6-20160721/gcc/doc/md.texi 2016-06-09 23:28:23.000000000 +0000 -@@ -3214,6 +3214,9 @@ - @item wD - Int constant that is the element number of the 64-bit scalar in a vector. - -+@item wE -+Vector constant that can be loaded with the XXSPLTIB instruction. -+ - @item wF - Memory operand suitable for power9 fusion load/stores. - -@@ -3221,13 +3224,22 @@ - Memory operand suitable for TOC fusion memory references. - - @item wL --Int constant that is the element number that the MFVSRLD instruction -+Int constant that is the element number that the MFVSRLD instruction. - targets. - -+@item wM -+Match vector constant with all 1's if the XXLORC instruction is available. -+ -+@item wO -+A memory operand suitable for the ISA 3.0 vector d-form instructions. -+ - @item wQ - A memory address that will work with the @code{lq} and @code{stq} - instructions. - -+@item wS -+Vector constant that can be loaded with XXSPLTIB & sign extension. -+ - @item h - @samp{MQ}, @samp{CTR}, or @samp{LINK} register - -Only in gcc-6.1.0/gcc/doc: rebuild-gcj-db.1 -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/dwarf2out.c gcc-6-20160721/gcc/dwarf2out.c ---- gcc-6.1.0/gcc/dwarf2out.c 2016-03-17 13:43:01.000000000 +0000 -+++ gcc-6-20160721/gcc/dwarf2out.c 2016-07-19 19:31:24.000000000 +0000 -@@ -15573,7 +15573,7 @@ - - if (stack_usage == NULL) - return false; -- frame_offset += *stack_usage; -+ frame_offset_ += *stack_usage; - break; - } - -@@ -17805,7 +17805,7 @@ - fieldsize = tree_to_shwi (DECL_SIZE_UNIT (field)); - pos = int_byte_position (field); - gcc_assert (pos + fieldsize <= size); -- if (val -+ if (val && fieldsize != 0 - && !native_encode_initializer (val, array + pos, fieldsize)) - return false; - } -@@ -19401,11 +19401,13 @@ - static void - retry_incomplete_types (void) - { -+ set_early_dwarf s; - int i; - - for (i = vec_safe_length (incomplete_types) - 1; i >= 0; i--) - if (should_emit_struct_debug ((*incomplete_types)[i], DINFO_USAGE_DIR_USE)) - gen_type_die ((*incomplete_types)[i], comp_unit_die ()); -+ vec_safe_truncate (incomplete_types, 0); - } - - /* Determine what tag to use for a record type. */ -@@ -20724,14 +20726,17 @@ - void_type_node 2) an unprototyped function declaration (not a - definition). This just means that we have no info about the - parameters at all. */ -- if (prototype_p (TREE_TYPE (decl))) -+ if (early_dwarf) - { -- /* This is the prototyped case, check for.... */ -- if (stdarg_p (TREE_TYPE (decl))) -+ if (prototype_p (TREE_TYPE (decl))) -+ { -+ /* This is the prototyped case, check for.... */ -+ if (stdarg_p (TREE_TYPE (decl))) -+ gen_unspecified_parameters_die (decl, subr_die); -+ } -+ else if (DECL_INITIAL (decl) == NULL_TREE) - gen_unspecified_parameters_die (decl, subr_die); - } -- else if (DECL_INITIAL (decl) == NULL_TREE) -- gen_unspecified_parameters_die (decl, subr_die); - } - - if (subr_die != old_die) -@@ -27382,10 +27387,6 @@ - resolve_addr (comp_unit_die ()); - move_marked_base_types (); - -- /* Walk through the list of incomplete types again, trying once more to -- emit full debugging info for them. */ -- retry_incomplete_types (); -- - if (flag_eliminate_unused_debug_types) - prune_unused_types (); - -@@ -27686,6 +27687,10 @@ - static void - dwarf2out_early_finish (void) - { -+ /* Walk through the list of incomplete types again, trying once more to -+ emit full debugging info for them. */ -+ retry_incomplete_types (); -+ - /* The point here is to flush out the limbo list so that it is empty - and we don't need to stream it for LTO. */ - flush_limbo_die_list (); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fold-const.c gcc-6-20160721/gcc/fold-const.c ---- gcc-6.1.0/gcc/fold-const.c 2016-04-21 11:57:28.000000000 +0000 -+++ gcc-6-20160721/gcc/fold-const.c 2016-07-08 20:20:23.000000000 +0000 -@@ -117,14 +117,8 @@ - static int operand_equal_for_comparison_p (tree, tree, tree); - static int twoval_comparison_p (tree, tree *, tree *, int *); - static tree eval_subst (location_t, tree, tree, tree, tree, tree); --static tree make_bit_field_ref (location_t, tree, tree, -- HOST_WIDE_INT, HOST_WIDE_INT, int, int); - static tree optimize_bit_field_compare (location_t, enum tree_code, - tree, tree, tree); --static tree decode_field_reference (location_t, tree, HOST_WIDE_INT *, -- HOST_WIDE_INT *, -- machine_mode *, int *, int *, int *, -- tree *, tree *); - static int simple_operand_p (const_tree); - static bool simple_operand_p_2 (tree); - static tree range_binop (enum tree_code, tree, tree, int, tree, int); -@@ -836,11 +830,10 @@ - *minus_litp = *litp, *litp = 0; - if (neg_conp_p) - *conp = negate_expr (*conp); -- if (neg_var_p) -+ if (neg_var_p && var) - { -- /* Convert to TYPE before negating a pointer type expr. */ -- if (var && POINTER_TYPE_P (TREE_TYPE (var))) -- var = fold_convert_loc (loc, type, var); -+ /* Convert to TYPE before negating. */ -+ var = fold_convert_loc (loc, type, var); - var = negate_expr (var); - } - } -@@ -863,10 +856,12 @@ - else if (*minus_litp) - *litp = *minus_litp, *minus_litp = 0; - *conp = negate_expr (*conp); -- /* Convert to TYPE before negating a pointer type expr. */ -- if (var && POINTER_TYPE_P (TREE_TYPE (var))) -- var = fold_convert_loc (loc, type, var); -- var = negate_expr (var); -+ if (var) -+ { -+ /* Convert to TYPE before negating. */ -+ var = fold_convert_loc (loc, type, var); -+ var = negate_expr (var); -+ } - } - - return var; -@@ -2199,7 +2194,6 @@ - - case REAL_TYPE: - case FIXED_POINT_TYPE: -- case COMPLEX_TYPE: - case VECTOR_TYPE: - case VOID_TYPE: - return TREE_CODE (type) == TREE_CODE (orig); -@@ -3781,15 +3775,23 @@ - - /* Return a BIT_FIELD_REF of type TYPE to refer to BITSIZE bits of INNER - starting at BITPOS. The field is unsigned if UNSIGNEDP is nonzero -- and uses reverse storage order if REVERSEP is nonzero. */ -+ and uses reverse storage order if REVERSEP is nonzero. ORIG_INNER -+ is the original memory reference used to preserve the alias set of -+ the access. */ - - static tree --make_bit_field_ref (location_t loc, tree inner, tree type, -+make_bit_field_ref (location_t loc, tree inner, tree orig_inner, tree type, - HOST_WIDE_INT bitsize, HOST_WIDE_INT bitpos, - int unsignedp, int reversep) - { - tree result, bftype; - -+ if (get_alias_set (inner) != get_alias_set (orig_inner)) -+ inner = fold_build2 (MEM_REF, TREE_TYPE (inner), -+ build_fold_addr_expr (inner), -+ build_int_cst -+ (reference_alias_ptr_type (orig_inner), 0)); -+ - if (bitpos == 0 && !reversep) - { - tree size = TYPE_SIZE (TREE_TYPE (inner)); -@@ -3915,13 +3917,13 @@ - and return. */ - return fold_build2_loc (loc, code, compare_type, - fold_build2_loc (loc, BIT_AND_EXPR, unsigned_type, -- make_bit_field_ref (loc, linner, -+ make_bit_field_ref (loc, linner, lhs, - unsigned_type, - nbitsize, nbitpos, - 1, lreversep), - mask), - fold_build2_loc (loc, BIT_AND_EXPR, unsigned_type, -- make_bit_field_ref (loc, rinner, -+ make_bit_field_ref (loc, rinner, rhs, - unsigned_type, - nbitsize, nbitpos, - 1, rreversep), -@@ -3966,8 +3968,8 @@ - /* Make a new bitfield reference, shift the constant over the - appropriate number of bits and mask it with the computed mask - (in case this was a signed field). If we changed it, make a new one. */ -- lhs = make_bit_field_ref (loc, linner, unsigned_type, nbitsize, nbitpos, 1, -- lreversep); -+ lhs = make_bit_field_ref (loc, linner, lhs, unsigned_type, -+ nbitsize, nbitpos, 1, lreversep); - - rhs = const_binop (BIT_AND_EXPR, - const_binop (LSHIFT_EXPR, -@@ -4006,11 +4008,12 @@ - do anything with. */ - - static tree --decode_field_reference (location_t loc, tree exp, HOST_WIDE_INT *pbitsize, -+decode_field_reference (location_t loc, tree *exp_, HOST_WIDE_INT *pbitsize, - HOST_WIDE_INT *pbitpos, machine_mode *pmode, - int *punsignedp, int *preversep, int *pvolatilep, - tree *pmask, tree *pand_mask) - { -+ tree exp = *exp_; - tree outer_type = 0; - tree and_mask = 0; - tree mask, inner, offset; -@@ -4047,6 +4050,8 @@ - || TREE_CODE (inner) == PLACEHOLDER_EXPR) - return 0; - -+ *exp_ = exp; -+ - /* If the number of bits in the reference is the same as the bitsize of - the outer type, then the outer type gives the signedness. Otherwise - (in case of a small bitfield) the signedness is unchanged. */ -@@ -5655,19 +5660,19 @@ - - ll_reversep = lr_reversep = rl_reversep = rr_reversep = 0; - volatilep = 0; -- ll_inner = decode_field_reference (loc, ll_arg, -+ ll_inner = decode_field_reference (loc, &ll_arg, - &ll_bitsize, &ll_bitpos, &ll_mode, - &ll_unsignedp, &ll_reversep, &volatilep, - &ll_mask, &ll_and_mask); -- lr_inner = decode_field_reference (loc, lr_arg, -+ lr_inner = decode_field_reference (loc, &lr_arg, - &lr_bitsize, &lr_bitpos, &lr_mode, - &lr_unsignedp, &lr_reversep, &volatilep, - &lr_mask, &lr_and_mask); -- rl_inner = decode_field_reference (loc, rl_arg, -+ rl_inner = decode_field_reference (loc, &rl_arg, - &rl_bitsize, &rl_bitpos, &rl_mode, - &rl_unsignedp, &rl_reversep, &volatilep, - &rl_mask, &rl_and_mask); -- rr_inner = decode_field_reference (loc, rr_arg, -+ rr_inner = decode_field_reference (loc, &rr_arg, - &rr_bitsize, &rr_bitpos, &rr_mode, - &rr_unsignedp, &rr_reversep, &volatilep, - &rr_mask, &rr_and_mask); -@@ -5829,12 +5834,14 @@ - lr_mask = const_binop (BIT_IOR_EXPR, lr_mask, rr_mask); - if (lnbitsize == rnbitsize && xll_bitpos == xlr_bitpos) - { -- lhs = make_bit_field_ref (loc, ll_inner, lntype, lnbitsize, lnbitpos, -+ lhs = make_bit_field_ref (loc, ll_inner, ll_arg, -+ lntype, lnbitsize, lnbitpos, - ll_unsignedp || rl_unsignedp, ll_reversep); - if (! all_ones_mask_p (ll_mask, lnbitsize)) - lhs = build2 (BIT_AND_EXPR, lntype, lhs, ll_mask); - -- rhs = make_bit_field_ref (loc, lr_inner, rntype, rnbitsize, rnbitpos, -+ rhs = make_bit_field_ref (loc, lr_inner, lr_arg, -+ rntype, rnbitsize, rnbitpos, - lr_unsignedp || rr_unsignedp, lr_reversep); - if (! all_ones_mask_p (lr_mask, rnbitsize)) - rhs = build2 (BIT_AND_EXPR, rntype, rhs, lr_mask); -@@ -5856,11 +5863,11 @@ - { - tree type; - -- lhs = make_bit_field_ref (loc, ll_inner, lntype, -+ lhs = make_bit_field_ref (loc, ll_inner, ll_arg, lntype, - ll_bitsize + rl_bitsize, - MIN (ll_bitpos, rl_bitpos), - ll_unsignedp, ll_reversep); -- rhs = make_bit_field_ref (loc, lr_inner, rntype, -+ rhs = make_bit_field_ref (loc, lr_inner, lr_arg, rntype, - lr_bitsize + rr_bitsize, - MIN (lr_bitpos, rr_bitpos), - lr_unsignedp, lr_reversep); -@@ -5925,7 +5932,8 @@ - reference we will make. Unless the mask is all ones the width of - that field, perform the mask operation. Then compare with the - merged constant. */ -- result = make_bit_field_ref (loc, ll_inner, lntype, lnbitsize, lnbitpos, -+ result = make_bit_field_ref (loc, ll_inner, ll_arg, -+ lntype, lnbitsize, lnbitpos, - ll_unsignedp || rl_unsignedp, ll_reversep); - - ll_mask = const_binop (BIT_IOR_EXPR, ll_mask, rl_mask); -@@ -7934,6 +7942,8 @@ - case VIEW_CONVERT_EXPR: - if (TREE_CODE (op0) == MEM_REF) - { -+ if (TYPE_ALIGN (TREE_TYPE (op0)) != TYPE_ALIGN (type)) -+ type = build_aligned_type (type, TYPE_ALIGN (TREE_TYPE (op0))); - tem = fold_build2_loc (loc, MEM_REF, type, - TREE_OPERAND (op0, 0), TREE_OPERAND (op0, 1)); - REF_REVERSE_STORAGE_ORDER (tem) = REF_REVERSE_STORAGE_ORDER (op0); -@@ -8566,9 +8576,9 @@ - if ((offset0 == offset1 - || (offset0 && offset1 - && operand_equal_p (offset0, offset1, 0))) -- && (code == EQ_EXPR -- || code == NE_EXPR -- || (indirect_base0 && DECL_P (base0)) -+ && (equality_code -+ || (indirect_base0 -+ && (DECL_P (base0) || CONSTANT_CLASS_P (base0))) - || POINTER_TYPE_OVERFLOW_UNDEFINED)) - - { -@@ -8607,7 +8617,8 @@ - 6.5.6/8 and /9 with respect to the signed ptrdiff_t. */ - else if (bitpos0 == bitpos1 - && (equality_code -- || (indirect_base0 && DECL_P (base0)) -+ || (indirect_base0 -+ && (DECL_P (base0) || CONSTANT_CLASS_P (base0))) - || POINTER_TYPE_OVERFLOW_UNDEFINED)) - { - /* By converting to signed sizetype we cover middle-end pointer -@@ -10514,11 +10525,15 @@ - || TREE_CODE (arg0) == BIT_IOR_EXPR - || TREE_CODE (arg0) == BIT_XOR_EXPR) - && TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST) -- return fold_build2_loc (loc, TREE_CODE (arg0), type, -- fold_build2_loc (loc, code, type, -- TREE_OPERAND (arg0, 0), arg1), -- fold_build2_loc (loc, code, type, -- TREE_OPERAND (arg0, 1), arg1)); -+ { -+ tree arg00 = fold_convert_loc (loc, type, TREE_OPERAND (arg0, 0)); -+ tree arg01 = fold_convert_loc (loc, type, TREE_OPERAND (arg0, 1)); -+ return fold_build2_loc (loc, TREE_CODE (arg0), type, -+ fold_build2_loc (loc, code, type, -+ arg00, arg1), -+ fold_build2_loc (loc, code, type, -+ arg01, arg1)); -+ } - - /* Two consecutive rotates adding up to the some integer - multiple of the precision of the type can be ignored. */ -@@ -10527,7 +10542,7 @@ - && TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST - && wi::umod_trunc (wi::add (arg1, TREE_OPERAND (arg0, 1)), - prec) == 0) -- return TREE_OPERAND (arg0, 0); -+ return fold_convert_loc (loc, type, TREE_OPERAND (arg0, 0)); - - return NULL_TREE; - -@@ -11631,9 +11646,9 @@ - /* Convert A ? 0 : 1 to !A. This prefers the use of NOT_EXPR - over COND_EXPR in cases such as floating point comparisons. */ - if (integer_zerop (op1) -- && (code == VEC_COND_EXPR ? integer_all_onesp (op2) -- : (integer_onep (op2) -- && !VECTOR_TYPE_P (type))) -+ && code == COND_EXPR -+ && integer_onep (op2) -+ && !VECTOR_TYPE_P (type) - && truth_value_p (TREE_CODE (arg0))) - return pedantic_non_lvalue_loc (loc, - fold_convert_loc (loc, type, -@@ -12305,7 +12320,8 @@ - || TYPE_REFERENCE_TO (expr) - || TYPE_CACHED_VALUES_P (expr) - || TYPE_CONTAINS_PLACEHOLDER_INTERNAL (expr) -- || TYPE_NEXT_VARIANT (expr))) -+ || TYPE_NEXT_VARIANT (expr) -+ || TYPE_ALIAS_SET_KNOWN_P (expr))) - { - /* Allow these fields to be modified. */ - tree tmp; -@@ -12315,6 +12331,7 @@ - TYPE_POINTER_TO (tmp) = NULL; - TYPE_REFERENCE_TO (tmp) = NULL; - TYPE_NEXT_VARIANT (tmp) = NULL; -+ TYPE_ALIAS_SET (tmp) = -1; - if (TYPE_CACHED_VALUES_P (tmp)) - { - TYPE_CACHED_VALUES_P (tmp) = 0; -@@ -13549,6 +13566,9 @@ - if (!DECL_P (base)) - base = get_base_address (base); - -+ if (base && TREE_CODE (base) == TARGET_EXPR) -+ base = TARGET_EXPR_SLOT (base); -+ - if (!base) - return false; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/ChangeLog gcc-6-20160721/gcc/fortran/ChangeLog ---- gcc-6.1.0/gcc/fortran/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/ChangeLog 2016-07-16 03:54:12.000000000 +0000 -@@ -1,3 +1,249 @@ -+2016-07-15 Jerry DeLisle <jvdelisle@gcc.gnu.org> -+ -+ Backport from trunk: -+ PR fortran/71764 -+ * trans-expr.c (gfc_trans_structure_assign): Remove assert. -+ -+2016-07-13 Andre Vehreschild <vehre@gcc.gnu.org> -+ -+ Backport from trunk: -+ PR fortran/71623 -+ * trans-stmt.c (gfc_trans_allocate): Add code of pre block of typespec -+ in allocate to parent block. -+ -+2016-07-09 Thomas Koenig <tkoenig@gcc.gnu.org> -+ -+ Backport from trunk: -+ PR fortran/71783 -+ * frontend-passes.c (create_var): Always allocate a charlen -+ for character variables. -+ -+2016-07-08 Cesar Philippidis <cesar@codesourcery.com> -+ -+ Backport from trunk: -+ 2016-07-08 Cesar Philippidis <cesar@codesourcery.com> -+ -+ * parse.c (matcha): Define. -+ (decode_oacc_directive): Add spec_only local var and set it. Use -+ matcha to parse acc directives except for routine and declare. Return -+ ST_GET_FCN_CHARACTERISTICS if a non-declarative directive could be -+ matched. -+ -+2016-07-02 Jakub Jelinek <jakub@redhat.com> -+ -+ Backported from mainline -+ 2016-07-01 Jakub Jelinek <jakub@redhat.com> -+ -+ PR fortran/71687 -+ * f95-lang.c (struct binding_level): Add reversed field. -+ (clear_binding_level): Adjust initializer. -+ (getdecls): If reversed is clear, set it and nreverse the names -+ chain before returning it. -+ (poplevel): Use getdecls. -+ * trans-decl.c (gfc_generate_function_code, gfc_process_block_locals): -+ Use nreverse to pushdecl decls in the declaration order. -+ -+ PR fortran/71717 -+ * trans-openmp.c (gfc_omp_privatize_by_reference): Return false -+ for GFC_DECL_ASSOCIATE_VAR_P with POINTER_TYPE. -+ -+ 2016-06-30 Jakub Jelinek <jakub@redhat.com> -+ -+ PR fortran/71704 -+ * parse.c (matchs, matcho): Move right before decode_omp_directive. -+ If spec_only, only gfc_match the keyword and if successful, goto -+ do_spec_only. -+ (matchds, matchdo): Define. -+ (decode_omp_directive): Add spec_only local var and set it. -+ Use matchds or matchdo macros instead of matchs or matcho -+ for declare target, declare simd, declare reduction and threadprivate -+ directives. Return ST_GET_FCN_CHARACTERISTICS if a non-declarative -+ directive could be matched. -+ (next_statement): For ST_GET_FCN_CHARACTERISTICS restore -+ gfc_current_locus from old_locus even if there is no label. -+ -+ PR fortran/71705 -+ * trans-openmp.c (gfc_trans_omp_clauses): Set TREE_ADDRESSABLE on -+ decls in to/from clauses. -+ -+2016-06-29 Cesar Philippidis <cesar@codesourcery.com> -+ -+ Back port from trunk -+ 2016-06-29 Cesar Philippidis <cesar@codesourcery.com> -+ -+ * openmp.c (match_oacc_clause_gang): Rename to ... -+ (match_oacc_clause_gwv): this. Add support for OpenACC worker and -+ vector clauses. -+ (gfc_match_omp_clauses): Use match_oacc_clause_gwv for -+ OMP_CLAUSE_{GANG,WORKER,VECTOR}. Propagate any MATCH_ERRORs for -+ invalid OMP_CLAUSE_{ASYNC,WAIT,GANG,WORKER,VECTOR} clauses. -+ (gfc_match_oacc_wait): Propagate MATCH_ERROR for invalid -+ oacc_expr_lists. Adjust the first and needs_space arguments to -+ gfc_match_omp_clauses. -+ -+2016-06-27 Paul Thomas <pault@gcc.gnu.org> -+ -+ PR fortran/70673 -+ * frontend-passes.c (realloc_string_callback): Add a call to -+ gfc_dep_compare_expr. -+ -+2016-06-12 Dominique d'Humieres <dominiq@lps.ens.fr> -+ -+ PR fortran/60751 -+ * io.c (gfc_resolve_dt): Replace GFC_STD_GNU with GFC_STD_LEGACY. -+ -+2016-06-10 Thomas Schwinge <thomas@codesourcery.com> -+ -+ PR c/71381 -+ Backport from trunk r237290: -+ * openmp.c (gfc_match_oacc_cache): Add comment. -+ -+2016-06-05 Andre Vehreschild <vehre@gcc.gnu.org> -+ -+ PR fortran/69659 -+ * trans-array.c (gfc_trans_dummy_array_bias): For class arrays use -+ the address of the _data component to reference the arrays data -+ component. -+ -+2016-06-01 Paul Thomas <pault@gcc.gnu.org> -+ -+ PR fortran/71156 -+ * decl.c (copy_prefix): Add checks that the module procedure -+ declaration prefixes are compliant with the interface. Invert -+ order of existing elemental and pure checks. -+ * resolve.c (resolve_fl_procedure): Invert order of elemental -+ and pure errors. -+ -+2016-06-01 Jakub Jelinek <jakub@redhat.com> -+ -+ * parse.c (case_decl): Move ST_OMP_* to ... -+ (case_omp_decl): ... here, new macro. -+ (verify_st_order): For case_omp_decl, complain about -+ p->state >= ORDER_EXEC, but don't change p->state otherwise. -+ -+2016-05-26 Jerry DeLisle <jvdelisle@gcc.gnu.org> -+ -+ Backport from trunk. -+ PR fortran/66461 -+ * scanner.c (gfc_next_char_literal): Clear end_flag when adjusting -+ current locus back to old_locus. -+ -+2016-05-20 Jakub Jelinek <jakub@redhat.com> -+ -+ PR fortran/71204 -+ * frontend-passes.c (realloc_string_callback): Clear inserted_block -+ and changed_statement before calling create_var. -+ -+2016-05-15 Harald Anlauf <anlauf@gmx.de> -+ -+ PR fortran/69603 -+ * interface.c (compare_parameter): Check for non-NULL pointer. -+ -+2016-05-14 Fritz Reese <fritzoreese@gmail.com> -+ -+ Backport from trunk: r236242 -+ * gfortran.texi: Update example of DEC UNION extension. -+ -+ Backport from trunk: r236241 -+ PR fortran/71047 -+ * expr.c (gfc_default_initializer): Avoid extra component refs in -+ constructors for derived types and classes. -+ -+ Backport from trunk: r235999 -+ PR fortran/56226 -+ * module.c (dt_upper_string): Rename to gfc_dt_upper_string -+ (dt_lower_string): Likewise. -+ * gfortran.h: Make new gfc_dt_upper/lower_string global. -+ * class.c: Use gfc_dt_upper_string. -+ * decl.c: Likewise. -+ * symbol.c: Likewise. -+ * resolve.c (resolve_component): New function. -+ (resolve_fl_derived0): Move component loop code to resolve_component. -+ * parse.c (check_component): New function. -+ (parse_derived): Move loop code to check_component. -+ * lang.opt, invoke.texi, options.c : New option -fdec-structure. -+ * libgfortran.h (bt): New basic type BT_UNION. -+ * gfortran.h (gfc_option): New option -fdec-structure. -+ (gfc_get_union_type, gfc_compare_union_types): New prototypes. -+ (gfc_bt_struct, gfc_fl_struct, case_bt_struct, case_fl_struct): New -+ macros. -+ (gfc_find_component): Change prototype. -+ * match.h (gfc_match_member_sep, gfc_match_map, gfc_match_union, -+ gfc_match_structure_decl): New prototypes. -+ * parse.h (gfc_comp_struct): New macro. -+ * symbol.c (gfc_find_component): Search for components in nested unions -+ * class.c (insert_component_ref, gfc_add_component_ref, add_proc_comp, -+ copy_vtab_proc_comps): Update calls to gfc_find_component. -+ * primary.c (gfc_convert_to_structure_constructor): Likewise. -+ * symbol.c (gfc_add_component): Likewise. -+ * resolve.c (resolve_typebound_function, resolve_typebound_subroutine, -+ resolve_typebound_procedure, resolve_component, resolve_fl_derived): -+ Likewise. -+ * expr.c (get_union_init, component_init): New functions. -+ * decl.c (match_clist_expr, match_record_decl, get_struct_decl, -+ gfc_match_map, gfc_match_union, gfc_match_structure_decl): Likewise. -+ * interface.c (compare_components, gfc_compare_union_types): Likewise. -+ * match.c (gfc_match_member_sep): Likewise. -+ * parse.c (check_component, parse_union, parse_struct_map): Likewise. -+ * resolve.c (resolve_fl_struct): Likewise. -+ * symbol.c (find_union_component): Likewise. -+ * trans-types.c (gfc_get_union_type): Likewise. -+ * parse.c (parse_derived): Use new functions. -+ * interface.c (gfc_compare_derived_types, gfc_compare_types): Likewise. -+ * expr.c (gfc_default_initializer): Likewise. -+ * gfortran.texi: Support for DEC structures, unions, and maps. -+ * gfortran.h (gfc_statement, sym_flavor): Likewise. -+ * check.c (gfc_check_kill_sub): Likewise. -+ * expr.c (gfc_copy_expr, simplify_const_ref, -+ gfc_has_default_initializer): Likewise. -+ * decl.c (build_sym, match_data_constant, add_init_expr_to_sym, -+ match_pointer_init, build_struct, variable_decl, -+ gfc_match_decl_type_spec, gfc_mach_data-decl, gfc_match_entry, -+ gfc_match_end, gfc_match_derived_decl): Likewise. -+ * interface.c (check_interface0, check_interface1, -+ gfc_search_interface): Likewise. -+ * misc.c (gfc_basic_typename, gfc_typename): Likewise. -+ * module.c (add_true_name, build_tnt, bt_types, mio_typespec, -+ fix_mio_expr, load_needed, mio_symbol, read_module, write_symbol, -+ gfc_get_module_backend_decl): Likewise. -+ * parse.h (gfc_compile_state): Likewise. -+ * parse.c (decode_specification_statement, decode_statement, -+ gfc_ascii_statement, verify_st_order, parse_spec): Likewise. -+ * primary.c (gfc_match_varspec, gfc_match_structure_constructor, -+ gfc_match_rvalue, match_variable): Likewise. -+ * resolve.c (find_arglists, resolve_structure_cons, -+ is_illegal_recursion, resolve_generic_f, get_declared_from_expr, -+ resolve_typebound_subroutine, resolve_allocate_expr, -+ nonscalar_typebound_assign, generate_component_assignments, -+ resolve_fl_variable_derived, check_defined_assignments, -+ resolve_component, resolve_symbol, resolve_equivalence_derived): -+ Likewise. -+ * symbol.c (flavors, check_conflict, gfc_add_flavor, gfc_use_derived, -+ gfc_restore_last_undo_checkpoint, gfc_type_compatible, -+ gfc_find_dt_in_generic): Likewise. -+ * trans-decl.c (gfc_get_module_backend_decl, create_function_arglist, -+ gfc_create_module_variable, check_constant_initializer): Likewise. -+ * trans-expr.c (gfc_conv_component_ref, gfc_conv_initializer, -+ gfc_trans_alloc_subarray_assign, gfc_trans_subcomponent_assign, -+ gfc_conv_structure, gfc_trans_scalar_assign, copyable_array_p): -+ Likewise. -+ * trans-io.c (transfer_namelist_element, transfer_expr, -+ gfc_trans_transfer): Likewise. -+ * trans-stmt.c (gfc_trans_deallocate): Likewise. -+ * trans-types.c (gfc_typenode_for_spec, gfc_copy_dt_decls_ifequal, -+ gfc_get_derived_type): Likewise. -+ -+2016-05-11 Jakub Jelinek <jakub@redhat.com> -+ -+ PR fortran/70855 -+ * frontend-passes.c (inline_matmul_assign): Disable in !$omp workshare. -+ -+2016-04-29 Cesar Philippidis <cesar@codesourcery.com> -+ -+ PR middle-end/70626 -+ * trans-openmp.c (gfc_trans_oacc_combined_directive): Duplicate -+ the reduction clause in both parallel and loop directives. -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/check.c gcc-6-20160721/gcc/fortran/check.c ---- gcc-6.1.0/gcc/fortran/check.c 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/check.c 2016-05-14 19:52:46.000000000 +0000 -@@ -2592,7 +2592,7 @@ - bool - gfc_check_kind (gfc_expr *x) - { -- if (x->ts.type == BT_DERIVED || x->ts.type == BT_CLASS) -+ if (gfc_bt_struct (x->ts.type) || x->ts.type == BT_CLASS) - { - gfc_error ("%qs argument of %qs intrinsic at %L must be of " - "intrinsic type", gfc_current_intrinsic_arg[0]->name, -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/class.c gcc-6-20160721/gcc/fortran/class.c ---- gcc-6.1.0/gcc/fortran/class.c 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/class.c 2016-05-14 19:52:46.000000000 +0000 -@@ -78,12 +78,11 @@ - gcc_assert (ts->type == BT_DERIVED || ts->type == BT_CLASS); - type_sym = ts->u.derived; - -- new_ref = gfc_get_ref (); -- new_ref->type = REF_COMPONENT; -- new_ref->next = *ref; -- new_ref->u.c.sym = type_sym; -- new_ref->u.c.component = gfc_find_component (type_sym, name, true, true); -+ gfc_find_component (type_sym, name, true, true, &new_ref); - gcc_assert (new_ref->u.c.component); -+ while (new_ref->next) -+ new_ref = new_ref->next; -+ new_ref->next = *ref; - - if (new_ref->next) - { -@@ -206,8 +205,9 @@ - void - gfc_add_component_ref (gfc_expr *e, const char *name) - { -+ gfc_component *c; - gfc_ref **tail = &(e->ref); -- gfc_ref *next = NULL; -+ gfc_ref *ref, *next = NULL; - gfc_symbol *derived = e->symtree->n.sym->ts.u.derived; - while (*tail != NULL) - { -@@ -237,14 +237,13 @@ - else - /* Avoid losing memory. */ - gfc_free_ref_list (*tail); -- (*tail) = gfc_get_ref(); -- (*tail)->next = next; -- (*tail)->type = REF_COMPONENT; -- (*tail)->u.c.sym = derived; -- (*tail)->u.c.component = gfc_find_component (derived, name, true, true); -- gcc_assert((*tail)->u.c.component); -+ c = gfc_find_component (derived, name, true, true, tail); -+ gcc_assert (c); -+ for (ref = *tail; ref->next; ref = ref->next) -+ ; -+ ref->next = next; - if (!next) -- e->ts = (*tail)->u.c.component->ts; -+ e->ts = c->ts; - } - - -@@ -477,8 +476,7 @@ - if (derived->attr.unlimited_polymorphic) - strcpy (dt_name, "STAR"); - else -- strcpy (dt_name, derived->name); -- dt_name[0] = TOUPPER (dt_name[0]); -+ strcpy (dt_name, gfc_dt_upper_string (derived->name)); - if (derived->attr.unlimited_polymorphic) - sprintf (string, "_%s", dt_name); - else if (derived->module) -@@ -751,7 +749,7 @@ - if (tb->non_overridable) - return; - -- c = gfc_find_component (vtype, name, true, true); -+ c = gfc_find_component (vtype, name, true, true, NULL); - - if (c == NULL) - { -@@ -820,7 +818,7 @@ - - for (cmp = vtab->ts.u.derived->components; cmp; cmp = cmp->next) - { -- if (gfc_find_component (vtype, cmp->name, true, true)) -+ if (gfc_find_component (vtype, cmp->name, true, true, NULL)) - continue; - - add_proc_comp (vtype, cmp->name, cmp->tb); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/decl.c gcc-6-20160721/gcc/fortran/decl.c ---- gcc-6.1.0/gcc/fortran/decl.c 2016-03-12 13:59:10.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/decl.c 2016-06-01 18:46:11.000000000 +0000 -@@ -391,13 +391,13 @@ - - if (sym == NULL - || (sym->attr.flavor != FL_PARAMETER -- && (!dt_sym || dt_sym->attr.flavor != FL_DERIVED))) -+ && (!dt_sym || !gfc_fl_struct (dt_sym->attr.flavor)))) - { - gfc_error ("Symbol %qs must be a PARAMETER in DATA statement at %C", - name); - return MATCH_ERROR; - } -- else if (dt_sym && dt_sym->attr.flavor == FL_DERIVED) -+ else if (dt_sym && gfc_fl_struct (dt_sym->attr.flavor)) - return gfc_match_structure_constructor (dt_sym, result); - - /* Check to see if the value is an initialization array expression. */ -@@ -606,6 +606,161 @@ - /************************ Declaration statements *********************/ - - -+/* Like gfc_match_init_expr, but matches a 'clist' (old-style initialization -+ list). The difference here is the expression is a list of constants -+ and is surrounded by '/'. -+ The typespec ts must match the typespec of the variable which the -+ clist is initializing. -+ The arrayspec tells whether this should match a list of constants -+ corresponding to array elements or a scalar (as == NULL). */ -+ -+static match -+match_clist_expr (gfc_expr **result, gfc_typespec *ts, gfc_array_spec *as) -+{ -+ gfc_constructor_base array_head = NULL; -+ gfc_expr *expr = NULL; -+ match m; -+ locus where; -+ mpz_t repeat, size; -+ bool scalar; -+ int cmp; -+ -+ gcc_assert (ts); -+ -+ mpz_init_set_ui (repeat, 0); -+ mpz_init (size); -+ scalar = !as || !as->rank; -+ -+ /* We have already matched '/' - now look for a constant list, as with -+ top_val_list from decl.c, but append the result to an array. */ -+ if (gfc_match ("/") == MATCH_YES) -+ { -+ gfc_error ("Empty old style initializer list at %C"); -+ goto cleanup; -+ } -+ -+ where = gfc_current_locus; -+ for (;;) -+ { -+ m = match_data_constant (&expr); -+ if (m != MATCH_YES) -+ expr = NULL; /* match_data_constant may set expr to garbage */ -+ if (m == MATCH_NO) -+ goto syntax; -+ if (m == MATCH_ERROR) -+ goto cleanup; -+ -+ /* Found r in repeat spec r*c; look for the constant to repeat. */ -+ if ( gfc_match_char ('*') == MATCH_YES) -+ { -+ if (scalar) -+ { -+ gfc_error ("Repeat spec invalid in scalar initializer at %C"); -+ goto cleanup; -+ } -+ if (expr->ts.type != BT_INTEGER) -+ { -+ gfc_error ("Repeat spec must be an integer at %C"); -+ goto cleanup; -+ } -+ mpz_set (repeat, expr->value.integer); -+ gfc_free_expr (expr); -+ expr = NULL; -+ -+ m = match_data_constant (&expr); -+ if (m == MATCH_NO) -+ gfc_error ("Expected data constant after repeat spec at %C"); -+ if (m != MATCH_YES) -+ goto cleanup; -+ } -+ /* No repeat spec, we matched the data constant itself. */ -+ else -+ mpz_set_ui (repeat, 1); -+ -+ if (!scalar) -+ { -+ /* Add the constant initializer as many times as repeated. */ -+ for (; mpz_cmp_ui (repeat, 0) > 0; mpz_sub_ui (repeat, repeat, 1)) -+ { -+ /* Make sure types of elements match */ -+ if(ts && !gfc_compare_types (&expr->ts, ts) -+ && !gfc_convert_type (expr, ts, 1)) -+ goto cleanup; -+ -+ gfc_constructor_append_expr (&array_head, -+ gfc_copy_expr (expr), &gfc_current_locus); -+ } -+ -+ gfc_free_expr (expr); -+ expr = NULL; -+ } -+ -+ /* For scalar initializers quit after one element. */ -+ else -+ { -+ if(gfc_match_char ('/') != MATCH_YES) -+ { -+ gfc_error ("End of scalar initializer expected at %C"); -+ goto cleanup; -+ } -+ break; -+ } -+ -+ if (gfc_match_char ('/') == MATCH_YES) -+ break; -+ if (gfc_match_char (',') == MATCH_NO) -+ goto syntax; -+ } -+ -+ /* Set up expr as an array constructor. */ -+ if (!scalar) -+ { -+ expr = gfc_get_array_expr (ts->type, ts->kind, &where); -+ expr->ts = *ts; -+ expr->value.constructor = array_head; -+ -+ expr->rank = as->rank; -+ expr->shape = gfc_get_shape (expr->rank); -+ -+ /* Validate sizes. */ -+ gcc_assert (gfc_array_size (expr, &size)); -+ gcc_assert (spec_size (as, &repeat)); -+ cmp = mpz_cmp (size, repeat); -+ if (cmp < 0) -+ gfc_error ("Not enough elements in array initializer at %C"); -+ else if (cmp > 0) -+ gfc_error ("Too many elements in array initializer at %C"); -+ if (cmp) -+ goto cleanup; -+ } -+ -+ /* Make sure scalar types match. */ -+ else if (!gfc_compare_types (&expr->ts, ts) -+ && !gfc_convert_type (expr, ts, 1)) -+ goto cleanup; -+ -+ if (expr->ts.u.cl) -+ expr->ts.u.cl->length_from_typespec = 1; -+ -+ *result = expr; -+ mpz_clear (size); -+ mpz_clear (repeat); -+ return MATCH_YES; -+ -+syntax: -+ gfc_error ("Syntax error in old style initializer list at %C"); -+ -+cleanup: -+ if (expr) -+ expr->value.constructor = NULL; -+ gfc_free_expr (expr); -+ gfc_constructor_free (array_head); -+ mpz_clear (size); -+ mpz_clear (repeat); -+ return MATCH_ERROR; -+} -+ -+ - /* Auxiliary function to merge DIMENSION and CODIMENSION array specs. */ - - static bool -@@ -1239,7 +1394,8 @@ - - st = gfc_find_symtree (gfc_current_ns->sym_root, u_name); - -- if (st != 0) -+ /* STRUCTURE types can alias symbol names */ -+ if (st != 0 && st->n.sym->attr.flavor != FL_STRUCT) - { - gfc_error ("Symbol %qs at %C also declared as a type at %L", name, - &st->n.sym->declared_at); -@@ -1469,7 +1625,7 @@ - - /* Check if the assignment can happen. This has to be put off - until later for derived type variables and procedure pointers. */ -- if (sym->ts.type != BT_DERIVED && init->ts.type != BT_DERIVED -+ if (!gfc_bt_struct (sym->ts.type) && !gfc_bt_struct (init->ts.type) - && sym->ts.type != BT_CLASS && init->ts.type != BT_CLASS - && !sym->attr.proc_pointer - && !gfc_check_assign_symbol (sym, NULL, init)) -@@ -1608,7 +1764,7 @@ - If we mark my_int as iso_c (since we can see it's value - is equal to one of the named constants), then my_int_2 - will be considered C interoperable. */ -- if (sym->ts.type != BT_CHARACTER && sym->ts.type != BT_DERIVED) -+ if (sym->ts.type != BT_CHARACTER && !gfc_bt_struct (sym->ts.type)) - { - sym->ts.is_iso_c |= init->ts.is_iso_c; - sym->ts.is_c_interop |= init->ts.is_c_interop; -@@ -1666,6 +1822,7 @@ - build_struct (const char *name, gfc_charlen *cl, gfc_expr **init, - gfc_array_spec **as) - { -+ gfc_state_data *s; - gfc_component *c; - bool t = true; - -@@ -1689,6 +1846,35 @@ - } - } - -+ /* If we are in a nested union/map definition, gfc_add_component will not -+ properly find repeated components because: -+ (i) gfc_add_component does a flat search, where components of unions -+ and maps are implicity chained so nested components may conflict. -+ (ii) Unions and maps are not linked as components of their parent -+ structures until after they are parsed. -+ For (i) we use gfc_find_component which searches recursively, and for (ii) -+ we search each block directly from the parse stack until we find the top -+ level structure. */ -+ -+ s = gfc_state_stack; -+ if (s->state == COMP_UNION || s->state == COMP_MAP) -+ { -+ while (s->state == COMP_UNION || gfc_comp_struct (s->state)) -+ { -+ c = gfc_find_component (s->sym, name, true, true, NULL); -+ if (c != NULL) -+ { -+ gfc_error_now ("Component '%s' at %C already declared at %L", -+ name, &c->loc); -+ return false; -+ } -+ /* Break after we've searched the entire chain. */ -+ if (s->state == COMP_DERIVED || s->state == COMP_STRUCTURE) -+ break; -+ s = s->previous; -+ } -+ } -+ - if (!gfc_add_component (gfc_current_block(), name, &c)) - return false; - -@@ -1868,7 +2054,7 @@ - { - match m; - -- if (gfc_pure (NULL) && gfc_state_stack->state != COMP_DERIVED) -+ if (gfc_pure (NULL) && !gfc_comp_struct (gfc_state_stack->state)) - { - gfc_error ("Initialization of pointer at %C is not allowed in " - "a PURE procedure"); -@@ -2062,7 +2248,7 @@ - /* If this symbol has already shown up in a Cray Pointer declaration, - and this is not a component declaration, - then we want to set the type & bail out. */ -- if (flag_cray_pointer && gfc_current_state () != COMP_DERIVED) -+ if (flag_cray_pointer && !gfc_comp_struct (gfc_current_state ())) - { - gfc_find_symbol (name, gfc_current_ns, 1, &sym); - if (sym != NULL && sym->attr.cray_pointee) -@@ -2127,7 +2313,7 @@ - For components of derived types, it is not true, so we don't - create a symbol for those yet. If we fail to create the symbol, - bail out. */ -- if (gfc_current_state () != COMP_DERIVED -+ if (!gfc_comp_struct (gfc_current_state ()) - && !build_sym (name, cl, cl_deferred, &as, &var_locus)) - { - m = MATCH_ERROR; -@@ -2154,6 +2340,9 @@ - if (!gfc_notify_std (GFC_STD_GNU, "Old-style " - "initialization at %C")) - return MATCH_ERROR; -+ -+ /* Allow old style initializations for components of STRUCTUREs and MAPs -+ but not components of derived types. */ - else if (gfc_current_state () == COMP_DERIVED) - { - gfc_error ("Invalid old style initialization for derived type " -@@ -2162,7 +2351,23 @@ - goto cleanup; - } - -- return match_old_style_init (name); -+ /* For structure components, read the initializer as a special -+ expression and let the rest of this function apply the initializer -+ as usual. */ -+ else if (gfc_comp_struct (gfc_current_state ())) -+ { -+ m = match_clist_expr (&initializer, ¤t_ts, as); -+ if (m == MATCH_NO) -+ gfc_error ("Syntax error in old style initialization of %s at %C", -+ name); -+ if (m != MATCH_YES) -+ goto cleanup; -+ } -+ -+ /* Otherwise we treat the old style initialization just like a -+ DATA declaration for the current variable. */ -+ else -+ return match_old_style_init (name); - } - - /* The double colon must be present in order to have initializers. -@@ -2200,7 +2405,7 @@ - } - - if (current_attr.flavor != FL_PARAMETER && gfc_pure (NULL) -- && gfc_state_stack->state != COMP_DERIVED) -+ && !gfc_comp_struct (gfc_state_stack->state)) - { - gfc_error ("Initialization of variable at %C is not allowed in " - "a PURE procedure"); -@@ -2208,7 +2413,7 @@ - } - - if (current_attr.flavor != FL_PARAMETER -- && gfc_state_stack->state != COMP_DERIVED) -+ && !gfc_comp_struct (gfc_state_stack->state)) - gfc_unset_implicit_pure (gfc_current_ns->proc_name); - - if (m != MATCH_YES) -@@ -2217,7 +2422,7 @@ - } - - if (initializer != NULL && current_attr.allocatable -- && gfc_current_state () == COMP_DERIVED) -+ && gfc_comp_struct (gfc_current_state ())) - { - gfc_error ("Initialization of allocatable component at %C is not " - "allowed"); -@@ -2228,7 +2433,7 @@ - /* Add the initializer. Note that it is fine if initializer is - NULL here, because we sometimes also need to check if a - declaration *must* have an initialization expression. */ -- if (gfc_current_state () != COMP_DERIVED) -+ if (!gfc_comp_struct (gfc_current_state ())) - t = add_init_expr_to_sym (name, &initializer, &var_locus); - else - { -@@ -2236,6 +2441,12 @@ - && !current_attr.pointer && !initializer) - initializer = gfc_default_initializer (¤t_ts); - t = build_struct (name, cl, &initializer, &as); -+ -+ /* If we match a nested structure definition we expect to see the -+ * body even if the variable declarations blow up, so we need to keep -+ * the structure declaration around. */ -+ if (gfc_new_block && gfc_new_block->attr.flavor == FL_STRUCT) -+ gfc_commit_symbol (gfc_new_block); - } - - m = (t) ? MATCH_YES : MATCH_ERROR; -@@ -2724,6 +2935,36 @@ - } - - -+/* Matches a RECORD declaration. */ -+ -+static match -+match_record_decl (const char *name) -+{ -+ locus old_loc; -+ old_loc = gfc_current_locus; -+ -+ if (gfc_match (" record") == MATCH_YES) -+ { -+ if (!gfc_option.flag_dec_structure) -+ { -+ gfc_current_locus = old_loc; -+ gfc_error ("RECORD at %C is an extension, enable it with " -+ "-fdec-structure"); -+ return MATCH_ERROR; -+ } -+ if (gfc_match (" /%n/", name) != MATCH_YES) -+ { -+ gfc_error ("Structure name expected after RECORD at %C"); -+ gfc_current_locus = old_loc; -+ return MATCH_ERROR; -+ } -+ return MATCH_YES; -+ } -+ -+ gfc_current_locus = old_loc; -+ return MATCH_NO; -+} -+ - /* Matches a declaration-type-spec (F03:R502). If successful, sets the ts - structure to the matched specification. This is necessary for FUNCTION and - IMPLICIT statements. -@@ -2781,7 +3022,7 @@ - { - if ((m = gfc_match ("*)")) != MATCH_YES) - return m; -- if (gfc_current_state () == COMP_DERIVED) -+ if (gfc_comp_struct (gfc_current_state ())) - { - gfc_error ("Assumed type at %C is not allowed for components"); - return MATCH_ERROR; -@@ -2892,10 +3133,51 @@ - if (matched_type) - m = gfc_match_char (')'); - -- if (m == MATCH_YES) -- ts->type = BT_DERIVED; -+ if (m != MATCH_YES) -+ m = match_record_decl (name); -+ -+ if (matched_type || m == MATCH_YES) -+ { -+ ts->type = BT_DERIVED; -+ /* We accept record/s/ or type(s) where s is a structure, but we -+ * don't need all the extra derived-type stuff for structures. */ -+ if (gfc_find_symbol (gfc_dt_upper_string (name), NULL, 1, &sym)) -+ { -+ gfc_error ("Type name '%s' at %C is ambiguous", name); -+ return MATCH_ERROR; -+ } -+ if (sym && sym->attr.flavor == FL_STRUCT) -+ { -+ ts->u.derived = sym; -+ return MATCH_YES; -+ } -+ /* Actually a derived type. */ -+ } -+ - else - { -+ /* Match nested STRUCTURE declarations; only valid within another -+ structure declaration. */ -+ m = gfc_match (" structure"); -+ if (m == MATCH_ERROR) -+ return MATCH_ERROR; -+ else if (m == MATCH_YES) -+ { -+ if ( gfc_current_state () != COMP_STRUCTURE -+ && gfc_current_state () != COMP_MAP) -+ return MATCH_ERROR; -+ -+ m = gfc_match_structure_decl (); -+ if (m == MATCH_YES) -+ { -+ /* gfc_new_block is updated by match_structure_decl. */ -+ ts->type = BT_DERIVED; -+ ts->u.derived = gfc_new_block; -+ return MATCH_YES; -+ } -+ return MATCH_ERROR; -+ } -+ - /* Match CLASS declarations. */ - m = gfc_match (" class ( * )"); - if (m == MATCH_ERROR) -@@ -2964,9 +3246,7 @@ - stored in a symtree with the first letter of the name capitalized; the - symtree with the all lower-case name contains the associated - generic function. */ -- dt_name = gfc_get_string ("%c%s", -- (char) TOUPPER ((unsigned char) name[0]), -- (const char*)&name[1]); -+ dt_name = gfc_dt_upper_string (name); - sym = NULL; - dt_sym = NULL; - if (ts->kind != -1) -@@ -2998,7 +3278,7 @@ - return MATCH_NO; - } - -- if ((sym->attr.flavor != FL_UNKNOWN -+ if ((sym->attr.flavor != FL_UNKNOWN && sym->attr.flavor != FL_STRUCT - && !(sym->attr.flavor == FL_PROCEDURE && sym->attr.generic)) - || sym->attr.subroutine) - { -@@ -3038,7 +3318,7 @@ - - gfc_set_sym_referenced (dt_sym); - -- if (dt_sym->attr.flavor != FL_DERIVED -+ if (dt_sym->attr.flavor != FL_DERIVED && dt_sym->attr.flavor != FL_STRUCT - && !gfc_add_flavor (&dt_sym->attr, FL_DERIVED, sym->name, NULL)) - return MATCH_ERROR; - -@@ -3480,9 +3760,7 @@ - letter of the name capitalized; the symtree with the all - lower-case name contains the associated generic function. */ - st = gfc_new_symtree (&gfc_current_ns->sym_root, -- gfc_get_string ("%c%s", -- (char) TOUPPER ((unsigned char) name[0]), -- &name[1])); -+ gfc_dt_upper_string (name)); - st->n.sym = sym; - sym->refs++; - sym->attr.imported = 1; -@@ -4497,7 +4775,7 @@ - return m; - - if ((current_ts.type == BT_DERIVED || current_ts.type == BT_CLASS) -- && gfc_current_state () != COMP_DERIVED) -+ && !gfc_comp_struct (gfc_current_state ())) - { - sym = gfc_use_derived (current_ts.u.derived); - -@@ -4526,17 +4804,19 @@ - && !current_ts.u.derived->attr.zero_comp) - { - -- if (current_attr.pointer && gfc_current_state () == COMP_DERIVED) -+ if (current_attr.pointer && gfc_comp_struct (gfc_current_state ())) - goto ok; - - gfc_find_symbol (current_ts.u.derived->name, - current_ts.u.derived->ns, 1, &sym); - - /* Any symbol that we find had better be a type definition -- which has its components defined. */ -- if (sym != NULL && sym->attr.flavor == FL_DERIVED -+ which has its components defined, or be a structure definition -+ actively being parsed. */ -+ if (sym != NULL && gfc_fl_struct (sym->attr.flavor) - && (current_ts.u.derived->components != NULL -- || current_ts.u.derived->attr.zero_comp)) -+ || current_ts.u.derived->attr.zero_comp -+ || current_ts.u.derived == gfc_new_block)) - goto ok; - - gfc_error ("Derived type at %C has not been previously defined " -@@ -4698,12 +4978,51 @@ - static bool - copy_prefix (symbol_attribute *dest, locus *where) - { -- if (current_attr.pure && !gfc_add_pure (dest, where)) -+ if (dest->module_procedure) -+ { -+ if (current_attr.elemental) -+ dest->elemental = 1; -+ -+ if (current_attr.pure) -+ dest->pure = 1; -+ -+ if (current_attr.recursive) -+ dest->recursive = 1; -+ -+ /* Module procedures are unusual in that the 'dest' is copied from -+ the interface declaration. However, this is an oportunity to -+ check that the submodule declaration is compliant with the -+ interface. */ -+ if (dest->elemental && !current_attr.elemental) -+ { -+ gfc_error ("ELEMENTAL prefix in MODULE PROCEDURE interface is " -+ "missing at %L", where); - return false; -+ } -+ -+ if (dest->pure && !current_attr.pure) -+ { -+ gfc_error ("PURE prefix in MODULE PROCEDURE interface is " -+ "missing at %L", where); -+ return false; -+ } -+ -+ if (dest->recursive && !current_attr.recursive) -+ { -+ gfc_error ("RECURSIVE prefix in MODULE PROCEDURE interface is " -+ "missing at %L", where); -+ return false; -+ } -+ -+ return true; -+ } - - if (current_attr.elemental && !gfc_add_elemental (dest, where)) - return false; - -+ if (current_attr.pure && !gfc_add_pure (dest, where)) -+ return false; -+ - if (current_attr.recursive && !gfc_add_recursive (dest, where)) - return false; - -@@ -5791,6 +6110,10 @@ - gfc_error ("ENTRY statement at %C cannot appear within " - "an INTERFACE"); - break; -+ case COMP_STRUCTURE: -+ gfc_error ("ENTRY statement at %C cannot appear within " -+ "a STRUCTURE block"); -+ break; - case COMP_DERIVED: - gfc_error ("ENTRY statement at %C cannot appear within " - "a DERIVED TYPE block"); -@@ -6450,6 +6773,24 @@ - eos_ok = 0; - break; - -+ case COMP_MAP: -+ *st = ST_END_MAP; -+ target = " map"; -+ eos_ok = 0; -+ break; -+ -+ case COMP_UNION: -+ *st = ST_END_UNION; -+ target = " union"; -+ eos_ok = 0; -+ break; -+ -+ case COMP_STRUCTURE: -+ *st = ST_END_STRUCTURE; -+ target = " structure"; -+ eos_ok = 0; -+ break; -+ - case COMP_DERIVED: - case COMP_DERIVED_CONTAINS: - *st = ST_END_TYPE; -@@ -8020,6 +8361,208 @@ - } - - -+/* Common function for type declaration blocks similar to derived types, such -+ as STRUCTURES and MAPs. Unlike derived types, a structure type -+ does NOT have a generic symbol matching the name given by the user. -+ STRUCTUREs can share names with variables and PARAMETERs so we must allow -+ for the creation of an independent symbol. -+ Other parameters are a message to prefix errors with, the name of the new -+ type to be created, and the flavor to add to the resulting symbol. */ -+ -+static bool -+get_struct_decl (const char *name, sym_flavor fl, locus *decl, -+ gfc_symbol **result) -+{ -+ gfc_symbol *sym; -+ locus where; -+ -+ gcc_assert (name[0] == (char) TOUPPER (name[0])); -+ -+ if (decl) -+ where = *decl; -+ else -+ where = gfc_current_locus; -+ -+ if (gfc_get_symbol (name, NULL, &sym)) -+ return false; -+ -+ if (!sym) -+ { -+ gfc_internal_error ("Failed to create structure type '%s' at %C", name); -+ return false; -+ } -+ -+ if (sym->components != NULL || sym->attr.zero_comp) -+ { -+ gfc_error ("Type definition of '%s' at %C was already defined at %L", -+ sym->name, &sym->declared_at); -+ return false; -+ } -+ -+ sym->declared_at = where; -+ -+ if (sym->attr.flavor != fl -+ && !gfc_add_flavor (&sym->attr, fl, sym->name, NULL)) -+ return false; -+ -+ if (!sym->hash_value) -+ /* Set the hash for the compound name for this type. */ -+ sym->hash_value = gfc_hash_value (sym); -+ -+ /* Normally the type is expected to have been completely parsed by the time -+ a field declaration with this type is seen. For unions, maps, and nested -+ structure declarations, we need to indicate that it is okay that we -+ haven't seen any components yet. This will be updated after the structure -+ is fully parsed. */ -+ sym->attr.zero_comp = 0; -+ -+ /* Structures always act like derived-types with the SEQUENCE attribute */ -+ gfc_add_sequence (&sym->attr, sym->name, NULL); -+ -+ if (result) *result = sym; -+ -+ return true; -+} -+ -+ -+/* Match the opening of a MAP block. Like a struct within a union in C; -+ behaves identical to STRUCTURE blocks. */ -+ -+match -+gfc_match_map (void) -+{ -+ /* Counter used to give unique internal names to map structures. */ -+ static unsigned int gfc_map_id = 0; -+ char name[GFC_MAX_SYMBOL_LEN + 1]; -+ gfc_symbol *sym; -+ locus old_loc; -+ -+ old_loc = gfc_current_locus; -+ -+ if (gfc_match_eos () != MATCH_YES) -+ { -+ gfc_error ("Junk after MAP statement at %C"); -+ gfc_current_locus = old_loc; -+ return MATCH_ERROR; -+ } -+ -+ /* Map blocks are anonymous so we make up unique names for the symbol table -+ which are invalid Fortran identifiers. */ -+ snprintf (name, GFC_MAX_SYMBOL_LEN + 1, "MM$%u", gfc_map_id++); -+ -+ if (!get_struct_decl (name, FL_STRUCT, &old_loc, &sym)) -+ return MATCH_ERROR; -+ -+ gfc_new_block = sym; -+ -+ return MATCH_YES; -+} -+ -+ -+/* Match the opening of a UNION block. */ -+ -+match -+gfc_match_union (void) -+{ -+ /* Counter used to give unique internal names to union types. */ -+ static unsigned int gfc_union_id = 0; -+ char name[GFC_MAX_SYMBOL_LEN + 1]; -+ gfc_symbol *sym; -+ locus old_loc; -+ -+ old_loc = gfc_current_locus; -+ -+ if (gfc_match_eos () != MATCH_YES) -+ { -+ gfc_error ("Junk after UNION statement at %C"); -+ gfc_current_locus = old_loc; -+ return MATCH_ERROR; -+ } -+ -+ /* Unions are anonymous so we make up unique names for the symbol table -+ which are invalid Fortran identifiers. */ -+ snprintf (name, GFC_MAX_SYMBOL_LEN + 1, "UU$%u", gfc_union_id++); -+ -+ if (!get_struct_decl (name, FL_UNION, &old_loc, &sym)) -+ return MATCH_ERROR; -+ -+ gfc_new_block = sym; -+ -+ return MATCH_YES; -+} -+ -+ -+/* Match the beginning of a STRUCTURE declaration. This is similar to -+ matching the beginning of a derived type declaration with a few -+ twists. The resulting type symbol has no access control or other -+ interesting attributes. */ -+ -+match -+gfc_match_structure_decl (void) -+{ -+ /* Counter used to give unique internal names to anonymous structures. */ -+ int gfc_structure_id = 0; -+ char name[GFC_MAX_SYMBOL_LEN + 1]; -+ gfc_symbol *sym; -+ match m; -+ locus where; -+ -+ if(!gfc_option.flag_dec_structure) -+ { -+ gfc_error ("STRUCTURE at %C is a DEC extension, enable with " -+ "-fdec-structure"); -+ return MATCH_ERROR; -+ } -+ -+ name[0] = '\0'; -+ -+ m = gfc_match (" /%n/", name); -+ if (m != MATCH_YES) -+ { -+ /* Non-nested structure declarations require a structure name. */ -+ if (!gfc_comp_struct (gfc_current_state ())) -+ { -+ gfc_error ("Structure name expected in non-nested structure " -+ "declaration at %C"); -+ return MATCH_ERROR; -+ } -+ /* This is an anonymous structure; make up a unique name for it -+ (upper-case letters never make it to symbol names from the source). -+ The important thing is initializing the type variable -+ and setting gfc_new_symbol, which is immediately used by -+ parse_structure () and variable_decl () to add components of -+ this type. */ -+ snprintf (name, GFC_MAX_SYMBOL_LEN + 1, "SS$%u", gfc_structure_id++); -+ } -+ -+ where = gfc_current_locus; -+ /* No field list allowed after non-nested structure declaration. */ -+ if (!gfc_comp_struct (gfc_current_state ()) -+ && gfc_match_eos () != MATCH_YES) -+ { -+ gfc_error ("Junk after non-nested STRUCTURE statement at %C"); -+ return MATCH_ERROR; -+ } -+ -+ /* Make sure the name is not the name of an intrinsic type. */ -+ if (gfc_is_intrinsic_typename (name)) -+ { -+ gfc_error ("Structure name '%s' at %C cannot be the same as an" -+ " intrinsic type", name); -+ return MATCH_ERROR; -+ } -+ -+ /* Store the actual type symbol for the structure with an upper-case first -+ letter (an invalid Fortran identifier). */ -+ -+ sprintf (name, gfc_dt_upper_string (name)); -+ if (!get_struct_decl (name, FL_STRUCT, &where, &sym)) -+ return MATCH_ERROR; -+ -+ gfc_new_block = sym; -+ return MATCH_YES; -+} -+ - /* Match the beginning of a derived type declaration. If a type name - was the result of a function, then it is possible to have a symbol - already to be known as a derived type yet have no components. */ -@@ -8037,7 +8580,7 @@ - bool seen_attr = false; - gfc_interface *intr = NULL, *head; - -- if (gfc_current_state () == COMP_DERIVED) -+ if (gfc_comp_struct (gfc_current_state ())) - return MATCH_NO; - - name[0] = '\0'; -@@ -8111,9 +8654,7 @@ - if (!sym) - { - /* Use upper case to save the actual derived-type symbol. */ -- gfc_get_symbol (gfc_get_string ("%c%s", -- (char) TOUPPER ((unsigned char) gensym->name[0]), -- &gensym->name[1]), NULL, &sym); -+ gfc_get_symbol (gfc_dt_upper_string (gensym->name), NULL, &sym); - sym->name = gfc_get_string (gensym->name); - head = gensym->generic; - intr = gfc_get_interface (); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/dump-parse-tree.c gcc-6-20160721/gcc/fortran/dump-parse-tree.c ---- gcc-6.1.0/gcc/fortran/dump-parse-tree.c 2016-02-28 22:24:27.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/dump-parse-tree.c 2016-05-14 19:52:46.000000000 +0000 -@@ -106,6 +106,7 @@ - { - case BT_DERIVED: - case BT_CLASS: -+ case BT_UNION: - fprintf (dumpfile, "%s", ts->u.derived->name); - break; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/expr.c gcc-6-20160721/gcc/fortran/expr.c ---- gcc-6.1.0/gcc/fortran/expr.c 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/expr.c 2016-05-14 19:52:46.000000000 +0000 -@@ -335,7 +335,7 @@ - - case BT_HOLLERITH: - case BT_LOGICAL: -- case BT_DERIVED: -+ case_bt_struct: - case BT_CLASS: - case BT_ASSUMED: - break; /* Already done. */ -@@ -1279,7 +1279,7 @@ - /* For extended types, check if the desired component is in one of the - * parent types. */ - while (ext > 0 && gfc_find_component (dt->components->ts.u.derived, -- pick->name, true, true)) -+ pick->name, true, true, NULL)) - { - dt = dt->components->ts.u.derived; - c = gfc_constructor_first (c->expr->value.constructor); -@@ -1649,7 +1649,7 @@ - - case AR_FULL: - if (p->ref->next != NULL -- && (p->ts.type == BT_CHARACTER || p->ts.type == BT_DERIVED)) -+ && (p->ts.type == BT_CHARACTER || gfc_bt_struct (p->ts.type))) - { - for (c = gfc_constructor_first (p->value.constructor); - c; c = gfc_constructor_next (c)) -@@ -1659,7 +1659,7 @@ - return false; - } - -- if (p->ts.type == BT_DERIVED -+ if (gfc_bt_struct (p->ts.type) - && p->ref->next - && (c = gfc_constructor_first (p->value.constructor))) - { -@@ -3926,9 +3926,9 @@ - { - gfc_component *c; - -- gcc_assert (der->attr.flavor == FL_DERIVED); -+ gcc_assert (gfc_fl_struct (der->attr.flavor)); - for (c = der->components; c; c = c->next) -- if (c->ts.type == BT_DERIVED) -+ if (gfc_bt_struct (c->ts.type)) - { - if (!c->attr.pointer && !c->attr.proc_pointer - && gfc_has_default_initializer (c->ts.u.derived)) -@@ -3975,6 +3975,10 @@ - - if (comp->initializer) - { -+ /* Save the component ref for STRUCTUREs and UNIONs. */ -+ if (ts->u.derived->attr.flavor == FL_STRUCT -+ || ts->u.derived->attr.flavor == FL_UNION) -+ ctor->n.component = comp; - ctor->expr = gfc_copy_expr (comp->initializer); - if ((comp->ts.type != comp->initializer->ts.type - || comp->ts.kind != comp->initializer->ts.kind) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/f95-lang.c gcc-6-20160721/gcc/fortran/f95-lang.c ---- gcc-6.1.0/gcc/fortran/f95-lang.c 2016-02-08 15:36:16.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/f95-lang.c 2016-07-02 10:25:52.000000000 +0000 -@@ -289,6 +289,9 @@ - tree blocks; - /* The binding level containing this one (the enclosing binding level). */ - struct binding_level *level_chain; -+ /* True if nreverse has been already called on names; if false, names -+ are ordered from newest declaration to oldest one. */ -+ bool reversed; - }; - - /* The binding level currently in effect. */ -@@ -299,7 +302,7 @@ - static GTY(()) struct binding_level *global_binding_level; - - /* Binding level structures are initialized by copying this one. */ --static struct binding_level clear_binding_level = { NULL, NULL, NULL }; -+static struct binding_level clear_binding_level = { NULL, NULL, NULL, false }; - - - /* Return true if we are in the global binding level. */ -@@ -313,6 +316,11 @@ - tree - getdecls (void) - { -+ if (!current_binding_level->reversed) -+ { -+ current_binding_level->reversed = true; -+ current_binding_level->names = nreverse (current_binding_level->names); -+ } - return current_binding_level->names; - } - -@@ -350,7 +358,7 @@ - binding level that we are about to exit and which is returned by this - routine. */ - tree block_node = NULL_TREE; -- tree decl_chain = current_binding_level->names; -+ tree decl_chain = getdecls (); - tree subblock_chain = current_binding_level->blocks; - tree subblock_node; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/frontend-passes.c gcc-6-20160721/gcc/fortran/frontend-passes.c ---- gcc-6.1.0/gcc/fortran/frontend-passes.c 2016-02-28 22:27:55.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/frontend-passes.c 2016-07-10 21:26:28.000000000 +0000 -@@ -174,8 +174,17 @@ - - if (!gfc_check_dependency (expr1, expr2, true)) - return 0; -- -+ -+ /* gfc_check_dependency doesn't always pick up identical expressions. -+ However, eliminating the above sends the compiler into an infinite -+ loop on valid expressions. Without this check, the gimplifier emits -+ an ICE for a = a, where a is deferred character length. */ -+ if (!gfc_dep_compare_expr (expr1, expr2)) -+ return 0; -+ - current_code = c; -+ inserted_block = NULL; -+ changed_statement = NULL; - n = create_var (expr2, "trim"); - co->expr2 = n; - return 0; -@@ -656,12 +665,10 @@ - { - gfc_expr *length; - -+ symbol->ts.u.cl = gfc_new_charlen (ns, NULL); - length = constant_string_length (e); - if (length) -- { -- symbol->ts.u.cl = gfc_new_charlen (ns, NULL); -- symbol->ts.u.cl->length = length; -- } -+ symbol->ts.u.cl->length = length; - else - symbol->attr.allocatable = 1; - } -@@ -2812,6 +2819,12 @@ - if (in_where) - return 0; - -+ /* For now don't do anything in OpenMP workshare, it confuses -+ its translation, which expects only the allowed statements in there. -+ We should figure out how to parallelize this eventually. */ -+ if (in_omp_workshare) -+ return 0; -+ - expr1 = co->expr1; - expr2 = co->expr2; - if (expr2->expr_type != EXPR_FUNCTION -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/gfortran.h gcc-6-20160721/gcc/fortran/gfortran.h ---- gcc-6.1.0/gcc/fortran/gfortran.h 2016-03-17 15:07:54.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/gfortran.h 2016-05-14 19:52:46.000000000 +0000 -@@ -62,6 +62,15 @@ - - #define gfc_is_whitespace(c) ((c==' ') || (c=='\t')) - -+/* Macros to check for groups of structure-like types and flavors since -+ derived types, structures, maps, unions are often treated similarly. */ -+#define gfc_bt_struct(t) \ -+ ((t) == BT_DERIVED || (t) == BT_UNION) -+#define gfc_fl_struct(f) \ -+ ((f) == FL_DERIVED || (f) == FL_UNION || (f) == FL_STRUCT) -+#define case_bt_struct case BT_DERIVED: case BT_UNION -+#define case_fl_struct case FL_DERIVED: case FL_UNION: case FL_STRUCT -+ - /* Stringization. */ - #define stringize(x) expand_macro(x) - #define expand_macro(x) # x -@@ -203,6 +212,8 @@ - ST_POINTER_ASSIGNMENT, ST_SELECT_CASE, ST_SEQUENCE, ST_SIMPLE_IF, - ST_STATEMENT_FUNCTION, ST_DERIVED_DECL, ST_LABEL_ASSIGNMENT, ST_ENUM, - ST_ENUMERATOR, ST_END_ENUM, ST_SELECT_TYPE, ST_TYPE_IS, ST_CLASS_IS, -+ ST_STRUCTURE_DECL, ST_END_STRUCTURE, -+ ST_UNION, ST_END_UNION, ST_MAP, ST_END_MAP, - ST_OACC_PARALLEL_LOOP, ST_OACC_END_PARALLEL_LOOP, ST_OACC_PARALLEL, - ST_OACC_END_PARALLEL, ST_OACC_KERNELS, ST_OACC_END_KERNELS, ST_OACC_DATA, - ST_OACC_END_DATA, ST_OACC_HOST_DATA, ST_OACC_END_HOST_DATA, ST_OACC_LOOP, -@@ -254,12 +265,12 @@ - }; - - /* Symbol flavors: these are all mutually exclusive. -- 10 elements = 4 bits. */ -+ 12 elements = 4 bits. */ - enum sym_flavor - { - FL_UNKNOWN = 0, FL_PROGRAM, FL_BLOCK_DATA, FL_MODULE, FL_VARIABLE, - FL_PARAMETER, FL_LABEL, FL_PROCEDURE, FL_DERIVED, FL_NAMELIST, -- FL_VOID -+ FL_UNION, FL_STRUCT, FL_VOID - }; - - /* Procedure types. 7 elements = 3 bits. */ -@@ -2523,6 +2534,8 @@ - int flag_init_character; - char flag_init_character_value; - -+ int flag_dec_structure; -+ - int fpe; - int fpe_summary; - int rtcheck; -@@ -2743,6 +2756,7 @@ - int gfc_validate_kind (bt, int, bool); - int gfc_get_int_kind_from_width_isofortranenv (int size); - int gfc_get_real_kind_from_width_isofortranenv (int size); -+tree gfc_get_union_type (gfc_symbol *); - tree gfc_get_derived_type (gfc_symbol * derived); - extern int gfc_index_integer_kind; - extern int gfc_default_integer_kind; -@@ -2831,7 +2845,8 @@ - bool gfc_add_component (gfc_symbol *, const char *, gfc_component **); - gfc_symbol *gfc_use_derived (gfc_symbol *); - gfc_symtree *gfc_use_derived_tree (gfc_symtree *); --gfc_component *gfc_find_component (gfc_symbol *, const char *, bool, bool); -+gfc_component *gfc_find_component (gfc_symbol *, const char *, bool, bool, -+ gfc_ref **); - - gfc_st_label *gfc_get_st_label (int); - void gfc_free_st_label (gfc_st_label *); -@@ -3174,6 +3189,8 @@ - void gfc_dump_module (const char *, int); - bool gfc_check_symbol_access (gfc_symbol *); - void gfc_free_use_stmts (gfc_use_list *); -+const char *gfc_dt_lower_string (const char *); -+const char *gfc_dt_upper_string (const char *); - - /* primary.c */ - symbol_attribute gfc_variable_attr (gfc_expr *, gfc_typespec *); -Only in gcc-6.1.0/gcc/fortran: gfortran.info -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/gfortran.texi gcc-6-20160721/gcc/fortran/gfortran.texi ---- gcc-6.1.0/gcc/fortran/gfortran.texi 2016-04-13 13:17:45.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/gfortran.texi 2016-05-14 19:52:46.000000000 +0000 -@@ -474,9 +474,9 @@ - standard-compliant Fortran 95, Fortran 90, and Fortran 77 programs, - including a number of standard and non-standard extensions, and can be - used on real-world programs. In particular, the supported extensions --include OpenMP, Cray-style pointers, and several Fortran 2003 and Fortran --2008 features, including TR 15581. However, it is still under --development and has a few remaining rough edges. -+include OpenMP, Cray-style pointers, some old vendor extensions, and several -+Fortran 2003 and Fortran 2008 features, including TR 15581. However, it is -+still under development and has a few remaining rough edges. - There also is initial support for OpenACC. - Note that this is an experimental feature, incomplete, and subject to - change in future versions of GCC. See -@@ -1459,6 +1459,8 @@ - * OpenACC:: - * Argument list functions:: - * Read/Write after EOF marker:: -+* STRUCTURE and RECORD:: -+* UNION and MAP:: - @end menu - - @node Old-style kind specifications -@@ -2117,40 +2119,6 @@ - the file before the EOF marker. As an extension, the run-time error may - be disabled using -std=legacy. - --@node Extensions not implemented in GNU Fortran --@section Extensions not implemented in GNU Fortran --@cindex extensions, not implemented -- --The long history of the Fortran language, its wide use and broad --userbase, the large number of different compiler vendors and the lack of --some features crucial to users in the first standards have lead to the --existence of a number of important extensions to the language. While --some of the most useful or popular extensions are supported by the GNU --Fortran compiler, not all existing extensions are supported. This section --aims at listing these extensions and offering advice on how best make --code that uses them running with the GNU Fortran compiler. -- --@c More can be found here: --@c -- https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/Missing-Features.html --@c -- the list of Fortran and libgfortran bugs closed as WONTFIX: --@c http://tinyurl.com/2u4h5y -- --@menu --* STRUCTURE and RECORD:: --@c * UNION and MAP:: --* ENCODE and DECODE statements:: --* Variable FORMAT expressions:: --@c * Q edit descriptor:: --@c * AUTOMATIC statement:: --@c * TYPE and ACCEPT I/O Statements:: --@c * .XOR. operator:: --@c * CARRIAGECONTROL, DEFAULTFILE, DISPOSE and RECORDTYPE I/O specifiers:: --@c * Omitted arguments in procedure call:: --* Alternate complex function syntax:: --* Volatile COMMON blocks:: --* OPEN( ... NAME=):: --@end menu -- - - @node STRUCTURE and RECORD - @subsection @code{STRUCTURE} and @code{RECORD} -@@ -2226,16 +2194,211 @@ - print *, store_catalog(12) - @end example - -+@noindent -+GNU Fortran implements STRUCTURES like derived types with the following -+rules and exceptions: -+ -+@itemize @bullet -+@item Structures act like derived types with the @code{SEQUENCE} attribute. -+Otherwise they may contain no specifiers. - --@c @node UNION and MAP --@c @subsection @code{UNION} and @code{MAP} --@c @cindex @code{UNION} --@c @cindex @code{MAP} --@c --@c For help writing this one, see --@c http://www.eng.umd.edu/~nsw/ench250/fortran1.htm#UNION and --@c http://www.tacc.utexas.edu/services/userguides/pgi/pgiws_ug/pgi32u06.htm -+@item Structures may share names with other symbols. For example, the following -+is invalid for derived types, but valid for structures: - -+@smallexample -+structure /header/ -+ ! ... -+end structure -+record /header/ header -+@end smallexample -+ -+@item Structure types may be declared nested within another parent structure. -+The syntax is: -+@smallexample -+structure /type-name/ -+ ... -+ structure [/<type-name>/] <field-list> -+... -+@end smallexample -+ -+The type name may be ommitted, in which case the structure type itself is -+anonymous, and other structures of the same type cannot be instantiated. The -+following shows some examples: -+ -+@example -+structure /appointment/ -+ ! nested structure definition: app_time is an array of two 'time' -+ structure /time/ app_time (2) -+ integer(1) hour, minute -+ end structure -+ character(10) memo -+end structure -+ -+! The 'time' structure is still usable -+record /time/ now -+now = time(5, 30) -+ -+... -+ -+structure /appointment/ -+ ! anonymous nested structure definition -+ structure start, end -+ integer(1) hour, minute -+ end structure -+ character(10) memo -+end structure -+@end example -+ -+@item Structures may contain @code{UNION} blocks. For more detail see the -+section on @ref{UNION and MAP}. -+ -+@item Structures support old-style initialization of components, like -+those described in @ref{Old-style variable initialization}. For array -+initializers, an initializer may contain a repeat specification of the form -+@code{<literal-integer> * <constant-initializer>}. The value of the integer -+indicates the number of times to repeat the constant initializer when expanding -+the initializer list. -+@end itemize -+ -+@node UNION and MAP -+@subsection @code{UNION} and @code{MAP} -+@cindex @code{UNION} -+@cindex @code{MAP} -+ -+Unions are an old vendor extension which were commonly used with the -+non-standard @ref{STRUCTURE and RECORD} extensions. Use of @code{UNION} and -+@code{MAP} is automatically enabled with @option{-fdec-structure}. -+ -+A @code{UNION} declaration occurs within a structure; within the definition of -+each union is a number of @code{MAP} blocks. Each @code{MAP} shares storage -+with its sibling maps (in the same union), and the size of the union is the -+size of the largest map within it, just as with unions in C. The major -+difference is that component references do not indicate which union or map the -+component is in (the compiler gets to figure that out). -+ -+Here is a small example: -+@smallexample -+structure /myunion/ -+union -+ map -+ character(2) w0, w1, w2 -+ end map -+ map -+ character(6) long -+ end map -+end union -+end structure -+ -+record /myunion/ rec -+! After this assignment... -+rec.long = 'hello!' -+ -+! The following is true: -+! rec.w0 === 'he' -+! rec.w1 === 'll' -+! rec.w2 === 'o!' -+@end smallexample -+ -+The two maps share memory, and the size of the union is ultimately six bytes: -+ -+@example -+0 1 2 3 4 5 6 Byte offset -+------------------------------- -+| | | | | | | -+------------------------------- -+ -+^ W0 ^ W1 ^ W2 ^ -+ \-------/ \-------/ \-------/ -+ -+^ LONG ^ -+ \---------------------------/ -+@end example -+ -+Following is an example mirroring the layout of an Intel x86_64 register: -+ -+@example -+structure /reg/ -+ union ! U0 ! rax -+ map -+ character(16) rx -+ end map -+ map -+ character(8) rh ! rah -+ union ! U1 -+ map -+ character(8) rl ! ral -+ end map -+ map -+ character(8) ex ! eax -+ end map -+ map -+ character(4) eh ! eah -+ union ! U2 -+ map -+ character(4) el ! eal -+ end map -+ map -+ character(4) x ! ax -+ end map -+ map -+ character(2) h ! ah -+ character(2) l ! al -+ end map -+ end union -+ end map -+ end union -+ end map -+ end union -+end structure -+record /reg/ a -+ -+! After this assignment... -+a.rx = 'AAAAAAAA.BBB.C.D' -+ -+! The following is true: -+a.rx === 'AAAAAAAA.BBB.C.D' -+a.rh === 'AAAAAAAA' -+a.rl === '.BBB.C.D' -+a.ex === '.BBB.C.D' -+a.eh === '.BBB' -+a.el === '.C.D' -+a.x === '.C.D' -+a.h === '.C' -+a.l === '.D' -+@end example -+ -+ -+@node Extensions not implemented in GNU Fortran -+@section Extensions not implemented in GNU Fortran -+@cindex extensions, not implemented -+ -+The long history of the Fortran language, its wide use and broad -+userbase, the large number of different compiler vendors and the lack of -+some features crucial to users in the first standards have lead to the -+existence of a number of important extensions to the language. While -+some of the most useful or popular extensions are supported by the GNU -+Fortran compiler, not all existing extensions are supported. This section -+aims at listing these extensions and offering advice on how best make -+code that uses them running with the GNU Fortran compiler. -+ -+@c More can be found here: -+@c -- https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/Missing-Features.html -+@c -- the list of Fortran and libgfortran bugs closed as WONTFIX: -+@c http://tinyurl.com/2u4h5y -+ -+@menu -+* ENCODE and DECODE statements:: -+* Variable FORMAT expressions:: -+@c * Q edit descriptor:: -+@c * AUTOMATIC statement:: -+@c * TYPE and ACCEPT I/O Statements:: -+@c * .XOR. operator:: -+@c * CARRIAGECONTROL, DEFAULTFILE, DISPOSE and RECORDTYPE I/O specifiers:: -+@c * Omitted arguments in procedure call:: -+* Alternate complex function syntax:: -+* Volatile COMMON blocks:: -+* OPEN( ... NAME=):: -+@end menu - - @node ENCODE and DECODE statements - @subsection @code{ENCODE} and @code{DECODE} statements -@@ -2355,7 +2518,6 @@ - @code{VOLATILE} variables in @code{COMMON} blocks since revision 4.3. - - -- - @node OPEN( ... NAME=) - @subsection @code{OPEN( ... NAME=)} - @cindex @code{NAM} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/interface.c gcc-6-20160721/gcc/fortran/interface.c ---- gcc-6.1.0/gcc/fortran/interface.c 2016-01-24 22:18:20.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/interface.c 2016-05-15 18:48:40.000000000 +0000 -@@ -387,19 +387,147 @@ - } - - -+/* Compare components according to 4.4.2 of the Fortran standard. */ -+ -+static int -+compare_components (gfc_component *cmp1, gfc_component *cmp2, -+ gfc_symbol *derived1, gfc_symbol *derived2) -+{ -+ gfc_symbol *d1, *d2; -+ bool anonymous = false; -+ -+ /* Unions, maps, and anonymous structures all have names like "[xX]X$\d+" -+ which should not be compared. */ -+ d1 = cmp1->ts.u.derived; -+ d2 = cmp2->ts.u.derived; -+ if ( (d1 && (d1->attr.flavor == FL_STRUCT || d1->attr.flavor == FL_UNION) -+ && ISUPPER (cmp1->name[1])) -+ || (d2 && (d2->attr.flavor == FL_STRUCT || d2->attr.flavor == FL_UNION) -+ && ISUPPER (cmp1->name[1]))) -+ anonymous = true; -+ -+ if (!anonymous && strcmp (cmp1->name, cmp2->name) != 0) -+ return 0; -+ -+ if (cmp1->attr.access != cmp2->attr.access) -+ return 0; -+ -+ if (cmp1->attr.pointer != cmp2->attr.pointer) -+ return 0; -+ -+ if (cmp1->attr.dimension != cmp2->attr.dimension) -+ return 0; -+ -+ if (cmp1->attr.allocatable != cmp2->attr.allocatable) -+ return 0; -+ -+ if (cmp1->attr.dimension && gfc_compare_array_spec (cmp1->as, cmp2->as) == 0) -+ return 0; -+ -+ /* Make sure that link lists do not put this function into an -+ endless recursive loop! */ -+ if (!(cmp1->ts.type == BT_DERIVED && derived1 == cmp1->ts.u.derived) -+ && !(cmp2->ts.type == BT_DERIVED && derived2 == cmp2->ts.u.derived) -+ && gfc_compare_types (&cmp1->ts, &cmp2->ts) == 0) -+ return 0; -+ -+ else if ( (cmp1->ts.type == BT_DERIVED && derived1 == cmp1->ts.u.derived) -+ && !(cmp2->ts.type == BT_DERIVED && derived2 == cmp2->ts.u.derived)) -+ return 0; -+ -+ else if (!(cmp1->ts.type == BT_DERIVED && derived1 == cmp1->ts.u.derived) -+ && (cmp2->ts.type == BT_DERIVED && derived2 == cmp2->ts.u.derived)) -+ return 0; -+ -+ return 1; -+} -+ -+ -+/* Compare two union types by comparing the components of their maps. -+ Because unions and maps are anonymous their types get special internal -+ names; therefore the usual derived type comparison will fail on them. -+ -+ Returns nonzero if equal, as with gfc_compare_derived_types. Also as with -+ gfc_compare_derived_types, 'equal' is closer to meaning 'duplicate -+ definitions' than 'equivalent structure'. */ -+ -+int -+gfc_compare_union_types (gfc_symbol *un1, gfc_symbol *un2) -+{ -+ gfc_component *map1, *map2, *cmp1, *cmp2; -+ -+ if (un1->attr.flavor != FL_UNION || un2->attr.flavor != FL_UNION) -+ return 0; -+ -+ map1 = un1->components; -+ map2 = un2->components; -+ -+ /* In terms of 'equality' here we are worried about types which are -+ declared the same in two places, not types that represent equivalent -+ structures. (This is common because of FORTRAN's weird scoping rules.) -+ Though two unions with their maps in different orders could be equivalent, -+ we will say they are not equal for the purposes of this test; therefore -+ we compare the maps sequentially. */ -+ for (;;) -+ { -+ cmp1 = map1->ts.u.derived->components; -+ cmp2 = map2->ts.u.derived->components; -+ for (;;) -+ { -+ /* No two fields will ever point to the same map type unless they are -+ the same component, because one map field is created with its type -+ declaration. Therefore don't worry about recursion here. */ -+ /* TODO: worry about recursion into parent types of the unions? */ -+ if (compare_components (cmp1, cmp2, -+ map1->ts.u.derived, map2->ts.u.derived) == 0) -+ return 0; -+ -+ cmp1 = cmp1->next; -+ cmp2 = cmp2->next; -+ -+ if (cmp1 == NULL && cmp2 == NULL) -+ break; -+ if (cmp1 == NULL || cmp2 == NULL) -+ return 0; -+ } -+ -+ map1 = map1->next; -+ map2 = map2->next; -+ -+ if (map1 == NULL && map2 == NULL) -+ break; -+ if (map1 == NULL || map2 == NULL) -+ return 0; -+ } -+ -+ return 1; -+} -+ -+ -+ - /* Compare two derived types using the criteria in 4.4.2 of the standard, - recursing through gfc_compare_types for the components. */ - - int - gfc_compare_derived_types (gfc_symbol *derived1, gfc_symbol *derived2) - { -- gfc_component *dt1, *dt2; -+ gfc_component *cmp1, *cmp2; -+ bool anonymous = false; - - if (derived1 == derived2) - return 1; - - gcc_assert (derived1 && derived2); - -+ /* MAP and anonymous STRUCTURE types have internal names of the form -+ mM* and sS* (we can get away this this because source names are converted -+ to lowerase). Compare anonymous type names specially because each -+ gets a unique name when it is declared. */ -+ anonymous = (derived1->name[0] == derived2->name[0] -+ && derived1->name[1] && derived2->name[1] && derived2->name[2] -+ && derived1->name[1] == (char) TOUPPER (derived1->name[0]) -+ && derived2->name[2] == (char) TOUPPER (derived2->name[0])); -+ - /* Special case for comparing derived types across namespaces. If the - true names and module names are the same and the module name is - nonnull, then they are equal. */ -@@ -409,9 +537,11 @@ - return 1; - - /* Compare type via the rules of the standard. Both types must have -- the SEQUENCE or BIND(C) attribute to be equal. */ -+ the SEQUENCE or BIND(C) attribute to be equal. STRUCTUREs are special -+ because they can be anonymous; therefore two structures with different -+ names may be equal. */ - -- if (strcmp (derived1->name, derived2->name)) -+ if (strcmp (derived1->name, derived2->name) != 0 && !anonymous) - return 0; - - if (derived1->component_access == ACCESS_PRIVATE -@@ -422,53 +552,30 @@ - && !(derived1->attr.is_bind_c && derived2->attr.is_bind_c)) - return 0; - -- dt1 = derived1->components; -- dt2 = derived2->components; -+ /* Protect against null components. */ -+ if (derived1->attr.zero_comp != derived2->attr.zero_comp) -+ return 0; -+ -+ if (derived1->attr.zero_comp) -+ return 1; -+ -+ cmp1 = derived1->components; -+ cmp2 = derived2->components; - - /* Since subtypes of SEQUENCE types must be SEQUENCE types as well, a - simple test can speed things up. Otherwise, lots of things have to - match. */ - for (;;) - { -- if (strcmp (dt1->name, dt2->name) != 0) -- return 0; -+ if (!compare_components (cmp1, cmp2, derived1, derived2)) -+ return 0; - -- if (dt1->attr.access != dt2->attr.access) -- return 0; -+ cmp1 = cmp1->next; -+ cmp2 = cmp2->next; - -- if (dt1->attr.pointer != dt2->attr.pointer) -- return 0; -- -- if (dt1->attr.dimension != dt2->attr.dimension) -- return 0; -- -- if (dt1->attr.allocatable != dt2->attr.allocatable) -- return 0; -- -- if (dt1->attr.dimension && gfc_compare_array_spec (dt1->as, dt2->as) == 0) -- return 0; -- -- /* Make sure that link lists do not put this function into an -- endless recursive loop! */ -- if (!(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived) -- && !(dt2->ts.type == BT_DERIVED && derived2 == dt2->ts.u.derived) -- && gfc_compare_types (&dt1->ts, &dt2->ts) == 0) -- return 0; -- -- else if ((dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived) -- && !(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived)) -- return 0; -- -- else if (!(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived) -- && (dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived)) -- return 0; -- -- dt1 = dt1->next; -- dt2 = dt2->next; -- -- if (dt1 == NULL && dt2 == NULL) -+ if (cmp1 == NULL && cmp2 == NULL) - break; -- if (dt1 == NULL || dt2 == NULL) -+ if (cmp1 == NULL || cmp2 == NULL) - return 0; - } - -@@ -509,18 +616,18 @@ - && (ts1->u.derived->attr.sequence || ts1->u.derived->attr.is_bind_c)) - return 1; - -+ if (ts1->type == BT_UNION && ts2->type == BT_UNION) -+ return gfc_compare_union_types (ts1->u.derived, ts2->u.derived); -+ - if (ts1->type != ts2->type -- && ((ts1->type != BT_DERIVED && ts1->type != BT_CLASS) -- || (ts2->type != BT_DERIVED && ts2->type != BT_CLASS))) -+ && ((!gfc_bt_struct (ts1->type) && ts1->type != BT_CLASS) -+ || (!gfc_bt_struct (ts2->type) && ts2->type != BT_CLASS))) - return 0; - if (ts1->type != BT_DERIVED && ts1->type != BT_CLASS) - return (ts1->kind == ts2->kind); - - /* Compare derived types. */ -- if (gfc_type_compatible (ts1, ts2)) -- return 1; -- -- return gfc_compare_derived_types (ts1->u.derived ,ts2->u.derived); -+ return gfc_type_compatible (ts1, ts2); - } - - -@@ -1585,7 +1692,7 @@ - functions or subroutines. */ - if (((!p->sym->attr.function && !p->sym->attr.subroutine) - || !p->sym->attr.if_source) -- && p->sym->attr.flavor != FL_DERIVED) -+ && !gfc_fl_struct (p->sym->attr.flavor)) - { - if (p->sym->attr.external) - gfc_error ("Procedure %qs in %s at %L has no explicit interface", -@@ -1599,14 +1706,14 @@ - - /* Verify that procedures are either all SUBROUTINEs or all FUNCTIONs. */ - if ((psave->sym->attr.function && !p->sym->attr.function -- && p->sym->attr.flavor != FL_DERIVED) -+ && !gfc_fl_struct (p->sym->attr.flavor)) - || (psave->sym->attr.subroutine && !p->sym->attr.subroutine)) - { -- if (p->sym->attr.flavor != FL_DERIVED) -+ if (!gfc_fl_struct (p->sym->attr.flavor)) - gfc_error ("In %s at %L procedures must be either all SUBROUTINEs" - " or all FUNCTIONs", interface_name, - &p->sym->declared_at); -- else -+ else if (p->sym->attr.flavor == FL_DERIVED) - gfc_error ("In %s at %L procedures must be all FUNCTIONs as the " - "generic name is also the name of a derived type", - interface_name, &p->sym->declared_at); -@@ -1666,8 +1773,8 @@ - if (p->sym->name == q->sym->name && p->sym->module == q->sym->module) - continue; - -- if (p->sym->attr.flavor != FL_DERIVED -- && q->sym->attr.flavor != FL_DERIVED -+ if (!gfc_fl_struct (p->sym->attr.flavor) -+ && !gfc_fl_struct (q->sym->attr.flavor) - && gfc_compare_interfaces (p->sym, q->sym, q->sym->name, - generic_flag, 0, NULL, 0, NULL, NULL)) - { -@@ -2006,7 +2113,7 @@ - } - - ppc = gfc_get_proc_ptr_comp (actual); -- if (ppc) -+ if (ppc && ppc->ts.interface) - { - if (!gfc_compare_interfaces (formal, ppc->ts.interface, ppc->name, 0, 1, - err, sizeof(err), NULL, NULL)) -@@ -3550,7 +3657,7 @@ - - for (; intr; intr = intr->next) - { -- if (intr->sym->attr.flavor == FL_DERIVED) -+ if (gfc_fl_struct (intr->sym->attr.flavor)) - continue; - if (sub_flag && intr->sym->attr.function) - continue; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/invoke.texi gcc-6-20160721/gcc/fortran/invoke.texi ---- gcc-6.1.0/gcc/fortran/invoke.texi 2016-03-13 00:19:08.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/invoke.texi 2016-05-14 19:52:46.000000000 +0000 -@@ -115,7 +115,8 @@ - @item Fortran Language Options - @xref{Fortran Dialect Options,,Options controlling Fortran dialect}. - @gccoptlist{-fall-intrinsics -fbackslash -fcray-pointer -fd-lines-as-code @gol ---fd-lines-as-comments -fdefault-double-8 -fdefault-integer-8 @gol -+-fd-lines-as-comments @gol -+-fdec -fdec-structure -fdefault-double-8 -fdefault-integer-8 @gol - -fdefault-real-8 -fdollar-ok -ffixed-line-length-@var{n} @gol - -ffixed-line-length-none -ffree-form -ffree-line-length-@var{n} @gol - -ffree-line-length-none -fimplicit-none -finteger-4-integer-8 @gol -@@ -228,6 +229,24 @@ - @option{-fd-lines-as-comments} option is given, they are treated as - comment lines. - -+@item -fdec -+@opindex @code{fdec} -+DEC compatibility mode. Enables extensions and other features that mimic -+the default behavior of older compilers (such as DEC). -+These features are non-standard and should be avoided at all costs. -+For details on GNU Fortran's implementation of these extensions see the -+full documentation. -+ -+Other flags enabled by this switch are: -+@option{-fdollar-ok} @option{-fcray-pointer} @option{-fdec-structure} -+ -+@item -fdec-structure -+@opindex @code{fdec-structure} -+Enable DEC @code{STRUCTURE} and @code{RECORD} as well as @code{UNION}, -+@code{MAP}, and dot ('.') as a member separator (in addition to '%'). This is -+provided for compatibility only; Fortran 90 derived types should be used -+instead where possible. -+ - @item -fdollar-ok - @opindex @code{fdollar-ok} - @cindex @code{$} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/io.c gcc-6-20160721/gcc/fortran/io.c ---- gcc-6.1.0/gcc/fortran/io.c 2016-02-27 19:07:13.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/io.c 2016-06-12 14:04:08.000000000 +0000 -@@ -3007,7 +3007,7 @@ - } - - if (dt->extra_comma -- && !gfc_notify_std (GFC_STD_GNU, "Comma before i/o item list at %L", -+ && !gfc_notify_std (GFC_STD_LEGACY, "Comma before i/o item list at %L", - &dt->extra_comma->where)) - return false; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/lang.opt gcc-6-20160721/gcc/fortran/lang.opt ---- gcc-6.1.0/gcc/fortran/lang.opt 2016-02-01 16:20:13.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/lang.opt 2016-05-14 19:52:46.000000000 +0000 -@@ -416,6 +416,14 @@ - Fortran RejectNegative - Treat lines with 'D' in column one as comments. - -+fdec -+Fortran -+Enable all DEC language extensions. -+ -+fdec-structure -+Fortran -+Enable support for DEC STRUCTURE/RECORD. -+ - fdefault-double-8 - Fortran Var(flag_default_double) - Set the default double precision kind to an 8 byte wide type. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/libgfortran.h gcc-6-20160721/gcc/fortran/libgfortran.h ---- gcc-6.1.0/gcc/fortran/libgfortran.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/libgfortran.h 2016-05-14 19:52:46.000000000 +0000 -@@ -164,6 +164,6 @@ - typedef enum - { BT_UNKNOWN = 0, BT_INTEGER, BT_LOGICAL, BT_REAL, BT_COMPLEX, - BT_DERIVED, BT_CHARACTER, BT_CLASS, BT_PROCEDURE, BT_HOLLERITH, BT_VOID, -- BT_ASSUMED -+ BT_ASSUMED, BT_UNION - } - bt; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/match.c gcc-6-20160721/gcc/fortran/match.c ---- gcc-6.1.0/gcc/fortran/match.c 2016-02-28 19:07:42.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/match.c 2016-05-14 19:52:46.000000000 +0000 -@@ -113,6 +113,128 @@ - - /******************** Generic matching subroutines ************************/ - -+/* Matches a member separator. With standard FORTRAN this is '%', but with -+ DEC structures we must carefully match dot ('.'). -+ Because operators are spelled ".op.", a dotted string such as "x.y.z..." -+ can be either a component reference chain or a combination of binary -+ operations. -+ There is no real way to win because the string may be grammatically -+ ambiguous. The following rules help avoid ambiguities - they match -+ some behavior of other (older) compilers. If the rules here are changed -+ the test cases should be updated. If the user has problems with these rules -+ they probably deserve the consequences. Consider "x.y.z": -+ (1) If any user defined operator ".y." exists, this is always y(x,z) -+ (even if ".y." is the wrong type and/or x has a member y). -+ (2) Otherwise if x has a member y, and y is itself a derived type, -+ this is (x->y)->z, even if an intrinsic operator exists which -+ can handle (x,z). -+ (3) If x has no member y or (x->y) is not a derived type but ".y." -+ is an intrinsic operator (such as ".eq."), this is y(x,z). -+ (4) Lastly if there is no operator ".y." and x has no member "y", it is an -+ error. -+ It is worth noting that the logic here does not support mixed use of member -+ accessors within a single string. That is, even if x has component y and y -+ has component z, the following are all syntax errors: -+ "x%y.z" "x.y%z" "(x.y).z" "(x%y)%z" -+ */ -+ -+match -+gfc_match_member_sep(gfc_symbol *sym) -+{ -+ char name[GFC_MAX_SYMBOL_LEN + 1]; -+ locus dot_loc, start_loc; -+ gfc_intrinsic_op iop; -+ match m; -+ gfc_symbol *tsym; -+ gfc_component *c = NULL; -+ -+ /* What a relief: '%' is an unambiguous member separator. */ -+ if (gfc_match_char ('%') == MATCH_YES) -+ return MATCH_YES; -+ -+ /* Beware ye who enter here. */ -+ if (!gfc_option.flag_dec_structure || !sym) -+ return MATCH_NO; -+ -+ tsym = NULL; -+ -+ /* We may be given either a derived type variable or the derived type -+ declaration itself (which actually contains the components); -+ we need the latter to search for components. */ -+ if (gfc_fl_struct (sym->attr.flavor)) -+ tsym = sym; -+ else if (gfc_bt_struct (sym->ts.type)) -+ tsym = sym->ts.u.derived; -+ -+ iop = INTRINSIC_NONE; -+ name[0] = '\0'; -+ m = MATCH_NO; -+ -+ /* If we have to reject come back here later. */ -+ start_loc = gfc_current_locus; -+ -+ /* Look for a component access next. */ -+ if (gfc_match_char ('.') != MATCH_YES) -+ return MATCH_NO; -+ -+ /* If we accept, come back here. */ -+ dot_loc = gfc_current_locus; -+ -+ /* Try to match a symbol name following the dot. */ -+ if (gfc_match_name (name) != MATCH_YES) -+ { -+ gfc_error ("Expected structure component or operator name " -+ "after '.' at %C"); -+ goto error; -+ } -+ -+ /* If no dot follows we have "x.y" which should be a component access. */ -+ if (gfc_match_char ('.') != MATCH_YES) -+ goto yes; -+ -+ /* Now we have a string "x.y.z" which could be a nested member access -+ (x->y)->z or a binary operation y on x and z. */ -+ -+ /* First use any user-defined operators ".y." */ -+ if (gfc_find_uop (name, sym->ns) != NULL) -+ goto no; -+ -+ /* Match accesses to existing derived-type components for -+ derived-type vars: "x.y.z" = (x->y)->z */ -+ c = gfc_find_component(tsym, name, false, true, NULL); -+ if (c && (gfc_bt_struct (c->ts.type) || c->ts.type == BT_CLASS)) -+ goto yes; -+ -+ /* If y is not a component or has no members, try intrinsic operators. */ -+ gfc_current_locus = start_loc; -+ if (gfc_match_intrinsic_op (&iop) != MATCH_YES) -+ { -+ /* If ".y." is not an intrinsic operator but y was a valid non- -+ structure component, match and leave the trailing dot to be -+ dealt with later. */ -+ if (c) -+ goto yes; -+ -+ gfc_error ("'%s' is neither a defined operator nor a " -+ "structure component in dotted string at %C", name); -+ goto error; -+ } -+ -+ /* .y. is an intrinsic operator, overriding any possible member access. */ -+ goto no; -+ -+ /* Return keeping the current locus consistent with the match result. */ -+error: -+ m = MATCH_ERROR; -+no: -+ gfc_current_locus = start_loc; -+ return m; -+yes: -+ gfc_current_locus = dot_loc; -+ return MATCH_YES; -+} -+ -+ - /* This function scans the current statement counting the opened and closed - parenthesis to make sure they are balanced. */ - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/match.h gcc-6-20160721/gcc/fortran/match.h ---- gcc-6.1.0/gcc/fortran/match.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/match.h 2016-05-14 19:52:46.000000000 +0000 -@@ -60,6 +60,7 @@ - match gfc_match_iterator (gfc_iterator *, int); - match gfc_match_parens (void); - match gfc_match_type_spec (gfc_typespec *); -+match gfc_match_member_sep(gfc_symbol *); - - - /* Statement matchers. */ -@@ -208,6 +209,9 @@ - match gfc_match_entry (void); - match gfc_match_subroutine (void); - match gfc_match_submod_proc (void); -+match gfc_match_map (void); -+match gfc_match_union (void); -+match gfc_match_structure_decl (void); - match gfc_match_derived_decl (void); - match gfc_match_final_decl (void); - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/misc.c gcc-6-20160721/gcc/fortran/misc.c ---- gcc-6.1.0/gcc/fortran/misc.c 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/misc.c 2016-05-14 19:52:46.000000000 +0000 -@@ -83,6 +83,9 @@ - case BT_HOLLERITH: - p = "HOLLERITH"; - break; -+ case BT_UNION: -+ p = "UNION"; -+ break; - case BT_DERIVED: - p = "DERIVED"; - break; -@@ -144,6 +147,9 @@ - case BT_HOLLERITH: - sprintf (buffer, "HOLLERITH"); - break; -+ case BT_UNION: -+ sprintf (buffer, "UNION(%s)", ts->u.derived->name); -+ break; - case BT_DERIVED: - sprintf (buffer, "TYPE(%s)", ts->u.derived->name); - break; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/module.c gcc-6-20160721/gcc/fortran/module.c ---- gcc-6.1.0/gcc/fortran/module.c 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/module.c 2016-05-14 19:52:46.000000000 +0000 -@@ -422,8 +422,8 @@ - to convert the symtree name of a derived-type to the symbol name or to - the name of the associated generic function. */ - --static const char * --dt_lower_string (const char *name) -+const char * -+gfc_dt_lower_string (const char *name) - { - if (name[0] != (char) TOLOWER ((unsigned char) name[0])) - return gfc_get_string ("%c%s", (char) TOLOWER ((unsigned char) name[0]), -@@ -437,8 +437,8 @@ - symtree/symbol name of the associated generic function start with a lower- - case character. */ - --static const char * --dt_upper_string (const char *name) -+const char * -+gfc_dt_upper_string (const char *name) - { - if (name[0] != (char) TOUPPER ((unsigned char) name[0])) - return gfc_get_string ("%c%s", (char) TOUPPER ((unsigned char) name[0]), -@@ -832,7 +832,7 @@ - - /* For derived types. */ - if (name[0] != (char) TOLOWER ((unsigned char) name[0])) -- low_name = dt_lower_string (name); -+ low_name = gfc_dt_lower_string (name); - - i = 0; - for (u = gfc_rename_list; u; u = u->next) -@@ -861,7 +861,7 @@ - { - if (u->local_name[0] == '\0') - return name; -- return dt_upper_string (u->local_name); -+ return gfc_dt_upper_string (u->local_name); - } - - return (u->local_name[0] != '\0') ? u->local_name : name; -@@ -989,8 +989,8 @@ - - t = XCNEW (true_name); - t->sym = sym; -- if (sym->attr.flavor == FL_DERIVED) -- t->name = dt_upper_string (sym->name); -+ if (gfc_fl_struct (sym->attr.flavor)) -+ t->name = gfc_dt_upper_string (sym->name); - else - t->name = sym->name; - -@@ -1011,8 +1011,8 @@ - build_tnt (st->left); - build_tnt (st->right); - -- if (st->n.sym->attr.flavor == FL_DERIVED) -- name = dt_upper_string (st->n.sym->name); -+ if (gfc_fl_struct (st->n.sym->attr.flavor)) -+ name = gfc_dt_upper_string (st->n.sym->name); - else - name = st->n.sym->name; - -@@ -2452,6 +2452,7 @@ - minit ("COMPLEX", BT_COMPLEX), - minit ("LOGICAL", BT_LOGICAL), - minit ("CHARACTER", BT_CHARACTER), -+ minit ("UNION", BT_UNION), - minit ("DERIVED", BT_DERIVED), - minit ("CLASS", BT_CLASS), - minit ("PROCEDURE", BT_PROCEDURE), -@@ -2505,7 +2506,7 @@ - - ts->type = MIO_NAME (bt) (ts->type, bt_types); - -- if (ts->type != BT_DERIVED && ts->type != BT_CLASS) -+ if (!gfc_bt_struct (ts->type) && ts->type != BT_CLASS) - mio_integer (&ts->kind); - else - mio_symbol_ref (&ts->u.derived); -@@ -3322,8 +3323,8 @@ - if (e->symtree->n.sym && check_unique_name (e->symtree->name)) - { - const char *name = e->symtree->n.sym->name; -- if (e->symtree->n.sym->attr.flavor == FL_DERIVED) -- name = dt_upper_string (name); -+ if (gfc_fl_struct (e->symtree->n.sym->attr.flavor)) -+ name = gfc_dt_upper_string (name); - ns_st = gfc_find_symtree (gfc_current_ns->sym_root, name); - } - -@@ -4265,7 +4266,7 @@ - - mio_integer (&(sym->intmod_sym_id)); - -- if (sym->attr.flavor == FL_DERIVED) -+ if (gfc_fl_struct (sym->attr.flavor)) - mio_integer (&(sym->hash_value)); - - if (sym->formal_ns -@@ -4845,7 +4846,7 @@ - 1, &ns->proc_name); - - sym = gfc_new_symbol (p->u.rsym.true_name, ns); -- sym->name = dt_lower_string (p->u.rsym.true_name); -+ sym->name = gfc_dt_lower_string (p->u.rsym.true_name); - sym->module = gfc_get_string (p->u.rsym.module); - if (p->u.rsym.binding_label) - sym->binding_label = IDENTIFIER_POINTER (get_identifier -@@ -4857,6 +4858,12 @@ - mio_symbol (sym); - sym->attr.use_assoc = 1; - -+ /* Unliked derived types, a STRUCTURE may share names with other symbols. -+ We greedily converted the the symbol name to lowercase before we knew its -+ type, so now we must fix it. */ -+ if (sym->attr.flavor == FL_STRUCT) -+ sym->name = gfc_dt_upper_string (sym->name); -+ - /* Mark as only or rename for later diagnosis for explicitly imported - but not used warnings; don't mark internal symbols such as __vtab, - __def_init etc. Only mark them if they have been explicitly loaded. */ -@@ -5059,7 +5066,7 @@ - can be used in expressions in the module. To avoid the module loading - failing, we need to associate the module's component pointer indexes - with the existing symbol's component pointers. */ -- if (sym->attr.flavor == FL_DERIVED) -+ if (gfc_fl_struct (sym->attr.flavor)) - { - gfc_component *c; - -@@ -5213,7 +5220,7 @@ - { - info->u.rsym.sym = gfc_new_symbol (info->u.rsym.true_name, - gfc_current_ns); -- info->u.rsym.sym->name = dt_lower_string (info->u.rsym.true_name); -+ info->u.rsym.sym->name = gfc_dt_lower_string (info->u.rsym.true_name); - sym = info->u.rsym.sym; - sym->module = gfc_get_string (info->u.rsym.module); - -@@ -5557,10 +5564,10 @@ - - mio_integer (&n); - -- if (sym->attr.flavor == FL_DERIVED) -+ if (gfc_fl_struct (sym->attr.flavor)) - { - const char *name; -- name = dt_upper_string (sym->name); -+ name = gfc_dt_upper_string (sym->name); - mio_pool_string (&name); - } - else -@@ -6568,7 +6575,7 @@ - sym->attr.function = 1; - sym->attr.generic = 1; - -- gfc_get_sym_tree (dt_upper_string (sym->name), -+ gfc_get_sym_tree (gfc_dt_upper_string (sym->name), - gfc_current_ns, &tmp_symtree, false); - dt_sym = tmp_symtree->n.sym; - dt_sym->name = gfc_get_string (sym->name); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/openmp.c gcc-6-20160721/gcc/fortran/openmp.c ---- gcc-6.1.0/gcc/fortran/openmp.c 2016-04-06 23:07:21.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/openmp.c 2016-06-29 16:08:13.000000000 +0000 -@@ -396,43 +396,67 @@ - } - - static match --match_oacc_clause_gang (gfc_omp_clauses *cp) -+match_oacc_clause_gwv (gfc_omp_clauses *cp, unsigned gwv) - { - match ret = MATCH_YES; - - if (gfc_match (" ( ") != MATCH_YES) - return MATCH_NO; - -- /* The gang clause accepts two optional arguments, num and static. -- The num argument may either be explicit (num: <val>) or -- implicit without (<val> without num:). */ -- -- while (ret == MATCH_YES) -+ if (gwv == GOMP_DIM_GANG) - { -- if (gfc_match (" static :") == MATCH_YES) -+ /* The gang clause accepts two optional arguments, num and static. -+ The num argument may either be explicit (num: <val>) or -+ implicit without (<val> without num:). */ -+ -+ while (ret == MATCH_YES) - { -- if (cp->gang_static) -- return MATCH_ERROR; -+ if (gfc_match (" static :") == MATCH_YES) -+ { -+ if (cp->gang_static) -+ return MATCH_ERROR; -+ else -+ cp->gang_static = true; -+ if (gfc_match_char ('*') == MATCH_YES) -+ cp->gang_static_expr = NULL; -+ else if (gfc_match (" %e ", &cp->gang_static_expr) != MATCH_YES) -+ return MATCH_ERROR; -+ } - else -- cp->gang_static = true; -- if (gfc_match_char ('*') == MATCH_YES) -- cp->gang_static_expr = NULL; -- else if (gfc_match (" %e ", &cp->gang_static_expr) != MATCH_YES) -- return MATCH_ERROR; -- } -- else -- { -- /* This is optional. */ -- if (cp->gang_num_expr || gfc_match (" num :") == MATCH_ERROR) -- return MATCH_ERROR; -- else if (gfc_match (" %e ", &cp->gang_num_expr) != MATCH_YES) -- return MATCH_ERROR; -+ { -+ if (cp->gang_num_expr) -+ return MATCH_ERROR; -+ -+ /* The 'num' argument is optional. */ -+ gfc_match (" num :"); -+ -+ if (gfc_match (" %e ", &cp->gang_num_expr) != MATCH_YES) -+ return MATCH_ERROR; -+ } -+ -+ ret = gfc_match (" , "); - } -+ } -+ else if (gwv == GOMP_DIM_WORKER) -+ { -+ /* The 'num' argument is optional. */ -+ gfc_match (" num :"); - -- ret = gfc_match (" , "); -+ if (gfc_match (" %e ", &cp->worker_expr) != MATCH_YES) -+ return MATCH_ERROR; - } -+ else if (gwv == GOMP_DIM_VECTOR) -+ { -+ /* The 'length' argument is optional. */ -+ gfc_match (" length :"); -+ -+ if (gfc_match (" %e ", &cp->vector_expr) != MATCH_YES) -+ return MATCH_ERROR; -+ } -+ else -+ gfc_fatal_error ("Unexpected OpenACC parallelism."); - -- return gfc_match (" ) "); -+ return gfc_match (" )"); - } - - static match -@@ -640,17 +664,25 @@ - needs_space = false; - first = false; - gfc_gobble_whitespace (); -+ old_loc = gfc_current_locus; - if ((mask & OMP_CLAUSE_ASYNC) && !c->async) - if (gfc_match ("async") == MATCH_YES) - { - c->async = true; -- needs_space = false; -- if (gfc_match (" ( %e )", &c->async_expr) != MATCH_YES) -+ match m = gfc_match (" ( %e )", &c->async_expr); -+ if (m == MATCH_ERROR) - { -- c->async_expr = gfc_get_constant_expr (BT_INTEGER, -- gfc_default_integer_kind, -- &gfc_current_locus); -+ gfc_current_locus = old_loc; -+ break; -+ } -+ else if (m == MATCH_NO) -+ { -+ c->async_expr -+ = gfc_get_constant_expr (BT_INTEGER, -+ gfc_default_integer_kind, -+ &gfc_current_locus); - mpz_set_si (c->async_expr->value.integer, GOMP_ASYNC_NOVAL); -+ needs_space = true; - } - continue; - } -@@ -658,9 +690,13 @@ - if (gfc_match ("gang") == MATCH_YES) - { - c->gang = true; -- if (match_oacc_clause_gang(c) == MATCH_YES) -- needs_space = false; -- else -+ match m = match_oacc_clause_gwv (c, GOMP_DIM_GANG); -+ if (m == MATCH_ERROR) -+ { -+ gfc_current_locus = old_loc; -+ break; -+ } -+ else if (m == MATCH_NO) - needs_space = true; - continue; - } -@@ -668,10 +704,13 @@ - if (gfc_match ("worker") == MATCH_YES) - { - c->worker = true; -- if (gfc_match (" ( num : %e )", &c->worker_expr) == MATCH_YES -- || gfc_match (" ( %e )", &c->worker_expr) == MATCH_YES) -- needs_space = false; -- else -+ match m = match_oacc_clause_gwv (c, GOMP_DIM_WORKER); -+ if (m == MATCH_ERROR) -+ { -+ gfc_current_locus = old_loc; -+ break; -+ } -+ else if (m == MATCH_NO) - needs_space = true; - continue; - } -@@ -683,10 +722,13 @@ - if (gfc_match ("vector") == MATCH_YES) - { - c->vector = true; -- if (gfc_match (" ( length : %e )", &c->vector_expr) == MATCH_YES -- || gfc_match (" ( %e )", &c->vector_expr) == MATCH_YES) -- needs_space = false; -- else -+ match m = match_oacc_clause_gwv (c, GOMP_DIM_VECTOR); -+ if (m == MATCH_ERROR) -+ { -+ gfc_current_locus = old_loc; -+ break; -+ } -+ if (m == MATCH_NO) - needs_space = true; - continue; - } -@@ -883,10 +925,16 @@ - && gfc_match ("wait") == MATCH_YES) - { - c->wait = true; -- match_oacc_expr_list (" (", &c->wait_list, false); -+ match m = match_oacc_expr_list (" (", &c->wait_list, false); -+ if (m == MATCH_ERROR) -+ { -+ gfc_current_locus = old_loc; -+ break; -+ } -+ else if (m == MATCH_NO) -+ needs_space = true; - continue; - } -- old_loc = gfc_current_locus; - if ((mask & OMP_CLAUSE_REDUCTION) - && gfc_match ("reduction ( ") == MATCH_YES) - { -@@ -1582,15 +1630,18 @@ - { - gfc_omp_clauses *c = gfc_get_omp_clauses (); - gfc_expr_list *wait_list = NULL, *el; -+ bool space = true; -+ match m; - -- match_oacc_expr_list (" (", &wait_list, true); -- gfc_match_omp_clauses (&c, OACC_WAIT_CLAUSES, false, false, true); -+ m = match_oacc_expr_list (" (", &wait_list, true); -+ if (m == MATCH_ERROR) -+ return m; -+ else if (m == MATCH_YES) -+ space = false; - -- if (gfc_match_omp_eos () != MATCH_YES) -- { -- gfc_error ("Unexpected junk in !$ACC WAIT at %C"); -- return MATCH_ERROR; -- } -+ if (gfc_match_omp_clauses (&c, OACC_WAIT_CLAUSES, space, space, true) -+ == MATCH_ERROR) -+ return MATCH_ERROR; - - if (wait_list) - for (el = wait_list; el; el = el->next) -@@ -1623,6 +1674,10 @@ - gfc_match_oacc_cache (void) - { - gfc_omp_clauses *c = gfc_get_omp_clauses (); -+ /* The OpenACC cache directive explicitly only allows "array elements or -+ subarrays", which we're currently not checking here. Either check this -+ after the call of gfc_match_omp_variable_list, or add something like a -+ only_sections variant next to its allow_sections parameter. */ - match m = gfc_match_omp_variable_list (" (", - &c->lists[OMP_LIST_CACHE], true, - NULL, NULL, true); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/options.c gcc-6-20160721/gcc/fortran/options.c ---- gcc-6.1.0/gcc/fortran/options.c 2016-03-13 00:19:08.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/options.c 2016-05-14 19:52:46.000000000 +0000 -@@ -47,6 +47,15 @@ - } - - -+/* Set all the DEC extension flags. */ -+ -+static void -+set_dec_flags (int value) -+{ -+ gfc_option.flag_dec_structure = value; -+} -+ -+ - /* Return language mask for Fortran options. */ - - unsigned int -@@ -102,6 +111,8 @@ - if (!global_options_set.x_cpp_warn_missing_include_dirs) - global_options.x_cpp_warn_missing_include_dirs = 1; - -+ set_dec_flags (0); -+ - set_default_std_flags (); - - /* Initialize cpp-related options. */ -@@ -709,6 +720,15 @@ - case OPT_fcheck_: - gfc_handle_runtime_check_option (arg); - break; -+ -+ case OPT_fdec: -+ /* Enable all DEC extensions. */ -+ set_dec_flags (1); -+ break; -+ -+ case OPT_fdec_structure: -+ gfc_option.flag_dec_structure = 1; -+ break; - } - - Fortran_handle_option_auto (&global_options, &global_options_set, -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/parse.c gcc-6-20160721/gcc/fortran/parse.c ---- gcc-6.1.0/gcc/fortran/parse.c 2016-02-11 16:48:45.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/parse.c 2016-07-08 21:27:22.000000000 +0000 -@@ -256,6 +256,7 @@ - - case 's': - match ("save", gfc_match_save, ST_ATTR_DECL); -+ match ("structure", gfc_match_structure_decl, ST_STRUCTURE_DECL); - break; - - case 't': -@@ -507,6 +508,7 @@ - break; - - case 'm': -+ match ("map", gfc_match_map, ST_MAP); - match ("module% procedure", gfc_match_modproc, ST_MODULE_PROC); - match ("module", gfc_match_module, ST_MODULE); - break; -@@ -542,6 +544,7 @@ - break; - - case 's': -+ match ("structure", gfc_match_structure_decl, ST_STRUCTURE_DECL); - match ("sequence", gfc_match_eos, ST_SEQUENCE); - match ("stop", gfc_match_stop, ST_STOP); - match ("save", gfc_match_save, ST_ATTR_DECL); -@@ -558,6 +561,7 @@ - break; - - case 'u': -+ match ("union", gfc_match_union, ST_UNION); - match ("unlock", gfc_match_unlock, ST_UNLOCK); - break; - -@@ -585,21 +589,12 @@ - return ST_NONE; - } - --/* Like match, but set a flag simd_matched if keyword matched. */ --#define matchs(keyword, subr, st) \ -- do { \ -- if (match_word_omp_simd (keyword, subr, &old_locus, \ -- &simd_matched) == MATCH_YES) \ -- return st; \ -- else \ -- undo_new_statement (); \ -- } while (0); -- --/* Like match, but don't match anything if not -fopenmp. */ --#define matcho(keyword, subr, st) \ -+/* Like match and if spec_only, goto do_spec_only without actually -+ matching. */ -+#define matcha(keyword, subr, st) \ - do { \ -- if (!flag_openmp) \ -- ; \ -+ if (spec_only && gfc_match (keyword) == MATCH_YES) \ -+ goto do_spec_only; \ - else if (match_word (keyword, subr, &old_locus) \ - == MATCH_YES) \ - return st; \ -@@ -612,6 +607,7 @@ - { - locus old_locus; - char c; -+ bool spec_only = false; - - gfc_enforce_clean_symbol_state (); - -@@ -626,6 +622,10 @@ - return ST_NONE; - } - -+ if (gfc_current_state () == COMP_FUNCTION -+ && gfc_current_block ()->result->ts.kind == -1) -+ spec_only = true; -+ - gfc_unset_implicit_pure (NULL); - - old_locus = gfc_current_locus; -@@ -639,49 +639,52 @@ - switch (c) - { - case 'a': -- match ("atomic", gfc_match_oacc_atomic, ST_OACC_ATOMIC); -+ matcha ("atomic", gfc_match_oacc_atomic, ST_OACC_ATOMIC); - break; - case 'c': -- match ("cache", gfc_match_oacc_cache, ST_OACC_CACHE); -+ matcha ("cache", gfc_match_oacc_cache, ST_OACC_CACHE); - break; - case 'd': -- match ("data", gfc_match_oacc_data, ST_OACC_DATA); -+ matcha ("data", gfc_match_oacc_data, ST_OACC_DATA); - match ("declare", gfc_match_oacc_declare, ST_OACC_DECLARE); - break; - case 'e': -- match ("end atomic", gfc_match_omp_eos, ST_OACC_END_ATOMIC); -- match ("end data", gfc_match_omp_eos, ST_OACC_END_DATA); -- match ("end host_data", gfc_match_omp_eos, ST_OACC_END_HOST_DATA); -- match ("end kernels loop", gfc_match_omp_eos, ST_OACC_END_KERNELS_LOOP); -- match ("end kernels", gfc_match_omp_eos, ST_OACC_END_KERNELS); -- match ("end loop", gfc_match_omp_eos, ST_OACC_END_LOOP); -- match ("end parallel loop", gfc_match_omp_eos, ST_OACC_END_PARALLEL_LOOP); -- match ("end parallel", gfc_match_omp_eos, ST_OACC_END_PARALLEL); -- match ("enter data", gfc_match_oacc_enter_data, ST_OACC_ENTER_DATA); -- match ("exit data", gfc_match_oacc_exit_data, ST_OACC_EXIT_DATA); -+ matcha ("end atomic", gfc_match_omp_eos, ST_OACC_END_ATOMIC); -+ matcha ("end data", gfc_match_omp_eos, ST_OACC_END_DATA); -+ matcha ("end host_data", gfc_match_omp_eos, ST_OACC_END_HOST_DATA); -+ matcha ("end kernels loop", gfc_match_omp_eos, ST_OACC_END_KERNELS_LOOP); -+ matcha ("end kernels", gfc_match_omp_eos, ST_OACC_END_KERNELS); -+ matcha ("end loop", gfc_match_omp_eos, ST_OACC_END_LOOP); -+ matcha ("end parallel loop", gfc_match_omp_eos, -+ ST_OACC_END_PARALLEL_LOOP); -+ matcha ("end parallel", gfc_match_omp_eos, ST_OACC_END_PARALLEL); -+ matcha ("enter data", gfc_match_oacc_enter_data, ST_OACC_ENTER_DATA); -+ matcha ("exit data", gfc_match_oacc_exit_data, ST_OACC_EXIT_DATA); - break; - case 'h': -- match ("host_data", gfc_match_oacc_host_data, ST_OACC_HOST_DATA); -+ matcha ("host_data", gfc_match_oacc_host_data, ST_OACC_HOST_DATA); - break; - case 'p': -- match ("parallel loop", gfc_match_oacc_parallel_loop, ST_OACC_PARALLEL_LOOP); -- match ("parallel", gfc_match_oacc_parallel, ST_OACC_PARALLEL); -+ matcha ("parallel loop", gfc_match_oacc_parallel_loop, -+ ST_OACC_PARALLEL_LOOP); -+ matcha ("parallel", gfc_match_oacc_parallel, ST_OACC_PARALLEL); - break; - case 'k': -- match ("kernels loop", gfc_match_oacc_kernels_loop, ST_OACC_KERNELS_LOOP); -- match ("kernels", gfc_match_oacc_kernels, ST_OACC_KERNELS); -+ matcha ("kernels loop", gfc_match_oacc_kernels_loop, -+ ST_OACC_KERNELS_LOOP); -+ matcha ("kernels", gfc_match_oacc_kernels, ST_OACC_KERNELS); - break; - case 'l': -- match ("loop", gfc_match_oacc_loop, ST_OACC_LOOP); -+ matcha ("loop", gfc_match_oacc_loop, ST_OACC_LOOP); - break; - case 'r': - match ("routine", gfc_match_oacc_routine, ST_OACC_ROUTINE); - break; - case 'u': -- match ("update", gfc_match_oacc_update, ST_OACC_UPDATE); -+ matcha ("update", gfc_match_oacc_update, ST_OACC_UPDATE); - break; - case 'w': -- match ("wait", gfc_match_oacc_wait, ST_OACC_WAIT); -+ matcha ("wait", gfc_match_oacc_wait, ST_OACC_WAIT); - break; - } - -@@ -696,14 +699,72 @@ - gfc_error_recovery (); - - return ST_NONE; -+ -+ do_spec_only: -+ reject_statement (); -+ gfc_clear_error (); -+ gfc_buffer_error (false); -+ gfc_current_locus = old_locus; -+ return ST_GET_FCN_CHARACTERISTICS; - } - -+/* Like match, but set a flag simd_matched if keyword matched -+ and if spec_only, goto do_spec_only without actually matching. */ -+#define matchs(keyword, subr, st) \ -+ do { \ -+ if (spec_only && gfc_match (keyword) == MATCH_YES) \ -+ goto do_spec_only; \ -+ if (match_word_omp_simd (keyword, subr, &old_locus, \ -+ &simd_matched) == MATCH_YES) \ -+ return st; \ -+ else \ -+ undo_new_statement (); \ -+ } while (0); -+ -+/* Like match, but don't match anything if not -fopenmp -+ and if spec_only, goto do_spec_only without actually matching. */ -+#define matcho(keyword, subr, st) \ -+ do { \ -+ if (!flag_openmp) \ -+ ; \ -+ else if (spec_only && gfc_match (keyword) == MATCH_YES) \ -+ goto do_spec_only; \ -+ else if (match_word (keyword, subr, &old_locus) \ -+ == MATCH_YES) \ -+ return st; \ -+ else \ -+ undo_new_statement (); \ -+ } while (0); -+ -+/* Like match, but set a flag simd_matched if keyword matched. */ -+#define matchds(keyword, subr, st) \ -+ do { \ -+ if (match_word_omp_simd (keyword, subr, &old_locus, \ -+ &simd_matched) == MATCH_YES) \ -+ return st; \ -+ else \ -+ undo_new_statement (); \ -+ } while (0); -+ -+/* Like match, but don't match anything if not -fopenmp. */ -+#define matchdo(keyword, subr, st) \ -+ do { \ -+ if (!flag_openmp) \ -+ ; \ -+ else if (match_word (keyword, subr, &old_locus) \ -+ == MATCH_YES) \ -+ return st; \ -+ else \ -+ undo_new_statement (); \ -+ } while (0); -+ - static gfc_statement - decode_omp_directive (void) - { - locus old_locus; - char c; - bool simd_matched = false; -+ bool spec_only = false; - - gfc_enforce_clean_symbol_state (); - -@@ -718,6 +779,10 @@ - return ST_NONE; - } - -+ if (gfc_current_state () == COMP_FUNCTION -+ && gfc_current_block ()->result->ts.kind == -1) -+ spec_only = true; -+ - gfc_unset_implicit_pure (NULL); - - old_locus = gfc_current_locus; -@@ -746,12 +811,12 @@ - matcho ("critical", gfc_match_omp_critical, ST_OMP_CRITICAL); - break; - case 'd': -- matchs ("declare reduction", gfc_match_omp_declare_reduction, -- ST_OMP_DECLARE_REDUCTION); -- matchs ("declare simd", gfc_match_omp_declare_simd, -- ST_OMP_DECLARE_SIMD); -- matcho ("declare target", gfc_match_omp_declare_target, -- ST_OMP_DECLARE_TARGET); -+ matchds ("declare reduction", gfc_match_omp_declare_reduction, -+ ST_OMP_DECLARE_REDUCTION); -+ matchds ("declare simd", gfc_match_omp_declare_simd, -+ ST_OMP_DECLARE_SIMD); -+ matchdo ("declare target", gfc_match_omp_declare_target, -+ ST_OMP_DECLARE_TARGET); - matchs ("distribute parallel do simd", - gfc_match_omp_distribute_parallel_do_simd, - ST_OMP_DISTRIBUTE_PARALLEL_DO_SIMD); -@@ -871,8 +936,8 @@ - matcho ("teams distribute", gfc_match_omp_teams_distribute, - ST_OMP_TEAMS_DISTRIBUTE); - matcho ("teams", gfc_match_omp_teams, ST_OMP_TEAMS); -- matcho ("threadprivate", gfc_match_omp_threadprivate, -- ST_OMP_THREADPRIVATE); -+ matchdo ("threadprivate", gfc_match_omp_threadprivate, -+ ST_OMP_THREADPRIVATE); - break; - case 'w': - matcho ("workshare", gfc_match_omp_workshare, ST_OMP_WORKSHARE); -@@ -895,6 +960,13 @@ - gfc_error_recovery (); - - return ST_NONE; -+ -+ do_spec_only: -+ reject_statement (); -+ gfc_clear_error (); -+ gfc_buffer_error (false); -+ gfc_current_locus = old_locus; -+ return ST_GET_FCN_CHARACTERISTICS; - } - - static gfc_statement -@@ -1315,10 +1387,13 @@ - - gfc_buffer_error (false); - -- if (st == ST_GET_FCN_CHARACTERISTICS && gfc_statement_label != NULL) -+ if (st == ST_GET_FCN_CHARACTERISTICS) - { -- gfc_free_st_label (gfc_statement_label); -- gfc_statement_label = NULL; -+ if (gfc_statement_label != NULL) -+ { -+ gfc_free_st_label (gfc_statement_label); -+ gfc_statement_label = NULL; -+ } - gfc_current_locus = old_locus; - } - -@@ -1386,9 +1461,13 @@ - - #define case_decl case ST_ATTR_DECL: case ST_COMMON: case ST_DATA_DECL: \ - case ST_EQUIVALENCE: case ST_NAMELIST: case ST_STATEMENT_FUNCTION: \ -- case ST_TYPE: case ST_INTERFACE: case ST_OMP_THREADPRIVATE: \ -- case ST_PROCEDURE: case ST_OMP_DECLARE_SIMD: case ST_OMP_DECLARE_REDUCTION: \ -- case ST_OMP_DECLARE_TARGET: case ST_OACC_ROUTINE: case ST_OACC_DECLARE -+ case ST_TYPE: case ST_INTERFACE: case ST_PROCEDURE: case ST_OACC_ROUTINE: \ -+ case ST_OACC_DECLARE -+ -+/* OpenMP declaration statements. */ -+ -+#define case_omp_decl case ST_OMP_THREADPRIVATE: case ST_OMP_DECLARE_SIMD: \ -+ case ST_OMP_DECLARE_TARGET: case ST_OMP_DECLARE_REDUCTION - - /* Block end statements. Errors associated with interchanging these - are detected in gfc_match_end(). */ -@@ -1642,6 +1721,15 @@ - case ST_DEALLOCATE: - p = "DEALLOCATE"; - break; -+ case ST_MAP: -+ p = "MAP"; -+ break; -+ case ST_UNION: -+ p = "UNION"; -+ break; -+ case ST_STRUCTURE_DECL: -+ p = "STRUCTURE"; -+ break; - case ST_DERIVED_DECL: - p = _("derived type declaration"); - break; -@@ -1711,6 +1799,15 @@ - case ST_END_WHERE: - p = "END WHERE"; - break; -+ case ST_END_STRUCTURE: -+ p = "END STRUCTURE"; -+ break; -+ case ST_END_UNION: -+ p = "END UNION"; -+ break; -+ case ST_END_MAP: -+ p = "END MAP"; -+ break; - case ST_END_TYPE: - p = "END TYPE"; - break; -@@ -2457,6 +2554,7 @@ - - case ST_PUBLIC: - case ST_PRIVATE: -+ case ST_STRUCTURE_DECL: - case ST_DERIVED_DECL: - case_decl: - if (p->state >= ORDER_EXEC) -@@ -2465,6 +2563,14 @@ - p->state = ORDER_SPEC; - break; - -+ case_omp_decl: -+ /* The OpenMP directives have to be somewhere in the specification -+ part, but there are no further requirements on their ordering. -+ Thus don't adjust p->state, just ignore them. */ -+ if (p->state >= ORDER_EXEC) -+ goto order; -+ break; -+ - case_executable: - case_exec_markers: - if (p->state < ORDER_EXEC) -@@ -2646,6 +2752,358 @@ - } - - -+/* Set attributes for the parent symbol based on the attributes of a component -+ and raise errors if conflicting attributes are found for the component. */ -+ -+static void -+check_component (gfc_symbol *sym, gfc_component *c, gfc_component **lockp, -+ gfc_component **eventp) -+{ -+ bool coarray, lock_type, event_type, allocatable, pointer; -+ coarray = lock_type = event_type = allocatable = pointer = false; -+ gfc_component *lock_comp = NULL, *event_comp = NULL; -+ -+ if (lockp) lock_comp = *lockp; -+ if (eventp) event_comp = *eventp; -+ -+ /* Look for allocatable components. */ -+ if (c->attr.allocatable -+ || (c->ts.type == BT_CLASS && c->attr.class_ok -+ && CLASS_DATA (c)->attr.allocatable) -+ || (c->ts.type == BT_DERIVED && !c->attr.pointer -+ && c->ts.u.derived->attr.alloc_comp)) -+ { -+ allocatable = true; -+ sym->attr.alloc_comp = 1; -+ } -+ -+ /* Look for pointer components. */ -+ if (c->attr.pointer -+ || (c->ts.type == BT_CLASS && c->attr.class_ok -+ && CLASS_DATA (c)->attr.class_pointer) -+ || (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.pointer_comp)) -+ { -+ pointer = true; -+ sym->attr.pointer_comp = 1; -+ } -+ -+ /* Look for procedure pointer components. */ -+ if (c->attr.proc_pointer -+ || (c->ts.type == BT_DERIVED -+ && c->ts.u.derived->attr.proc_pointer_comp)) -+ sym->attr.proc_pointer_comp = 1; -+ -+ /* Looking for coarray components. */ -+ if (c->attr.codimension -+ || (c->ts.type == BT_CLASS && c->attr.class_ok -+ && CLASS_DATA (c)->attr.codimension)) -+ { -+ coarray = true; -+ sym->attr.coarray_comp = 1; -+ } -+ -+ if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.coarray_comp -+ && !c->attr.pointer) -+ { -+ coarray = true; -+ sym->attr.coarray_comp = 1; -+ } -+ -+ /* Looking for lock_type components. */ -+ if ((c->ts.type == BT_DERIVED -+ && c->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV -+ && c->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE) -+ || (c->ts.type == BT_CLASS && c->attr.class_ok -+ && CLASS_DATA (c)->ts.u.derived->from_intmod -+ == INTMOD_ISO_FORTRAN_ENV -+ && CLASS_DATA (c)->ts.u.derived->intmod_sym_id -+ == ISOFORTRAN_LOCK_TYPE) -+ || (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.lock_comp -+ && !allocatable && !pointer)) -+ { -+ lock_type = 1; -+ lock_comp = c; -+ sym->attr.lock_comp = 1; -+ } -+ -+ /* Looking for event_type components. */ -+ if ((c->ts.type == BT_DERIVED -+ && c->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV -+ && c->ts.u.derived->intmod_sym_id == ISOFORTRAN_EVENT_TYPE) -+ || (c->ts.type == BT_CLASS && c->attr.class_ok -+ && CLASS_DATA (c)->ts.u.derived->from_intmod -+ == INTMOD_ISO_FORTRAN_ENV -+ && CLASS_DATA (c)->ts.u.derived->intmod_sym_id -+ == ISOFORTRAN_EVENT_TYPE) -+ || (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.event_comp -+ && !allocatable && !pointer)) -+ { -+ event_type = 1; -+ event_comp = c; -+ sym->attr.event_comp = 1; -+ } -+ -+ /* Check for F2008, C1302 - and recall that pointers may not be coarrays -+ (5.3.14) and that subobjects of coarray are coarray themselves (2.4.7), -+ unless there are nondirect [allocatable or pointer] components -+ involved (cf. 1.3.33.1 and 1.3.33.3). */ -+ -+ if (pointer && !coarray && lock_type) -+ gfc_error ("Component %s at %L of type LOCK_TYPE must have a " -+ "codimension or be a subcomponent of a coarray, " -+ "which is not possible as the component has the " -+ "pointer attribute", c->name, &c->loc); -+ else if (pointer && !coarray && c->ts.type == BT_DERIVED -+ && c->ts.u.derived->attr.lock_comp) -+ gfc_error ("Pointer component %s at %L has a noncoarray subcomponent " -+ "of type LOCK_TYPE, which must have a codimension or be a " -+ "subcomponent of a coarray", c->name, &c->loc); -+ -+ if (lock_type && allocatable && !coarray) -+ gfc_error ("Allocatable component %s at %L of type LOCK_TYPE must have " -+ "a codimension", c->name, &c->loc); -+ else if (lock_type && allocatable && c->ts.type == BT_DERIVED -+ && c->ts.u.derived->attr.lock_comp) -+ gfc_error ("Allocatable component %s at %L must have a codimension as " -+ "it has a noncoarray subcomponent of type LOCK_TYPE", -+ c->name, &c->loc); -+ -+ if (sym->attr.coarray_comp && !coarray && lock_type) -+ gfc_error ("Noncoarray component %s at %L of type LOCK_TYPE or with " -+ "subcomponent of type LOCK_TYPE must have a codimension or " -+ "be a subcomponent of a coarray. (Variables of type %s may " -+ "not have a codimension as already a coarray " -+ "subcomponent exists)", c->name, &c->loc, sym->name); -+ -+ if (sym->attr.lock_comp && coarray && !lock_type) -+ gfc_error ("Noncoarray component %s at %L of type LOCK_TYPE or with " -+ "subcomponent of type LOCK_TYPE must have a codimension or " -+ "be a subcomponent of a coarray. (Variables of type %s may " -+ "not have a codimension as %s at %L has a codimension or a " -+ "coarray subcomponent)", lock_comp->name, &lock_comp->loc, -+ sym->name, c->name, &c->loc); -+ -+ /* Similarly for EVENT TYPE. */ -+ -+ if (pointer && !coarray && event_type) -+ gfc_error ("Component %s at %L of type EVENT_TYPE must have a " -+ "codimension or be a subcomponent of a coarray, " -+ "which is not possible as the component has the " -+ "pointer attribute", c->name, &c->loc); -+ else if (pointer && !coarray && c->ts.type == BT_DERIVED -+ && c->ts.u.derived->attr.event_comp) -+ gfc_error ("Pointer component %s at %L has a noncoarray subcomponent " -+ "of type EVENT_TYPE, which must have a codimension or be a " -+ "subcomponent of a coarray", c->name, &c->loc); -+ -+ if (event_type && allocatable && !coarray) -+ gfc_error ("Allocatable component %s at %L of type EVENT_TYPE must have " -+ "a codimension", c->name, &c->loc); -+ else if (event_type && allocatable && c->ts.type == BT_DERIVED -+ && c->ts.u.derived->attr.event_comp) -+ gfc_error ("Allocatable component %s at %L must have a codimension as " -+ "it has a noncoarray subcomponent of type EVENT_TYPE", -+ c->name, &c->loc); -+ -+ if (sym->attr.coarray_comp && !coarray && event_type) -+ gfc_error ("Noncoarray component %s at %L of type EVENT_TYPE or with " -+ "subcomponent of type EVENT_TYPE must have a codimension or " -+ "be a subcomponent of a coarray. (Variables of type %s may " -+ "not have a codimension as already a coarray " -+ "subcomponent exists)", c->name, &c->loc, sym->name); -+ -+ if (sym->attr.event_comp && coarray && !event_type) -+ gfc_error ("Noncoarray component %s at %L of type EVENT_TYPE or with " -+ "subcomponent of type EVENT_TYPE must have a codimension or " -+ "be a subcomponent of a coarray. (Variables of type %s may " -+ "not have a codimension as %s at %L has a codimension or a " -+ "coarray subcomponent)", event_comp->name, &event_comp->loc, -+ sym->name, c->name, &c->loc); -+ -+ /* Look for private components. */ -+ if (sym->component_access == ACCESS_PRIVATE -+ || c->attr.access == ACCESS_PRIVATE -+ || (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.private_comp)) -+ sym->attr.private_comp = 1; -+ -+ if (lockp) *lockp = lock_comp; -+ if (eventp) *eventp = event_comp; -+} -+ -+ -+static void parse_struct_map (gfc_statement); -+ -+/* Parse a union component definition within a structure definition. */ -+ -+static void -+parse_union (void) -+{ -+ int compiling; -+ gfc_statement st; -+ gfc_state_data s; -+ gfc_component *c, *lock_comp = NULL, *event_comp = NULL; -+ gfc_symbol *un; -+ -+ accept_statement(ST_UNION); -+ push_state (&s, COMP_UNION, gfc_new_block); -+ un = gfc_new_block; -+ -+ compiling = 1; -+ -+ while (compiling) -+ { -+ st = next_statement (); -+ /* Only MAP declarations valid within a union. */ -+ switch (st) -+ { -+ case ST_NONE: -+ unexpected_eof (); -+ -+ case ST_MAP: -+ accept_statement (ST_MAP); -+ parse_struct_map (ST_MAP); -+ /* Add a component to the union for each map. */ -+ if (!gfc_add_component (un, gfc_new_block->name, &c)) -+ { -+ gfc_internal_error ("failed to create map component '%s'", -+ gfc_new_block->name); -+ reject_statement (); -+ return; -+ } -+ c->ts.type = BT_DERIVED; -+ c->ts.u.derived = gfc_new_block; -+ /* Normally components get their initialization expressions when they -+ are created in decl.c (build_struct) so we can look through the -+ flat component list for initializers during resolution. Unions and -+ maps create components along with their type definitions so we -+ have to generate initializers here. */ -+ c->initializer = gfc_default_initializer (&c->ts); -+ break; -+ -+ case ST_END_UNION: -+ compiling = 0; -+ accept_statement (ST_END_UNION); -+ break; -+ -+ default: -+ unexpected_statement (st); -+ break; -+ } -+ } -+ -+ for (c = un->components; c; c = c->next) -+ check_component (un, c, &lock_comp, &event_comp); -+ -+ /* Add the union as a component in its parent structure. */ -+ pop_state (); -+ if (!gfc_add_component (gfc_current_block (), un->name, &c)) -+ { -+ gfc_internal_error ("failed to create union component '%s'", un->name); -+ reject_statement (); -+ return; -+ } -+ c->ts.type = BT_UNION; -+ c->ts.u.derived = un; -+ c->initializer = gfc_default_initializer (&c->ts); -+ -+ un->attr.zero_comp = un->components == NULL; -+} -+ -+ -+/* Parse a STRUCTURE or MAP. */ -+ -+static void -+parse_struct_map (gfc_statement block) -+{ -+ int compiling_type; -+ gfc_statement st; -+ gfc_state_data s; -+ gfc_symbol *sym; -+ gfc_component *c, *lock_comp = NULL, *event_comp = NULL; -+ gfc_compile_state comp; -+ gfc_statement ends; -+ -+ if (block == ST_STRUCTURE_DECL) -+ { -+ comp = COMP_STRUCTURE; -+ ends = ST_END_STRUCTURE; -+ } -+ else -+ { -+ gcc_assert (block == ST_MAP); -+ comp = COMP_MAP; -+ ends = ST_END_MAP; -+ } -+ -+ accept_statement(block); -+ push_state (&s, comp, gfc_new_block); -+ -+ gfc_new_block->component_access = ACCESS_PUBLIC; -+ compiling_type = 1; -+ -+ while (compiling_type) -+ { -+ st = next_statement (); -+ switch (st) -+ { -+ case ST_NONE: -+ unexpected_eof (); -+ -+ /* Nested structure declarations will be captured as ST_DATA_DECL. */ -+ case ST_STRUCTURE_DECL: -+ /* Let a more specific error make it to decode_statement(). */ -+ if (gfc_error_check () == 0) -+ gfc_error ("Syntax error in nested structure declaration at %C"); -+ reject_statement (); -+ /* Skip the rest of this statement. */ -+ gfc_error_recovery (); -+ break; -+ -+ case ST_UNION: -+ accept_statement (ST_UNION); -+ parse_union (); -+ break; -+ -+ case ST_DATA_DECL: -+ /* The data declaration was a nested/ad-hoc STRUCTURE field. */ -+ accept_statement (ST_DATA_DECL); -+ if (gfc_new_block && gfc_new_block != gfc_current_block () -+ && gfc_new_block->attr.flavor == FL_STRUCT) -+ parse_struct_map (ST_STRUCTURE_DECL); -+ break; -+ -+ case ST_END_STRUCTURE: -+ case ST_END_MAP: -+ if (st == ends) -+ { -+ accept_statement (st); -+ compiling_type = 0; -+ } -+ else -+ unexpected_statement (st); -+ break; -+ -+ default: -+ unexpected_statement (st); -+ break; -+ } -+ } -+ -+ /* Validate each component. */ -+ sym = gfc_current_block (); -+ for (c = sym->components; c; c = c->next) -+ check_component (sym, c, &lock_comp, &event_comp); -+ -+ sym->attr.zero_comp = (sym->components == NULL); -+ -+ /* Allow parse_union to find this structure to add to its list of maps. */ -+ if (block == ST_MAP) -+ gfc_new_block = gfc_current_block (); -+ -+ pop_state (); -+} -+ -+ - /* Parse a derived type. */ - - static void -@@ -2762,170 +3220,7 @@ - */ - sym = gfc_current_block (); - for (c = sym->components; c; c = c->next) -- { -- bool coarray, lock_type, event_type, allocatable, pointer; -- coarray = lock_type = event_type = allocatable = pointer = false; -- -- /* Look for allocatable components. */ -- if (c->attr.allocatable -- || (c->ts.type == BT_CLASS && c->attr.class_ok -- && CLASS_DATA (c)->attr.allocatable) -- || (c->ts.type == BT_DERIVED && !c->attr.pointer -- && c->ts.u.derived->attr.alloc_comp)) -- { -- allocatable = true; -- sym->attr.alloc_comp = 1; -- } -- -- /* Look for pointer components. */ -- if (c->attr.pointer -- || (c->ts.type == BT_CLASS && c->attr.class_ok -- && CLASS_DATA (c)->attr.class_pointer) -- || (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.pointer_comp)) -- { -- pointer = true; -- sym->attr.pointer_comp = 1; -- } -- -- /* Look for procedure pointer components. */ -- if (c->attr.proc_pointer -- || (c->ts.type == BT_DERIVED -- && c->ts.u.derived->attr.proc_pointer_comp)) -- sym->attr.proc_pointer_comp = 1; -- -- /* Looking for coarray components. */ -- if (c->attr.codimension -- || (c->ts.type == BT_CLASS && c->attr.class_ok -- && CLASS_DATA (c)->attr.codimension)) -- { -- coarray = true; -- sym->attr.coarray_comp = 1; -- } -- -- if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.coarray_comp -- && !c->attr.pointer) -- { -- coarray = true; -- sym->attr.coarray_comp = 1; -- } -- -- /* Looking for lock_type components. */ -- if ((c->ts.type == BT_DERIVED -- && c->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV -- && c->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE) -- || (c->ts.type == BT_CLASS && c->attr.class_ok -- && CLASS_DATA (c)->ts.u.derived->from_intmod -- == INTMOD_ISO_FORTRAN_ENV -- && CLASS_DATA (c)->ts.u.derived->intmod_sym_id -- == ISOFORTRAN_LOCK_TYPE) -- || (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.lock_comp -- && !allocatable && !pointer)) -- { -- lock_type = 1; -- lock_comp = c; -- sym->attr.lock_comp = 1; -- } -- -- /* Looking for event_type components. */ -- if ((c->ts.type == BT_DERIVED -- && c->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV -- && c->ts.u.derived->intmod_sym_id == ISOFORTRAN_EVENT_TYPE) -- || (c->ts.type == BT_CLASS && c->attr.class_ok -- && CLASS_DATA (c)->ts.u.derived->from_intmod -- == INTMOD_ISO_FORTRAN_ENV -- && CLASS_DATA (c)->ts.u.derived->intmod_sym_id -- == ISOFORTRAN_EVENT_TYPE) -- || (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.event_comp -- && !allocatable && !pointer)) -- { -- event_type = 1; -- event_comp = c; -- sym->attr.event_comp = 1; -- } -- -- /* Check for F2008, C1302 - and recall that pointers may not be coarrays -- (5.3.14) and that subobjects of coarray are coarray themselves (2.4.7), -- unless there are nondirect [allocatable or pointer] components -- involved (cf. 1.3.33.1 and 1.3.33.3). */ -- -- if (pointer && !coarray && lock_type) -- gfc_error ("Component %s at %L of type LOCK_TYPE must have a " -- "codimension or be a subcomponent of a coarray, " -- "which is not possible as the component has the " -- "pointer attribute", c->name, &c->loc); -- else if (pointer && !coarray && c->ts.type == BT_DERIVED -- && c->ts.u.derived->attr.lock_comp) -- gfc_error ("Pointer component %s at %L has a noncoarray subcomponent " -- "of type LOCK_TYPE, which must have a codimension or be a " -- "subcomponent of a coarray", c->name, &c->loc); -- -- if (lock_type && allocatable && !coarray) -- gfc_error ("Allocatable component %s at %L of type LOCK_TYPE must have " -- "a codimension", c->name, &c->loc); -- else if (lock_type && allocatable && c->ts.type == BT_DERIVED -- && c->ts.u.derived->attr.lock_comp) -- gfc_error ("Allocatable component %s at %L must have a codimension as " -- "it has a noncoarray subcomponent of type LOCK_TYPE", -- c->name, &c->loc); -- -- if (sym->attr.coarray_comp && !coarray && lock_type) -- gfc_error ("Noncoarray component %s at %L of type LOCK_TYPE or with " -- "subcomponent of type LOCK_TYPE must have a codimension or " -- "be a subcomponent of a coarray. (Variables of type %s may " -- "not have a codimension as already a coarray " -- "subcomponent exists)", c->name, &c->loc, sym->name); -- -- if (sym->attr.lock_comp && coarray && !lock_type) -- gfc_error ("Noncoarray component %s at %L of type LOCK_TYPE or with " -- "subcomponent of type LOCK_TYPE must have a codimension or " -- "be a subcomponent of a coarray. (Variables of type %s may " -- "not have a codimension as %s at %L has a codimension or a " -- "coarray subcomponent)", lock_comp->name, &lock_comp->loc, -- sym->name, c->name, &c->loc); -- -- /* Similarly for EVENT TYPE. */ -- -- if (pointer && !coarray && event_type) -- gfc_error ("Component %s at %L of type EVENT_TYPE must have a " -- "codimension or be a subcomponent of a coarray, " -- "which is not possible as the component has the " -- "pointer attribute", c->name, &c->loc); -- else if (pointer && !coarray && c->ts.type == BT_DERIVED -- && c->ts.u.derived->attr.event_comp) -- gfc_error ("Pointer component %s at %L has a noncoarray subcomponent " -- "of type EVENT_TYPE, which must have a codimension or be a " -- "subcomponent of a coarray", c->name, &c->loc); -- -- if (event_type && allocatable && !coarray) -- gfc_error ("Allocatable component %s at %L of type EVENT_TYPE must have " -- "a codimension", c->name, &c->loc); -- else if (event_type && allocatable && c->ts.type == BT_DERIVED -- && c->ts.u.derived->attr.event_comp) -- gfc_error ("Allocatable component %s at %L must have a codimension as " -- "it has a noncoarray subcomponent of type EVENT_TYPE", -- c->name, &c->loc); -- -- if (sym->attr.coarray_comp && !coarray && event_type) -- gfc_error ("Noncoarray component %s at %L of type EVENT_TYPE or with " -- "subcomponent of type EVENT_TYPE must have a codimension or " -- "be a subcomponent of a coarray. (Variables of type %s may " -- "not have a codimension as already a coarray " -- "subcomponent exists)", c->name, &c->loc, sym->name); -- -- if (sym->attr.event_comp && coarray && !event_type) -- gfc_error ("Noncoarray component %s at %L of type EVENT_TYPE or with " -- "subcomponent of type EVENT_TYPE must have a codimension or " -- "be a subcomponent of a coarray. (Variables of type %s may " -- "not have a codimension as %s at %L has a codimension or a " -- "coarray subcomponent)", event_comp->name, &event_comp->loc, -- sym->name, c->name, &c->loc); -- -- /* Look for private components. */ -- if (sym->component_access == ACCESS_PRIVATE -- || c->attr.access == ACCESS_PRIVATE -- || (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.private_comp)) -- sym->attr.private_comp = 1; -- } -+ check_component (sym, c, &lock_comp, &event_comp); - - if (!seen_component) - sym->attr.zero_comp = 1; -@@ -3348,8 +3643,10 @@ - case ST_PARAMETER: - case ST_PUBLIC: - case ST_PRIVATE: -+ case ST_STRUCTURE_DECL: - case ST_DERIVED_DECL: - case_decl: -+ case_omp_decl: - declSt: - if (!verify_st_order (&ss, st, false)) - { -@@ -3364,6 +3661,10 @@ - parse_interface (); - break; - -+ case ST_STRUCTURE_DECL: -+ parse_struct_map (ST_STRUCTURE_DECL); -+ break; -+ - case ST_DERIVED_DECL: - parse_derived (); - break; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/parse.h gcc-6-20160721/gcc/fortran/parse.h ---- gcc-6.1.0/gcc/fortran/parse.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/parse.h 2016-05-14 19:52:46.000000000 +0000 -@@ -28,6 +28,7 @@ - COMP_NONE, COMP_PROGRAM, COMP_MODULE, COMP_SUBMODULE, COMP_SUBROUTINE, - COMP_FUNCTION, COMP_BLOCK_DATA, COMP_INTERFACE, COMP_DERIVED, - COMP_DERIVED_CONTAINS, COMP_BLOCK, COMP_ASSOCIATE, COMP_IF, -+ COMP_STRUCTURE, COMP_UNION, COMP_MAP, - COMP_DO, COMP_SELECT, COMP_FORALL, COMP_WHERE, COMP_CONTAINS, COMP_ENUM, - COMP_SELECT_TYPE, COMP_OMP_STRUCTURED_BLOCK, COMP_CRITICAL, COMP_DO_CONCURRENT - }; -@@ -58,6 +59,8 @@ - - #define gfc_current_block() (gfc_state_stack->sym) - #define gfc_current_state() (gfc_state_stack->state) -+#define gfc_comp_struct(s) \ -+ ((s) == COMP_DERIVED || (s) == COMP_STRUCTURE || (s) == COMP_MAP) - - int gfc_check_do_variable (gfc_symtree *); - bool gfc_find_state (gfc_compile_state); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/primary.c gcc-6-20160721/gcc/fortran/primary.c ---- gcc-6.1.0/gcc/fortran/primary.c 2016-02-07 20:15:55.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/primary.c 2016-05-14 19:52:46.000000000 +0000 -@@ -1883,11 +1883,12 @@ - bool ppc_arg) - { - char name[GFC_MAX_SYMBOL_LEN + 1]; -- gfc_ref *substring, *tail; -+ gfc_ref *substring, *tail, *tmp; - gfc_component *component; - gfc_symbol *sym = primary->symtree->n.sym; - match m; - bool unknown; -+ char sep; - - tail = NULL; - -@@ -1972,25 +1973,31 @@ - if (equiv_flag) - return MATCH_YES; - -- if (sym->ts.type == BT_UNKNOWN && gfc_peek_ascii_char () == '%' -+ /* With DEC extensions, member separator may be '.' or '%'. */ -+ sep = gfc_peek_ascii_char (); -+ m = gfc_match_member_sep (sym); -+ if (m == MATCH_ERROR) -+ return MATCH_ERROR; -+ -+ if (sym->ts.type == BT_UNKNOWN && m == MATCH_YES - && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED) - gfc_set_default_type (sym, 0, sym->ns); - -- if (sym->ts.type == BT_UNKNOWN && gfc_match_char ('%') == MATCH_YES) -+ if (sym->ts.type == BT_UNKNOWN && m == MATCH_YES) - { - gfc_error ("Symbol %qs at %C has no IMPLICIT type", sym->name); - return MATCH_ERROR; - } - else if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS) -- && gfc_match_char ('%') == MATCH_YES) -+ && m == MATCH_YES) - { -- gfc_error ("Unexpected %<%%%> for nonderived-type variable %qs at %C", -- sym->name); -+ gfc_error ("Unexpected %<%c%> for nonderived-type variable %qs at %C", -+ sep, sym->name); - return MATCH_ERROR; - } - - if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS) -- || gfc_match_char ('%') != MATCH_YES) -+ || m != MATCH_YES) - goto check_substring; - - sym = sym->ts.u.derived; -@@ -2061,15 +2068,24 @@ - break; - } - -- component = gfc_find_component (sym, name, false, false); -+ component = gfc_find_component (sym, name, false, false, &tmp); - if (component == NULL) - return MATCH_ERROR; - -- tail = extend_ref (primary, tail); -- tail->type = REF_COMPONENT; -+ /* Extend the reference chain determined by gfc_find_component. */ -+ if (primary->ref == NULL) -+ primary->ref = tmp; -+ else -+ { -+ /* Set by the for loop below for the last component ref. */ -+ gcc_assert (tail != NULL); -+ tail->next = tmp; -+ } - -- tail->u.c.component = component; -- tail->u.c.sym = sym; -+ /* The reference chain may be longer than one hop for union -+ subcomponents; find the new tail. */ -+ for (tail = tmp; tail->next; tail = tail->next) -+ ; - - primary->ts = component->ts; - -@@ -2119,7 +2135,7 @@ - } - - if ((component->ts.type != BT_DERIVED && component->ts.type != BT_CLASS) -- || gfc_match_char ('%') != MATCH_YES) -+ || gfc_match_member_sep (component->ts.u.derived) != MATCH_YES) - break; - - sym = component->ts.u.derived; -@@ -2127,7 +2143,7 @@ - - check_substring: - unknown = false; -- if (primary->ts.type == BT_UNKNOWN && sym->attr.flavor != FL_DERIVED) -+ if (primary->ts.type == BT_UNKNOWN && !gfc_fl_struct (sym->attr.flavor)) - { - if (gfc_get_default_type (sym->name, sym->ns)->type == BT_CHARACTER) - { -@@ -2548,11 +2564,11 @@ - /* Find the current component in the structure definition and check - its access is not private. */ - if (comp) -- this_comp = gfc_find_component (sym, comp->name, false, false); -+ this_comp = gfc_find_component (sym, comp->name, false, false, NULL); - else - { - this_comp = gfc_find_component (sym, (const char *)comp_tail->name, -- false, false); -+ false, false, NULL); - comp = NULL; /* Reset needed! */ - } - -@@ -2596,7 +2612,7 @@ - if (comp && comp == sym->components - && sym->attr.extension - && comp_tail->val -- && (comp_tail->val->ts.type != BT_DERIVED -+ && (!gfc_bt_struct (comp_tail->val->ts.type) - || - comp_tail->val->ts.u.derived != this_comp->ts.u.derived)) - { -@@ -2697,7 +2713,7 @@ - e->symtree = symtree; - e->expr_type = EXPR_FUNCTION; - -- gcc_assert (sym->attr.flavor == FL_DERIVED -+ gcc_assert (gfc_fl_struct (sym->attr.flavor) - && symtree->n.sym->attr.flavor == FL_PROCEDURE); - e->value.function.esym = sym; - e->symtree->n.sym->attr.generic = 1; -@@ -2795,15 +2811,29 @@ - if (m != MATCH_YES) - return m; - -- if (gfc_find_state (COMP_INTERFACE) -- && !gfc_current_ns->has_import_set) -- i = gfc_get_sym_tree (name, NULL, &symtree, false); -- else -- i = gfc_get_ha_sym_tree (name, &symtree); -- -- if (i) -+ /* Check if the symbol exists. */ -+ if (gfc_find_sym_tree (name, NULL, 1, &symtree)) - return MATCH_ERROR; - -+ /* If the symbol doesn't exist, create it unless the name matches a FL_STRUCT -+ type. For derived types we create a generic symbol which links to the -+ derived type symbol; STRUCTUREs are simpler and must not conflict with -+ variables. */ -+ if (!symtree) -+ if (gfc_find_sym_tree (gfc_dt_upper_string (name), NULL, 1, &symtree)) -+ return MATCH_ERROR; -+ if (!symtree || symtree->n.sym->attr.flavor != FL_STRUCT) -+ { -+ if (gfc_find_state (COMP_INTERFACE) -+ && !gfc_current_ns->has_import_set) -+ i = gfc_get_sym_tree (name, NULL, &symtree, false); -+ else -+ i = gfc_get_ha_sym_tree (name, &symtree); -+ if (i) -+ return MATCH_ERROR; -+ } -+ -+ - sym = symtree->n.sym; - e = NULL; - where = gfc_current_locus; -@@ -2914,6 +2944,7 @@ - - break; - -+ case FL_STRUCT: - case FL_DERIVED: - sym = gfc_use_derived (sym); - if (sym == NULL) -@@ -3054,10 +3085,12 @@ - via an IMPLICIT statement. This can't wait for the - resolution phase. */ - -- if (gfc_peek_ascii_char () == '%' -+ old_loc = gfc_current_locus; -+ if (gfc_match_member_sep (sym) == MATCH_YES - && sym->ts.type == BT_UNKNOWN - && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED) - gfc_set_default_type (sym, 0, sym->ns); -+ gfc_current_locus = old_loc; - - /* If the symbol has a (co)dimension attribute, the expression is a - variable. */ -@@ -3210,13 +3243,19 @@ - break; - - generic_function: -- gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */ -+ /* Look for symbol first; if not found, look for STRUCTURE type symbol -+ specially. Creates a generic symbol for derived types. */ -+ gfc_find_sym_tree (name, NULL, 1, &symtree); -+ if (!symtree) -+ gfc_find_sym_tree (gfc_dt_upper_string (name), NULL, 1, &symtree); -+ if (!symtree || symtree->n.sym->attr.flavor != FL_STRUCT) -+ gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */ - - e = gfc_get_expr (); - e->symtree = symtree; - e->expr_type = EXPR_FUNCTION; - -- if (sym->attr.flavor == FL_DERIVED) -+ if (gfc_fl_struct (sym->attr.flavor)) - { - e->value.function.esym = sym; - e->symtree->n.sym->attr.generic = 1; -@@ -3260,10 +3299,10 @@ - static match - match_variable (gfc_expr **result, int equiv_flag, int host_flag) - { -- gfc_symbol *sym; -+ gfc_symbol *sym, *dt_sym; - gfc_symtree *st; - gfc_expr *expr; -- locus where; -+ locus where, old_loc; - match m; - - /* Since nothing has any business being an lvalue in a module -@@ -3294,6 +3333,17 @@ - sym->attr.implied_index = 0; - - gfc_set_sym_referenced (sym); -+ -+ /* STRUCTUREs may share names with variables, but derived types may not. */ -+ if (sym->attr.flavor == FL_PROCEDURE && sym->generic -+ && (dt_sym = gfc_find_dt_in_generic (sym))) -+ { -+ if (dt_sym->attr.flavor == FL_DERIVED) -+ gfc_error ("Derived type '%s' cannot be used as a variable at %C", -+ sym->name); -+ return MATCH_ERROR; -+ } -+ - switch (sym->attr.flavor) - { - case FL_VARIABLE: -@@ -3379,11 +3429,13 @@ - implicit_ns = gfc_current_ns; - else - implicit_ns = sym->ns; -- -- if (gfc_peek_ascii_char () == '%' -+ -+ old_loc = gfc_current_locus; -+ if (gfc_match_member_sep (sym) == MATCH_YES - && sym->ts.type == BT_UNKNOWN - && gfc_get_default_type (sym->name, implicit_ns)->type == BT_DERIVED) - gfc_set_default_type (sym, 0, implicit_ns); -+ gfc_current_locus = old_loc; - } - - expr = gfc_get_expr (); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/resolve.c gcc-6-20160721/gcc/fortran/resolve.c ---- gcc-6.1.0/gcc/fortran/resolve.c 2016-04-04 10:32:32.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/resolve.c 2016-06-01 18:46:11.000000000 +0000 -@@ -535,7 +535,7 @@ - find_arglists (gfc_symbol *sym) - { - if (sym->attr.if_source == IFSRC_UNKNOWN || sym->ns != gfc_current_ns -- || sym->attr.flavor == FL_DERIVED || sym->attr.intrinsic) -+ || gfc_fl_struct (sym->attr.flavor) || sym->attr.intrinsic) - return; - - resolve_formal_arglist (sym); -@@ -1116,6 +1116,7 @@ - - - static bool resolve_fl_derived0 (gfc_symbol *sym); -+static bool resolve_fl_struct (gfc_symbol *sym); - - - /* Resolve all of the elements of a structure constructor and make sure that -@@ -1132,8 +1133,13 @@ - - t = true; - -- if (expr->ts.type == BT_DERIVED) -- resolve_fl_derived0 (expr->ts.u.derived); -+ if (expr->ts.type == BT_DERIVED || expr->ts.type == BT_UNION) -+ { -+ if (expr->ts.u.derived->attr.flavor == FL_DERIVED) -+ resolve_fl_derived0 (expr->ts.u.derived); -+ else -+ resolve_fl_struct (expr->ts.u.derived); -+ } - - cons = gfc_constructor_first (expr->value.constructor); - -@@ -1561,7 +1567,7 @@ - gfc_namespace* real_context; - - if (sym->attr.flavor == FL_PROGRAM -- || sym->attr.flavor == FL_DERIVED) -+ || gfc_fl_struct (sym->attr.flavor)) - return false; - - gcc_assert (sym->attr.flavor == FL_PROCEDURE); -@@ -2548,7 +2554,7 @@ - generic: - if (!intr) - for (intr = sym->generic; intr; intr = intr->next) -- if (intr->sym->attr.flavor == FL_DERIVED) -+ if (gfc_fl_struct (intr->sym->attr.flavor)) - break; - - if (sym->ns->parent == NULL) -@@ -5715,7 +5721,7 @@ - continue; - - if ((ref->u.c.component->ts.type == BT_CLASS -- || (check_types && ref->u.c.component->ts.type == BT_DERIVED)) -+ || (check_types && gfc_bt_struct (ref->u.c.component->ts.type))) - && ref->u.c.component->attr.flavor != FL_PROCEDURE) - { - declared = ref->u.c.component->ts.u.derived; -@@ -5978,7 +5984,7 @@ - is present. */ - ts = expr->ts; - declared = ts.u.derived; -- c = gfc_find_component (declared, "_vptr", true, true); -+ c = gfc_find_component (declared, "_vptr", true, true, NULL); - if (c->ts.u.derived == NULL) - c->ts.u.derived = gfc_find_derived_vtab (declared); - -@@ -6025,14 +6031,14 @@ - return false; - - /* Weed out cases of the ultimate component being a derived type. */ -- if ((class_ref && class_ref->u.c.component->ts.type == BT_DERIVED) -+ if ((class_ref && gfc_bt_struct (class_ref->u.c.component->ts.type)) - || (!class_ref && st->n.sym->ts.type != BT_CLASS)) - { - gfc_free_ref_list (new_ref); - return resolve_compcall (e, NULL); - } - -- c = gfc_find_component (declared, "_data", true, true); -+ c = gfc_find_component (declared, "_data", true, true, NULL); - declared = c->ts.u.derived; - - /* Treat the call as if it is a typebound procedure, in order to roll -@@ -6111,7 +6117,7 @@ - that any delays in resolution are corrected and that the vtab - is present. */ - declared = expr->ts.u.derived; -- c = gfc_find_component (declared, "_vptr", true, true); -+ c = gfc_find_component (declared, "_vptr", true, true, NULL); - if (c->ts.u.derived == NULL) - c->ts.u.derived = gfc_find_derived_vtab (declared); - -@@ -6156,7 +6162,7 @@ - get_declared_from_expr (&class_ref, &new_ref, code->expr1, true); - - /* Weed out cases of the ultimate component being a derived type. */ -- if ((class_ref && class_ref->u.c.component->ts.type == BT_DERIVED) -+ if ((class_ref && gfc_bt_struct (class_ref->u.c.component->ts.type)) - || (!class_ref && st->n.sym->ts.type != BT_CLASS)) - { - gfc_free_ref_list (new_ref); -@@ -7140,7 +7146,7 @@ - gfc_typespec ts; - gfc_expr *init_e; - -- if (code->ext.alloc.ts.type == BT_DERIVED) -+ if (gfc_bt_struct (code->ext.alloc.ts.type)) - ts = code->ext.alloc.ts; - else - ts = e->ts; -@@ -7148,7 +7154,7 @@ - if (ts.type == BT_CLASS) - ts = ts.u.derived->components->ts; - -- if (ts.type == BT_DERIVED && (init_e = gfc_default_initializer (&ts))) -+ if (gfc_bt_struct (ts.type) && (init_e = gfc_default_initializer (&ts))) - { - gfc_code *init_st = gfc_get_code (EXEC_INIT_ASSIGN); - init_st->loc = code->loc; -@@ -7282,7 +7288,7 @@ - sym = a->expr->symtree->n.sym; - - /* TODO - check derived type components. */ -- if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS) -+ if (gfc_bt_struct (sym->ts.type) || sym->ts.type == BT_CLASS) - continue; - - if ((ar->start[i] != NULL -@@ -8220,7 +8226,7 @@ - if (!gfc_build_class_symbol (&sym->ts, &attr, &as)) - gcc_unreachable (); - /* Make sure the _vptr is set. */ -- c = gfc_find_component (sym->ts.u.derived, "_vptr", true, true); -+ c = gfc_find_component (sym->ts.u.derived, "_vptr", true, true, NULL); - if (c->ts.u.derived == NULL) - c->ts.u.derived = gfc_find_derived_vtab (sym->ts.u.derived); - CLASS_DATA (sym)->attr.pointer = 1; -@@ -9911,7 +9917,7 @@ - - for (c= derived->components; c; c = c->next) - { -- if ((c->ts.type != BT_DERIVED -+ if ((!gfc_bt_struct (c->ts.type) - || c->attr.pointer - || c->attr.allocatable - || c->attr.proc_pointer_comp -@@ -10051,7 +10057,7 @@ - - /* The intrinsic assignment does the right thing for pointers - of all kinds and allocatable components. */ -- if (comp1->ts.type != BT_DERIVED -+ if (!gfc_bt_struct (comp1->ts.type) - || comp1->attr.pointer - || comp1->attr.allocatable - || comp1->attr.proc_pointer_comp -@@ -11433,7 +11439,7 @@ - gfc_find_symbol (sym->ts.u.derived->name, sym->ns, 0, &s); - if (s && s->attr.generic) - s = gfc_find_dt_in_generic (s); -- if (s && s->attr.flavor != FL_DERIVED) -+ if (s && !gfc_fl_struct (s->attr.flavor)) - { - gfc_error ("The type %qs cannot be host associated at %L " - "because it is blocked by an incompatible object " -@@ -11959,17 +11965,17 @@ - goto check_formal; - - /* Check the procedure characteristics. */ -- if (sym->attr.pure != iface->attr.pure) -+ if (sym->attr.elemental != iface->attr.elemental) - { -- gfc_error ("Mismatch in PURE attribute between MODULE " -+ gfc_error ("Mismatch in ELEMENTAL attribute between MODULE " - "PROCEDURE at %L and its interface in %s", - &sym->declared_at, module_name); - return false; - } - -- if (sym->attr.elemental != iface->attr.elemental) -+ if (sym->attr.pure != iface->attr.pure) - { -- gfc_error ("Mismatch in ELEMENTAL attribute between MODULE " -+ gfc_error ("Mismatch in PURE attribute between MODULE " - "PROCEDURE at %L and its interface in %s", - &sym->declared_at, module_name); - return false; -@@ -12733,7 +12739,8 @@ - } - - /* Try to find a name collision with an inherited component. */ -- if (super_type && gfc_find_component (super_type, stree->name, true, true)) -+ if (super_type && gfc_find_component (super_type, stree->name, true, true, -+ NULL)) - { - gfc_error ("Procedure %qs at %L has the same name as an inherited" - " component of %qs", -@@ -12881,7 +12888,7 @@ - - for (c = derived->components; c; c = c->next) - { -- if (c->ts.type != BT_DERIVED -+ if (!gfc_bt_struct (c->ts.type) - || c->attr.pointer - || c->attr.allocatable - || c->attr.proc_pointer_comp -@@ -12907,435 +12914,498 @@ - } - - --/* Resolve the components of a derived type. This does not have to wait until -- resolution stage, but can be done as soon as the dt declaration has been -- parsed. */ -+/* Resolve a single component of a derived type or structure. */ - - static bool --resolve_fl_derived0 (gfc_symbol *sym) -+resolve_component (gfc_component *c, gfc_symbol *sym) - { -- gfc_symbol* super_type; -- gfc_component *c; -+ gfc_symbol *super_type; - -- if (sym->attr.unlimited_polymorphic) -+ if (c->attr.artificial) - return true; - -- super_type = gfc_get_derived_super_type (sym); -+ /* F2008, C442. */ -+ if ((!sym->attr.is_class || c != sym->components) -+ && c->attr.codimension -+ && (!c->attr.allocatable || (c->as && c->as->type != AS_DEFERRED))) -+ { -+ gfc_error ("Coarray component %qs at %L must be allocatable with " -+ "deferred shape", c->name, &c->loc); -+ return false; -+ } - -- /* F2008, C432. */ -- if (super_type && sym->attr.coarray_comp && !super_type->attr.coarray_comp) -+ /* F2008, C443. */ -+ if (c->attr.codimension && c->ts.type == BT_DERIVED -+ && c->ts.u.derived->ts.is_iso_c) - { -- gfc_error ("As extending type %qs at %L has a coarray component, " -- "parent type %qs shall also have one", sym->name, -- &sym->declared_at, super_type->name); -+ gfc_error ("Component %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) " -+ "shall not be a coarray", c->name, &c->loc); - return false; - } - -- /* Ensure the extended type gets resolved before we do. */ -- if (super_type && !resolve_fl_derived0 (super_type)) -- return false; -+ /* F2008, C444. */ -+ if (gfc_bt_struct (c->ts.type) && c->ts.u.derived->attr.coarray_comp -+ && (c->attr.codimension || c->attr.pointer || c->attr.dimension -+ || c->attr.allocatable)) -+ { -+ gfc_error ("Component %qs at %L with coarray component " -+ "shall be a nonpointer, nonallocatable scalar", -+ c->name, &c->loc); -+ return false; -+ } - -- /* An ABSTRACT type must be extensible. */ -- if (sym->attr.abstract && !gfc_type_is_extensible (sym)) -+ /* F2008, C448. */ -+ if (c->attr.contiguous && (!c->attr.dimension || !c->attr.pointer)) - { -- gfc_error ("Non-extensible derived-type %qs at %L must not be ABSTRACT", -- sym->name, &sym->declared_at); -+ gfc_error ("Component %qs at %L has the CONTIGUOUS attribute but " -+ "is not an array pointer", c->name, &c->loc); - return false; - } - -- c = (sym->attr.is_class) ? sym->components->ts.u.derived->components -- : sym->components; -+ if (c->attr.proc_pointer && c->ts.interface) -+ { -+ gfc_symbol *ifc = c->ts.interface; - -- bool success = true; -+ if (!sym->attr.vtype && !check_proc_interface (ifc, &c->loc)) -+ { -+ c->tb->error = 1; -+ return false; -+ } - -- for ( ; c != NULL; c = c->next) -+ if (ifc->attr.if_source || ifc->attr.intrinsic) -+ { -+ /* Resolve interface and copy attributes. */ -+ if (ifc->formal && !ifc->formal_ns) -+ resolve_symbol (ifc); -+ if (ifc->attr.intrinsic) -+ gfc_resolve_intrinsic (ifc, &ifc->declared_at); -+ -+ if (ifc->result) -+ { -+ c->ts = ifc->result->ts; -+ c->attr.allocatable = ifc->result->attr.allocatable; -+ c->attr.pointer = ifc->result->attr.pointer; -+ c->attr.dimension = ifc->result->attr.dimension; -+ c->as = gfc_copy_array_spec (ifc->result->as); -+ c->attr.class_ok = ifc->result->attr.class_ok; -+ } -+ else -+ { -+ c->ts = ifc->ts; -+ c->attr.allocatable = ifc->attr.allocatable; -+ c->attr.pointer = ifc->attr.pointer; -+ c->attr.dimension = ifc->attr.dimension; -+ c->as = gfc_copy_array_spec (ifc->as); -+ c->attr.class_ok = ifc->attr.class_ok; -+ } -+ c->ts.interface = ifc; -+ c->attr.function = ifc->attr.function; -+ c->attr.subroutine = ifc->attr.subroutine; -+ -+ c->attr.pure = ifc->attr.pure; -+ c->attr.elemental = ifc->attr.elemental; -+ c->attr.recursive = ifc->attr.recursive; -+ c->attr.always_explicit = ifc->attr.always_explicit; -+ c->attr.ext_attr |= ifc->attr.ext_attr; -+ /* Copy char length. */ -+ if (ifc->ts.type == BT_CHARACTER && ifc->ts.u.cl) -+ { -+ gfc_charlen *cl = gfc_new_charlen (sym->ns, ifc->ts.u.cl); -+ if (cl->length && !cl->resolved -+ && !gfc_resolve_expr (cl->length)) -+ { -+ c->tb->error = 1; -+ return false; -+ } -+ c->ts.u.cl = cl; -+ } -+ } -+ } -+ else if (c->attr.proc_pointer && c->ts.type == BT_UNKNOWN) - { -- if (c->attr.artificial) -- continue; -+ /* Since PPCs are not implicitly typed, a PPC without an explicit -+ interface must be a subroutine. */ -+ gfc_add_subroutine (&c->attr, c->name, &c->loc); -+ } - -- /* F2008, C442. */ -- if ((!sym->attr.is_class || c != sym->components) -- && c->attr.codimension -- && (!c->attr.allocatable || (c->as && c->as->type != AS_DEFERRED))) -- { -- gfc_error ("Coarray component %qs at %L must be allocatable with " -- "deferred shape", c->name, &c->loc); -- success = false; -- continue; -- } -+ /* Procedure pointer components: Check PASS arg. */ -+ if (c->attr.proc_pointer && !c->tb->nopass && c->tb->pass_arg_num == 0 -+ && !sym->attr.vtype) -+ { -+ gfc_symbol* me_arg; - -- /* F2008, C443. */ -- if (c->attr.codimension && c->ts.type == BT_DERIVED -- && c->ts.u.derived->ts.is_iso_c) -- { -- gfc_error ("Component %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) " -- "shall not be a coarray", c->name, &c->loc); -- success = false; -- continue; -- } -+ if (c->tb->pass_arg) -+ { -+ gfc_formal_arglist* i; - -- /* F2008, C444. */ -- if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.coarray_comp -- && (c->attr.codimension || c->attr.pointer || c->attr.dimension -- || c->attr.allocatable)) -- { -- gfc_error ("Component %qs at %L with coarray component " -- "shall be a nonpointer, nonallocatable scalar", -- c->name, &c->loc); -- success = false; -- continue; -- } -+ /* If an explicit passing argument name is given, walk the arg-list -+ and look for it. */ - -- /* F2008, C448. */ -- if (c->attr.contiguous && (!c->attr.dimension || !c->attr.pointer)) -- { -- gfc_error ("Component %qs at %L has the CONTIGUOUS attribute but " -- "is not an array pointer", c->name, &c->loc); -- success = false; -- continue; -- } -+ me_arg = NULL; -+ c->tb->pass_arg_num = 1; -+ for (i = c->ts.interface->formal; i; i = i->next) -+ { -+ if (!strcmp (i->sym->name, c->tb->pass_arg)) -+ { -+ me_arg = i->sym; -+ break; -+ } -+ c->tb->pass_arg_num++; -+ } - -- if (c->attr.proc_pointer && c->ts.interface) -- { -- gfc_symbol *ifc = c->ts.interface; -+ if (!me_arg) -+ { -+ gfc_error ("Procedure pointer component %qs with PASS(%s) " -+ "at %L has no argument %qs", c->name, -+ c->tb->pass_arg, &c->loc, c->tb->pass_arg); -+ c->tb->error = 1; -+ return false; -+ } -+ } -+ else -+ { -+ /* Otherwise, take the first one; there should in fact be at least -+ one. */ -+ c->tb->pass_arg_num = 1; -+ if (!c->ts.interface->formal) -+ { -+ gfc_error ("Procedure pointer component %qs with PASS at %L " -+ "must have at least one argument", -+ c->name, &c->loc); -+ c->tb->error = 1; -+ return false; -+ } -+ me_arg = c->ts.interface->formal->sym; -+ } - -- if (!sym->attr.vtype && !check_proc_interface (ifc, &c->loc)) -- { -- c->tb->error = 1; -- success = false; -- continue; -- } -+ /* Now check that the argument-type matches. */ -+ gcc_assert (me_arg); -+ if ((me_arg->ts.type != BT_DERIVED && me_arg->ts.type != BT_CLASS) -+ || (me_arg->ts.type == BT_DERIVED && me_arg->ts.u.derived != sym) -+ || (me_arg->ts.type == BT_CLASS -+ && CLASS_DATA (me_arg)->ts.u.derived != sym)) -+ { -+ gfc_error ("Argument %qs of %qs with PASS(%s) at %L must be of" -+ " the derived type %qs", me_arg->name, c->name, -+ me_arg->name, &c->loc, sym->name); -+ c->tb->error = 1; -+ return false; -+ } - -- if (ifc->attr.if_source || ifc->attr.intrinsic) -- { -- /* Resolve interface and copy attributes. */ -- if (ifc->formal && !ifc->formal_ns) -- resolve_symbol (ifc); -- if (ifc->attr.intrinsic) -- gfc_resolve_intrinsic (ifc, &ifc->declared_at); -+ /* Check for C453. */ -+ if (me_arg->attr.dimension) -+ { -+ gfc_error ("Argument %qs of %qs with PASS(%s) at %L " -+ "must be scalar", me_arg->name, c->name, me_arg->name, -+ &c->loc); -+ c->tb->error = 1; -+ return false; -+ } - -- if (ifc->result) -- { -- c->ts = ifc->result->ts; -- c->attr.allocatable = ifc->result->attr.allocatable; -- c->attr.pointer = ifc->result->attr.pointer; -- c->attr.dimension = ifc->result->attr.dimension; -- c->as = gfc_copy_array_spec (ifc->result->as); -- c->attr.class_ok = ifc->result->attr.class_ok; -- } -- else -- { -- c->ts = ifc->ts; -- c->attr.allocatable = ifc->attr.allocatable; -- c->attr.pointer = ifc->attr.pointer; -- c->attr.dimension = ifc->attr.dimension; -- c->as = gfc_copy_array_spec (ifc->as); -- c->attr.class_ok = ifc->attr.class_ok; -- } -- c->ts.interface = ifc; -- c->attr.function = ifc->attr.function; -- c->attr.subroutine = ifc->attr.subroutine; -- -- c->attr.pure = ifc->attr.pure; -- c->attr.elemental = ifc->attr.elemental; -- c->attr.recursive = ifc->attr.recursive; -- c->attr.always_explicit = ifc->attr.always_explicit; -- c->attr.ext_attr |= ifc->attr.ext_attr; -- /* Copy char length. */ -- if (ifc->ts.type == BT_CHARACTER && ifc->ts.u.cl) -- { -- gfc_charlen *cl = gfc_new_charlen (sym->ns, ifc->ts.u.cl); -- if (cl->length && !cl->resolved -- && !gfc_resolve_expr (cl->length)) -- { -- c->tb->error = 1; -- success = false; -- continue; -- } -- c->ts.u.cl = cl; -- } -- } -- } -- else if (c->attr.proc_pointer && c->ts.type == BT_UNKNOWN) -- { -- /* Since PPCs are not implicitly typed, a PPC without an explicit -- interface must be a subroutine. */ -- gfc_add_subroutine (&c->attr, c->name, &c->loc); -- } -+ if (me_arg->attr.pointer) -+ { -+ gfc_error ("Argument %qs of %qs with PASS(%s) at %L " -+ "may not have the POINTER attribute", me_arg->name, -+ c->name, me_arg->name, &c->loc); -+ c->tb->error = 1; -+ return false; -+ } - -- /* Procedure pointer components: Check PASS arg. */ -- if (c->attr.proc_pointer && !c->tb->nopass && c->tb->pass_arg_num == 0 -- && !sym->attr.vtype) -- { -- gfc_symbol* me_arg; -+ if (me_arg->attr.allocatable) -+ { -+ gfc_error ("Argument %qs of %qs with PASS(%s) at %L " -+ "may not be ALLOCATABLE", me_arg->name, c->name, -+ me_arg->name, &c->loc); -+ c->tb->error = 1; -+ return false; -+ } - -- if (c->tb->pass_arg) -- { -- gfc_formal_arglist* i; -+ if (gfc_type_is_extensible (sym) && me_arg->ts.type != BT_CLASS) -+ { -+ gfc_error ("Non-polymorphic passed-object dummy argument of %qs" -+ " at %L", c->name, &c->loc); -+ return false; -+ } - -- /* If an explicit passing argument name is given, walk the arg-list -- and look for it. */ -+ } - -- me_arg = NULL; -- c->tb->pass_arg_num = 1; -- for (i = c->ts.interface->formal; i; i = i->next) -- { -- if (!strcmp (i->sym->name, c->tb->pass_arg)) -- { -- me_arg = i->sym; -- break; -- } -- c->tb->pass_arg_num++; -- } -+ /* Check type-spec if this is not the parent-type component. */ -+ if (((sym->attr.is_class -+ && (!sym->components->ts.u.derived->attr.extension -+ || c != sym->components->ts.u.derived->components)) -+ || (!sym->attr.is_class -+ && (!sym->attr.extension || c != sym->components))) -+ && !sym->attr.vtype -+ && !resolve_typespec_used (&c->ts, &c->loc, c->name)) -+ return false; - -- if (!me_arg) -- { -- gfc_error ("Procedure pointer component %qs with PASS(%s) " -- "at %L has no argument %qs", c->name, -- c->tb->pass_arg, &c->loc, c->tb->pass_arg); -- c->tb->error = 1; -- success = false; -- continue; -- } -- } -- else -- { -- /* Otherwise, take the first one; there should in fact be at least -- one. */ -- c->tb->pass_arg_num = 1; -- if (!c->ts.interface->formal) -- { -- gfc_error ("Procedure pointer component %qs with PASS at %L " -- "must have at least one argument", -- c->name, &c->loc); -- c->tb->error = 1; -- success = false; -- continue; -- } -- me_arg = c->ts.interface->formal->sym; -- } -+ super_type = gfc_get_derived_super_type (sym); - -- /* Now check that the argument-type matches. */ -- gcc_assert (me_arg); -- if ((me_arg->ts.type != BT_DERIVED && me_arg->ts.type != BT_CLASS) -- || (me_arg->ts.type == BT_DERIVED && me_arg->ts.u.derived != sym) -- || (me_arg->ts.type == BT_CLASS -- && CLASS_DATA (me_arg)->ts.u.derived != sym)) -- { -- gfc_error ("Argument %qs of %qs with PASS(%s) at %L must be of" -- " the derived type %qs", me_arg->name, c->name, -- me_arg->name, &c->loc, sym->name); -- c->tb->error = 1; -- success = false; -- continue; -- } -+ /* If this type is an extension, set the accessibility of the parent -+ component. */ -+ if (super_type -+ && ((sym->attr.is_class -+ && c == sym->components->ts.u.derived->components) -+ || (!sym->attr.is_class && c == sym->components)) -+ && strcmp (super_type->name, c->name) == 0) -+ c->attr.access = super_type->attr.access; -+ -+ /* If this type is an extension, see if this component has the same name -+ as an inherited type-bound procedure. */ -+ if (super_type && !sym->attr.is_class -+ && gfc_find_typebound_proc (super_type, NULL, c->name, true, NULL)) -+ { -+ gfc_error ("Component %qs of %qs at %L has the same name as an" -+ " inherited type-bound procedure", -+ c->name, sym->name, &c->loc); -+ return false; -+ } - -- /* Check for C453. */ -- if (me_arg->attr.dimension) -- { -- gfc_error ("Argument %qs of %qs with PASS(%s) at %L " -- "must be scalar", me_arg->name, c->name, me_arg->name, -- &c->loc); -- c->tb->error = 1; -- success = false; -- continue; -- } -+ if (c->ts.type == BT_CHARACTER && !c->attr.proc_pointer -+ && !c->ts.deferred) -+ { -+ if (c->ts.u.cl->length == NULL -+ || (!resolve_charlen(c->ts.u.cl)) -+ || !gfc_is_constant_expr (c->ts.u.cl->length)) -+ { -+ gfc_error ("Character length of component %qs needs to " -+ "be a constant specification expression at %L", -+ c->name, -+ c->ts.u.cl->length ? &c->ts.u.cl->length->where : &c->loc); -+ return false; -+ } -+ } - -- if (me_arg->attr.pointer) -- { -- gfc_error ("Argument %qs of %qs with PASS(%s) at %L " -- "may not have the POINTER attribute", me_arg->name, -- c->name, me_arg->name, &c->loc); -- c->tb->error = 1; -- success = false; -- continue; -- } -+ if (c->ts.type == BT_CHARACTER && c->ts.deferred -+ && !c->attr.pointer && !c->attr.allocatable) -+ { -+ gfc_error ("Character component %qs of %qs at %L with deferred " -+ "length must be a POINTER or ALLOCATABLE", -+ c->name, sym->name, &c->loc); -+ return false; -+ } - -- if (me_arg->attr.allocatable) -- { -- gfc_error ("Argument %qs of %qs with PASS(%s) at %L " -- "may not be ALLOCATABLE", me_arg->name, c->name, -- me_arg->name, &c->loc); -- c->tb->error = 1; -- success = false; -- continue; -- } -+ /* Add the hidden deferred length field. */ -+ if (c->ts.type == BT_CHARACTER && c->ts.deferred && !c->attr.function -+ && !sym->attr.is_class) -+ { -+ char name[GFC_MAX_SYMBOL_LEN+9]; -+ gfc_component *strlen; -+ sprintf (name, "_%s_length", c->name); -+ strlen = gfc_find_component (sym, name, true, true, NULL); -+ if (strlen == NULL) -+ { -+ if (!gfc_add_component (sym, name, &strlen)) -+ return false; -+ strlen->ts.type = BT_INTEGER; -+ strlen->ts.kind = gfc_charlen_int_kind; -+ strlen->attr.access = ACCESS_PRIVATE; -+ strlen->attr.artificial = 1; -+ } -+ } - -- if (gfc_type_is_extensible (sym) && me_arg->ts.type != BT_CLASS) -- { -- gfc_error ("Non-polymorphic passed-object dummy argument of %qs" -- " at %L", c->name, &c->loc); -- success = false; -- continue; -- } -+ if (c->ts.type == BT_DERIVED -+ && sym->component_access != ACCESS_PRIVATE -+ && gfc_check_symbol_access (sym) -+ && !is_sym_host_assoc (c->ts.u.derived, sym->ns) -+ && !c->ts.u.derived->attr.use_assoc -+ && !gfc_check_symbol_access (c->ts.u.derived) -+ && !gfc_notify_std (GFC_STD_F2003, "the component %qs is a " -+ "PRIVATE type and cannot be a component of " -+ "%qs, which is PUBLIC at %L", c->name, -+ sym->name, &sym->declared_at)) -+ return false; - -- } -+ if ((sym->attr.sequence || sym->attr.is_bind_c) && c->ts.type == BT_CLASS) -+ { -+ gfc_error ("Polymorphic component %s at %L in SEQUENCE or BIND(C) " -+ "type %s", c->name, &c->loc, sym->name); -+ return false; -+ } - -- /* Check type-spec if this is not the parent-type component. */ -- if (((sym->attr.is_class -- && (!sym->components->ts.u.derived->attr.extension -- || c != sym->components->ts.u.derived->components)) -- || (!sym->attr.is_class -- && (!sym->attr.extension || c != sym->components))) -- && !sym->attr.vtype -- && !resolve_typespec_used (&c->ts, &c->loc, c->name)) -- return false; -+ if (sym->attr.sequence) -+ { -+ if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.sequence == 0) -+ { -+ gfc_error ("Component %s of SEQUENCE type declared at %L does " -+ "not have the SEQUENCE attribute", -+ c->ts.u.derived->name, &sym->declared_at); -+ return false; -+ } -+ } - -- /* If this type is an extension, set the accessibility of the parent -- component. */ -- if (super_type -- && ((sym->attr.is_class -- && c == sym->components->ts.u.derived->components) -- || (!sym->attr.is_class && c == sym->components)) -- && strcmp (super_type->name, c->name) == 0) -- c->attr.access = super_type->attr.access; -- -- /* If this type is an extension, see if this component has the same name -- as an inherited type-bound procedure. */ -- if (super_type && !sym->attr.is_class -- && gfc_find_typebound_proc (super_type, NULL, c->name, true, NULL)) -- { -- gfc_error ("Component %qs of %qs at %L has the same name as an" -- " inherited type-bound procedure", -- c->name, sym->name, &c->loc); -- return false; -- } -+ if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.generic) -+ c->ts.u.derived = gfc_find_dt_in_generic (c->ts.u.derived); -+ else if (c->ts.type == BT_CLASS && c->attr.class_ok -+ && CLASS_DATA (c)->ts.u.derived->attr.generic) -+ CLASS_DATA (c)->ts.u.derived -+ = gfc_find_dt_in_generic (CLASS_DATA (c)->ts.u.derived); - -- if (c->ts.type == BT_CHARACTER && !c->attr.proc_pointer -- && !c->ts.deferred) -- { -- if (c->ts.u.cl->length == NULL -- || (!resolve_charlen(c->ts.u.cl)) -- || !gfc_is_constant_expr (c->ts.u.cl->length)) -- { -- gfc_error ("Character length of component %qs needs to " -- "be a constant specification expression at %L", -- c->name, -- c->ts.u.cl->length ? &c->ts.u.cl->length->where : &c->loc); -- return false; -- } -- } -+ if (!sym->attr.is_class && c->ts.type == BT_DERIVED && !sym->attr.vtype -+ && c->attr.pointer && c->ts.u.derived->components == NULL -+ && !c->ts.u.derived->attr.zero_comp) -+ { -+ gfc_error ("The pointer component %qs of %qs at %L is a type " -+ "that has not been declared", c->name, sym->name, -+ &c->loc); -+ return false; -+ } - -- if (c->ts.type == BT_CHARACTER && c->ts.deferred -- && !c->attr.pointer && !c->attr.allocatable) -- { -- gfc_error ("Character component %qs of %qs at %L with deferred " -- "length must be a POINTER or ALLOCATABLE", -- c->name, sym->name, &c->loc); -- return false; -- } -+ if (c->ts.type == BT_CLASS && c->attr.class_ok -+ && CLASS_DATA (c)->attr.class_pointer -+ && CLASS_DATA (c)->ts.u.derived->components == NULL -+ && !CLASS_DATA (c)->ts.u.derived->attr.zero_comp -+ && !UNLIMITED_POLY (c)) -+ { -+ gfc_error ("The pointer component %qs of %qs at %L is a type " -+ "that has not been declared", c->name, sym->name, -+ &c->loc); -+ return false; -+ } - -- /* Add the hidden deferred length field. */ -- if (c->ts.type == BT_CHARACTER && c->ts.deferred && !c->attr.function -- && !sym->attr.is_class) -- { -- char name[GFC_MAX_SYMBOL_LEN+9]; -- gfc_component *strlen; -- sprintf (name, "_%s_length", c->name); -- strlen = gfc_find_component (sym, name, true, true); -- if (strlen == NULL) -- { -- if (!gfc_add_component (sym, name, &strlen)) -- return false; -- strlen->ts.type = BT_INTEGER; -- strlen->ts.kind = gfc_charlen_int_kind; -- strlen->attr.access = ACCESS_PRIVATE; -- strlen->attr.artificial = 1; -- } -- } -+ /* C437. */ -+ if (c->ts.type == BT_CLASS && c->attr.flavor != FL_PROCEDURE -+ && (!c->attr.class_ok -+ || !(CLASS_DATA (c)->attr.class_pointer -+ || CLASS_DATA (c)->attr.allocatable))) -+ { -+ gfc_error ("Component %qs with CLASS at %L must be allocatable " -+ "or pointer", c->name, &c->loc); -+ /* Prevent a recurrence of the error. */ -+ c->ts.type = BT_UNKNOWN; -+ return false; -+ } - -- if (c->ts.type == BT_DERIVED -- && sym->component_access != ACCESS_PRIVATE -- && gfc_check_symbol_access (sym) -- && !is_sym_host_assoc (c->ts.u.derived, sym->ns) -- && !c->ts.u.derived->attr.use_assoc -- && !gfc_check_symbol_access (c->ts.u.derived) -- && !gfc_notify_std (GFC_STD_F2003, "the component %qs is a " -- "PRIVATE type and cannot be a component of " -- "%qs, which is PUBLIC at %L", c->name, -- sym->name, &sym->declared_at)) -- return false; -+ /* Ensure that all the derived type components are put on the -+ derived type list; even in formal namespaces, where derived type -+ pointer components might not have been declared. */ -+ if (c->ts.type == BT_DERIVED -+ && c->ts.u.derived -+ && c->ts.u.derived->components -+ && c->attr.pointer -+ && sym != c->ts.u.derived) -+ add_dt_to_dt_list (c->ts.u.derived); - -- if ((sym->attr.sequence || sym->attr.is_bind_c) && c->ts.type == BT_CLASS) -- { -- gfc_error ("Polymorphic component %s at %L in SEQUENCE or BIND(C) " -- "type %s", c->name, &c->loc, sym->name); -- return false; -- } -+ if (!gfc_resolve_array_spec (c->as, -+ !(c->attr.pointer || c->attr.proc_pointer -+ || c->attr.allocatable))) -+ return false; - -- if (sym->attr.sequence) -- { -- if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.sequence == 0) -- { -- gfc_error ("Component %s of SEQUENCE type declared at %L does " -- "not have the SEQUENCE attribute", -- c->ts.u.derived->name, &sym->declared_at); -- return false; -- } -- } -+ if (c->initializer && !sym->attr.vtype -+ && !gfc_check_assign_symbol (sym, c, c->initializer)) -+ return false; - -- if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.generic) -- c->ts.u.derived = gfc_find_dt_in_generic (c->ts.u.derived); -- else if (c->ts.type == BT_CLASS && c->attr.class_ok -- && CLASS_DATA (c)->ts.u.derived->attr.generic) -- CLASS_DATA (c)->ts.u.derived -- = gfc_find_dt_in_generic (CLASS_DATA (c)->ts.u.derived); -+ return true; -+} - -- if (!sym->attr.is_class && c->ts.type == BT_DERIVED && !sym->attr.vtype -- && c->attr.pointer && c->ts.u.derived->components == NULL -- && !c->ts.u.derived->attr.zero_comp) -- { -- gfc_error ("The pointer component %qs of %qs at %L is a type " -- "that has not been declared", c->name, sym->name, -- &c->loc); -- return false; -- } - -- if (c->ts.type == BT_CLASS && c->attr.class_ok -- && CLASS_DATA (c)->attr.class_pointer -- && CLASS_DATA (c)->ts.u.derived->components == NULL -- && !CLASS_DATA (c)->ts.u.derived->attr.zero_comp -- && !UNLIMITED_POLY (c)) -- { -- gfc_error ("The pointer component %qs of %qs at %L is a type " -- "that has not been declared", c->name, sym->name, -- &c->loc); -- return false; -- } -+/* Be nice about the locus for a structure expression - show the locus of the -+ first non-null sub-expression if we can. */ - -- /* C437. */ -- if (c->ts.type == BT_CLASS && c->attr.flavor != FL_PROCEDURE -- && (!c->attr.class_ok -- || !(CLASS_DATA (c)->attr.class_pointer -- || CLASS_DATA (c)->attr.allocatable))) -- { -- gfc_error ("Component %qs with CLASS at %L must be allocatable " -- "or pointer", c->name, &c->loc); -- /* Prevent a recurrence of the error. */ -- c->ts.type = BT_UNKNOWN; -- return false; -- } -+static locus * -+cons_where (gfc_expr *struct_expr) -+{ -+ gfc_constructor *cons; - -- /* Ensure that all the derived type components are put on the -- derived type list; even in formal namespaces, where derived type -- pointer components might not have been declared. */ -- if (c->ts.type == BT_DERIVED -- && c->ts.u.derived -- && c->ts.u.derived->components -- && c->attr.pointer -- && sym != c->ts.u.derived) -- add_dt_to_dt_list (c->ts.u.derived); -+ gcc_assert (struct_expr && struct_expr->expr_type == EXPR_STRUCTURE); - -- if (!gfc_resolve_array_spec (c->as, -- !(c->attr.pointer || c->attr.proc_pointer -- || c->attr.allocatable))) -- return false; -+ cons = gfc_constructor_first (struct_expr->value.constructor); -+ for (; cons; cons = gfc_constructor_next (cons)) -+ { -+ if (cons->expr && cons->expr->expr_type != EXPR_NULL) -+ return &cons->expr->where; -+ } - -- if (c->initializer && !sym->attr.vtype -- && !gfc_check_assign_symbol (sym, c, c->initializer)) -- return false; -+ return &struct_expr->where; -+} -+ -+/* Resolve the components of a structure type. Much less work than derived -+ types. */ -+ -+static bool -+resolve_fl_struct (gfc_symbol *sym) -+{ -+ gfc_component *c; -+ gfc_expr *init = NULL; -+ bool success; -+ -+ /* Make sure UNIONs do not have overlapping initializers. */ -+ if (sym->attr.flavor == FL_UNION) -+ { -+ for (c = sym->components; c; c = c->next) -+ { -+ if (init && c->initializer) -+ { -+ gfc_error ("Conflicting initializers in union at %L and %L", -+ cons_where (init), cons_where (c->initializer)); -+ gfc_free_expr (c->initializer); -+ c->initializer = NULL; -+ } -+ if (init == NULL) -+ init = c->initializer; -+ } - } - -+ success = true; -+ for (c = sym->components; c; c = c->next) -+ if (!resolve_component (c, sym)) -+ success = false; -+ -+ if (!success) -+ return false; -+ -+ if (sym->components) -+ add_dt_to_dt_list (sym); -+ -+ return true; -+} -+ -+ -+/* Resolve the components of a derived type. This does not have to wait until -+ resolution stage, but can be done as soon as the dt declaration has been -+ parsed. */ -+ -+static bool -+resolve_fl_derived0 (gfc_symbol *sym) -+{ -+ gfc_symbol* super_type; -+ gfc_component *c; -+ bool success; -+ -+ if (sym->attr.unlimited_polymorphic) -+ return true; -+ -+ super_type = gfc_get_derived_super_type (sym); -+ -+ /* F2008, C432. */ -+ if (super_type && sym->attr.coarray_comp && !super_type->attr.coarray_comp) -+ { -+ gfc_error ("As extending type %qs at %L has a coarray component, " -+ "parent type %qs shall also have one", sym->name, -+ &sym->declared_at, super_type->name); -+ return false; -+ } -+ -+ /* Ensure the extended type gets resolved before we do. */ -+ if (super_type && !resolve_fl_derived0 (super_type)) -+ return false; -+ -+ /* An ABSTRACT type must be extensible. */ -+ if (sym->attr.abstract && !gfc_type_is_extensible (sym)) -+ { -+ gfc_error ("Non-extensible derived-type %qs at %L must not be ABSTRACT", -+ sym->name, &sym->declared_at); -+ return false; -+ } -+ -+ c = (sym->attr.is_class) ? sym->components->ts.u.derived->components -+ : sym->components; -+ -+ success = true; -+ for ( ; c != NULL; c = c->next) -+ if (!resolve_component (c, sym)) -+ success = false; -+ - if (!success) - return false; - -@@ -13396,8 +13466,8 @@ - if (sym->attr.is_class && sym->ts.u.derived == NULL) - { - /* Fix up incomplete CLASS symbols. */ -- gfc_component *data = gfc_find_component (sym, "_data", true, true); -- gfc_component *vptr = gfc_find_component (sym, "_vptr", true, true); -+ gfc_component *data = gfc_find_component (sym, "_data", true, true, NULL); -+ gfc_component *vptr = gfc_find_component (sym, "_vptr", true, true, NULL); - - /* Nothing more to do for unlimited polymorphic entities. */ - if (data->ts.u.derived->attr.unlimited_polymorphic) -@@ -13616,6 +13686,11 @@ - return; - sym->resolved = 1; - -+ /* No symbol will ever have union type; only components can be unions. -+ Union type declaration symbols have type BT_UNKNOWN but flavor FL_UNION -+ (just like derived type declaration symbols have flavor FL_DERIVED). */ -+ gcc_assert (sym->ts.type != BT_UNION); -+ - if (sym->attr.artificial) - return; - -@@ -13687,6 +13762,10 @@ - if (sym->attr.flavor == FL_DERIVED && !resolve_fl_derived (sym)) - return; - -+ else if ((sym->attr.flavor == FL_STRUCT || sym->attr.flavor == FL_UNION) -+ && !resolve_fl_struct (sym)) -+ return; -+ - /* Symbols that are module procedures with results (functions) have - the types and array specification copied for type checking in - procedures that call them, as well as for saving to a module -@@ -15030,7 +15109,7 @@ - - for (; c ; c = c->next) - { -- if (c->ts.type == BT_DERIVED -+ if (gfc_bt_struct (c->ts.type) - && (!resolve_equivalence_derived(c->ts.u.derived, sym, e))) - return false; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/scanner.c gcc-6-20160721/gcc/fortran/scanner.c ---- gcc-6.1.0/gcc/fortran/scanner.c 2016-03-19 20:28:38.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/scanner.c 2016-05-27 01:05:21.000000000 +0000 -@@ -1556,6 +1556,7 @@ - not_continuation: - c = '\n'; - gfc_current_locus = old_loc; -+ end_flag = 0; - - done: - if (c == '\n') -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/symbol.c gcc-6-20160721/gcc/fortran/symbol.c ---- gcc-6.1.0/gcc/fortran/symbol.c 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/symbol.c 2016-05-14 19:52:46.000000000 +0000 -@@ -40,6 +40,7 @@ - minit ("VARIABLE", FL_VARIABLE), minit ("PARAMETER", FL_PARAMETER), - minit ("LABEL", FL_LABEL), minit ("PROCEDURE", FL_PROCEDURE), - minit ("DERIVED", FL_DERIVED), minit ("NAMELIST", FL_NAMELIST), -+ minit ("UNION", FL_UNION), minit ("STRUCTURE", FL_STRUCT), - minit (NULL, -1) - }; - -@@ -444,7 +445,7 @@ - case FL_BLOCK_DATA: - case FL_MODULE: - case FL_LABEL: -- case FL_DERIVED: -+ case_fl_struct: - case FL_PARAMETER: - a1 = gfc_code2string (flavors, attr->flavor); - a2 = save; -@@ -740,7 +741,7 @@ - - break; - -- case FL_DERIVED: -+ case_fl_struct: - conf2 (dummy); - conf2 (pointer); - conf2 (target); -@@ -1579,7 +1580,7 @@ - { - - if ((f == FL_PROGRAM || f == FL_BLOCK_DATA || f == FL_MODULE -- || f == FL_PARAMETER || f == FL_LABEL || f == FL_DERIVED -+ || f == FL_PARAMETER || f == FL_LABEL || gfc_fl_struct(f) - || f == FL_NAMELIST) && check_used (attr, name, where)) - return false; - -@@ -2048,6 +2049,11 @@ - { - gfc_component *p, *tail; - -+ /* Check for existing components with the same name, but not for union -+ components or containers. Unions and maps are anonymous so they have -+ unique internal names which will never conflict. -+ Don't use gfc_find_component here because it calls gfc_use_derived, -+ but the derived type may not be fully defined yet. */ - tail = NULL; - - for (p = sym->components; p; p = p->next) -@@ -2063,7 +2069,8 @@ - } - - if (sym->attr.extension -- && gfc_find_component (sym->components->ts.u.derived, name, true, true)) -+ && gfc_find_component (sym->components->ts.u.derived, -+ name, true, true, NULL)) - { - gfc_error ("Component %qs at %C already in the parent type " - "at %L", name, &sym->components->ts.u.derived->declared_at); -@@ -2154,7 +2161,7 @@ - return NULL; - } - -- if (s == NULL || s->attr.flavor != FL_DERIVED) -+ if (s == NULL || !gfc_fl_struct (s->attr.flavor)) - goto bad; - - /* Get rid of symbol sym, translating all references to s. */ -@@ -2188,28 +2195,113 @@ - } - - -+/* Find the component with the given name in the union type symbol. -+ If ref is not NULL it will be set to the chain of components through which -+ the component can actually be accessed. This is necessary for unions because -+ intermediate structures may be maps, nested structures, or other unions, -+ all of which may (or must) be 'anonymous' to user code. */ -+ -+static gfc_component * -+find_union_component (gfc_symbol *un, const char *name, -+ bool noaccess, gfc_ref **ref) -+{ -+ gfc_component *m, *check; -+ gfc_ref *sref, *tmp; -+ -+ for (m = un->components; m; m = m->next) -+ { -+ check = gfc_find_component (m->ts.u.derived, name, noaccess, true, &tmp); -+ if (check == NULL) -+ continue; -+ -+ /* Found component somewhere in m; chain the refs together. */ -+ if (ref) -+ { -+ /* Map ref. */ -+ sref = gfc_get_ref (); -+ sref->type = REF_COMPONENT; -+ sref->u.c.component = m; -+ sref->u.c.sym = m->ts.u.derived; -+ sref->next = tmp; -+ -+ *ref = sref; -+ } -+ /* Other checks (such as access) were done in the recursive calls. */ -+ return check; -+ } -+ return NULL; -+} -+ -+ - /* Given a derived type node and a component name, try to locate the - component structure. Returns the NULL pointer if the component is - not found or the components are private. If noaccess is set, no access -- checks are done. */ -+ checks are done. If silent is set, an error will not be generated if -+ the component cannot be found or accessed. -+ -+ If ref is not NULL, *ref is set to represent the chain of components -+ required to get to the ultimate component. -+ -+ If the component is simply a direct subcomponent, or is inherited from a -+ parent derived type in the given derived type, this is a single ref with its -+ component set to the returned component. -+ -+ Otherwise, *ref is constructed as a chain of subcomponents. This occurs -+ when the component is found through an implicit chain of nested union and -+ map components. Unions and maps are "anonymous" substructures in FORTRAN -+ which cannot be explicitly referenced, but the reference chain must be -+ considered as in C for backend translation to correctly compute layouts. -+ (For example, x.a may refer to x->(UNION)->(MAP)->(UNION)->(MAP)->a). */ - - gfc_component * - gfc_find_component (gfc_symbol *sym, const char *name, -- bool noaccess, bool silent) -+ bool noaccess, bool silent, gfc_ref **ref) - { -- gfc_component *p; -+ gfc_component *p, *check; -+ gfc_ref *sref = NULL, *tmp = NULL; - - if (name == NULL || sym == NULL) - return NULL; - -- sym = gfc_use_derived (sym); -+ if (sym->attr.flavor == FL_DERIVED) -+ sym = gfc_use_derived (sym); -+ else -+ gcc_assert (gfc_fl_struct (sym->attr.flavor)); - - if (sym == NULL) - return NULL; - -+ /* Handle UNIONs specially - mutually recursive with gfc_find_component. */ -+ if (sym->attr.flavor == FL_UNION) -+ return find_union_component (sym, name, noaccess, ref); -+ -+ if (ref) *ref = NULL; - for (p = sym->components; p; p = p->next) -- if (strcmp (p->name, name) == 0) -- break; -+ { -+ /* Nest search into union's maps. */ -+ if (p->ts.type == BT_UNION) -+ { -+ check = find_union_component (p->ts.u.derived, name, noaccess, &tmp); -+ if (check != NULL) -+ { -+ /* Union ref. */ -+ if (ref) -+ { -+ sref = gfc_get_ref (); -+ sref->type = REF_COMPONENT; -+ sref->u.c.component = p; -+ sref->u.c.sym = p->ts.u.derived; -+ sref->next = tmp; -+ *ref = sref; -+ } -+ return check; -+ } -+ } -+ else if (strcmp (p->name, name) == 0) -+ break; -+ -+ continue; -+ } - - if (p && sym->attr.use_assoc && !noaccess) - { -@@ -2231,7 +2323,7 @@ - && sym->components->ts.type == BT_DERIVED) - { - p = gfc_find_component (sym->components->ts.u.derived, name, -- noaccess, silent); -+ noaccess, silent, ref); - /* Do not overwrite the error. */ - if (p == NULL) - return p; -@@ -2241,6 +2333,25 @@ - gfc_error ("%qs at %C is not a member of the %qs structure", - name, sym->name); - -+ /* Component was found; build the ultimate component reference. */ -+ if (p != NULL && ref) -+ { -+ tmp = gfc_get_ref (); -+ tmp->type = REF_COMPONENT; -+ tmp->u.c.component = p; -+ tmp->u.c.sym = sym; -+ /* Link the final component ref to the end of the chain of subrefs. */ -+ if (sref) -+ { -+ *ref = sref; -+ for (; sref->next; sref = sref->next) -+ ; -+ sref->next = tmp; -+ } -+ else -+ *ref = tmp; -+ } -+ - return p; - } - -@@ -3338,11 +3449,9 @@ - /* The derived type is saved in the symtree with the first - letter capitalized; the all lower-case version to the - derived type contains its associated generic function. */ -- if (p->attr.flavor == FL_DERIVED) -- gfc_delete_symtree (&p->ns->sym_root, gfc_get_string ("%c%s", -- (char) TOUPPER ((unsigned char) p->name[0]), -- &p->name[1])); -- else -+ if (gfc_fl_struct (p->attr.flavor)) -+ gfc_delete_symtree (&p->ns->sym_root,gfc_dt_upper_string (p->name)); -+ else - gfc_delete_symtree (&p->ns->sym_root, p->name); - - gfc_release_symbol (p); -@@ -4526,10 +4635,7 @@ - const char *hidden_name; - gfc_interface *intr, *head; - -- hidden_name = gfc_get_string ("%c%s", -- (char) TOUPPER ((unsigned char) -- tmp_sym->name[0]), -- &tmp_sym->name[1]); -+ hidden_name = gfc_dt_upper_string (tmp_sym->name); - tmp_symtree = gfc_find_symtree (gfc_current_ns->sym_root, - hidden_name); - gcc_assert (tmp_symtree == NULL); -@@ -4740,6 +4846,8 @@ - bool is_class2 = (ts2->type == BT_CLASS); - bool is_derived1 = (ts1->type == BT_DERIVED); - bool is_derived2 = (ts2->type == BT_DERIVED); -+ bool is_union1 = (ts1->type == BT_UNION); -+ bool is_union2 = (ts2->type == BT_UNION); - - if (is_class1 - && ts1->u.derived->components -@@ -4749,10 +4857,11 @@ - || ts1->u.derived->attr.unlimited_polymorphic)) - return 1; - -- if (!is_derived1 && !is_derived2 && !is_class1 && !is_class2) -+ if (!is_derived1 && !is_derived2 && !is_class1 && !is_class2 -+ && !is_union1 && !is_union2) - return (ts1->type == ts2->type); - -- if (is_derived1 && is_derived2) -+ if ((is_derived1 && is_derived2) || (is_union1 && is_union1)) - return gfc_compare_derived_types (ts1->u.derived, ts2->u.derived); - - if (is_derived1 && is_class2) -@@ -4821,12 +4930,12 @@ - { - gfc_interface *intr = NULL; - -- if (!sym || sym->attr.flavor == FL_DERIVED) -+ if (!sym || gfc_fl_struct (sym->attr.flavor)) - return sym; - - if (sym->attr.generic) - for (intr = sym->generic; intr; intr = intr->next) -- if (intr->sym->attr.flavor == FL_DERIVED) -+ if (gfc_fl_struct (intr->sym->attr.flavor)) - break; - return intr ? intr->sym : NULL; - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/trans-array.c gcc-6-20160721/gcc/fortran/trans-array.c ---- gcc-6.1.0/gcc/fortran/trans-array.c 2016-04-04 09:32:28.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/trans-array.c 2016-06-05 18:09:27.000000000 +0000 -@@ -6376,7 +6376,12 @@ - stmtCleanup = gfc_finish_block (&cleanup); - - /* Only do the cleanup if the array was repacked. */ -- tmp = build_fold_indirect_ref_loc (input_location, dumdesc); -+ if (is_classarray) -+ /* For a class array the dummy array descriptor is in the _class -+ component. */ -+ tmp = gfc_class_data_get (dumdesc); -+ else -+ tmp = build_fold_indirect_ref_loc (input_location, dumdesc); - tmp = gfc_conv_descriptor_data_get (tmp); - tmp = fold_build2_loc (input_location, NE_EXPR, boolean_type_node, - tmp, tmpdesc); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/trans-decl.c gcc-6-20160721/gcc/fortran/trans-decl.c ---- gcc-6.1.0/gcc/fortran/trans-decl.c 2016-03-28 09:05:01.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/trans-decl.c 2016-07-20 13:24:19.000000000 +0000 -@@ -732,6 +732,7 @@ - st = NULL; - s = NULL; - -+ /* Check for a symbol with the same name. */ - if (gsym) - gfc_find_symbol (sym->name, gsym->ns, 0, &s); - -@@ -748,22 +749,37 @@ - st->n.sym = sym; - sym->refs++; - } -- else if (sym->attr.flavor == FL_DERIVED) -+ else if (gfc_fl_struct (sym->attr.flavor)) - { - if (s && s->attr.flavor == FL_PROCEDURE) - { - gfc_interface *intr; - gcc_assert (s->attr.generic); - for (intr = s->generic; intr; intr = intr->next) -- if (intr->sym->attr.flavor == FL_DERIVED) -+ if (gfc_fl_struct (intr->sym->attr.flavor)) - { - s = intr->sym; - break; - } - } - -- if (!s->backend_decl) -- s->backend_decl = gfc_get_derived_type (s); -+ /* Normally we can assume that s is a derived-type symbol since it -+ shares a name with the derived-type sym. However if sym is a -+ STRUCTURE, it may in fact share a name with any other basic type -+ variable. If s is in fact of derived type then we can continue -+ looking for a duplicate type declaration. */ -+ if (sym->attr.flavor == FL_STRUCT && s->ts.type == BT_DERIVED) -+ { -+ s = s->ts.u.derived; -+ } -+ -+ if (gfc_fl_struct (s->attr.flavor) && !s->backend_decl) -+ { -+ if (s->attr.flavor == FL_UNION) -+ s->backend_decl = gfc_get_union_type (s); -+ else -+ s->backend_decl = gfc_get_derived_type (s); -+ } - gfc_copy_dt_decls_ifequal (s, sym, true); - return true; - } -@@ -2384,7 +2400,7 @@ - Thus, we will use a hidden argument in that case. */ - else if (f->sym->attr.optional && f->sym->attr.value - && !f->sym->attr.dimension && f->sym->ts.type != BT_CLASS -- && f->sym->ts.type != BT_DERIVED) -+ && !gfc_bt_struct (f->sym->ts.type)) - { - tree tmp; - strcpy (&name[1], f->sym->name); -@@ -4596,7 +4612,7 @@ - && sym->ts.type == BT_DERIVED) - sym->backend_decl = gfc_typenode_for_spec (&(sym->ts)); - -- if (sym->attr.flavor == FL_DERIVED -+ if (gfc_fl_struct (sym->attr.flavor) - && sym->backend_decl - && TREE_CODE (sym->backend_decl) == RECORD_TYPE) - { -@@ -4839,7 +4855,7 @@ - } - else switch (ts->type) - { -- case BT_DERIVED: -+ case_bt_struct: - if (expr->expr_type != EXPR_STRUCTURE) - return false; - cm = expr->ts.u.derived->components; -@@ -6260,7 +6276,7 @@ - gfc_finish_block (&cleanup)); - - /* Add all the decls we created during processing. */ -- decl = saved_function_decls; -+ decl = nreverse (saved_function_decls); - while (decl) - { - tree next; -@@ -6319,7 +6335,7 @@ - function has already called cgraph_create_node, which also created - the cgraph node for this function. */ - if (!has_coarray_vars || flag_coarray != GFC_FCOARRAY_LIB) -- (void) cgraph_node::create (fndecl); -+ (void) cgraph_node::get_create (fndecl); - } - else - cgraph_node::finalize_function (fndecl, true); -@@ -6452,7 +6468,7 @@ - if (flag_coarray == GFC_FCOARRAY_LIB && has_coarray_vars) - generate_coarray_init (ns); - -- decl = saved_local_decls; -+ decl = nreverse (saved_local_decls); - while (decl) - { - tree next; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/trans-expr.c gcc-6-20160721/gcc/fortran/trans-expr.c ---- gcc-6.1.0/gcc/fortran/trans-expr.c 2016-03-29 16:54:24.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/trans-expr.c 2016-07-16 03:54:12.000000000 +0000 -@@ -2297,6 +2297,7 @@ - tree tmp; - tree decl; - tree field; -+ tree context; - - c = ref->u.c.component; - -@@ -2307,15 +2308,20 @@ - field = c->backend_decl; - gcc_assert (field && TREE_CODE (field) == FIELD_DECL); - decl = se->expr; -+ context = DECL_FIELD_CONTEXT (field); - - /* Components can correspond to fields of different containing - types, as components are created without context, whereas - a concrete use of a component has the type of decl as context. - So, if the type doesn't match, we search the corresponding - FIELD_DECL in the parent type. To not waste too much time -- we cache this result in norestrict_decl. */ -- -- if (DECL_FIELD_CONTEXT (field) != TREE_TYPE (decl)) -+ we cache this result in norestrict_decl. -+ On the other hand, if the context is a UNION or a MAP (a -+ RECORD_TYPE within a UNION_TYPE) always use the given FIELD_DECL. */ -+ -+ if (context != TREE_TYPE (decl) -+ && !( TREE_CODE (TREE_TYPE (field)) == UNION_TYPE /* Field is union */ -+ || TREE_CODE (context) == UNION_TYPE)) /* Field is map */ - { - tree f2 = c->norestrict_decl; - if (!f2 || DECL_FIELD_CONTEXT (f2) != TREE_TYPE (decl)) -@@ -6715,7 +6721,7 @@ - { - switch (ts->type) - { -- case BT_DERIVED: -+ case_bt_struct: - case BT_CLASS: - gfc_init_se (&se, NULL); - if (ts->type == BT_CLASS && expr->expr_type == EXPR_NULL) -@@ -6860,7 +6866,7 @@ - gfc_add_modify (&block, dest, se.expr); - - /* Deal with arrays of derived types with allocatable components. */ -- if (cm->ts.type == BT_DERIVED -+ if (gfc_bt_struct (cm->ts.type) - && cm->ts.u.derived->attr.alloc_comp) - tmp = gfc_copy_alloc_comp (cm->ts.u.derived, - se.expr, dest, -@@ -7033,7 +7039,7 @@ - /* Ensure that cm->ts.u.cl->backend_decl is a componentref to _%s_length - component. */ - sprintf (name, "_%s_length", cm->name); -- strlen = gfc_find_component (sym, name, true, true); -+ strlen = gfc_find_component (sym, name, true, true, NULL); - lhs_cl_size = fold_build3_loc (input_location, COMPONENT_REF, - gfc_charlen_type_node, - TREE_OPERAND (comp, 0), -@@ -7245,7 +7251,7 @@ - fold_convert (TREE_TYPE (tmp), se.expr)); - gfc_add_block_to_block (&block, &se.post); - } -- else if (expr->ts.type == BT_DERIVED && expr->ts.f90_type != BT_VOID) -+ else if (gfc_bt_struct (expr->ts.type) && expr->ts.f90_type != BT_VOID) - { - if (expr->expr_type != EXPR_STRUCTURE) - { -@@ -7352,7 +7358,6 @@ - { - gfc_se se, lse; - -- gcc_assert (cm->backend_decl == NULL); - gfc_init_se (&se, NULL); - gfc_init_se (&lse, NULL); - gfc_conv_expr (&se, gfc_constructor_first (expr->value.constructor)->expr); -@@ -7416,6 +7421,24 @@ - return; - } - -+ /* Though unions appear to have multiple map components, they must only -+ have a single initializer since each map overlaps. TODO: squash map -+ constructors? */ -+ if (expr->ts.type == BT_UNION) -+ { -+ c = gfc_constructor_first (expr->value.constructor); -+ cm = c->n.component; -+ val = gfc_conv_initializer (c->expr, &expr->ts, -+ TREE_TYPE (cm->backend_decl), -+ cm->attr.dimension, cm->attr.pointer, -+ cm->attr.proc_pointer); -+ val = unshare_expr_without_location (val); -+ -+ /* Append it to the constructor list. */ -+ CONSTRUCTOR_APPEND_ELT (v, cm->backend_decl, val); -+ goto finish; -+ } -+ - cm = expr->ts.u.derived->components; - - for (c = gfc_constructor_first (expr->value.constructor); -@@ -7462,6 +7485,7 @@ - CONSTRUCTOR_APPEND_ELT (v, cm->backend_decl, val); - } - } -+finish: - se->expr = build_constructor (type, v); - if (init) - TREE_CONSTANT (se->expr) = 1; -@@ -8246,7 +8270,7 @@ - gfc_trans_string_copy (&block, llen, lse->expr, ts.kind, rlen, - rse->expr, ts.kind); - } -- else if (ts.type == BT_DERIVED && ts.u.derived->attr.alloc_comp) -+ else if (gfc_bt_struct (ts.type) && ts.u.derived->attr.alloc_comp) - { - tree tmp_var = NULL_TREE; - cond = NULL_TREE; -@@ -8299,7 +8323,7 @@ - gfc_add_expr_to_block (&block, tmp); - } - } -- else if (ts.type == BT_DERIVED || ts.type == BT_CLASS) -+ else if (gfc_bt_struct (ts.type) || ts.type == BT_CLASS) - { - gfc_add_block_to_block (&block, &lse->pre); - gfc_add_block_to_block (&block, &rse->pre); -@@ -9503,7 +9527,7 @@ - case BT_CHARACTER: - return false; - -- case BT_DERIVED: -+ case_bt_struct: - return !expr->ts.u.derived->attr.alloc_comp; - - default: -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/trans-io.c gcc-6-20160721/gcc/fortran/trans-io.c ---- gcc-6.1.0/gcc/fortran/trans-io.c 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/trans-io.c 2016-05-14 19:52:46.000000000 +0000 -@@ -1685,7 +1685,7 @@ - gfc_add_expr_to_block (block, tmp); - } - -- if (ts->type == BT_DERIVED && ts->u.derived->components) -+ if (gfc_bt_struct (ts->type) && ts->u.derived->components) - { - gfc_component *cmp; - -@@ -2211,7 +2211,7 @@ - - break; - -- case BT_DERIVED: -+ case_bt_struct: - if (ts->u.derived->components == NULL) - return; - -@@ -2330,7 +2330,7 @@ - gcc_assert (ref && ref->type == REF_ARRAY); - } - -- if (expr->ts.type != BT_DERIVED -+ if (!gfc_bt_struct (expr->ts.type) - && ref && ref->next == NULL - && !is_subref_array (expr)) - { -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/trans-openmp.c gcc-6-20160721/gcc/fortran/trans-openmp.c ---- gcc-6.1.0/gcc/fortran/trans-openmp.c 2016-03-17 15:07:54.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/trans-openmp.c 2016-07-02 10:24:41.000000000 +0000 -@@ -61,6 +61,7 @@ - if (GFC_DECL_GET_SCALAR_POINTER (decl) - || GFC_DECL_GET_SCALAR_ALLOCATABLE (decl) - || GFC_DECL_CRAY_POINTEE (decl) -+ || GFC_DECL_ASSOCIATE_VAR_P (decl) - || VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl)))) - return false; - -@@ -2180,6 +2181,8 @@ - tree decl = gfc_get_symbol_decl (n->sym); - if (gfc_omp_privatize_by_reference (decl)) - decl = build_fold_indirect_ref (decl); -+ else if (DECL_P (decl)) -+ TREE_ADDRESSABLE (decl) = 1; - if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl))) - { - tree type = TREE_TYPE (decl); -@@ -3497,7 +3500,8 @@ - construct_clauses.independent = false; - construct_clauses.tile_list = NULL; - construct_clauses.lists[OMP_LIST_PRIVATE] = NULL; -- construct_clauses.lists[OMP_LIST_REDUCTION] = NULL; -+ if (construct_code == OACC_KERNELS) -+ construct_clauses.lists[OMP_LIST_REDUCTION] = NULL; - oacc_clauses = gfc_trans_omp_clauses (&block, &construct_clauses, - code->loc); - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/trans-stmt.c gcc-6-20160721/gcc/fortran/trans-stmt.c ---- gcc-6.1.0/gcc/fortran/trans-stmt.c 2016-03-28 09:05:01.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/trans-stmt.c 2016-07-13 16:09:57.000000000 +0000 -@@ -5694,9 +5694,11 @@ - tmp = gfc_get_char_type (code->ext.alloc.ts.kind); - tmp = TYPE_SIZE_UNIT (tmp); - tmp = fold_convert (TREE_TYPE (se_sz.expr), tmp); -+ gfc_add_block_to_block (&block, &se_sz.pre); - expr3_esize = fold_build2_loc (input_location, MULT_EXPR, - TREE_TYPE (se_sz.expr), - tmp, se_sz.expr); -+ expr3_esize = gfc_evaluate_now (expr3_esize, &block); - } - } - -@@ -5895,6 +5897,7 @@ - source= or mold= expression. */ - gfc_init_se (&se_sz, NULL); - gfc_conv_expr (&se_sz, code->ext.alloc.ts.u.cl->length); -+ gfc_add_block_to_block (&block, &se_sz.pre); - gfc_add_modify (&block, al_len, - fold_convert (TREE_TYPE (al_len), - se_sz.expr)); -@@ -5979,11 +5982,19 @@ - specified by a type spec for deferred length character - arrays or unlimited polymorphic objects without a - source= or mold= expression. */ -- gfc_init_se (&se_sz, NULL); -- gfc_conv_expr (&se_sz, code->ext.alloc.ts.u.cl->length); -- gfc_add_modify (&block, al_len, -- fold_convert (TREE_TYPE (al_len), -- se_sz.expr)); -+ if (expr3_esize == NULL_TREE || code->ext.alloc.ts.kind != 1) -+ { -+ gfc_init_se (&se_sz, NULL); -+ gfc_conv_expr (&se_sz, code->ext.alloc.ts.u.cl->length); -+ gfc_add_block_to_block (&block, &se_sz.pre); -+ gfc_add_modify (&block, al_len, -+ fold_convert (TREE_TYPE (al_len), -+ se_sz.expr)); -+ } -+ else -+ gfc_add_modify (&block, al_len, -+ fold_convert (TREE_TYPE (al_len), -+ expr3_esize)); - } - else - /* No length information needed, because type to allocate -@@ -6275,7 +6286,7 @@ - { - gfc_ref *ref; - -- if (expr->ts.type == BT_DERIVED && expr->ts.u.derived->attr.alloc_comp -+ if (gfc_bt_struct (expr->ts.type) && expr->ts.u.derived->attr.alloc_comp - && !gfc_is_finalizable (expr->ts.u.derived, NULL)) - { - gfc_ref *last = NULL; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/fortran/trans-types.c gcc-6-20160721/gcc/fortran/trans-types.c ---- gcc-6.1.0/gcc/fortran/trans-types.c 2016-02-27 11:57:16.000000000 +0000 -+++ gcc-6-20160721/gcc/fortran/trans-types.c 2016-05-14 19:52:46.000000000 +0000 -@@ -1101,6 +1101,10 @@ - gfc_index_one_node); - break; - -+ case BT_UNION: -+ basetype = gfc_get_union_type (spec->u.derived); -+ break; -+ - case BT_DERIVED: - case BT_CLASS: - basetype = gfc_get_derived_type (spec->u.derived); -@@ -2314,7 +2318,9 @@ - for (; to_cm; to_cm = to_cm->next, from_cm = from_cm->next) - { - to_cm->backend_decl = from_cm->backend_decl; -- if (from_cm->ts.type == BT_DERIVED -+ if (from_cm->ts.type == BT_UNION) -+ gfc_get_union_type (to_cm->ts.u.derived); -+ else if (from_cm->ts.type == BT_DERIVED - && (!from_cm->attr.pointer || from_gsym)) - gfc_get_derived_type (to_cm->ts.u.derived); - else if (from_cm->ts.type == BT_CLASS -@@ -2349,6 +2355,62 @@ - } - - -+/* Build a tree node for a union type. Requires building each map -+ structure which is an element of the union. */ -+ -+tree -+gfc_get_union_type (gfc_symbol *un) -+{ -+ gfc_component *map = NULL; -+ tree typenode = NULL, map_type = NULL, map_field = NULL; -+ tree *chain = NULL; -+ -+ if (un->backend_decl) -+ { -+ if (TYPE_FIELDS (un->backend_decl) || un->attr.proc_pointer_comp) -+ return un->backend_decl; -+ else -+ typenode = un->backend_decl; -+ } -+ else -+ { -+ typenode = make_node (UNION_TYPE); -+ TYPE_NAME (typenode) = get_identifier (un->name); -+ } -+ -+ /* Add each contained MAP as a field. */ -+ for (map = un->components; map; map = map->next) -+ { -+ gcc_assert (map->ts.type == BT_DERIVED); -+ -+ /* The map's type node, which is defined within this union's context. */ -+ map_type = gfc_get_derived_type (map->ts.u.derived); -+ TYPE_CONTEXT (map_type) = typenode; -+ -+ /* The map field's declaration. */ -+ map_field = gfc_add_field_to_struct(typenode, get_identifier(map->name), -+ map_type, &chain); -+ if (map->loc.lb) -+ gfc_set_decl_location (map_field, &map->loc); -+ else if (un->declared_at.lb) -+ gfc_set_decl_location (map_field, &un->declared_at); -+ -+ DECL_PACKED (map_field) |= TYPE_PACKED (typenode); -+ DECL_NAMELESS(map_field) = true; -+ -+ /* We should never clobber another backend declaration for this map, -+ because each map component is unique. */ -+ if (!map->backend_decl) -+ map->backend_decl = map_field; -+ } -+ -+ un->backend_decl = typenode; -+ gfc_finish_type (typenode); -+ -+ return typenode; -+} -+ -+ - /* Build a tree node for a derived type. If there are equal - derived types, with different local names, these are built - at the same time. If an equal derived type has been built -@@ -2491,6 +2553,9 @@ - will be built and so we can return the type. */ - for (c = derived->components; c; c = c->next) - { -+ if (c->ts.type == BT_UNION && c->ts.u.derived->backend_decl == NULL) -+ c->ts.u.derived->backend_decl = gfc_get_union_type (c->ts.u.derived); -+ - if (c->ts.type != BT_DERIVED && c->ts.type != BT_CLASS) - continue; - -@@ -2520,7 +2585,10 @@ - return derived->backend_decl; - - /* Build the type member list. Install the newly created RECORD_TYPE -- node as DECL_CONTEXT of each FIELD_DECL. */ -+ node as DECL_CONTEXT of each FIELD_DECL. In this case we must go -+ through only the top-level linked list of components so we correctly -+ build UNION_TYPE nodes for BT_UNION components. MAPs and other nested -+ types are built as part of gfc_get_union_type. */ - for (c = derived->components; c; c = c->next) - { - /* Prevent infinite recursion, when the procedure pointer type is -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/function.c gcc-6-20160721/gcc/function.c ---- gcc-6.1.0/gcc/function.c 2016-01-08 16:01:12.000000000 +0000 -+++ gcc-6-20160721/gcc/function.c 2016-06-22 13:15:48.000000000 +0000 -@@ -3314,6 +3314,8 @@ - set_mem_attributes (parmreg, parm, 1); - } - -+ /* We need to preserve an address based on VIRTUAL_STACK_VARS_REGNUM for -+ the debug info in case it is not legitimate. */ - if (GET_MODE (parmreg) != GET_MODE (rtl)) - { - rtx tempreg = gen_reg_rtx (GET_MODE (rtl)); -@@ -3323,7 +3325,8 @@ - all->last_conversion_insn); - emit_move_insn (tempreg, rtl); - tempreg = convert_to_mode (GET_MODE (parmreg), tempreg, unsigned_p); -- emit_move_insn (parmreg, tempreg); -+ emit_move_insn (MEM_P (parmreg) ? copy_rtx (parmreg) : parmreg, -+ tempreg); - all->first_conversion_insn = get_insns (); - all->last_conversion_insn = get_last_insn (); - end_sequence (); -@@ -3331,7 +3334,7 @@ - did_conversion = true; - } - else -- emit_move_insn (parmreg, rtl); -+ emit_move_insn (MEM_P (parmreg) ? copy_rtx (parmreg) : parmreg, rtl); - - rtl = parmreg; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/gcc.c gcc-6-20160721/gcc/gcc.c ---- gcc-6.1.0/gcc/gcc.c 2016-02-19 22:18:38.000000000 +0000 -+++ gcc-6-20160721/gcc/gcc.c 2016-06-30 14:39:10.000000000 +0000 -@@ -7667,12 +7667,14 @@ - for (unsigned j = 0; e->values[j].arg != NULL; j++) - { - char *with_arg = concat (opt_text, e->values[j].arg, NULL); -- add_misspelling_candidates (m_option_suggestions, with_arg); -+ add_misspelling_candidates (m_option_suggestions, option, -+ with_arg); - free (with_arg); - } - } - else -- add_misspelling_candidates (m_option_suggestions, opt_text); -+ add_misspelling_candidates (m_option_suggestions, option, -+ opt_text); - break; - - case OPT_fsanitize_: -@@ -7696,7 +7698,8 @@ - /* Add with_arg and all of its variant spellings e.g. - "-fno-sanitize=address" to candidates (albeit without - leading dashes). */ -- add_misspelling_candidates (m_option_suggestions, with_arg); -+ add_misspelling_candidates (m_option_suggestions, option, -+ with_arg); - free (with_arg); - } - } -Only in gcc-6.1.0/gcc: gengtype-lex.c -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/genmodes.c gcc-6-20160721/gcc/genmodes.c ---- gcc-6.1.0/gcc/genmodes.c 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/genmodes.c 2016-06-27 18:25:58.000000000 +0000 -@@ -66,6 +66,7 @@ - this mode as a component. */ - struct mode_data *next_cont; /* Next mode in that list. */ - -+ struct mode_data *complex; /* complex type with mode as component. */ - const char *file; /* file and line of definition, */ - unsigned int line; /* for error reporting */ - unsigned int counter; /* Rank ordering of modes */ -@@ -83,7 +84,7 @@ - static const struct mode_data blank_mode = { - 0, "<unknown>", MAX_MODE_CLASS, - -1U, -1U, -1U, -1U, -- 0, 0, 0, 0, 0, -+ 0, 0, 0, 0, 0, 0, - "<unknown>", 0, 0, 0, 0, false, 0 - }; - -@@ -472,6 +473,7 @@ - - c = new_mode (cclass, buf, file, line); - c->component = m; -+ m->complex = c; - } - } - -@@ -1381,6 +1383,22 @@ - } - - static void -+emit_mode_complex (void) -+{ -+ int c; -+ struct mode_data *m; -+ -+ print_decl ("unsigned char", "mode_complex", "NUM_MACHINE_MODES"); -+ -+ for_all_modes (c, m) -+ tagged_printf ("%smode", -+ m->complex ? m->complex->name : void_mode->name, -+ m->name); -+ -+ print_closer (); -+} -+ -+static void - emit_mode_mask (void) - { - int c; -@@ -1745,6 +1763,7 @@ - emit_mode_size (); - emit_mode_nunits (); - emit_mode_wider (); -+ emit_mode_complex (); - emit_mode_mask (); - emit_mode_inner (); - emit_mode_unit_size (); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/gimple-fold.c gcc-6-20160721/gcc/gimple-fold.c ---- gcc-6.1.0/gcc/gimple-fold.c 2016-01-26 15:51:51.000000000 +0000 -+++ gcc-6-20160721/gcc/gimple-fold.c 2016-07-19 17:33:58.000000000 +0000 -@@ -795,22 +795,21 @@ - { - tree src_base, dest_base, fn; - HOST_WIDE_INT src_offset = 0, dest_offset = 0; -- HOST_WIDE_INT size = -1; -- HOST_WIDE_INT maxsize = -1; -- bool reverse; -+ HOST_WIDE_INT maxsize; - - srcvar = TREE_OPERAND (src, 0); -- src_base = get_ref_base_and_extent (srcvar, &src_offset, -- &size, &maxsize, &reverse); -+ src_base = get_addr_base_and_unit_offset (srcvar, &src_offset); -+ if (src_base == NULL) -+ src_base = srcvar; - destvar = TREE_OPERAND (dest, 0); -- dest_base = get_ref_base_and_extent (destvar, &dest_offset, -- &size, &maxsize, &reverse); -+ dest_base = get_addr_base_and_unit_offset (destvar, -+ &dest_offset); -+ if (dest_base == NULL) -+ dest_base = destvar; - if (tree_fits_uhwi_p (len)) - maxsize = tree_to_uhwi (len); - else - maxsize = -1; -- src_offset /= BITS_PER_UNIT; -- dest_offset /= BITS_PER_UNIT; - if (SSA_VAR_P (src_base) - && SSA_VAR_P (dest_base)) - { -@@ -3039,10 +3038,25 @@ - } - if (targets.length () == 1) - { -- gimple_call_set_fndecl (stmt, targets[0]->decl); -+ tree fndecl = targets[0]->decl; -+ gimple_call_set_fndecl (stmt, fndecl); - changed = true; -+ /* If changing the call to __cxa_pure_virtual -+ or similar noreturn function, adjust gimple_call_fntype -+ too. */ -+ if ((gimple_call_flags (stmt) & ECF_NORETURN) -+ && VOID_TYPE_P (TREE_TYPE (TREE_TYPE (fndecl))) -+ && TYPE_ARG_TYPES (TREE_TYPE (fndecl)) -+ && (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (fndecl))) -+ == void_type_node)) -+ gimple_call_set_fntype (stmt, TREE_TYPE (fndecl)); - /* If the call becomes noreturn, remove the lhs. */ -- if (lhs && (gimple_call_flags (stmt) & ECF_NORETURN)) -+ if (lhs -+ && (gimple_call_flags (stmt) & ECF_NORETURN) -+ && (VOID_TYPE_P (TREE_TYPE (gimple_call_fntype (stmt))) -+ || ((TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (lhs))) -+ == INTEGER_CST) -+ && !TREE_ADDRESSABLE (TREE_TYPE (lhs))))) - { - if (TREE_CODE (lhs) == SSA_NAME) - { -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/gimple.c gcc-6-20160721/gcc/gimple.c ---- gcc-6.1.0/gcc/gimple.c 2016-03-11 12:28:50.000000000 +0000 -+++ gcc-6-20160721/gcc/gimple.c 2016-06-10 09:45:51.000000000 +0000 -@@ -1355,7 +1355,8 @@ - if (gimple_call_internal_p (c1)) - return (gimple_call_internal_p (c2) - && gimple_call_internal_fn (c1) == gimple_call_internal_fn (c2) -- && !gimple_call_internal_unique_p (as_a <const gcall *> (c1))); -+ && (!gimple_call_internal_unique_p (as_a <const gcall *> (c1)) -+ || c1 == c2)); - else - return (gimple_call_fn (c1) == gimple_call_fn (c2) - || (gimple_call_fndecl (c1) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/gimplify.c gcc-6-20160721/gcc/gimplify.c ---- gcc-6.1.0/gcc/gimplify.c 2016-04-13 12:27:52.000000000 +0000 -+++ gcc-6-20160721/gcc/gimplify.c 2016-06-21 07:09:57.000000000 +0000 -@@ -6894,6 +6894,11 @@ - { - while (TREE_CODE (decl) == COMPONENT_REF) - decl = TREE_OPERAND (decl, 0); -+ if (TREE_CODE (decl) == INDIRECT_REF -+ && DECL_P (TREE_OPERAND (decl, 0)) -+ && (TREE_CODE (TREE_TYPE (TREE_OPERAND (decl, 0))) -+ == REFERENCE_TYPE)) -+ decl = TREE_OPERAND (decl, 0); - } - if (gimplify_expr (pd, pre_p, NULL, is_gimple_lvalue, fb_lvalue) - == GS_ERROR) -@@ -6909,9 +6914,11 @@ - break; - } - -- if (TYPE_SIZE_UNIT (TREE_TYPE (decl)) == NULL -- || (TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (decl))) -- != INTEGER_CST)) -+ tree stype = TREE_TYPE (decl); -+ if (TREE_CODE (stype) == REFERENCE_TYPE) -+ stype = TREE_TYPE (stype); -+ if (TYPE_SIZE_UNIT (stype) == NULL -+ || TREE_CODE (TYPE_SIZE_UNIT (stype)) != INTEGER_CST) - { - error_at (OMP_CLAUSE_LOCATION (c), - "mapping field %qE of variable length " -@@ -6951,6 +6958,14 @@ - base = get_inner_reference (base, &bitsize, &bitpos, &offset, - &mode, &unsignedp, &reversep, - &volatilep, false); -+ tree orig_base = base; -+ if ((TREE_CODE (base) == INDIRECT_REF -+ || (TREE_CODE (base) == MEM_REF -+ && integer_zerop (TREE_OPERAND (base, 1)))) -+ && DECL_P (TREE_OPERAND (base, 0)) -+ && (TREE_CODE (TREE_TYPE (TREE_OPERAND (base, 0))) -+ == REFERENCE_TYPE)) -+ base = TREE_OPERAND (base, 0); - gcc_assert (base == decl - && (offset == NULL_TREE - || TREE_CODE (offset) == INTEGER_CST)); -@@ -6964,7 +6979,10 @@ - tree l = build_omp_clause (OMP_CLAUSE_LOCATION (c), - OMP_CLAUSE_MAP); - OMP_CLAUSE_SET_MAP_KIND (l, GOMP_MAP_STRUCT); -- OMP_CLAUSE_DECL (l) = decl; -+ if (orig_base != base) -+ OMP_CLAUSE_DECL (l) = unshare_expr (orig_base); -+ else -+ OMP_CLAUSE_DECL (l) = decl; - OMP_CLAUSE_SIZE (l) = size_int (1); - if (struct_map_to_clause == NULL) - struct_map_to_clause = new hash_map<tree, tree>; -@@ -7006,6 +7024,18 @@ - *list_p = l; - list_p = &OMP_CLAUSE_CHAIN (l); - } -+ if (orig_base != base && code == OMP_TARGET) -+ { -+ tree c2 = build_omp_clause (OMP_CLAUSE_LOCATION (c), -+ OMP_CLAUSE_MAP); -+ enum gomp_map_kind mkind -+ = GOMP_MAP_FIRSTPRIVATE_REFERENCE; -+ OMP_CLAUSE_SET_MAP_KIND (c2, mkind); -+ OMP_CLAUSE_DECL (c2) = decl; -+ OMP_CLAUSE_SIZE (c2) = size_zero_node; -+ OMP_CLAUSE_CHAIN (c2) = OMP_CLAUSE_CHAIN (l); -+ OMP_CLAUSE_CHAIN (l) = c2; -+ } - flags = GOVD_MAP | GOVD_EXPLICIT; - if (GOMP_MAP_ALWAYS_P (OMP_CLAUSE_MAP_KIND (c)) || ptr) - flags |= GOVD_SEEN; -@@ -7024,8 +7054,12 @@ - o1 = 0; - if (bitpos) - o1 = o1 + bitpos / BITS_PER_UNIT; -- for (sc = &OMP_CLAUSE_CHAIN (*osc); -- *sc != c; sc = &OMP_CLAUSE_CHAIN (*sc)) -+ sc = &OMP_CLAUSE_CHAIN (*osc); -+ if (*sc != c -+ && (OMP_CLAUSE_MAP_KIND (*sc) -+ == GOMP_MAP_FIRSTPRIVATE_REFERENCE)) -+ sc = &OMP_CLAUSE_CHAIN (*sc); -+ for (; *sc != c; sc = &OMP_CLAUSE_CHAIN (*sc)) - if (ptr && sc == prev_list_p) - break; - else if (TREE_CODE (OMP_CLAUSE_DECL (*sc)) -@@ -7061,6 +7095,15 @@ - &mode, &unsignedp, - &reversep, &volatilep, - false); -+ if ((TREE_CODE (base) == INDIRECT_REF -+ || (TREE_CODE (base) == MEM_REF -+ && integer_zerop (TREE_OPERAND (base, -+ 1)))) -+ && DECL_P (TREE_OPERAND (base, 0)) -+ && (TREE_CODE (TREE_TYPE (TREE_OPERAND (base, -+ 0))) -+ == REFERENCE_TYPE)) -+ base = TREE_OPERAND (base, 0); - if (base != decl) - break; - if (scp) -@@ -8224,7 +8267,13 @@ - case OMP_CLAUSE_VECTOR: - case OMP_CLAUSE_AUTO: - case OMP_CLAUSE_SEQ: -+ break; -+ - case OMP_CLAUSE_TILE: -+ /* We're not yet making use of the information provided by OpenACC -+ tile clauses. Discard these here, to simplify later middle end -+ processing. */ -+ remove = true; - break; - - default: -@@ -8785,7 +8834,10 @@ - decl, false)) - ; - else if (outer->region_type != ORT_COMBINED_PARALLEL) -- outer = NULL; -+ { -+ omp_notice_variable (outer, decl, true); -+ outer = NULL; -+ } - if (outer) - { - n = splay_tree_lookup (outer->variables, -@@ -8868,7 +8920,10 @@ - decl, false)) - ; - else if (outer->region_type != ORT_COMBINED_PARALLEL) -- outer = NULL; -+ { -+ omp_notice_variable (outer, decl, true); -+ outer = NULL; -+ } - if (outer) - { - n = splay_tree_lookup (outer->variables, -@@ -8946,7 +9001,12 @@ - || (ort == ORT_SIMD - && TREE_VEC_LENGTH (OMP_FOR_INIT (for_stmt)) > 1)) - { -+ struct gimplify_omp_ctx *ctx = gimplify_omp_ctxp; -+ /* Make sure omp_add_variable is not called on it prematurely. -+ We call it ourselves a few lines later. */ -+ gimplify_omp_ctxp = NULL; - var = create_tmp_var (TREE_TYPE (decl), get_name (decl)); -+ gimplify_omp_ctxp = ctx; - TREE_OPERAND (t, 0) = var; - - gimplify_seq_add_stmt (&for_body, gimple_build_assign (decl, var)); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/graphite-isl-ast-to-gimple.c gcc-6-20160721/gcc/graphite-isl-ast-to-gimple.c ---- gcc-6.1.0/gcc/graphite-isl-ast-to-gimple.c 2016-04-22 11:09:22.000000000 +0000 -+++ gcc-6-20160721/gcc/graphite-isl-ast-to-gimple.c 2016-05-31 07:27:23.000000000 +0000 -@@ -1075,9 +1075,7 @@ - static bool - bb_contains_loop_phi_nodes (basic_block bb) - { -- gcc_assert (EDGE_COUNT (bb->preds) <= 2); -- -- if (bb->preds->length () == 1) -+ if (EDGE_COUNT (bb->preds) != 2) - return false; - - unsigned depth = loop_depth (bb->loop_father); -@@ -1792,7 +1790,6 @@ - b1 = b2; - } - -- gcc_assert (b1); - return b1; - } - -@@ -2481,13 +2478,14 @@ - - gcc_assert (!bb_contains_loop_close_phi_nodes (bb)); - -+ /* TODO: Handle cond phi nodes with more than 2 predecessors. */ -+ if (EDGE_COUNT (bb->preds) != 2) -+ return false; -+ - if (dump_file) - fprintf (dump_file, "[codegen] copying cond phi nodes in bb_%d.\n", - new_bb->index); - -- /* Cond phi nodes should have exactly two arguments. */ -- gcc_assert (2 == EDGE_COUNT (bb->preds)); -- - for (gphi_iterator psi = gsi_start_phis (bb); !gsi_end_p (psi); - gsi_next (&psi)) - { -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/graphite-scop-detection.c gcc-6-20160721/gcc/graphite-scop-detection.c ---- gcc-6.1.0/gcc/graphite-scop-detection.c 2016-03-16 09:19:23.000000000 +0000 -+++ gcc-6-20160721/gcc/graphite-scop-detection.c 2016-05-07 07:02:36.000000000 +0000 -@@ -1722,8 +1722,7 @@ - build_cross_bb_scalars_def (scop_p scop, tree def, basic_block def_bb, - vec<tree> *writes) - { -- gcc_assert (def); -- if (!is_gimple_reg (def)) -+ if (!def || !is_gimple_reg (def)) - return; - - /* Do not gather scalar variables that can be analyzed by SCEV as they can be -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/hsa-gen.c gcc-6-20160721/gcc/hsa-gen.c ---- gcc-6.1.0/gcc/hsa-gen.c 2016-04-04 08:46:51.000000000 +0000 -+++ gcc-6-20160721/gcc/hsa-gen.c 2016-05-23 11:54:52.000000000 +0000 -@@ -203,9 +203,13 @@ - { - m_decl = decl; - m_type = hsa_type_for_tree_type (TREE_TYPE (decl), &m_dim, false); -- - if (hsa_seen_error ()) -- m_seen_error = true; -+ { -+ m_seen_error = true; -+ return; -+ } -+ -+ m_align = MAX (m_align, hsa_natural_alignment (m_type)); - } - - /* Constructor of class representing global HSA function/kernel information and -@@ -929,6 +933,14 @@ - BRIG_LINKAGE_PROGRAM, true, - BRIG_ALLOCATION_PROGRAM, align); - hsa_cfun->m_global_symbols.safe_push (sym); -+ sym->fillup_for_decl (decl); -+ if (sym->m_align > align) -+ { -+ sym->m_seen_error = true; -+ HSA_SORRY_ATV (EXPR_LOCATION (decl), -+ "HSA specification requires that %E is at least " -+ "naturally aligned", decl); -+ } - } - else - { -@@ -944,12 +956,11 @@ - sym = new hsa_symbol (BRIG_TYPE_NONE, BRIG_SEGMENT_PRIVATE, - BRIG_LINKAGE_FUNCTION); - sym->m_align = align; -+ sym->fillup_for_decl (decl); - hsa_cfun->m_private_variables.safe_push (sym); - } - -- sym->fillup_for_decl (decl); - sym->m_name = hsa_get_declaration_name (decl); -- - *slot = sym; - return sym; - } -@@ -3471,6 +3482,12 @@ - basic_block default_label_bb = label_to_block_fn (func, - CASE_LABEL (default_label)); - -+ if (!gimple_seq_empty_p (phi_nodes (default_label_bb))) -+ { -+ default_label_bb = split_edge (find_edge (e->dest, default_label_bb)); -+ hsa_init_new_bb (default_label_bb); -+ } -+ - make_edge (e->src, default_label_bb, EDGE_FALSE_VALUE); - - hsa_cfun->m_modified_cfg = true; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ipa-chkp.c gcc-6-20160721/gcc/ipa-chkp.c ---- gcc-6.1.0/gcc/ipa-chkp.c 2016-03-16 16:50:18.000000000 +0000 -+++ gcc-6-20160721/gcc/ipa-chkp.c 2016-06-20 11:35:02.000000000 +0000 -@@ -207,7 +207,13 @@ - /* For functions with body versioning will make a copy of arguments. - For functions with no body we need to do it here. */ - if (!gimple_has_body_p (fndecl)) -- DECL_ARGUMENTS (new_decl) = copy_list (DECL_ARGUMENTS (fndecl)); -+ { -+ tree arg; -+ -+ DECL_ARGUMENTS (new_decl) = copy_list (DECL_ARGUMENTS (fndecl)); -+ for (arg = DECL_ARGUMENTS (new_decl); arg; arg = DECL_CHAIN (arg)) -+ DECL_CONTEXT (arg) = new_decl; -+ } - - /* We are going to modify attributes list and therefore should - make own copy. */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ipa-icf.c gcc-6-20160721/gcc/ipa-icf.c ---- gcc-6.1.0/gcc/ipa-icf.c 2016-04-22 11:09:22.000000000 +0000 -+++ gcc-6-20160721/gcc/ipa-icf.c 2016-05-19 08:09:11.000000000 +0000 -@@ -2258,6 +2258,8 @@ - - varpool_node::create_alias (alias_var->decl, decl); - alias->resolve_alias (original); -+ if (DECL_PT_UID_SET_P (original->decl)) -+ SET_DECL_PT_UID (alias->decl, DECL_PT_UID (original->decl)); - - if (dump_file) - fprintf (dump_file, "Unified; Variable alias has been created.\n\n"); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ipa-inline-analysis.c gcc-6-20160721/gcc/ipa-inline-analysis.c ---- gcc-6.1.0/gcc/ipa-inline-analysis.c 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/ipa-inline-analysis.c 2016-07-13 12:19:44.000000000 +0000 -@@ -216,13 +216,14 @@ - bool by_ref; - }; - --/* Add condition to condition list CONDS. AGGPOS describes whether the used -- oprand is loaded from an aggregate and where in the aggregate it is. It can -- be NULL, which means this not a load from an aggregate. */ -+/* Add condition to condition list SUMMARY. OPERAND_NUM, SIZE, CODE and VAL -+ correspond to fields of condition structure. AGGPOS describes whether the -+ used operand is loaded from an aggregate and where in the aggregate it is. -+ It can be NULL, which means this not a load from an aggregate. */ - - static struct predicate - add_condition (struct inline_summary *summary, int operand_num, -- struct agg_position_info *aggpos, -+ HOST_WIDE_INT size, struct agg_position_info *aggpos, - enum tree_code code, tree val) - { - int i; -@@ -248,6 +249,7 @@ - for (i = 0; vec_safe_iterate (summary->conds, i, &c); i++) - { - if (c->operand_num == operand_num -+ && c->size == size - && c->code == code - && c->val == val - && c->agg_contents == agg_contents -@@ -264,6 +266,7 @@ - new_cond.agg_contents = agg_contents; - new_cond.by_ref = by_ref; - new_cond.offset = offset; -+ new_cond.size = size; - vec_safe_push (summary->conds, new_cond); - return single_cond_predicate (i + predicate_first_dynamic_condition); - } -@@ -867,21 +870,25 @@ - clause |= 1 << (i + predicate_first_dynamic_condition); - continue; - } -- if (c->code == IS_NOT_CONSTANT || c->code == CHANGED) -+ if (c->code == CHANGED) - continue; - -- if (operand_equal_p (TYPE_SIZE (TREE_TYPE (c->val)), -- TYPE_SIZE (TREE_TYPE (val)), 0)) -+ if (tree_to_shwi (TYPE_SIZE (TREE_TYPE (val))) != c->size) - { -- val = fold_unary (VIEW_CONVERT_EXPR, TREE_TYPE (c->val), val); -+ clause |= 1 << (i + predicate_first_dynamic_condition); -+ continue; -+ } -+ if (c->code == IS_NOT_CONSTANT) -+ continue; - -- res = val -- ? fold_binary_to_constant (c->code, boolean_type_node, val, c->val) -- : NULL; -+ val = fold_unary (VIEW_CONVERT_EXPR, TREE_TYPE (c->val), val); -+ res = val -+ ? fold_binary_to_constant (c->code, boolean_type_node, val, c->val) -+ : NULL; -+ -+ if (res && integer_zerop (res)) -+ continue; - -- if (res && integer_zerop (res)) -- continue; -- } - clause |= 1 << (i + predicate_first_dynamic_condition); - } - return clause; -@@ -1515,16 +1522,21 @@ - } - - /* If OP refers to value of function parameter, return the corresponding -- parameter. */ -+ parameter. If non-NULL, the size of the memory load (or the SSA_NAME of the -+ PARM_DECL) will be stored to *SIZE_P in that case too. */ - - static tree --unmodified_parm_1 (gimple *stmt, tree op) -+unmodified_parm_1 (gimple *stmt, tree op, HOST_WIDE_INT *size_p) - { - /* SSA_NAME referring to parm default def? */ - if (TREE_CODE (op) == SSA_NAME - && SSA_NAME_IS_DEFAULT_DEF (op) - && TREE_CODE (SSA_NAME_VAR (op)) == PARM_DECL) -- return SSA_NAME_VAR (op); -+ { -+ if (size_p) -+ *size_p = tree_to_shwi (TYPE_SIZE (TREE_TYPE (op))); -+ return SSA_NAME_VAR (op); -+ } - /* Non-SSA parm reference? */ - if (TREE_CODE (op) == PARM_DECL) - { -@@ -1535,18 +1547,24 @@ - walk_aliased_vdefs (&refd, gimple_vuse (stmt), mark_modified, &modified, - NULL); - if (!modified) -- return op; -+ { -+ if (size_p) -+ *size_p = tree_to_shwi (TYPE_SIZE (TREE_TYPE (op))); -+ return op; -+ } - } - return NULL_TREE; - } - - /* If OP refers to value of function parameter, return the corresponding -- parameter. Also traverse chains of SSA register assignments. */ -+ parameter. Also traverse chains of SSA register assignments. If non-NULL, -+ the size of the memory load (or the SSA_NAME of the PARM_DECL) will be -+ stored to *SIZE_P in that case too. */ - - static tree --unmodified_parm (gimple *stmt, tree op) -+unmodified_parm (gimple *stmt, tree op, HOST_WIDE_INT *size_p) - { -- tree res = unmodified_parm_1 (stmt, op); -+ tree res = unmodified_parm_1 (stmt, op, size_p); - if (res) - return res; - -@@ -1554,23 +1572,25 @@ - && !SSA_NAME_IS_DEFAULT_DEF (op) - && gimple_assign_single_p (SSA_NAME_DEF_STMT (op))) - return unmodified_parm (SSA_NAME_DEF_STMT (op), -- gimple_assign_rhs1 (SSA_NAME_DEF_STMT (op))); -+ gimple_assign_rhs1 (SSA_NAME_DEF_STMT (op)), -+ size_p); - return NULL_TREE; - } - - /* If OP refers to a value of a function parameter or value loaded from an - aggregate passed to a parameter (either by value or reference), return TRUE -- and store the number of the parameter to *INDEX_P and information whether -- and how it has been loaded from an aggregate into *AGGPOS. INFO describes -- the function parameters, STMT is the statement in which OP is used or -- loaded. */ -+ and store the number of the parameter to *INDEX_P, the access size into -+ *SIZE_P, and information whether and how it has been loaded from an -+ aggregate into *AGGPOS. INFO describes the function parameters, STMT is the -+ statement in which OP is used or loaded. */ - - static bool - unmodified_parm_or_parm_agg_item (struct ipa_func_body_info *fbi, - gimple *stmt, tree op, int *index_p, -+ HOST_WIDE_INT *size_p, - struct agg_position_info *aggpos) - { -- tree res = unmodified_parm_1 (stmt, op); -+ tree res = unmodified_parm_1 (stmt, op, size_p); - - gcc_checking_assert (aggpos); - if (res) -@@ -1591,14 +1611,14 @@ - stmt = SSA_NAME_DEF_STMT (op); - op = gimple_assign_rhs1 (stmt); - if (!REFERENCE_CLASS_P (op)) -- return unmodified_parm_or_parm_agg_item (fbi, stmt, op, index_p, -+ return unmodified_parm_or_parm_agg_item (fbi, stmt, op, index_p, size_p, - aggpos); - } - - aggpos->agg_contents = true; - return ipa_load_from_parm_agg (fbi, fbi->info->descriptors, - stmt, op, index_p, &aggpos->offset, -- NULL, &aggpos->by_ref); -+ size_p, &aggpos->by_ref); - } - - /* See if statement might disappear after inlining. -@@ -1649,7 +1669,7 @@ - inner_lhs = lhs; - - /* Reads of parameter are expected to be free. */ -- if (unmodified_parm (stmt, inner_rhs)) -+ if (unmodified_parm (stmt, inner_rhs, NULL)) - rhs_free = true; - /* Match expressions of form &this->field. Those will most likely - combine with something upstream after inlining. */ -@@ -1659,7 +1679,7 @@ - if (TREE_CODE (op) == PARM_DECL) - rhs_free = true; - else if (TREE_CODE (op) == MEM_REF -- && unmodified_parm (stmt, TREE_OPERAND (op, 0))) -+ && unmodified_parm (stmt, TREE_OPERAND (op, 0), NULL)) - rhs_free = true; - } - -@@ -1672,7 +1692,7 @@ - /* Reads of parameters passed by reference - expected to be free (i.e. optimized out after inlining). */ - if (TREE_CODE (inner_rhs) == MEM_REF -- && unmodified_parm (stmt, TREE_OPERAND (inner_rhs, 0))) -+ && unmodified_parm (stmt, TREE_OPERAND (inner_rhs, 0), NULL)) - rhs_free = true; - - /* Copying parameter passed by reference into gimple register is -@@ -1713,7 +1733,7 @@ - if (TREE_CODE (inner_lhs) == PARM_DECL - || TREE_CODE (inner_lhs) == RESULT_DECL - || (TREE_CODE (inner_lhs) == MEM_REF -- && (unmodified_parm (stmt, TREE_OPERAND (inner_lhs, 0)) -+ && (unmodified_parm (stmt, TREE_OPERAND (inner_lhs, 0), NULL) - || (TREE_CODE (TREE_OPERAND (inner_lhs, 0)) == SSA_NAME - && SSA_NAME_VAR (TREE_OPERAND (inner_lhs, 0)) - && TREE_CODE (SSA_NAME_VAR (TREE_OPERAND -@@ -1744,6 +1764,7 @@ - gimple *last; - tree op; - int index; -+ HOST_WIDE_INT size; - struct agg_position_info aggpos; - enum tree_code code, inverted_code; - edge e; -@@ -1760,7 +1781,7 @@ - /* TODO: handle conditionals like - var = op0 < 4; - if (var != 0). */ -- if (unmodified_parm_or_parm_agg_item (fbi, last, op, &index, &aggpos)) -+ if (unmodified_parm_or_parm_agg_item (fbi, last, op, &index, &size, &aggpos)) - { - code = gimple_cond_code (last); - inverted_code = invert_tree_comparison (code, HONOR_NANS (op)); -@@ -1774,9 +1795,10 @@ - unordered one. Be sure it is not confused with NON_CONSTANT. */ - if (this_code != ERROR_MARK) - { -- struct predicate p = add_condition -- (summary, index, &aggpos, this_code, -- unshare_expr_without_location (gimple_cond_rhs (last))); -+ struct predicate p -+ = add_condition (summary, index, size, &aggpos, this_code, -+ unshare_expr_without_location -+ (gimple_cond_rhs (last))); - e->aux = edge_predicate_pool.allocate (); - *(struct predicate *) e->aux = p; - } -@@ -1803,11 +1825,12 @@ - || gimple_call_num_args (set_stmt) != 1) - return; - op2 = gimple_call_arg (set_stmt, 0); -- if (!unmodified_parm_or_parm_agg_item (fbi, set_stmt, op2, &index, &aggpos)) -+ if (!unmodified_parm_or_parm_agg_item (fbi, set_stmt, op2, &index, &size, -+ &aggpos)) - return; - FOR_EACH_EDGE (e, ei, bb->succs) if (e->flags & EDGE_FALSE_VALUE) - { -- struct predicate p = add_condition (summary, index, &aggpos, -+ struct predicate p = add_condition (summary, index, size, &aggpos, - IS_NOT_CONSTANT, NULL_TREE); - e->aux = edge_predicate_pool.allocate (); - *(struct predicate *) e->aux = p; -@@ -1826,6 +1849,7 @@ - gimple *lastg; - tree op; - int index; -+ HOST_WIDE_INT size; - struct agg_position_info aggpos; - edge e; - edge_iterator ei; -@@ -1837,7 +1861,7 @@ - return; - gswitch *last = as_a <gswitch *> (lastg); - op = gimple_switch_index (last); -- if (!unmodified_parm_or_parm_agg_item (fbi, last, op, &index, &aggpos)) -+ if (!unmodified_parm_or_parm_agg_item (fbi, last, op, &index, &size, &aggpos)) - return; - - FOR_EACH_EDGE (e, ei, bb->succs) -@@ -1862,14 +1886,14 @@ - if (!min && !max) - p = true_predicate (); - else if (!max) -- p = add_condition (summary, index, &aggpos, EQ_EXPR, -+ p = add_condition (summary, index, size, &aggpos, EQ_EXPR, - unshare_expr_without_location (min)); - else - { - struct predicate p1, p2; -- p1 = add_condition (summary, index, &aggpos, GE_EXPR, -+ p1 = add_condition (summary, index, size, &aggpos, GE_EXPR, - unshare_expr_without_location (min)); -- p2 = add_condition (summary, index, &aggpos, LE_EXPR, -+ p2 = add_condition (summary, index, size, &aggpos, LE_EXPR, - unshare_expr_without_location (max)); - p = and_predicates (summary->conds, &p1, &p2); - } -@@ -1970,13 +1994,14 @@ - { - tree parm; - int index; -+ HOST_WIDE_INT size; - - while (UNARY_CLASS_P (expr)) - expr = TREE_OPERAND (expr, 0); - -- parm = unmodified_parm (NULL, expr); -+ parm = unmodified_parm (NULL, expr, &size); - if (parm && (index = ipa_get_param_decl_index (info, parm)) >= 0) -- return add_condition (summary, index, NULL, CHANGED, NULL_TREE); -+ return add_condition (summary, index, size, NULL, CHANGED, NULL_TREE); - if (is_gimple_min_invariant (expr)) - return false_predicate (); - if (TREE_CODE (expr) == SSA_NAME) -@@ -2037,6 +2062,7 @@ - struct predicate op_non_const; - bool is_load; - int base_index; -+ HOST_WIDE_INT size; - struct agg_position_info aggpos; - - /* What statments might be optimized away -@@ -2060,7 +2086,7 @@ - tree op; - gcc_assert (gimple_assign_single_p (stmt)); - op = gimple_assign_rhs1 (stmt); -- if (!unmodified_parm_or_parm_agg_item (fbi, stmt, op, &base_index, -+ if (!unmodified_parm_or_parm_agg_item (fbi, stmt, op, &base_index, &size, - &aggpos)) - return p; - } -@@ -2071,7 +2097,7 @@ - adding conditionals. */ - FOR_EACH_SSA_TREE_OPERAND (use, stmt, iter, SSA_OP_USE) - { -- tree parm = unmodified_parm (stmt, use); -+ tree parm = unmodified_parm (stmt, use, NULL); - /* For arguments we can build a condition. */ - if (parm && ipa_get_param_decl_index (fbi->info, parm) >= 0) - continue; -@@ -2086,18 +2112,19 @@ - - if (is_load) - op_non_const = -- add_condition (summary, base_index, &aggpos, CHANGED, NULL); -+ add_condition (summary, base_index, size, &aggpos, CHANGED, NULL); - else - op_non_const = false_predicate (); - FOR_EACH_SSA_TREE_OPERAND (use, stmt, iter, SSA_OP_USE) - { -- tree parm = unmodified_parm (stmt, use); -+ HOST_WIDE_INT size; -+ tree parm = unmodified_parm (stmt, use, &size); - int index; - - if (parm && (index = ipa_get_param_decl_index (fbi->info, parm)) >= 0) - { - if (index != base_index) -- p = add_condition (summary, index, NULL, CHANGED, NULL_TREE); -+ p = add_condition (summary, index, size, NULL, CHANGED, NULL_TREE); - else - continue; - } -@@ -2950,6 +2977,18 @@ - node->local.can_change_signature = !e; - } - } -+ -+ /* Functions called by instrumentation thunk can't change signature -+ because instrumentation thunk modification is not supported. */ -+ if (node->local.can_change_signature) -+ for (e = node->callers; e; e = e->next_caller) -+ if (e->caller->thunk.thunk_p -+ && e->caller->thunk.add_pointer_bounds_args) -+ { -+ node->local.can_change_signature = false; -+ break; -+ } -+ - estimate_function_body_sizes (node, early); - - for (e = node->callees; e; e = e->next_callee) -@@ -3377,7 +3416,8 @@ - ap.by_ref = c->by_ref; - cond_predicate = add_condition (info, - operand_map[c->operand_num], -- &ap, c->code, c->val); -+ c->size, &ap, c->code, -+ c->val); - } - } - /* Fixed conditions remains same, construct single -@@ -4236,6 +4276,7 @@ - { - struct condition c; - c.operand_num = streamer_read_uhwi (&ib); -+ c.size = streamer_read_uhwi (&ib); - c.code = (enum tree_code) streamer_read_uhwi (&ib); - c.val = stream_read_tree (&ib, data_in); - bp = streamer_read_bitpack (&ib); -@@ -4400,6 +4441,7 @@ - for (i = 0; vec_safe_iterate (info->conds, i, &c); i++) - { - streamer_write_uhwi (ob, c->operand_num); -+ streamer_write_uhwi (ob, c->size); - streamer_write_uhwi (ob, c->code); - stream_write_tree (ob, c->val, true); - bp = bitpack_create (ob->main_stream); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ipa-inline-transform.c gcc-6-20160721/gcc/ipa-inline-transform.c ---- gcc-6.1.0/gcc/ipa-inline-transform.c 2016-03-26 10:08:47.000000000 +0000 -+++ gcc-6-20160721/gcc/ipa-inline-transform.c 2016-06-30 08:46:30.000000000 +0000 -@@ -334,7 +334,6 @@ - if (dump_file) - fprintf (dump_file, "Dropping flag_strict_aliasing on %s:%i\n", - to->name (), to->order); -- build_optimization_node (&opts); - DECL_FUNCTION_SPECIFIC_OPTIMIZATION (to->decl) - = build_optimization_node (&opts); - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ipa-inline.h gcc-6-20160721/gcc/ipa-inline.h ---- gcc-6.1.0/gcc/ipa-inline.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/ipa-inline.h 2016-05-19 14:56:35.000000000 +0000 -@@ -34,6 +34,8 @@ - /* If agg_contents is set, this is the offset from which the used data was - loaded. */ - HOST_WIDE_INT offset; -+ /* Size of the access reading the data (or the PARM_DECL SSA_NAME). */ -+ HOST_WIDE_INT size; - tree val; - int operand_num; - ENUM_BITFIELD(tree_code) code : 16; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ipa-prop.c gcc-6-20160721/gcc/ipa-prop.c ---- gcc-6.1.0/gcc/ipa-prop.c 2016-03-29 12:36:39.000000000 +0000 -+++ gcc-6-20160721/gcc/ipa-prop.c 2016-05-19 15:00:12.000000000 +0000 -@@ -1414,6 +1414,9 @@ - bool check_ref, by_ref; - ao_ref r; - -+ if (PARAM_VALUE (PARAM_IPA_MAX_AGG_ITEMS) == 0) -+ return; -+ - /* The function operates in three stages. First, we prepare check_ref, r, - arg_base and arg_offset based on what is actually passed as an actual - argument. */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ira-build.c gcc-6-20160721/gcc/ira-build.c ---- gcc-6.1.0/gcc/ira-build.c 2016-02-11 23:53:54.000000000 +0000 -+++ gcc-6-20160721/gcc/ira-build.c 2016-07-18 13:01:12.000000000 +0000 -@@ -2251,7 +2251,7 @@ - ); - } - qsort (sorted_loops, n, sizeof (ira_loop_tree_node_t), loop_compare_func); -- for (i = 0; n - i + 1 > IRA_MAX_LOOPS_NUM; i++) -+ for (i = 0; i < n - IRA_MAX_LOOPS_NUM; i++) - { - sorted_loops[i]->to_remove_p = true; - if (internal_flag_ira_verbose > 1 && ira_dump_file != NULL) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/java/ChangeLog gcc-6-20160721/gcc/java/ChangeLog ---- gcc-6.1.0/gcc/java/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/gcc/java/ChangeLog 2016-04-28 16:21:41.000000000 +0000 -@@ -1,3 +1,13 @@ -+2016-04-28 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> -+ -+ PR java/70839 -+ * decl.c (parse_version): Remove minor handling. -+ -+2016-04-28 Matthias Klose <doko@ubuntu.com> -+ -+ * decl.c (parse_version): Don't encode the minor version in the abi -+ version. -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/java/decl.c gcc-6-20160721/gcc/java/decl.c ---- gcc-6.1.0/gcc/java/decl.c 2016-02-08 15:36:16.000000000 +0000 -+++ gcc-6-20160721/gcc/java/decl.c 2016-04-28 16:21:41.000000000 +0000 -@@ -507,7 +507,7 @@ - parse_version (void) - { - const char *p = version_string; -- unsigned int major = 0, minor = 0; -+ unsigned int major = 0; - unsigned int abi_version; - - /* Skip leading junk. */ -@@ -525,13 +525,6 @@ - gcc_assert (*p == '.' && ISDIGIT (p[1])); - ++p; - -- /* Extract minor version. */ -- while (ISDIGIT (*p)) -- { -- minor = minor * 10 + *p - '0'; -- ++p; -- } -- - if (flag_indirect_dispatch) - { - abi_version = GCJ_CURRENT_BC_ABI_VERSION; -@@ -540,9 +533,9 @@ - else /* C++ ABI */ - { - /* Implicit in this computation is the idea that we won't break the -- old-style binary ABI in a sub-minor release (e.g., from 4.0.0 to -- 4.0.1). */ -- abi_version = 100000 * major + 1000 * minor; -+ old-style binary ABI in a minor release (e.g., from 6.1.0 to -+ 6.2.0). */ -+ abi_version = 100000 * major; - } - if (flag_bootstrap_classes) - abi_version |= FLAG_BOOTSTRAP_LOADER; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/lto-streamer.h gcc-6-20160721/gcc/lto-streamer.h ---- gcc-6.1.0/gcc/lto-streamer.h 2016-02-15 09:30:31.000000000 +0000 -+++ gcc-6-20160721/gcc/lto-streamer.h 2016-05-19 14:56:35.000000000 +0000 -@@ -129,7 +129,7 @@ - form followed by the data for the string. */ - - #define LTO_major_version 5 --#define LTO_minor_version 0 -+#define LTO_minor_version 1 - - typedef unsigned char lto_decl_flags_t; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/machmode.h gcc-6-20160721/gcc/machmode.h ---- gcc-6.1.0/gcc/machmode.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/machmode.h 2016-06-27 18:25:58.000000000 +0000 -@@ -269,6 +269,10 @@ - extern const unsigned char mode_2xwider[NUM_MACHINE_MODES]; - #define GET_MODE_2XWIDER_MODE(MODE) ((machine_mode) mode_2xwider[MODE]) - -+/* Get the complex mode from the component mode. */ -+extern const unsigned char mode_complex[NUM_MACHINE_MODES]; -+#define GET_MODE_COMPLEX_MODE(MODE) ((machine_mode) mode_complex[MODE]) -+ - /* Return the mode for data of a given size SIZE and mode class CLASS. - If LIMIT is nonzero, then don't use modes bigger than MAX_FIXED_MODE_SIZE. - The value is BLKmode if no other mode is found. */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/match.pd gcc-6-20160721/gcc/match.pd ---- gcc-6.1.0/gcc/match.pd 2016-04-05 21:33:37.000000000 +0000 -+++ gcc-6-20160721/gcc/match.pd 2016-07-07 07:30:04.000000000 +0000 -@@ -844,12 +844,16 @@ - (ne (bit_and:c (bit_not @0) @1) integer_zerop) - (if (INTEGRAL_TYPE_P (TREE_TYPE (@1)) - && TYPE_PRECISION (TREE_TYPE (@1)) == 1) -- (lt @0 @1))) -+ (if (TYPE_UNSIGNED (TREE_TYPE (@1))) -+ (lt @0 @1) -+ (gt @0 @1)))) - (simplify - (ne (bit_ior:c (bit_not @0) @1) integer_zerop) - (if (INTEGRAL_TYPE_P (TREE_TYPE (@1)) - && TYPE_PRECISION (TREE_TYPE (@1)) == 1) -- (le @0 @1))) -+ (if (TYPE_UNSIGNED (TREE_TYPE (@1))) -+ (le @0 @1) -+ (ge @0 @1)))) - - /* ~~x -> x */ - (simplify -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/omp-low.c gcc-6-20160721/gcc/omp-low.c ---- gcc-6.1.0/gcc/omp-low.c 2016-04-15 11:49:39.000000000 +0000 -+++ gcc-6-20160721/gcc/omp-low.c 2016-07-11 20:43:11.000000000 +0000 -@@ -2186,7 +2186,6 @@ - case OMP_CLAUSE_GANG: - case OMP_CLAUSE_WORKER: - case OMP_CLAUSE_VECTOR: -- case OMP_CLAUSE_TILE: - case OMP_CLAUSE_INDEPENDENT: - case OMP_CLAUSE_AUTO: - case OMP_CLAUSE_SEQ: -@@ -2200,10 +2199,8 @@ - break; - - case OMP_CLAUSE_DEVICE_RESIDENT: -+ case OMP_CLAUSE_TILE: - case OMP_CLAUSE__CACHE_: -- sorry ("Clause not supported yet"); -- break; -- - default: - gcc_unreachable (); - } -@@ -2360,7 +2357,6 @@ - case OMP_CLAUSE_GANG: - case OMP_CLAUSE_WORKER: - case OMP_CLAUSE_VECTOR: -- case OMP_CLAUSE_TILE: - case OMP_CLAUSE_INDEPENDENT: - case OMP_CLAUSE_AUTO: - case OMP_CLAUSE_SEQ: -@@ -2368,10 +2364,8 @@ - break; - - case OMP_CLAUSE_DEVICE_RESIDENT: -+ case OMP_CLAUSE_TILE: - case OMP_CLAUSE__CACHE_: -- sorry ("Clause not supported yet"); -- break; -- - default: - gcc_unreachable (); - } -@@ -4481,8 +4475,9 @@ - if (new_var == NULL_TREE) - new_var = maybe_lookup_decl_in_outer_ctx (var, ctx); - x = builtin_decl_explicit (BUILT_IN_ASSUME_ALIGNED); -- x = build_call_expr_loc (clause_loc, x, 2, new_var, -- omp_clause_aligned_alignment (c)); -+ tree alarg = omp_clause_aligned_alignment (c); -+ alarg = fold_convert_loc (clause_loc, size_type_node, alarg); -+ x = build_call_expr_loc (clause_loc, x, 2, new_var, alarg); - x = fold_convert_loc (clause_loc, TREE_TYPE (new_var), x); - x = build2 (MODIFY_EXPR, TREE_TYPE (new_var), new_var, x); - gimplify_and_add (x, ilist); -@@ -4495,8 +4490,9 @@ - t = maybe_lookup_decl_in_outer_ctx (var, ctx); - t = build_fold_addr_expr_loc (clause_loc, t); - t2 = builtin_decl_explicit (BUILT_IN_ASSUME_ALIGNED); -- t = build_call_expr_loc (clause_loc, t2, 2, t, -- omp_clause_aligned_alignment (c)); -+ tree alarg = omp_clause_aligned_alignment (c); -+ alarg = fold_convert_loc (clause_loc, size_type_node, alarg); -+ t = build_call_expr_loc (clause_loc, t2, 2, t, alarg); - t = fold_convert_loc (clause_loc, ptype, t); - x = create_tmp_var (ptype); - t = build2 (MODIFY_EXPR, ptype, x, t); -@@ -13356,9 +13352,15 @@ - make_edge (else_bb, new_bb, EDGE_FALLTHRU); - - device = tmp_var; -+ gsi = gsi_last_bb (new_bb); -+ } -+ else -+ { -+ gsi = gsi_last_bb (new_bb); -+ device = force_gimple_operand_gsi (&gsi, device, true, NULL_TREE, -+ true, GSI_SAME_STMT); - } - -- gsi = gsi_last_bb (new_bb); - t = gimple_omp_target_data_arg (entry_stmt); - if (t == NULL) - { -@@ -13680,6 +13682,9 @@ - tree new_parm_decl = copy_node (DECL_ARGUMENTS (kern_fndecl)); - DECL_CONTEXT (new_parm_decl) = kern_fndecl; - DECL_ARGUMENTS (kern_fndecl) = new_parm_decl; -+ gcc_assert (VOID_TYPE_P (TREE_TYPE (DECL_RESULT (kern_fndecl)))); -+ DECL_RESULT (kern_fndecl) = copy_node (DECL_RESULT (kern_fndecl)); -+ DECL_CONTEXT (DECL_RESULT (kern_fndecl)) = kern_fndecl; - struct function *kern_cfun = DECL_STRUCT_FUNCTION (kern_fndecl); - kern_cfun->curr_properties = cfun->curr_properties; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/opts-common.c gcc-6-20160721/gcc/opts-common.c ---- gcc-6.1.0/gcc/opts-common.c 2016-02-12 17:39:27.000000000 +0000 -+++ gcc-6-20160721/gcc/opts-common.c 2016-06-30 14:39:10.000000000 +0000 -@@ -373,8 +373,9 @@ - to specific options. We want to do the reverse: to find all the ways - that a user could validly spell an option. - -- Given valid OPT_TEXT (with a leading dash), add it and all of its valid -- variant spellings to CANDIDATES, each without a leading dash. -+ Given valid OPT_TEXT (with a leading dash) for OPTION, add it and all -+ of its valid variant spellings to CANDIDATES, each without a leading -+ dash. - - For example, given "-Wabi-tag", the following are added to CANDIDATES: - "Wabi-tag" -@@ -386,9 +387,11 @@ - - void - add_misspelling_candidates (auto_vec<char *> *candidates, -+ const struct cl_option *option, - const char *opt_text) - { - gcc_assert (candidates); -+ gcc_assert (option); - gcc_assert (opt_text); - candidates->safe_push (xstrdup (opt_text + 1)); - for (unsigned i = 0; i < ARRAY_SIZE (option_map); i++) -@@ -397,6 +400,9 @@ - const char *new_prefix = option_map[i].new_prefix; - size_t new_prefix_len = strlen (new_prefix); - -+ if (option->cl_reject_negative && option_map[i].negated) -+ continue; -+ - if (strncmp (opt_text, new_prefix, new_prefix_len) == 0) - { - char *alternative = concat (opt0 + 1, opt_text + new_prefix_len, -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/opts.h gcc-6-20160721/gcc/opts.h ---- gcc-6.1.0/gcc/opts.h 2016-02-16 23:12:19.000000000 +0000 -+++ gcc-6-20160721/gcc/opts.h 2016-06-30 14:39:10.000000000 +0000 -@@ -417,6 +417,7 @@ - } sanitizer_opts[]; - - extern void add_misspelling_candidates (auto_vec<char *> *candidates, -+ const struct cl_option *option, - const char *base_option); - - #endif -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/sched-deps.c gcc-6-20160721/gcc/sched-deps.c ---- gcc-6.1.0/gcc/sched-deps.c 2016-03-21 07:52:05.000000000 +0000 -+++ gcc-6-20160721/gcc/sched-deps.c 2016-05-20 15:38:24.000000000 +0000 -@@ -2709,9 +2709,12 @@ - return; - } - -- /* Force pending stores to memory in case a trap handler needs them. */ -+ /* Force pending stores to memory in case a trap handler needs them. -+ Also force pending loads from memory; loads and stores can segfault -+ and the signal handler won't be triggered if the trap insn was moved -+ above load or store insn. */ - case TRAP_IF: -- flush_pending_lists (deps, insn, true, false); -+ flush_pending_lists (deps, insn, true, true); - break; - - case PREFETCH: -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/stor-layout.c gcc-6-20160721/gcc/stor-layout.c ---- gcc-6.1.0/gcc/stor-layout.c 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/stor-layout.c 2016-06-27 18:25:58.000000000 +0000 -@@ -49,11 +49,6 @@ - The value is measured in bits. */ - unsigned int maximum_field_alignment = TARGET_DEFAULT_PACK_STRUCT * BITS_PER_UNIT; - --/* Nonzero if all REFERENCE_TYPEs are internal and hence should be allocated -- in the address spaces' address_mode, not pointer_mode. Set only by -- internal_reference_types called only by a front end. */ --static int reference_types_internal = 0; -- - static tree self_referential_size (tree); - static void finalize_record_size (record_layout_info); - static void finalize_type_size (tree); -@@ -62,15 +57,6 @@ - HOST_WIDE_INT, tree); - extern void debug_rli (record_layout_info); - --/* Show that REFERENCE_TYPES are internal and should use address_mode. -- Called only by front end. */ -- --void --internal_reference_types (void) --{ -- reference_types_internal = 1; --} -- - /* Given a size SIZE that may not be a constant, return a SAVE_EXPR - to serve as the actual size-expression for a type or decl. */ - -@@ -2161,10 +2147,8 @@ - case COMPLEX_TYPE: - TYPE_UNSIGNED (type) = TYPE_UNSIGNED (TREE_TYPE (type)); - SET_TYPE_MODE (type, -- mode_for_size (2 * TYPE_PRECISION (TREE_TYPE (type)), -- (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE -- ? MODE_COMPLEX_FLOAT : MODE_COMPLEX_INT), -- 0)); -+ GET_MODE_COMPLEX_MODE (TYPE_MODE (TREE_TYPE (type)))); -+ - TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type))); - TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type))); - break; -@@ -2245,12 +2229,6 @@ - case REFERENCE_TYPE: - { - machine_mode mode = TYPE_MODE (type); -- if (TREE_CODE (type) == REFERENCE_TYPE && reference_types_internal) -- { -- addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (type)); -- mode = targetm.addr_space.address_mode (as); -- } -- - TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (mode)); - TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (mode)); - TYPE_UNSIGNED (type) = 1; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/stor-layout.h gcc-6-20160721/gcc/stor-layout.h ---- gcc-6.1.0/gcc/stor-layout.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/stor-layout.h 2016-04-28 10:49:13.000000000 +0000 -@@ -22,7 +22,6 @@ - - extern void set_min_and_max_values_for_integral_type (tree, int, signop); - extern void fixup_signed_type (tree); --extern void internal_reference_types (void); - extern unsigned int update_alignment_for_field (record_layout_info, tree, - unsigned int); - extern record_layout_info start_record_layout (tree); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/ChangeLog gcc-6-20160721/gcc/testsuite/ChangeLog ---- gcc-6.1.0/gcc/testsuite/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/ChangeLog 2016-07-21 18:24:48.000000000 +0000 -@@ -1,3 +1,1274 @@ -+2016-07-21 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71728 -+ * g++.dg/other/pr71728.C: New test. -+ -+ PR c++/71941 -+ * g++.dg/gomp/pr71941.C: New test. -+ -+2016-07-21 Patrick Palka <ppalka@gcc.gnu.org> -+ -+ PR c++/70822 -+ PR c++/70106 -+ * g++.dg/cpp1y/auto-fn32.C: New test. -+ * g++.dg/cpp1y/paren4.C: New test. -+ -+2016-07-20 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71909 -+ * g++.dg/parse/pr71909.C: New test. -+ * g++.dg/tm/pr71909.C: New test. -+ -+2016-07-20 Martin Jambor <mjambor@suse.cz> -+ -+ PR fortran/71688 -+ gfortran.dg/pr71688.f90: New test. -+ -+2016-07-19 Jakub Jelinek <jakub@redhat.com> -+ -+ PR rtl-optimization/71916 -+ * gcc.c-torture/compile/pr71916.c: New test. -+ -+ PR middle-end/71874 -+ * g++.dg/torture/pr71874.C: New test. -+ -+ Backported from mainline -+ 2016-07-18 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71835 -+ * g++.dg/conversion/ambig3.C: New test. -+ -+ PR c++/71828 -+ * g++.dg/cpp0x/constexpr-71828.C: New test. -+ -+ PR c++/71822 -+ * g++.dg/template/defarg21.C: New test. -+ -+ PR c++/71871 -+ * g++.dg/ext/vector31.C: New test. -+ -+ 2016-07-07 Jakub Jelinek <jakub@redhat.com> -+ Kai Tietz <ktietz70@googlemail.com> -+ -+ PR c++/70869 -+ PR c++/71054 -+ * g++.dg/cpp0x/pr70869.C: New test. -+ * g++.dg/cpp0x/pr71054.C: New test. -+ -+2016-07-18 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ Back port from mainline -+ 2016-07-18 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ PR target/71493 -+ * gcc.target/powerpc/pr71493-1.c: New test. -+ * gcc.target/powerpc/pr71493-2.c: Likewise. -+ -+2016-07-18 Andreas Krebbel <krebbel@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-07-18 Andreas Krebbel <krebbel@linux.vnet.ibm.com> -+ -+ * gcc.target/s390/nolrl-1.c: New test. -+ -+2016-07-15 Jerry DeLisle <jvdelisle@gcc.gnu.org> -+ -+ Backport from trunk: -+ PR fortran/71764 -+ * gfortran.dg/pr71764.f90: New test. -+ -+2016-07-15 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-07-15 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ * g++.dg/pr70098.C: Remove XFAIL for powerpc64_no_dm. -+ * gcc.target/powerpc/pr71763.c: Likewise. -+ -+2016-07-15 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-07-15 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ * gcc.target/powerpc/divkc3-1.c: Require p8vector support. -+ * gcc.target/powerpc/mulkc3-1.c: Likewise. -+ -+2016-07-14 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-07-12 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ * gcc.target/powerpc/divkc3-1.c: New. -+ * gcc.target/powerpc/mulkc3-1.c: New. -+ -+2016-07-14 Alan Modra <amodra@gmail.com> -+ -+ PR target/71733 -+ * gcc.target/powerpc/p9-novsx.c: New. -+ -+2016-07-13 Andre Vehreschild <vehre@gcc.gnu.org> -+ -+ Backport from trunk: -+ PR fortran/71623 -+ * gfortran.dg/deferred_character_17.f90: New test. -+ -+2016-07-13 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ Backport from mainline r238086. -+ 2016-07-07 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ PR ipa/71624 -+ * g++.dg/pr71624.C: New test. -+ -+2016-07-12 Michael Meissner <meissner@linux.vnet.ibm.com> -+ Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-07-05 Michael Meissner <meissner@linux.vnet.ibm.com> -+ Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ * gcc.target/powerpc/signbit-1.c: New test. -+ * gcc.target/powerpc/signbit-2.c: New test. -+ * gcc.target/powerpc/signbit-3.c: New test. -+ -+2016-07-12 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-07-12 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ PR target/71805 -+ * gcc.target/powerpc/pr71805.c: New test. -+ -+2016-07-12 Segher Boessenkool <segher@kernel.crashing.org> -+ -+ Backport from mainline -+ 2016-07-06 Segher Boessenkool <segher@kernel.crashing.org> -+ -+ PR target/70098 -+ PR target/71763 -+ * gcc.target/powerpc/pr71763.c: New file. -+ -+2016-07-11 Jakub Jelinek <jakub@redhat.com> -+ -+ PR middle-end/71758 -+ * c-c++-common/gomp/pr71758.c: New test. -+ * gfortran.dg/gomp/pr71758.f90: New test. -+ -+ PR tree-optimization/71823 -+ * gcc.dg/vect/pr71823.c: New test. -+ -+2016-07-11 Yuri Rumyantsev <ysrumyan@gmail.com> -+ -+ Backport from mainline r238055. -+ 2016-07-06 Yuri Rumyantsev <ysrumyan@gmail.com> -+ -+ PR tree-optimization/71518 -+ * gcc.dg/pr71518.c: New test. -+ -+2016-07-09 Thomas Koenig <tkoenig@gcc.gnu.org> -+ -+ Backport from trunk: -+ PR fortran/71783 -+ * gfortran.dg/dependency_46.f90: New test. -+ -+2016-07-08 Cesar Philippidis <cesar@codesourcery.com> -+ -+ Backport from trunk: -+ 2016-07-08 Cesar Philippidis <cesar@codesourcery.com> -+ -+ * gfortran.dg/goacc/pr71704.f90: New test. -+ -+2016-07-08 Martin Liska <mliska@suse.cz> -+ -+ Backported from mainline -+ 2016-07-08 Martin Liska <mliska@suse.cz> -+ -+ * gcc.dg/torture/pr71606.c: New test. -+ -+2016-07-08 Jiong Wang <jiong.wang@arm.com> -+ -+ Back port from the trunk -+ 2016-07-08 Jiong Wang <jiong.wang@arm.com> -+ -+ * gcc.target/aarch64/simd/vminmaxnm_1.c: New. -+ -+2016-07-08 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ Back port from trunk -+ 2016-07-08 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ PR target/71806 -+ * gcc.target/powerpc/p9-lxvx-stxvx-3.c: Add -mfloat128 option. -+ -+2016-07-07 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ Back port from the trunk -+ 2016-07-01 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ PR target/71720 -+ * gcc.target/powerpc/pr71720.c: New test. -+ -+2016-07-07 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ Backport from mainline r237885 -+ 2016-06-30 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ * gcc.target/powerpc/dfp/dfp.exp: New dejagnu test script. -+ * gcc.target/powerpc/dfp/dtstsfi-0.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-1.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-10.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-11.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-12.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-13.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-14.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-15.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-16.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-17.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-18.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-19.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-2.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-20.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-21.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-22.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-23.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-24.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-25.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-26.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-27.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-28.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-29.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-3.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-30.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-31.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-32.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-33.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-34.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-35.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-36.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-37.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-38.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-39.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-4.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-40.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-41.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-42.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-43.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-44.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-45.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-46.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-47.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-48.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-49.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-5.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-50.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-51.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-52.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-53.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-54.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-55.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-56.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-57.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-58.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-59.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-6.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-60.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-61.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-62.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-63.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-64.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-65.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-66.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-67.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-68.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-69.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-7.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-70.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-71.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-72.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-73.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-74.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-75.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-76.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-77.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-78.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-79.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-8.c: New test. -+ * gcc.target/powerpc/dfp/dtstsfi-9.c: New test. -+ -+2016-07-07 Richard Biener <rguenther@suse.de> -+ -+ Backport from mainline -+ 2016-06-13 Richard Biener <rguenther@suse.de> -+ -+ PR middle-end/64516 -+ * gcc.dg/align-3.c: New testcase. -+ -+2016-07-07 Richard Biener <rguenther@suse.de> -+ -+ Backport from mainline -+ 2016-05-25 Richard Biener <rguenther@suse.de> -+ -+ PR tree-optimization/71264 -+ * gcc.dg/vect/pr71264.c: New testcase. -+ -+ 2016-06-07 Richard Biener <rguenther@suse.de> -+ -+ PR middle-end/71423 -+ * gcc.dg/torture/pr71423.c: New testcase. -+ -+ 2016-06-14 Richard Biener <rguenther@suse.de> -+ -+ PR tree-optimization/71521 -+ * gcc.dg/tree-ssa/vrp101.c: New testcase. -+ -+ 2016-06-08 Richard Biener <rguenther@suse.de> -+ -+ PR tree-optimization/71452 -+ * gcc.dg/torture/pr71452.c: New testcase. -+ -+ 2016-06-14 Richard Biener <rguenther@suse.de> -+ -+ PR tree-optimization/71522 -+ * gcc.dg/torture/pr71522.c: New testcase. -+ -+2016-07-06 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com> -+ -+ Backport from mainline -+ 2016-07-06 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com> -+ -+ PR target/50739 -+ * gcc.target/avr/pr50739.c: New test. -+ -+2016-07-05 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-07-01 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ * gcc.dg/const-float128-ped.c: Require __float128 effective -+ target and options. -+ * gcc.dg/const-float128.c: Likewise. -+ * gcc.dg/torture/float128-cmp-invalid.c: Require -+ __float128 and base_quadfloat_support effective targets, and -+ __float128 options. -+ * gcc.dg/torture/float128-div-underflow.c: Likewise. -+ * gcc.dg/torture/float128-extend-nan.c: Likewise. -+ * gcc.dg/torture/fp-int-convert-float128-timode-2.c: Likewise. -+ * gcc.dg/torture/fp-int-convert-float128-timode-3.c: Likewise. -+ * gcc.dg/torture/fp-int-convert-float128-timode.c: Likewise. -+ * lib/target-supports.exp (check_effective_target___float128): -+ New. -+ (add_options_for___float128): New. -+ (check_effective_target_base_quadword_support): New. -+ -+2016-07-04 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71739 -+ * g++.dg/cpp0x/pr71739.C: New test. -+ -+2016-07-04 Segher Boessenkool <segher@kernel.crashing.org> -+ -+ Backport from mainline -+ 2016-06-27 Segher Boessenkool <segher@kernel.crashing.org> -+ -+ PR target/71670 -+ * gcc.target/powerpc/pr71670.c: New testcase. -+ -+2016-07-02 Jakub Jelinek <jakub@redhat.com> -+ -+ Backported from mainline -+ 2016-07-01 Jakub Jelinek <jakub@redhat.com> -+ -+ PR fortran/71687 -+ * gfortran.dg/gomp/pr71687.f90: New test. -+ -+ 2016-06-30 Jakub Jelinek <jakub@redhat.com> -+ -+ PR fortran/71704 -+ * gfortran.dg/gomp/pr71704.f90: New test. -+ -+ PR fortran/71705 -+ * gfortran.dg/gomp/pr71705.f90: New test. -+ -+ 2016-06-29 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c/71685 -+ * gcc.dg/pr71685.c: New test. -+ -+ 2016-06-28 Jakub Jelinek <jakub@redhat.com> -+ -+ PR middle-end/71626 -+ * gcc.c-torture/execute/pr71626-1.c: New test. -+ * gcc.c-torture/execute/pr71626-2.c: New test. -+ -+ 2016-06-20 Jakub Jelinek <jakub@redhat.com> -+ -+ PR target/71559 -+ * gcc.target/i386/sse2-pr71559.c: New test. -+ * gcc.target/i386/avx-pr71559.c: New test. -+ * gcc.target/i386/avx512f-pr71559.c: New test. -+ -+2016-07-01 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ Backport from trunk r237659 -+ 2016-06-21 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ * gcc.target/powerpc/darn-0.c: Add dejagnu directives to disable -+ test if effective-target is not powerpc_p9vector_ok, or if a -mcpu -+ override other than -mcpu=power9 command-line option is specified, -+ or if the target operating system is aix. -+ * gcc.target/powerpc/darn-1.c: Likewise. -+ * gcc.target/powerpc/darn-2.c: Likewise. -+ * gcc.target/powerpc/vslv-0.c: Add dejagnu directives to disable -+ test if effective-target is not powerpc_p9vector_ok or if the -+ target operating system is aix. -+ * gcc.target/powerpc/vslv-1.c: Likewise. -+ * gcc.target/powerpc/vsrv-0.c: Likewise. -+ * gcc.target/powerpc/vsrv-1.c: Likewise. -+ -+2016-07-01 Peter Bergner <bergner@vnet.ibm.com> -+ -+ Backport from trunk -+ 2016-06-27 Peter Bergner <bergner@vnet.ibm.com> -+ -+ PR target/71656 -+ * gcc.target/powerpc/pr71656-1.c: New test. -+ * gcc.target/powerpc/pr71656-2.c: New test. -+ -+2016-07-01 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-06-24 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ * gcc.target/powerpc/abs128-1.c: New. -+ * gcc.target/powerpc/copysign128-1.c: New. -+ * gcc.target/powerpc/inf128-1.c: New. -+ * gcc.target/powerpc/nan128-1.c: New. -+ -+ Backport from mainline -+ 2016-06-28 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ * gcc.target/powerpc/abs128-1.c: Require VSX. -+ * gcc.target/powerpc/copysign128-1.c: Likewise. -+ * gcc.target/powerpc/inf128-1.c: Likewise. -+ * gcc.target/powerpc/nan128-1.c: Likewise. -+ -+2016-07-01 Peter Bergner <bergner@vnet.ibm.com> -+ -+ Backport from trunk -+ 2016-07-01 Peter Bergner <bergner@vnet.ibm.com> -+ -+ PR target/71698 -+ * gcc.target/powerpc/pr71698.c: New test. -+ -+2016-07-01 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ Backport from trunk r236992 -+ 2016-06-01 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ * gcc.target/powerpc/vslv-0.c: New test. -+ * gcc.target/powerpc/vslv-1.c: New test. -+ * gcc.target/powerpc/vsrv-0.c: New test. -+ * gcc.target/powerpc/vsrv-1.c: New test. -+ -+2016-06-30 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ Backport from trunk r237390 -+ 2016-06-13 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ Backport from trunk r237646 -+ 2016-06-20 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ * gcc.target/powerpc/vadsdu-0.c: New test. -+ * gcc.target/powerpc/vadsdu-1.c: New test. -+ * gcc.target/powerpc/vadsdu-2.c: New test. -+ * gcc.target/powerpc/vadsdu-3.c: New test. -+ * gcc.target/powerpc/vadsdu-4.c: New test. -+ * gcc.target/powerpc/vadsdu-5.c: New test. -+ * gcc.target/powerpc/vadsdub-1.c: New test. -+ * gcc.target/powerpc/vadsdub-2.c: New test. -+ * gcc.target/powerpc/vadsduh-1.c: New test. -+ * gcc.target/powerpc/vadsduh-2.c: New test. -+ * gcc.target/powerpc/vadsduw-1.c: New test. -+ * gcc.target/powerpc/vadsduw-2.c: New test. -+ -+2016-06-30 David Malcolm <dmalcolm@redhat.com> -+ -+ Backport from trunk r237880. -+ 2016-06-30 David Malcolm <dmalcolm@redhat.com> -+ -+ PR driver/71651 -+ * gcc.dg/spellcheck-options-12.c: New test case. -+ -+2016-06-30 Jakub Jelinek <jakub@redhat.com> -+ -+ PR middle-end/71693 -+ * gcc.c-torture/compile/pr71693.c: New test. -+ -+2016-06-29 Cesar Philippidis <cesar@codesourcery.com> -+ -+ Back port from trunk -+ 2016-06-29 Cesar Philippidis <cesar@codesourcery.com> -+ -+ * gfortran.dg/goacc/asyncwait-2.f95: Updated expected diagnostics. -+ * gfortran.dg/goacc/asyncwait-3.f95: Likewise. -+ * gfortran.dg/goacc/asyncwait-4.f95: Add test coverage. -+ -+2016-06-27 Paul Thomas <pault@gcc.gnu.org> -+ -+ PR fortran/70673 -+ * gfortran.dg/pr70673.f90: New test. -+ -+2016-06-27 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ Back port from trunk -+ 2016-05-02 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ * gcc.target/powerpc/float128-complex-1.c: New tests for complex -+ __float128. -+ * gcc.target/powerpc/float128-complex-2.c: Likewise. -+ -+2016-06-24 Jakub Jelinek <jakub@redhat.com> -+ -+ PR tree-optimization/71647 -+ * gcc.target/i386/pr71647.c: New test. -+ -+2016-06-22 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * gcc.dg/guality/param-5.c: New test. -+ -+2016-06-21 Jakub Jelinek <jakub@redhat.com> -+ -+ PR tree-optimization/71588 -+ * gcc.dg/pr71558.c: New test. -+ -+ Backported from mainline -+ 2016-06-20 Jakub Jelinek <jakub@redhat.com> -+ -+ PR middle-end/71581 -+ * gcc.dg/pr71581.c: New test. -+ -+ 2016-06-14 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71528 -+ * g++.dg/opt/pr71528.C: New test. -+ -+2016-06-20 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ Backport from mainline r237484. -+ 2016-06-15 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ PR middle-end/71529 -+ * gcc.target/i386/pr71529.C: New test. -+ -+2016-06-20 Georg-Johann Lay <avr@gjlay.de> -+ Pitchumani Sivanupandi <pitchumani.s@atmel.com> -+ -+ Backport from 2016-06-20 trunk r237589, r236558. -+ -+ PR target/71103 -+ * gcc.target/avr/pr71103.c: New test. -+ * gcc.target/avr/torture/pr71103-2.c: New test. -+ -+2016-06-16 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-06-14 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ * gcc.target/powerpc/vsx-elemrev-2.c: Change effective target -+ requirements, and disable for AIX for now. -+ * gcc.target/powerpc/vsx-elemrev-4.c: Likewise. -+ -+2016-06-16 Jakub Jelinek <jakub@redhat.com> -+ -+ PR target/71554 -+ * gcc.c-torture/execute/pr71554.c: New test. -+ -+2016-06-14 Paolo Carlini <paolo.carlini@oracle.com> -+ -+ PR c++/70572 -+ * g++.dg/cpp1y/auto-fn31.C: New. -+ -+2016-06-14 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71516 -+ * g++.dg/init/pr71516.C: New test. -+ -+ Backported from mainline -+ 2016-06-10 Jakub Jelinek <jakub@redhat.com> -+ -+ PR middle-end/71494 -+ * gcc.c-torture/execute/pr71494.c: New test. -+ -+ PR c/68657 -+ * gcc.target/i386/pr68657.c: New test. -+ -+ 2016-06-08 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71448 -+ * g++.dg/torture/pr71448.C: New test. -+ -+ 2016-06-04 Jakub Jelinek <jakub@redhat.com> -+ -+ PR tree-optimization/71405 -+ * g++.dg/torture/pr71405.C: New test. -+ -+2016-06-13 Jakub Jelinek <jakub@redhat.com> -+ -+ PR sanitizer/71498 -+ * c-c++-common/ubsan/bounds-13.c: New test. -+ -+2016-06-13 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * gnat.dg/renaming10.ad[sb]: New test. -+ -+2016-06-12 Dominique d'Humieres <dominiq@lps.ens.fr> -+ -+ PR target/60751 -+ * gfortran.dg/comma_IO_extension_1.f90: New test. -+ * gfortran.dg/comma_IO_extension_2.f90: Likewise. -+ * gfortran.dg/array_constructor_49.f90: Remove extra comma in WRITE -+ statement. -+ * gfortran.dg/graphite/pr38083.f90: Likewise. -+ * gfortran.dg/guality/pr41558.f90: Likewise. -+ * gfortran.dg/integer_exponentiation_6.F90: Likewise and add -+ missing format. -+ -+2016-06-11 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * gnat.dg/case_character.adb: New test. -+ -+2016-06-10 Thomas Schwinge <thomas@codesourcery.com> -+ -+ PR middle-end/71373 -+ Backport from trunk r237291: -+ 2016-06-10 Thomas Schwinge <thomas@codesourcery.com> -+ Cesar Philippidis <cesar@codesourcery.com> -+ -+ * gcc.dg/goacc/nested-function-1.c: New file. -+ * gcc.dg/goacc/nested-function-2.c: Likewise. -+ * gcc.dg/goacc/pr71373.c: Likewise. -+ * gfortran.dg/goacc/cray-2.f95: Likewise. -+ * gfortran.dg/goacc/loop-1-2.f95: Likewise. -+ * gfortran.dg/goacc/loop-3-2.f95: Likewise. -+ * gfortran.dg/goacc/cray.f95: Update. -+ * gfortran.dg/goacc/loop-1.f95: Likewise. -+ * gfortran.dg/goacc/loop-3.f95: Likewise. -+ * gfortran.dg/goacc/subroutines.f90: Update, and rename to... -+ * gfortran.dg/goacc/nested-function-1.f90: ... this new file. -+ -+ Backport from trunk r237291: -+ * c-c++-common/goacc/combined-directives.c: XFAIL tree scanning -+ for OpenACC tile clauses. -+ * gfortran.dg/goacc/combined-directives.f90: Likewise. -+ -+ PR c/71381 -+ Backport from trunk r237290: -+ * c-c++-common/goacc/cache-1.c: Update. Move invalid usage tests -+ to... -+ * c-c++-common/goacc/cache-2.c: ... this new file. -+ * gfortran.dg/goacc/cache-1.f95: Move invalid usage tests to... -+ * gfortran.dg/goacc/cache-2.f95: ... this new file. -+ * gfortran.dg/goacc/coarray.f95: Update OpenACC cache directive -+ usage. -+ * gfortran.dg/goacc/cray.f95: Likewise. -+ * gfortran.dg/goacc/loop-1.f95: Likewise. -+ -+2016-06-09 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ Back port from trunk -+ 2016-05-31 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ * gcc.target/powerpc/p9-splat-4.c: New test. -+ -+ Back port from trunk -+ 2016-05-31 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ PR target/71186 -+ * gcc.target/powerpc/pr71186.c: New test. -+ -+ Back port from trunk -+ 2016-05-18 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ * gcc.target/powerpc/p9-splat-1.c: New tests for ISA 3.0 word -+ splat operations and the XXSPLTIB instruction. -+ * gcc.target/powerpc/p9-splat-2.c: Likewise. -+ * gcc.target/powerpc/p9-splat-3.c: Likewise. -+ * gcc.target/powerpc/pr47755.c: Allow vspltisw in addition to -+ xxlxor to clear a register. -+ -+2016-06-08 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71442 -+ * g++.dg/cpp0x/Wunused-variable-1.C: New test. -+ -+2016-06-08 Eric Botcazou <ebotcazou@adacore.com> -+ -+ Backport from mainline -+ 2016-06-06 Jose E. Marchesi <jose.marchesi@oracle.com> -+ -+ * gcc.target/sparc/vis4misc.c: New file. -+ * gcc.target/sparc/fpcmp.c: Likewise. -+ * gcc.target/sparc/fpcmpu.c: Likewise. -+ -+2016-06-08 Ilya Verbin <ilya.verbin@intel.com> -+ -+ Backport from mainline -+ 2016-05-25 Ilya Verbin <ilya.verbin@intel.com> -+ -+ * gcc.target/i386/avx512f-ceil-vec-1.c: New test. -+ * gcc.target/i386/avx512f-ceil-vec-2.c: New test. -+ * gcc.target/i386/avx512f-ceilf-sfix-vec-1.c: New test. -+ * gcc.target/i386/avx512f-ceilf-sfix-vec-2.c: New test. -+ * gcc.target/i386/avx512f-ceilf-vec-1.c: New test. -+ * gcc.target/i386/avx512f-ceilf-vec-2.c: New test. -+ * gcc.target/i386/avx512f-floor-vec-1.c: New test. -+ * gcc.target/i386/avx512f-floor-vec-2.c: New test. -+ * gcc.target/i386/avx512f-floorf-sfix-vec-1.c: New test. -+ * gcc.target/i386/avx512f-floorf-sfix-vec-2.c: New test. -+ * gcc.target/i386/avx512f-floorf-vec-1.c: New test. -+ * gcc.target/i386/avx512f-floorf-vec-2.c: New test. -+ * gcc.target/i386/avx512f-rint-sfix-vec-1.c: New test. -+ * gcc.target/i386/avx512f-rint-sfix-vec-2.c: New test. -+ * gcc.target/i386/avx512f-rintf-sfix-vec-1.c: New test. -+ * gcc.target/i386/avx512f-rintf-sfix-vec-2.c: New test. -+ * gcc.target/i386/avx512f-round-sfix-vec-1.c: New test. -+ * gcc.target/i386/avx512f-round-sfix-vec-2.c: New test. -+ * gcc.target/i386/avx512f-roundf-sfix-vec-1.c: New test. -+ * gcc.target/i386/avx512f-roundf-sfix-vec-2.c: New test. -+ * gcc.target/i386/avx512f-trunc-vec-1.c: New test. -+ * gcc.target/i386/avx512f-trunc-vec-2.c: New test. -+ * gcc.target/i386/avx512f-truncf-vec-1.c: New test. -+ * gcc.target/i386/avx512f-truncf-vec-2.c: New test. -+ -+2016-06-07 Uros Bizjak <ubizjak@gmail.com> -+ -+ PR target/71389 -+ * g++.dg/pr71389.C: New test. -+ -+2016-06-06 Jakub Jelinek <jakub@redhat.com> -+ Patrick Palka <ppalka@gcc.gnu.org> -+ -+ PR c++/70847 -+ PR c++/71330 -+ PR c++/71393 -+ * g++.dg/opt/pr70847.C: New test. -+ * g++.dg/ubsan/pr70847.C: New test. -+ * g++.dg/ubsan/pr71393.C: New test. -+ -+2016-06-06 Jakub Jelinek <jakub@redhat.com> -+ -+ PR tree-optimization/71259 -+ * gcc.dg/vect/pr71259.c: New test. -+ -+2016-06-05 Andre Vehreschild <vehre@gcc.gnu.org> -+ -+ PR fortran/69659 -+ * gfortran.dg/class_array_22.f03: New test. -+ -+2016-06-03 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ PR target/70957 -+ * gcc.target/powerpc/vsx-elemrev-2.c: Require p9vector hardware -+ support. -+ * gcc.target/powerpc/vsx-elemrev-4.c: Likewise. -+ -+2016-06-03 Jakub Jelinek <jakub@redhat.com> -+ -+ PR middle-end/71387 -+ * g++.dg/opt/pr71387.C: New test. -+ -+2016-06-02 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ Back port from trunk -+ 2016-05-26 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ * gcc.target/powerpc/p9-minmax-1.c: New tests for ISA 3.0 -+ floating point min/max/comparison instructions. -+ * gcc.target/powerpc/p9-minmax-2.c: Likewise. -+ -+2016-06-02 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71372 -+ * c-c++-common/pr71372.c: New test. -+ -+2016-06-02 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ Back port from trunk -+ 2016-05-19 Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ * gcc.target/powerpc/darn-0.c: New test. -+ * gcc.target/powerpc/darn-1.c: New test. -+ * gcc.target/powerpc/darn-2.c: New test. -+ -+2016-06-02 Paolo Carlini <paolo.carlini@oracle.com> -+ -+ PR c++/70972 -+ * g++.dg/cpp0x/inh-ctor20.C: New. -+ * g++.dg/cpp0x/inh-ctor21.C: Likewise. -+ -+2016-06-02 Paolo Carlini <paolo.carlini@oracle.com> -+ -+ * g++.dg/cpp1y/lambda-generic-static1.C: Use target c++14. -+ * g++.dg/cpp1y/lambda-generic-static2.C: Likewise. -+ -+2016-06-01 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ Back port from trunk -+ 2016-05-23 Michael Meissner <meissner@linux.vnet.ibm.com> -+ Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ * gcc.target/powerpc/p9-permute.c: Run test on big endian as well -+ as little endian. -+ -+ Back port from trunk -+ 2016-05-23 Michael Meissner <meissner@linux.vnet.ibm.com> -+ Kelvin Nilsen <kelvin@gcc.gnu.org> -+ -+ * gcc.target/powerpc/p9-vpermr.c: New test for ISA 3.0 vpermr -+ support. -+ -+ Back port from trunk -+ 2016-05-24 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ * gcc.target/powerpc/p9-vparity.c: New file to check ISA 3.0 -+ vector parity built-in functions. -+ * gcc.target/powerpc/ctz-3.c: New file to check ISA 3.0 vector -+ count trailing zeros automatic vectorization. -+ * gcc.target/powerpc/ctz-4.c: New file to check ISA 3.0 vector -+ count trailing zeros built-in functions. -+ -+ Back port from trunk -+ 2016-05-24 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ * gcc.target/powerpc/p9-vneg.c: New test for ISA 3.0 VNEGW/VNEGD -+ instructions. -+ -+ Back port from trunk -+ 2016-05-11 Michael Meissner <meissner@linux.vnet.ibm.com> -+ -+ * gcc.target/powerpc/dform-3.c: New test for ISA 3.0 vector d-form -+ support. -+ * gcc.target/powerpc/dform-1.c: Add -mlra option to silence -+ warning when using -mvsx-timode. -+ * gcc.target/powerpc/p8vector-int128-1.c: Likewise. -+ * gcc.target/powerpc/dform-2.c: Likewise. -+ * gcc.target/powerpc/pr68805.c: Likewise. -+ -+2016-06-01 Paul Thomas <pault@gcc.gnu.org> -+ -+ PR fortran/71156 -+ * gfortran.dg/submodule_14.f08: Add missing recursive prefix -+ to the module procedure declaration. -+ * gfortran.dg/submodule_16.f08: New test. -+ -+2016-06-01 Jakub Jelinek <jakub@redhat.com> -+ -+ PR middle-end/71371 -+ * c-c++-common/gomp/pr71371.c: New test. -+ -+ * gfortran.dg/gomp/order-1.f90: New test. -+ * gfortran.dg/gomp/order-2.f90: New test. -+ -+2016-06-01 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * gnat.dg/opt56.ad[sb]: New test. -+ -+2016-05-31 Martin Sebor <msebor@redhat.com> -+ -+ PR c++/71306 -+ * g++.dg/warn/Wplacement-new-size-3.C: New test. -+ -+2016-05-31 Richard Biener <rguenther@suse.de> -+ -+ Backport from mainline -+ 2016-05-11 Richard Biener <rguenther@suse.de> -+ -+ PR debug/71057 -+ * g++.dg/debug/pr71057.C: New testcase. -+ -+2016-05-31 Kyrylo Tkachov <kyrylo.tkachov@arm.com> -+ -+ PR target/71056 -+ * gcc.target/arm/pr71056.c: New test. -+ -+2016-05-31 Tom de Vries <tom@codesourcery.com> -+ -+ backport: -+ 2016-05-31 Tom de Vries <tom@codesourcery.com> -+ -+ PR tree-optimization/69068 -+ * gcc.dg/graphite/pr69068.c: New test. -+ -+2016-05-30 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71349 -+ * c-c++-common/gomp/clauses-1.c (bar): Add dd argument. Add -+ nowait depend(inout: dd[0]) clauses where permitted. -+ -+2016-05-30 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-04-29 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ * gcc.target/powerpc/vsx-elemrev-1.c: New. -+ * gcc.target/powerpc/vsx-elemrev-2.c: New. -+ * gcc.target/powerpc/vsx-elemrev-3.c: New. -+ * gcc.target/powerpc/vsx-elemrev-4.c: New. -+ -+2016-05-30 Tom de Vries <tom@codesourcery.com> -+ -+ backport: -+ 2016-05-30 Tom de Vries <tom@codesourcery.com> -+ -+ * gcc.dg/graphite/pr69067.c (main): Remove superfluous argument in call -+ to ce. -+ -+2016-05-30 Uros Bizjak <ubizjak@gmail.com> -+ -+ * gcc.target/i386/iamcu/args.h (clear_non_sret_int_hardware_registers): -+ Use correct register when clearing %edx. -+ -+2016-05-30 Richard Biener <rguenther@suse.de> -+ -+ Backport from mainline -+ 2016-05-11 Richard Biener <rguenther@suse.de> -+ -+ PR middle-end/71002 -+ * g++.dg/torture/pr71002.C: New testcase. -+ -+ 2016-05-13 Jakub Jelinek <jakub@redhat.com> -+ -+ PR bootstrap/71071 -+ * gcc.dg/pr71071.c: New test. -+ -+2016-05-30 Tom de Vries <tom@codesourcery.com> -+ -+ backport: -+ 2016-05-30 Tom de Vries <tom@codesourcery.com> -+ -+ PR tree-optimization/69067 -+ * gcc.dg/graphite/pr69067.c: New test. -+ -+2016-05-29 Paolo Carlini <paolo.carlini@oracle.com> -+ -+ PR c++/71105 -+ * g++.dg/cpp0x/lambda/lambda-conv11.C: New. -+ * g++.dg/cpp1y/lambda-conv1.C: Likewise. -+ * g++.dg/cpp1y/lambda-conv2.C: Likewise. -+ -+2016-05-27 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ Backport from mainline r236810. -+ 2016-05-27 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ PR middle-end/71279 -+ * gcc.dg/pr71279.c: New test. -+ -+2016-05-26 Jerry DeLisle <jvdelisle@gcc.gnu.org> -+ -+ Backport from trunk. -+ PR fortran/66461 -+ * gfortran.dg/unexpected_eof.f: New test -+ -+2016-05-25 Eric Botcazou <ebotcazou@adacore.com> -+ -+ * gnat.dg/opt55.ad[sb]: New test. -+ -+2016-05-24 Martin Sebor <msebor@redhat.com> -+ -+ PR c++/71147 -+ * g++.dg/ext/flexary16.C: New test. -+ -+2016-05-24 Paolo Carlini <paolo.carlini@oracle.com> -+ -+ PR c++/69872 -+ * g++.dg/warn/Wno-narrowing1.C: New. -+ -+2016-05-24 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71257 -+ * g++.dg/vect/simd-clone-6.cc: New test. -+ * g++.dg/gomp/declare-simd-6.C: New test. -+ -+2016-05-23 Martin Jambor <mjambor@suse.cz> -+ -+ PR tree-optimization/70884 -+ * gcc.dg/tree-ssa/pr70919.c: New test. -+ -+2016-05-20 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71210 -+ * g++.dg/opt/pr71210-1.C: New test. -+ * g++.dg/opt/pr71210-2.C: New test. -+ -+ PR fortran/71204 -+ * gfortran.dg/pr71204.f90: New test. -+ -+2016-05-19 David Malcolm <dmalcolm@redhat.com> -+ -+ Backport from trunk r236483. -+ PR c++/71184 -+ * g++.dg/pr71184.C: New test case. -+ -+2016-05-19 Marek Polacek <polacek@redhat.com> -+ -+ Backport from mainline -+ 2016-05-19 Marek Polacek <polacek@redhat.com> -+ -+ PR tree-optimization/71031 -+ * gcc.dg/tree-ssa/vrp100.c: New test. -+ -+2016-05-19 Bernd Edlinger <bernd.edlinger@hotmail.de> -+ -+ Backport from mainline -+ 2016-05-19 Bernd Edlinger <bernd.edlinger@hotmail.de> -+ -+ * c-c++-common/pr69669.c: Check the used mode. -+ -+2016-05-19 Martin Jambor <mjambor@suse.cz> -+ -+ PR ipa/70646 -+ * gcc.dg/ipa/pr70646.c: New test. -+ -+2016-05-18 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/71100 -+ * g++.dg/opt/pr71100.C: New test. -+ -+2016-05-18 Paolo Carlini <paolo.carlini@oracle.com> -+ -+ PR c++/70466 -+ * g++.dg/template/pr70466-1.C: New. -+ * g++.dg/template/pr70466-2.C: Likewise. -+ -+2016-05-18 Christophe Lyon <christophe.lyon@linaro.org> -+ -+ Backport from mainline r236377. -+ 2016-05-19 Christophe Lyon <christophe.lyon@linaro.org> -+ -+ * gcc.target/aarch64/noplt_3.c: Scan for "br\t". -+ * gcc.target/aarch64/tail_indirect_call_1.c: Scan for "br\t", -+ "blr\t" and switch to scan-assembler-times. -+ -+2016-05-17 Kyrylo Tkachov <kyrylo.tkachov@arm.com> -+ -+ Backport from mainline -+ 2016-05-17 Kyrylo Tkachov <kyrylo.tkachov@arm.com> -+ -+ PR target/70809 -+ * gcc.target/aarch64/pr70809_1.c: New test. -+ -+2016-05-15 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-05-11 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ * gcc.target/powerpc/pr70963.c: Require at least power8 at both -+ compile and run time. -+ -+2016-05-15 Harald Anlauf <anlauf@gmx.de> -+ -+ PR fortran/69603 -+ * gfortran.dg/pr69603.f90: New testcase. -+ -+2016-05-14 Fritz Reese <fritzoreese@gmail.com> -+ -+ Backport from trunk: r235999, r236241, r236242 -+ * gfortran.dg/dec_union_4.f90: Fix endian issue. -+ -+ PR fortran/71047 -+ * gfortran.dg/pr71047.f08: New test. -+ -+ PR fortran/56226 -+ * gfortran.dg/dec_structure_1.f90: New testcase. -+ * gfortran.dg/dec_structure_2.f90: Ditto. -+ * gfortran.dg/dec_structure_3.f90: Ditto. -+ * gfortran.dg/dec_structure_4.f90: Ditto. -+ * gfortran.dg/dec_structure_5.f90: Ditto. -+ * gfortran.dg/dec_structure_6.f90: Ditto. -+ * gfortran.dg/dec_structure_7.f90: Ditto. -+ * gfortran.dg/dec_structure_8.f90: Ditto. -+ * gfortran.dg/dec_structure_9.f90: Ditto. -+ * gfortran.dg/dec_structure_10.f90: Ditto. -+ * gfortran.dg/dec_structure_11.f90: Ditto. -+ * gfortran.dg/dec_union_1.f90: Ditto. -+ * gfortran.dg/dec_union_2.f90: Ditto. -+ * gfortran.dg/dec_union_3.f90: Ditto. -+ * gfortran.dg/dec_union_4.f90: Ditto. -+ * gfortran.dg/dec_union_5.f90: Ditto. -+ * gfortran.dg/dec_union_6.f90: Ditto. -+ * gfortran.dg/dec_union_7.f90: Ditto. -+ -+2016-05-13 Uros Bizjak <ubizjak@gmail.com> -+ -+ * gcc.dg/vect/tree-vect.h (check_vect): Handle AVX2, -+ remove XOP handling. -+ * gcc.dg/vect/pr66636.c (foo): Add __attribute__((noinline,noclone)). -+ -+2016-05-13 Richard Biener <rguenther@suse.de> -+ -+ Backport from mainline -+ 2016-04-27 Richard Biener <rguenther@suse.de> -+ -+ PR ipa/70760 -+ * g++.dg/ipa/ipa-pta-2.C: New testcase. -+ -+ 2016-05-06 Richard Biener <rguenther@suse.de> -+ -+ PR middle-end/70931 -+ * gfortran.dg/pr70931.f90: New testcase. -+ -+ 2016-05-06 Richard Biener <rguenther@suse.de> -+ -+ PR middle-end/70941 -+ * gcc.dg/torture/pr70941.c: New testcase. -+ -+ 2016-05-06 Jakub Jelinek <jakub@redhat.com> -+ -+ PR middle-end/70941 -+ * gcc.dg/torture/pr70941.c (abort): Remove prototype. -+ (a, b, c, d): Change type from char to signed char. -+ (main): Compare against (signed char) -1634678893 instead of -+ hardcoded -109. Use __builtin_abort instead of abort. -+ -+2016-05-12 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ Backport from mainline r236171. -+ 2016-05-12 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ PR tree-optimization/71006 -+ * gcc.dg/pr71006.c: New test. -+ -+2016-05-12 Kyrylo Tkachov <kyrylo.tkachov@arm.com> -+ -+ Backport from mainline -+ 2016-05-12 Kyrylo Tkachov <kyrylo.tkachov@arm.com> -+ -+ PR target/70830 -+ * gcc.target/arm/interrupt-1.c: Change dg-compile to dg-assemble. -+ Add -save-temps to dg-options. -+ Scan for ldmfd rather than pop instruction. -+ * gcc.target/arm/interrupt-2.c: Likewise. -+ * gcc.target/arm/pr70830.c: New test. -+ -+2016-05-11 Jakub Jelinek <jakub@redhat.com> -+ -+ PR fortran/70855 -+ * gfortran.dg/gomp/pr70855.f90: New test. -+ -+2016-05-11 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ Backport from mainline r236088. -+ 2016-05-10 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ PR middle-end/70877 -+ * gcc.target/i386/pr70877.c: New test. -+ -+2016-05-11 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ Backport from mainline r236086. -+ 2016-05-10 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ PR tree-optimization/70876 -+ * gcc.target/i386/pr70876.c: New test. -+ -+2016-05-10 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-05-10 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ PR target/70963 -+ * gcc.target/powerpc/pr70963.c: New. -+ -+2016-05-10 Jakub Jelinek <jakub@redhat.com> -+ -+ Backported from mainline -+ 2016-05-03 Jakub Jelinek <jakub@redhat.com> -+ -+ PR tree-optimization/70916 -+ * gcc.c-torture/compile/pr70916.c: New test. -+ -+2016-05-10 Yuri Rumyantsev <ysrumyan@gmail.com> -+ -+ Backport from mainline r235962. -+ 2016-05-06 Yuri Rumyantsev <ysrumyan@gmail.com> -+ -+ PR debug/70935 -+ * gcc.dg/torture/pr70935.c: New test. -+ -+2016-05-09 Uros Bizjak <ubizjak@gmail.com> -+ -+ * gcc.target/i386/fabsneg-1.c New test. -+ -+2016-05-07 Tom de Vries <tom@codesourcery.com> -+ -+ backport: -+ 2016-05-07 Tom de Vries <tom@codesourcery.com> -+ -+ PR tree-optimization/70956 -+ * gcc.dg/graphite/pr70956.c: New test. -+ -+2016-05-06 Marek Polacek <polacek@redhat.com> -+ -+ Backported from mainline -+ 2016-05-06 Marek Polacek <polacek@redhat.com> -+ -+ PR sanitizer/70875 -+ * gcc.dg/ubsan/bounds-3.c: New test. -+ -+2016-05-06 Marek Polacek <polacek@redhat.com> -+ -+ Backported from mainline -+ 2016-04-29 Marek Polacek <polacek@redhat.com> -+ -+ PR sanitizer/70342 -+ * g++.dg/ubsan/null-7.C: New test. -+ -+2016-05-03 Pierre-Marie de Rodat <derodat@adacore.com> -+ -+ * gnat.dg/debug5.adb: New testcase. -+ -+2016-04-29 Cesar Philippidis <cesar@codesourcery.com> -+ -+ PR middle-end/70626 -+ * c-c++-common/goacc/combined-reduction.c: New test. -+ * gfortran.dg/goacc/reduction-2.f95: Add check for kernels reductions. -+ -+2016-04-28 Jakub Jelinek <jakub@redhat.com> -+ -+ PR target/70858 -+ * gcc.target/i386/pr70858.c: New test. -+ -+2016-04-28 Paolo Carlini <paolo.carlini@oracle.com> -+ -+ PR c++/70540 -+ * g++.dg/cpp0x/auto48.C: New. -+ -+2016-04-27 Dominique d'Humieres <dominiq@lps.ens.fr> -+ -+ * gfortran.dg/submodule_14.f08: Add cleanup-submodules. -+ * gfortran.dg/submodule_15.f08: Likewise. -+ -+2016-04-27 H.J. Lu <hongjiu.lu@intel.com> -+ -+ Backported from mainline -+ 2016-04-21 H.J. Lu <hongjiu.lu@intel.com> -+ -+ PR target/70750 -+ * gcc.target/i386/pr70750-1.c: New test. -+ * gcc.target/i386/pr70750-2.c: Likewise. -+ -+2016-04-27 Jakub Jelinek <jakub@redhat.com> -+ -+ Backported from mainline -+ 2016-04-23 Jakub Jelinek <jakub@redhat.com> -+ -+ PR sanitizer/70712 -+ * c-c++-common/asan/pr70712.c: New test. -+ -+2016-04-21 Kirill Yukhin <kirill.yukhin@intel.com> -+ -+ PR target/70728 -+ * gcc.target/i386/pr70728.c: New test. -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/c-c++-common/asan/pr70712.c gcc-6-20160721/gcc/testsuite/c-c++-common/asan/pr70712.c ---- gcc-6.1.0/gcc/testsuite/c-c++-common/asan/pr70712.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/c-c++-common/asan/pr70712.c 2016-04-27 12:23:50.000000000 +0000 -@@ -0,0 +1,32 @@ -+/* PR sanitizer/70712 */ -+/* { dg-do run } */ -+ -+struct __attribute__((aligned (64))) S -+{ -+ char s[4]; -+}; -+ -+struct T -+{ -+ char t[8]; -+ char u[480]; -+ -+}; -+ -+__attribute__((noinline, noclone)) void -+foo (struct T *p, struct S *q) -+{ -+ __builtin_memset (p->t, '\0', sizeof (p->t)); -+ __builtin_memset (p->u, '\0', sizeof (p->u)); -+ __builtin_memset (q->s, '\0', sizeof (q->s)); -+} -+ -+int -+main () -+{ -+ struct S s; -+ struct T t; -+ foo (&t, &s); -+ asm volatile ("" : : "r" (&t), "r" (&s) : "memory"); -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/c-c++-common/goacc/cache-1.c gcc-6-20160721/gcc/testsuite/c-c++-common/goacc/cache-1.c ---- gcc-6.1.0/gcc/testsuite/c-c++-common/goacc/cache-1.c 2015-01-15 20:11:12.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/c-c++-common/goacc/cache-1.c 2016-06-10 09:46:04.000000000 +0000 -@@ -1,3 +1,7 @@ -+/* OpenACC cache directive: valid usage. */ -+/* For execution testing, this file is "#include"d from -+ libgomp/testsuite/libgomp.oacc-c-c++-common/cache-1.c. */ -+ - int - main (int argc, char **argv) - { -@@ -21,57 +25,31 @@ - int n = 1; - const int len = n; - --#pragma acc cache /* { dg-error "expected '\\\(' before end of line" } */ -- --#pragma acc cache a[0:N] /* { dg-error "expected '\\\(' before 'a'" } */ -- /* { dg-bogus "expected end of line before 'a'" "" { xfail c++ } 26 } */ -- --#pragma acc cache (a) /* { dg-error "expected '\\\['" } */ -- --#pragma acc cache ( /* { dg-error "expected (identifier|unqualified-id) before end of line" } */ -- --#pragma acc cache () /* { dg-error "expected (identifier|unqualified-id) before '\\\)' token" } */ -- --#pragma acc cache (,) /* { dg-error "expected (identifier|unqualified-id) before '(,|\\\))' token" } */ -- --#pragma acc cache (a[0:N] /* { dg-error "expected '\\\)' before end of line" } */ -- --#pragma acc cache (a[0:N],) /* { dg-error "expected (identifier|unqualified-id) before '(,|\\\))' token" "" { xfail c } } */ -- --#pragma acc cache (a[0:N]) copyin (a[0:N]) /* { dg-error "expected end of line before 'copyin'" } */ -- --#pragma acc cache () /* { dg-error "expected (identifier|unqualified-id) before '\\\)' token" } */ -- --#pragma acc cache (a[0:N] b[0:N]) /* { dg-error "expected '\\\)' before 'b'" } */ -- --#pragma acc cache (a[0:N] b[0:N}) /* { dg-error "expected '\\\)' before 'b'" } */ -- /* { dg-bogus "expected end of line before '\\\}' token" "" { xfail c++ } 47 } */ -- --#pragma acc cache (a[0:N] /* { dg-error "expected '\\\)' before end of line" } */ -- --#pragma acc cache (a[ii]) /* { dg-error "'ii' is not a constant" } */ -- --#pragma acc cache (a[idx:n]) /* { dg-error "'n' is not a constant" } */ -- --#pragma acc cache (a[0:N]) ( /* { dg-error "expected end of line before '\\(' token" } */ -- --#pragma acc cache (a[0:N]) ii /* { dg-error "expected end of line before 'ii'" } */ -- --#pragma acc cache (a[0:N] ii) /* { dg-error "expected '\\)' before 'ii'" } */ -- -+ /* Have at it, GCC! */ - #pragma acc cache (a[0:N]) -- - #pragma acc cache (a[0:N], a[0:N]) -- - #pragma acc cache (a[0:N], b[0:N]) -- - #pragma acc cache (a[0]) -- - #pragma acc cache (a[0], a[1], b[0:N]) -- -+#pragma acc cache (a[i - 5]) -+#pragma acc cache (a[i + 5:len]) -+#pragma acc cache (a[i + 5:len - 1]) -+#pragma acc cache (b[i]) -+#pragma acc cache (b[i:len]) -+#pragma acc cache (a[ii]) -+#pragma acc cache (a[ii:len]) -+#pragma acc cache (b[ii - 1]) -+#pragma acc cache (b[ii - 1:len]) -+#pragma acc cache (b[i - ii + 1]) -+#pragma acc cache (b[i + ii - 1:len]) -+#pragma acc cache (b[i * ii - 1:len + 1]) -+#pragma acc cache (a[idx + 2]) -+#pragma acc cache (a[idx:len + 2]) - #pragma acc cache (a[idx]) -- - #pragma acc cache (a[idx:len]) -+#pragma acc cache (a[idx + 2:len]) -+#pragma acc cache (a[idx + 2 + i:len]) -+#pragma acc cache (a[idx + 2 + i + ii:len]) - - b[ii] = a[ii]; - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/c-c++-common/goacc/cache-2.c gcc-6-20160721/gcc/testsuite/c-c++-common/goacc/cache-2.c ---- gcc-6.1.0/gcc/testsuite/c-c++-common/goacc/cache-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/c-c++-common/goacc/cache-2.c 2016-06-10 09:46:04.000000000 +0000 -@@ -0,0 +1,57 @@ -+/* OpenACC cache directive: invalid usage. */ -+ -+int -+main (int argc, char **argv) -+{ -+#define N 2 -+ int a[N], b[N]; -+ int i; -+ -+ for (i = 0; i < N; i++) -+ { -+ a[i] = 3; -+ b[i] = 0; -+ } -+ -+#pragma acc parallel copyin (a[0:N]) copyout (b[0:N]) -+{ -+ int ii; -+ -+ for (ii = 0; ii < N; ii++) -+ { -+ const int idx = ii; -+ int n = 1; -+ const int len = n; -+ -+#pragma acc cache /* { dg-error "expected '\\\(' before end of line" } */ -+#pragma acc cache a[0:N] /* { dg-error "expected '\\\(' before 'a'" } */ -+ /* { dg-bogus "expected end of line before 'a'" "" { xfail c++ } 27 } */ -+#pragma acc cache (a) /* { dg-error "expected '\\\['" } */ -+#pragma acc cache ( /* { dg-error "expected (identifier|unqualified-id) before end of line" } */ -+#pragma acc cache () /* { dg-error "expected (identifier|unqualified-id) before '\\\)' token" } */ -+#pragma acc cache (,) /* { dg-error "expected (identifier|unqualified-id) before '(,|\\\))' token" } */ -+#pragma acc cache (a[0:N] /* { dg-error "expected '\\\)' before end of line" } */ -+#pragma acc cache (a[0:N],) /* { dg-error "expected (identifier|unqualified-id) before '(,|\\\))' token" "" { xfail c } } */ -+#pragma acc cache (a[0:N]) copyin (a[0:N]) /* { dg-error "expected end of line before 'copyin'" } */ -+#pragma acc cache () /* { dg-error "expected (identifier|unqualified-id) before '\\\)' token" } */ -+#pragma acc cache (a[0:N] b[0:N]) /* { dg-error "expected '\\\)' before 'b'" } */ -+#pragma acc cache (a[0:N] b[0:N}) /* { dg-error "expected '\\\)' before 'b'" } */ -+ /* { dg-bogus "expected end of line before '\\\}' token" "" { xfail c++ } 38 } */ -+#pragma acc cache (a[0:N] /* { dg-error "expected '\\\)' before end of line" } */ -+#pragma acc cache (a[0:N]) ( /* { dg-error "expected end of line before '\\(' token" } */ -+#pragma acc cache (a[0:N]) ii /* { dg-error "expected end of line before 'ii'" } */ -+#pragma acc cache (a[0:N] ii) /* { dg-error "expected '\\)' before 'ii'" } */ -+ -+ b[ii] = a[ii]; -+ } -+} -+ -+ -+ for (i = 0; i < N; i++) -+ { -+ if (a[i] != b[i]) -+ __builtin_abort (); -+ } -+ -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/c-c++-common/goacc/combined-directives.c gcc-6-20160721/gcc/testsuite/c-c++-common/goacc/combined-directives.c ---- gcc-6.1.0/gcc/testsuite/c-c++-common/goacc/combined-directives.c 2016-03-30 15:08:47.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/c-c++-common/goacc/combined-directives.c 2016-06-10 09:46:18.000000000 +0000 -@@ -111,6 +111,7 @@ - // { dg-final { scan-tree-dump-times "acc loop vector" 2 "gimple" } } - // { dg-final { scan-tree-dump-times "acc loop seq" 2 "gimple" } } - // { dg-final { scan-tree-dump-times "acc loop auto" 2 "gimple" } } --// { dg-final { scan-tree-dump-times "acc loop tile.2, 3" 2 "gimple" } } -+// XFAILed: OpenACC tile clauses are discarded during gimplification. -+// { dg-final { scan-tree-dump-times "acc loop tile.2, 3" 2 "gimple" { xfail *-*-* } } } - // { dg-final { scan-tree-dump-times "acc loop independent private.i" 2 "gimple" } } - // { dg-final { scan-tree-dump-times "private.z" 2 "gimple" } } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/c-c++-common/goacc/combined-reduction.c gcc-6-20160721/gcc/testsuite/c-c++-common/goacc/combined-reduction.c ---- gcc-6.1.0/gcc/testsuite/c-c++-common/goacc/combined-reduction.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/c-c++-common/goacc/combined-reduction.c 2016-04-29 17:37:55.000000000 +0000 -@@ -0,0 +1,29 @@ -+/* { dg-do compile } */ -+/* { dg-options "-fopenacc -fdump-tree-gimple" } */ -+ -+#include <assert.h> -+ -+int -+main () -+{ -+ int i, v1 = 0, n = 100; -+ -+#pragma acc parallel loop reduction(+:v1) -+ for (i = 0; i < n; i++) -+ v1++; -+ -+ assert (v1 == n); -+ -+#pragma acc kernels loop reduction(+:v1) -+ for (i = 0; i < n; i++) -+ v1++; -+ -+ assert (v1 == n); -+ -+ return 0; -+} -+ -+/* { dg-final { scan-tree-dump-times "omp target oacc_parallel reduction.+:v1. map.tofrom:v1" 1 "gimple" } } */ -+/* { dg-final { scan-tree-dump-times "acc loop reduction.+:v1. private.i." 1 "gimple" } } */ -+/* { dg-final { scan-tree-dump-times "omp target oacc_kernels map.force_tofrom:n .len: 4.. map.force_tofrom:v1 .len: 4.." 1 "gimple" } } */ -+/* { dg-final { scan-tree-dump-times "acc loop reduction.+:v1. private.i." 1 "gimple" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/c-c++-common/gomp/clauses-1.c gcc-6-20160721/gcc/testsuite/c-c++-common/gomp/clauses-1.c ---- gcc-6.1.0/gcc/testsuite/c-c++-common/gomp/clauses-1.c 2016-03-07 18:39:51.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/c-c++-common/gomp/clauses-1.c 2016-05-30 21:40:04.000000000 +0000 -@@ -34,7 +34,7 @@ - - void - bar (int d, int m, int i1, int i2, int p, int *idp, int s, -- int nte, int tl, int nth, int g, int nta, int fi, int pp, int *q) -+ int nte, int tl, int nth, int g, int nta, int fi, int pp, int *q, int *dd) - { - #pragma omp for simd \ - private (p) firstprivate (f) lastprivate (l) linear (ll:1) reduction(+:r) schedule(static, 4) collapse(1) nowait \ -@@ -63,29 +63,30 @@ - } - #pragma omp target parallel \ - device(d) map (tofrom: m) if (target: i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp) \ -- if (parallel: i2) default(shared) shared(s) reduction(+:r) num_threads (nth) proc_bind(spread) -+ if (parallel: i2) default(shared) shared(s) reduction(+:r) num_threads (nth) proc_bind(spread) \ -+ nowait depend(inout: dd[0]) - ; - #pragma omp target parallel for \ - device(d) map (tofrom: m) if (target: i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp) \ - if (parallel: i2) default(shared) shared(s) reduction(+:r) num_threads (nth) proc_bind(spread) \ -- lastprivate (l) linear (ll:1) ordered schedule(static, 4) collapse(1) -+ lastprivate (l) linear (ll:1) ordered schedule(static, 4) collapse(1) nowait depend(inout: dd[0]) - for (int i = 0; i < 64; i++) - ll++; - #pragma omp target parallel for simd \ - device(d) map (tofrom: m) if (target: i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp) \ - if (parallel: i2) default(shared) shared(s) reduction(+:r) num_threads (nth) proc_bind(spread) \ - lastprivate (l) linear (ll:1) schedule(static, 4) collapse(1) \ -- safelen(8) simdlen(4) aligned(q: 32) -+ safelen(8) simdlen(4) aligned(q: 32) nowait depend(inout: dd[0]) - for (int i = 0; i < 64; i++) - ll++; - #pragma omp target teams \ - device(d) map (tofrom: m) if (target: i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp) \ -- shared(s) default(shared) reduction(+:r) num_teams(nte) thread_limit(tl) -+ shared(s) default(shared) reduction(+:r) num_teams(nte) thread_limit(tl) nowait depend(inout: dd[0]) - ; - #pragma omp target teams distribute \ - device(d) map (tofrom: m) if (target: i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp) \ - shared(s) default(shared) reduction(+:r) num_teams(nte) thread_limit(tl) \ -- collapse(1) dist_schedule(static, 16) -+ collapse(1) dist_schedule(static, 16) nowait depend(inout: dd[0]) - for (int i = 0; i < 64; i++) - ; - #pragma omp target teams distribute parallel for \ -@@ -93,7 +94,7 @@ - shared(s) default(shared) reduction(+:r) num_teams(nte) thread_limit(tl) \ - collapse(1) dist_schedule(static, 16) \ - if (parallel: i2) num_threads (nth) proc_bind(spread) \ -- lastprivate (l) schedule(static, 4) -+ lastprivate (l) schedule(static, 4) nowait depend(inout: dd[0]) - for (int i = 0; i < 64; i++) - ll++; - #pragma omp target teams distribute parallel for simd \ -@@ -102,19 +103,20 @@ - collapse(1) dist_schedule(static, 16) \ - if (parallel: i2) num_threads (nth) proc_bind(spread) \ - lastprivate (l) schedule(static, 4) \ -- safelen(8) simdlen(4) aligned(q: 32) -+ safelen(8) simdlen(4) aligned(q: 32) nowait depend(inout: dd[0]) - for (int i = 0; i < 64; i++) - ll++; - #pragma omp target teams distribute simd \ - device(d) map (tofrom: m) if (target: i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp) \ - shared(s) default(shared) reduction(+:r) num_teams(nte) thread_limit(tl) \ - collapse(1) dist_schedule(static, 16) \ -- safelen(8) simdlen(4) aligned(q: 32) -+ safelen(8) simdlen(4) aligned(q: 32) nowait depend(inout: dd[0]) - for (int i = 0; i < 64; i++) - ll++; - #pragma omp target simd \ - device(d) map (tofrom: m) if (target: i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp) \ -- safelen(8) simdlen(4) lastprivate (l) linear(ll: 1) aligned(q: 32) reduction(+:r) -+ safelen(8) simdlen(4) lastprivate (l) linear(ll: 1) aligned(q: 32) reduction(+:r) \ -+ nowait depend(inout: dd[0]) - for (int i = 0; i < 64; i++) - ll++; - #pragma omp taskloop simd \ -@@ -128,7 +130,7 @@ - safelen(8) simdlen(4) linear(ll: 1) aligned(q: 32) reduction(+:r) - for (int i = 0; i < 64; i++) - ll++; -- #pragma omp target -+ #pragma omp target nowait depend(inout: dd[0]) - #pragma omp teams distribute \ - private(p) firstprivate (f) shared(s) default(shared) reduction(+:r) num_teams(nte) thread_limit(tl) \ - collapse(1) dist_schedule(static, 16) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/c-c++-common/gomp/pr71371.c gcc-6-20160721/gcc/testsuite/c-c++-common/gomp/pr71371.c ---- gcc-6.1.0/gcc/testsuite/c-c++-common/gomp/pr71371.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/c-c++-common/gomp/pr71371.c 2016-06-01 14:29:04.000000000 +0000 -@@ -0,0 +1,25 @@ -+/* PR middle-end/71371 */ -+/* { dg-do compile } */ -+ -+void baz (int *); -+ -+void -+foo (void) -+{ -+ int i; -+ #pragma omp taskloop -+ for (i = 0; i < 100; i++) -+ baz (&i); -+} -+ -+void -+bar (void) -+{ -+ int i; -+ #pragma omp parallel -+ { -+ #pragma omp for -+ for (i = 0; i < 100; i++) -+ baz (&i); -+ } -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/c-c++-common/gomp/pr71758.c gcc-6-20160721/gcc/testsuite/c-c++-common/gomp/pr71758.c ---- gcc-6.1.0/gcc/testsuite/c-c++-common/gomp/pr71758.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/c-c++-common/gomp/pr71758.c 2016-07-11 20:43:11.000000000 +0000 -@@ -0,0 +1,10 @@ -+/* PR middle-end/71758 */ -+ -+void -+foo (int *p) -+{ -+ long long i = 0; -+ #pragma omp target device (i) -+ ; -+ #pragma omp target update device (i) to (p[0]) -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/c-c++-common/pr69669.c gcc-6-20160721/gcc/testsuite/c-c++-common/pr69669.c ---- gcc-6.1.0/gcc/testsuite/c-c++-common/pr69669.c 2016-02-04 22:17:05.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/c-c++-common/pr69669.c 2016-05-19 17:38:51.000000000 +0000 -@@ -1,5 +1,6 @@ - /* PR c/69669 */ - /* { dg-do compile } */ -+/* { dg-options "-fdump-rtl-final" } */ - - enum __attribute__((mode(QI))) E { F = 1 }; - -@@ -8,3 +9,5 @@ - { - *x = (enum E) y; - } -+ -+/* { dg-final { scan-rtl-dump-times "mem:QI" 1 "final" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/c-c++-common/pr71372.c gcc-6-20160721/gcc/testsuite/c-c++-common/pr71372.c ---- gcc-6.1.0/gcc/testsuite/c-c++-common/pr71372.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/c-c++-common/pr71372.c 2016-06-02 16:43:04.000000000 +0000 -@@ -0,0 +1,14 @@ -+/* PR c++/71372 */ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fdump-tree-optimized" } */ -+ -+void -+foo (volatile int *p, int q) -+{ -+ *(volatile int *)p = 0; -+ *(p + (q - q) + 1) = 0; -+ *(p + (q - q) + 2) = 0; -+ *(p + (q - q) + 3) = 0; -+} -+ -+/* { dg-final { scan-tree-dump-times " ={v} " 4 "optimized" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/c-c++-common/ubsan/bounds-13.c gcc-6-20160721/gcc/testsuite/c-c++-common/ubsan/bounds-13.c ---- gcc-6.1.0/gcc/testsuite/c-c++-common/ubsan/bounds-13.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/c-c++-common/ubsan/bounds-13.c 2016-06-13 21:08:36.000000000 +0000 -@@ -0,0 +1,31 @@ -+/* PR sanitizer/71498 */ -+/* { dg-do run } */ -+/* { dg-options "-fsanitize=bounds -Wno-array-bounds" } */ -+ -+struct S { int a[100]; int b, c; } s; -+ -+__attribute__((noinline, noclone)) int -+foo (int x) -+{ -+ return s.a[x]; -+} -+ -+__attribute__((noinline, noclone)) int -+bar (int x) -+{ -+ static int *d = &s.a[99]; -+ asm volatile ("" : : "r" (&d)); -+ return s.a[x]; -+} -+ -+int -+main () -+{ -+ volatile int a = 0; -+ a += foo (100); -+ a += bar (100); -+ return 0; -+} -+ -+/* { dg-output "index 100 out of bounds for type 'int \\\[100\\\]'\[^\n\r]*(\n|\r\n|\r)" } */ -+/* { dg-output "\[^\n\r]*index 100 out of bounds for type 'int \\\[100\\\]'\[^\n\r]*(\n|\r\n|\r)" } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/concepts/diagnostic1.C gcc-6-20160721/gcc/testsuite/g++.dg/concepts/diagnostic1.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/concepts/diagnostic1.C 2016-03-08 22:30:44.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/concepts/diagnostic1.C 2016-07-21 06:18:06.000000000 +0000 -@@ -1,16 +1,30 @@ - // PR c++/67159 - // { dg-options "-std=c++1z -fconcepts" } - -+template <class T, class U> -+concept bool SameAs = __is_same_as(T, U); -+ - template <class T> --concept bool R = requires (T& t) { -+concept bool R1 = requires (T& t) { - { t.begin() } -> T -+ { t.end() } -> SameAs<T*>; -+}; -+ -+template <class T> -+concept bool R2 = requires (T& t) { -+ { t.end() } -> SameAs<T*>; - }; - - struct foo { - int* begin(); -+ int* end(); - }; - --R{T} -+R1{T} - constexpr bool f() { return true; } - -+R2{T} -+constexpr bool g() { return true; } -+ - static_assert(f<foo>()); // { dg-error "" } -+static_assert(g<foo>()); // { dg-error "" } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/concepts/dr1430.C gcc-6-20160721/gcc/testsuite/g++.dg/concepts/dr1430.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/concepts/dr1430.C 2016-03-08 22:30:44.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/concepts/dr1430.C 2016-07-21 06:18:06.000000000 +0000 -@@ -24,11 +24,19 @@ - return decltype(check<T, U, Args...>())::value; - } - -+template <typename T, typename U, typename... Args> -+ concept bool Similar = true; -+ - template <typename... Args> --requires Same<Args...>() // { dg-error "concept" } -+requires Same<Args...>() // { dg-error "invalid reference" } - void foo( Args... args ) {} - -+template <typename... Args> -+requires Similar<Args...> // { dg-error "invalid reference" } -+ void bar( Args... args ) {} -+ - int main() - { -- foo(1, 2, 3); // { dg-error "" } -+ foo(1, 2, 3); // { dg-error "cannot call" } -+ bar(1, 2, 3); // { dg-error "cannot call" } - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/concepts/expression2.C gcc-6-20160721/gcc/testsuite/g++.dg/concepts/expression2.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/concepts/expression2.C 2016-03-08 22:30:44.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/concepts/expression2.C 2016-07-21 06:18:06.000000000 +0000 -@@ -31,12 +31,12 @@ - int main() - { - f1(s); // { dg-error "cannot call" } -- f2(s); // { dg-error "cannot call" } -+ f2(s); // { dg-error "" } - - // When used in non-SFINAE contexts, make sure that we fail - // the constraint check before emitting the access check - // failures. The context is being presented constistently - // in both cases. - static_assert(C1<S>(), ""); // { dg-error "failed" } -- static_assert(C2<S>(), ""); // { dg-error "failed" } -+ static_assert(C2<S>(), ""); // { dg-error "" } - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/concepts/req19.C gcc-6-20160721/gcc/testsuite/g++.dg/concepts/req19.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/concepts/req19.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/concepts/req19.C 2016-07-21 06:18:06.000000000 +0000 -@@ -0,0 +1,13 @@ -+// { dg-options "-std=c++1z -fconcepts" } -+ -+struct B -+{ -+ template <class T> void f(T t) -+ requires requires (T tt) { tt; } -+ { } -+}; -+ -+int main() -+{ -+ B().f(42); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/concepts/req20.C gcc-6-20160721/gcc/testsuite/g++.dg/concepts/req20.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/concepts/req20.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/concepts/req20.C 2016-07-21 06:18:06.000000000 +0000 -@@ -0,0 +1,19 @@ -+// { dg-options "-std=c++1z -fconcepts" } -+ -+template <class T> concept bool C = true; -+ -+template <class T> -+requires C<typename T::foo> -+void f(T t) { } -+ -+void f(...); -+ -+template <class T> -+requires C<T> -+void g(T t) { } -+ -+int main() -+{ -+ f(42); -+ g(42); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/concepts/req4.C gcc-6-20160721/gcc/testsuite/g++.dg/concepts/req4.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/concepts/req4.C 2016-03-08 22:30:44.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/concepts/req4.C 2016-07-21 06:18:06.000000000 +0000 -@@ -9,10 +9,10 @@ - template<typename T> constexpr fool p2() { return {}; } - - template<typename T> -- concept bool C() { return p1<T>() && p2<T>(); } // { dg-error "does not have type" } -+ concept bool C() { return p1<T>() && p2<T>(); } - - template<C T> void f(T x) { } - - int main() { -- f(0); // { dg-error "cannot call" } -+ f(0); // { dg-error "cannot call|uses overloaded operator" } - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/concepts/req5.C gcc-6-20160721/gcc/testsuite/g++.dg/concepts/req5.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/concepts/req5.C 2016-03-08 22:30:44.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/concepts/req5.C 2016-07-21 06:18:06.000000000 +0000 -@@ -9,10 +9,10 @@ - template<typename T> constexpr fool p2() { return {}; } - - template<typename T> -- concept bool C() { return p1<T>() && p2<T>(); } // { dg-error "does not have type" } -+ concept bool C() { return p1<T>() && p2<T>(); } - - template<C T> void f(T x) { } - - int main() { -- f(0); // { dg-error "cannot call" } -+ f(0); // { dg-error "cannot call|uses overloaded operator" } - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/concepts/req6.C gcc-6-20160721/gcc/testsuite/g++.dg/concepts/req6.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/concepts/req6.C 2016-03-08 22:30:44.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/concepts/req6.C 2016-07-21 06:18:06.000000000 +0000 -@@ -7,7 +7,12 @@ - concept bool C1() { return X(); } - - template<C1 T> -- void h(T) { } // { dg-error "not|bool" } -+ void h(T) { } // OK until used. -+ -+void f() -+{ -+ h(0); // { dg-error "does not have|cannot call" } -+} - - template<typename T> - concept bool C2() { return X() == X(); } // OK -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/concepts/var-templ1.C gcc-6-20160721/gcc/testsuite/g++.dg/concepts/var-templ1.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/concepts/var-templ1.C 2016-03-08 22:30:44.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/concepts/var-templ1.C 2016-07-21 06:18:06.000000000 +0000 -@@ -13,4 +13,4 @@ - constexpr bool f() { return false; } - - static_assert(f<void>()); --static_assert(v<void>); // { dg-error "constraints" } -+static_assert(v<void>); // { dg-error "invalid" } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/concepts/variadic2.C gcc-6-20160721/gcc/testsuite/g++.dg/concepts/variadic2.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/concepts/variadic2.C 2016-03-08 22:30:44.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/concepts/variadic2.C 2016-07-21 06:18:06.000000000 +0000 -@@ -4,10 +4,13 @@ - template <class T> concept bool Constructable = requires { T(); }; - template <class T> concept bool Both = Copyable<T> && Constructable<T>; - --template <Copyable... Ts> void f(Ts...) { } --template <Both... Ts> void f(Ts...) { } -+template <Copyable... Ts> -+constexpr int f(Ts...) { return 0; } // #1 -+ -+template <Both... Ts> -+constexpr int f(Ts...) { return 1; } // #2 - - int main() - { -- f(42); -+ static_assert(f(42) == 1); - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/conversion/ambig3.C gcc-6-20160721/gcc/testsuite/g++.dg/conversion/ambig3.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/conversion/ambig3.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/conversion/ambig3.C 2016-07-19 08:46:26.000000000 +0000 -@@ -0,0 +1,13 @@ -+// PR c++/71835 -+// { dg-do compile } -+ -+typedef void T (int); -+struct A { operator T * (); }; // { dg-message "candidate" } -+struct B { operator T * (); }; // { dg-message "candidate" } -+struct C : A, B {} c; -+ -+void -+foo () -+{ -+ c (0); // { dg-error "is ambiguous" } -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/Wunused-variable-1.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/Wunused-variable-1.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/Wunused-variable-1.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/Wunused-variable-1.C 2016-06-08 18:00:30.000000000 +0000 -@@ -0,0 +1,37 @@ -+// PR c++/71442 -+// { dg-do compile { target c++11 } } -+// { dg-options "-Wunused-variable" } -+ -+struct C -+{ -+ template<typename... Ts> -+ int operator()(Ts &&...) -+ { -+ return sizeof...(Ts); -+ } -+}; -+ -+int -+foo () -+{ -+ C {} (1, 1L, 1LL, 1.0); -+} -+ -+template<int N> -+void -+bar () -+{ -+ char a; // { dg-warning "unused variable" } -+ short b; // { dg-warning "unused variable" } -+ int c; // { dg-warning "unused variable" } -+ long d; // { dg-warning "unused variable" } -+ long long e; // { dg-warning "unused variable" } -+ float f; // { dg-warning "unused variable" } -+ double g; // { dg-warning "unused variable" } -+} -+ -+void -+baz () -+{ -+ bar <0> (); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/alias-decl-55.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/alias-decl-55.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/alias-decl-55.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/alias-decl-55.C 2016-07-21 06:14:57.000000000 +0000 -@@ -0,0 +1,23 @@ -+// PR c++/71718 -+// { dg-do compile { target c++11 } } -+ -+template <typename T> -+class A : T{}; -+ -+template <typename T> -+using sp = A<T>; -+ -+struct Base {}; -+ -+template <typename T, int num = 1> -+const sp<T> -+rec() // { dg-error "depth" } -+{ -+ return rec<T, num - 1>(); -+} -+ -+static void f(void) { -+ rec<Base>(); -+} -+ -+// { dg-prune-output "compilation terminated" } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/alignas7.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/alignas7.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/alignas7.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/alignas7.C 2016-07-21 06:15:51.000000000 +0000 -@@ -0,0 +1,13 @@ -+// PR c++/71513 -+// { dg-do compile { target c++11 } } -+ -+template < int N, typename T > -+struct A -+{ -+ enum alignas (N) E : T; -+}; -+ -+#define SA(X) static_assert((X), #X) -+ -+constexpr int al = alignof(double); -+SA(alignof(A<al,char>::E) == al); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/auto48.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/auto48.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/auto48.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/auto48.C 2016-04-28 09:58:45.000000000 +0000 -@@ -0,0 +1,8 @@ -+// PR c++/70540 -+// { dg-do compile { target c++11 } } -+ -+void -+foo () -+{ -+ auto f = [&] { return f; }; // { dg-error "before deduction" } -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/constexpr-71828.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/constexpr-71828.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/constexpr-71828.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/constexpr-71828.C 2016-07-19 08:44:04.000000000 +0000 -@@ -0,0 +1,5 @@ -+// PR c++/71828 -+// { dg-do compile { target c++11 } } -+ -+constexpr _Complex int a { 1, 2 }; -+static_assert (& __imag a != &__real a, ""); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/constexpr-array16.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/constexpr-array16.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/constexpr-array16.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/constexpr-array16.C 2016-05-31 21:36:46.000000000 +0000 -@@ -0,0 +1,23 @@ -+// PR c++/71166 -+// { dg-do compile { target c++11 } } -+ -+struct Foo { int value; }; -+ -+constexpr Foo MakeFoo() { return Foo{0}; } -+ -+struct Bar { -+ Foo color = MakeFoo(); -+}; -+ -+struct BarContainer { -+ Bar array[1]; -+}; -+ -+Foo X () -+{ -+ return MakeFoo (); -+} -+ -+void Foo() { -+ new BarContainer(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/constexpr-array17.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/constexpr-array17.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/constexpr-array17.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/constexpr-array17.C 2016-07-21 06:16:17.000000000 +0000 -@@ -0,0 +1,61 @@ -+// PR c++/71092 -+// { dg-do compile { target c++11 } } -+ -+template <typename _Default> struct A { using type = _Default; }; -+template <typename _Default, template <typename> class> -+using __detected_or = A<_Default>; -+template <typename _Default, template <typename> class _Op> -+using __detected_or_t = typename __detected_or<_Default, _Op>::type; -+template <typename _Tp> struct B { typedef _Tp value_type; }; -+struct C { -+ template <typename _Tp> using __pointer = typename _Tp::pointer; -+}; -+template <typename _Alloc> struct J : C { -+ using pointer = __detected_or_t<typename _Alloc::value_type *, __pointer>; -+}; -+template <typename _T1> void _Construct(_T1 *) { new _T1; } -+struct D { -+ template <typename _ForwardIterator, typename _Size> -+ static _ForwardIterator __uninit_default_n(_ForwardIterator p1, _Size) { -+ _Construct(p1); -+ } -+}; -+template <typename _ForwardIterator, typename _Size> -+void __uninitialized_default_n(_ForwardIterator p1, _Size) { -+ D::__uninit_default_n(p1, 0); -+} -+template <typename _ForwardIterator, typename _Size, typename _Tp> -+void __uninitialized_default_n_a(_ForwardIterator p1, _Size, _Tp) { -+ __uninitialized_default_n(p1, 0); -+} -+template <typename> struct __shared_ptr { -+ constexpr __shared_ptr() : _M_ptr(), _M_refcount() {} -+ int _M_ptr; -+ int _M_refcount; -+}; -+template <typename _Alloc> struct F { -+ typedef _Alloc _Tp_alloc_type; -+ struct G { -+ typename J<_Tp_alloc_type>::pointer _M_start; -+ G(_Tp_alloc_type); -+ }; -+ F(int, _Alloc p2) : _M_impl(p2) {} -+ G _M_impl; -+}; -+template <typename _Tp, typename _Alloc = B<_Tp>> struct K : F<_Alloc> { -+ typedef _Alloc allocator_type; -+ K(int, allocator_type p2 = allocator_type()) : F<_Alloc>(0, p2) { -+ __uninitialized_default_n_a(this->_M_impl._M_start, 0, 0); -+ } -+}; -+struct H { -+ H(); -+ struct I { -+ __shared_ptr<int> trigger[1]; -+ }; -+ __shared_ptr<int> resetTrigger_; -+ K<I> states_; -+ __shared_ptr<int> triggerManager_; -+}; -+__shared_ptr<int> a; -+H::H() : states_(0), triggerManager_(a) {} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem6.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem6.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem6.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem6.C 2016-07-21 06:16:24.000000000 +0000 -@@ -0,0 +1,13 @@ -+// PR c++/71896 -+// { dg-do compile { target c++11 } } -+ -+struct Foo { -+ int x; -+}; -+ -+constexpr bool compare(int Foo::*t) { return t == &Foo::x; } -+ -+constexpr bool b = compare(&Foo::x); -+ -+#define SA(X) static_assert ((X),#X) -+SA(b); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/constexpr-recursion2.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/constexpr-recursion2.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/constexpr-recursion2.C 2016-03-23 18:23:04.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/constexpr-recursion2.C 2016-05-24 03:37:10.000000000 +0000 -@@ -1,5 +1,6 @@ - // PR c++/70344 - // { dg-do compile { target c++11 } } -+// { dg-options -O } - - struct Z - { -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/conv-tmpl1.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/conv-tmpl1.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/conv-tmpl1.C 2015-10-23 00:51:14.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/conv-tmpl1.C 2016-07-21 06:16:11.000000000 +0000 -@@ -1,3 +1,4 @@ -+// Test for Core 2189. - // { dg-do compile { target c++11 } } - - template <class T> -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/decltype65.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/decltype65.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/decltype65.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/decltype65.C 2016-07-21 06:15:58.000000000 +0000 -@@ -0,0 +1,11 @@ -+// PR c++/71511 -+// { dg-do compile { target c++11 } } -+ -+template < typename T > -+class A -+{ -+ static int i; -+}; -+ -+//okay: template < typename T > int A <T>::i = 100; -+template < typename T > int decltype (A < T > ())::i = 100; // { dg-error "decltype" } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/inh-ctor20.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/inh-ctor20.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/inh-ctor20.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/inh-ctor20.C 2016-06-02 11:30:44.000000000 +0000 -@@ -0,0 +1,16 @@ -+// PR c++/70972 -+// { dg-do compile { target c++11 } } -+ -+struct moveonly { -+ moveonly(moveonly&&) = default; -+ moveonly() = default; -+}; -+ -+struct A { -+ A(moveonly) {} -+}; -+struct B : A { -+ using A::A; -+}; -+ -+B b(moveonly{}); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/inh-ctor21.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/inh-ctor21.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/inh-ctor21.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/inh-ctor21.C 2016-06-02 11:30:44.000000000 +0000 -@@ -0,0 +1,19 @@ -+// PR c++/70972 -+// { dg-do run { target c++11 } } -+ -+struct abort_on_copy{ -+ abort_on_copy(abort_on_copy&&) = default; -+ abort_on_copy(const abort_on_copy&) { __builtin_abort(); } -+ abort_on_copy() = default; -+}; -+ -+struct A { -+ A(abort_on_copy) {} -+}; -+struct B : A { -+ using A::A; -+}; -+ -+int main() { -+ B b(abort_on_copy{}); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/initlist-template1.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/initlist-template1.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/initlist-template1.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/initlist-template1.C 2016-07-21 06:14:51.000000000 +0000 -@@ -0,0 +1,15 @@ -+// PR c++/70824 -+// { dg-do compile { target c++11 } } -+ -+#include <initializer_list> -+ -+constexpr -+int -+max(std::initializer_list<int> __l) -+{ return *__l.begin(); } -+ -+template <class Src> -+void -+a() { -+ const int v = max({1}); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv11.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv11.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv11.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv11.C 2016-05-29 08:27:07.000000000 +0000 -@@ -0,0 +1,10 @@ -+// PR c++/71105 -+// { dg-do compile { target c++11 } } -+ -+void foo() -+{ -+ int i; -+ static_cast<void(*)()>([i]{}); // { dg-error "invalid static_cast" } -+ static_cast<void(*)()>([=]{}); // { dg-error "invalid static_cast" } -+ static_cast<void(*)()>([&]{}); // { dg-error "invalid static_cast" } -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice16.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice16.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice16.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice16.C 2016-07-21 06:16:30.000000000 +0000 -@@ -0,0 +1,8 @@ -+// PR c++/70781 -+// { dg-do compile { target c++11 } } -+ -+template < typename T > -+void foo () -+{ -+ T ([=] (S) { [=] {}; }); // { dg-error "" } -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/pr70869.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/pr70869.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/pr70869.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/pr70869.C 2016-07-19 08:39:12.000000000 +0000 -@@ -0,0 +1,25 @@ -+// PR c++/70869 -+// { dg-do run { target c++11 } } -+ -+#include <initializer_list> -+ -+struct A -+{ -+ int f () { return 1; } -+ int g () { return 2; } -+ int h () { return 3; } -+}; -+ -+int -+main () -+{ -+ int cnt = 0; -+ for (const auto &m : { &A::f, &A::g, &A::h }) -+ { -+ A a; -+ if ((a.*m) () != ++cnt) -+ __builtin_abort (); -+ } -+ if (cnt != 3) -+ __builtin_abort (); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/pr71054.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/pr71054.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/pr71054.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/pr71054.C 2016-07-19 08:39:12.000000000 +0000 -@@ -0,0 +1,21 @@ -+// PR c++/71054 -+// { dg-do compile { target c++11 } } -+ -+#include <initializer_list> -+ -+template <typename D, typename T = decltype (&D::U)> -+struct S -+{ -+ struct A -+ { -+ int a; -+ int b; -+ T p; -+ }; -+ S () { std::initializer_list<A> a{ {0, 0, &D::V} }; } -+}; -+struct R { -+ void V (int); -+ void U (int); -+}; -+S<R> b; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/pr71739.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/pr71739.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/pr71739.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/pr71739.C 2016-07-04 17:33:50.000000000 +0000 -@@ -0,0 +1,5 @@ -+// PR c++/71739 -+// { dg-do compile { target c++11 } } -+ -+template <int N> struct alignas(N) A; -+template <int N> struct alignas(N) A {}; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/range-for31.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/range-for31.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/range-for31.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/range-for31.C 2016-07-21 06:15:43.000000000 +0000 -@@ -0,0 +1,9 @@ -+// PR c++/71604 -+// { dg-do compile { target c++11 } } -+ -+void foo () -+{ -+ int a[2] = { 1, 2 }; -+ for (struct S { S (int) {} } S : a) // { dg-error "types may not be defined" } -+ ; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/range-for8.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/range-for8.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/range-for8.C 2014-03-07 20:01:12.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/range-for8.C 2016-07-21 06:15:43.000000000 +0000 -@@ -7,9 +7,9 @@ - - void test() - { -- for (struct S { } *x : { (S*)0, (S*)0 } ) -+ for (struct S { } *x : { (S*)0, (S*)0 } ) // { dg-error "types may not be defined" } - ; - -- for (struct S { } x : { S(), S() } ) -+ for (struct S { } x : { S(), S() } ) // { dg-error "types may not be defined" } - ; - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/sfinae57.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/sfinae57.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/sfinae57.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/sfinae57.C 2016-07-21 06:16:04.000000000 +0000 -@@ -0,0 +1,16 @@ -+// PR c++/71495 -+// { dg-do compile { target c++11 } } -+ -+struct A; -+template <class T> void f(T); // { dg-bogus "initializing" } -+template <class T> T&& declval(); -+struct B -+{ -+ template <class T, class U> static decltype(f<T>(declval<U>())) g(int); -+ template <class T, class U> void g(...); -+} b; -+ -+int main() -+{ -+ b.g<A,A>(42); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/variadic-mangle1a.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/variadic-mangle1a.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/variadic-mangle1a.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/variadic-mangle1a.C 2016-07-21 06:15:04.000000000 +0000 -@@ -0,0 +1,12 @@ -+// Test for sZ mangling. -+// { dg-do compile { target c++11 } } -+// { dg-final { scan-assembler "_Z1fIJidEEv1AIXstDpT_EE" } } -+// { dg-options -fabi-version=9 } -+ -+template <int I> struct A { }; -+template <typename... Ts> void f(A<sizeof...(Ts)>); -+ -+int main() -+{ -+ f<int,double>(A<2>()); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/variadic-mangle2a.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/variadic-mangle2a.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/variadic-mangle2a.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/variadic-mangle2a.C 2016-07-21 06:15:04.000000000 +0000 -@@ -0,0 +1,19 @@ -+// Testcase from cxx-abi-dev. -+// { dg-do compile { target c++11 } } -+// { dg-options "-fabi-version=9" } -+ -+struct A { -+ template<int...T> using N = int[sizeof...(T)]; -+ template<int...A> void f(N<A...> &); -+ -+ template<typename...T> using M = int[sizeof...(T)]; -+ template<typename...A> void g(M<A...> &); -+}; -+void g(A a) -+{ -+ int arr[3]; -+ // { dg-final { scan-assembler "_ZN1A1fIJLi1ELi2ELi3EEEEvRAszspT__i" } } -+ a.f<1,2,3>(arr); -+ // { dg-final { scan-assembler "_ZN1A1gIJiiiEEEvRAstDpT__i" } } -+ a.g<int,int,int>(arr); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/variadic-mangle3.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/variadic-mangle3.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/variadic-mangle3.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/variadic-mangle3.C 2016-07-21 06:15:04.000000000 +0000 -@@ -0,0 +1,10 @@ -+// Testcase from cxx-abi-dev. -+// { dg-do compile { target c++11 } } -+// { dg-final { scan-assembler "_ZN1A1fIJiiEiJiiiEEEvRAsPDpT_T0_DpT1_E_iS3_S5_" } } -+ -+struct A { -+ template<typename...T> using N = int[sizeof...(T)]; -+ template<typename...A, typename B, typename...C> -+ void f(N<A..., B, C...> &, B, C...); -+}; -+void g(A a) { int arr[6]; a.f<int, int>(arr, 1, 2, 3, 4); } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/variadic-mangle3a.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/variadic-mangle3a.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp0x/variadic-mangle3a.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp0x/variadic-mangle3a.C 2016-07-21 06:15:04.000000000 +0000 -@@ -0,0 +1,11 @@ -+// Testcase from cxx-abi-dev. -+// { dg-do compile { target c++11 } } -+// { dg-options -fabi-version=9 } -+// { dg-final { scan-assembler "_ZN1A1fIJiiEiJiiiEEEvRAstDpT1__iT0_S2_" } } -+ -+struct A { -+ template<typename...T> using N = int[sizeof...(T)]; -+ template<typename...A, typename B, typename...C> -+ void f(N<A..., B, C...> &, B, C...); -+}; -+void g(A a) { int arr[6]; a.f<int, int>(arr, 1, 2, 3, 4); } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/auto-fn31.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/auto-fn31.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/auto-fn31.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/auto-fn31.C 2016-06-14 20:55:08.000000000 +0000 -@@ -0,0 +1,7 @@ -+// PR c++/70572 -+// { dg-do compile { target c++14 } } -+ -+void foo () -+{ -+ decltype (auto) a = foo; // { dg-error "initializer" } -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/auto-fn32.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/auto-fn32.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/auto-fn32.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/auto-fn32.C 2016-07-21 06:29:32.000000000 +0000 -@@ -0,0 +1,33 @@ -+// { dg-do compile { target c++14 } } -+ -+template<class,class> struct same_type; -+template<class T> struct same_type<T,T> {}; -+ -+struct A -+{ -+ static int b; -+ int c; -+ -+ template <int> -+ decltype(auto) f() { return A::c; } -+ -+ template <int> -+ decltype(auto) g() { return (A::c); } -+}; -+ -+A a; -+ -+template <int> -+decltype(auto) f() { return A::b; } -+ -+template <int> -+decltype(auto) g() { return (A::b); } -+ -+int main() -+{ -+ same_type<decltype(f<0>()), int>(); -+ same_type<decltype(g<0>()), int&>(); -+ -+ same_type<decltype(a.f<0>()), int>(); -+ same_type<decltype(a.g<0>()), int&>(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C 2016-03-28 17:22:49.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C 2016-07-05 17:55:36.000000000 +0000 -@@ -77,10 +77,10 @@ - # error "__cpp_attributes != 200809" - #endif - --#ifndef __cpp_rvalue_reference --# error "__cpp_rvalue_reference" --#elif __cpp_rvalue_reference != 200610 --# error "__cpp_rvalue_reference != 200610" -+#ifndef __cpp_rvalue_references -+# error "__cpp_rvalue_references" -+#elif __cpp_rvalue_references != 200610 -+# error "__cpp_rvalue_references != 200610" - #endif - - #ifndef __cpp_variadic_templates -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C 2016-03-28 17:22:49.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C 2016-07-05 17:55:36.000000000 +0000 -@@ -70,10 +70,10 @@ - # error "__cpp_attributes != 200809" - #endif - --#ifndef __cpp_rvalue_reference --# error "__cpp_rvalue_reference" --#elif __cpp_rvalue_reference != 200610 --# error "__cpp_rvalue_reference != 200610" -+#ifndef __cpp_rvalue_references -+# error "__cpp_rvalue_references" -+#elif __cpp_rvalue_references != 200610 -+# error "__cpp_rvalue_references != 200610" - #endif - - #ifndef __cpp_variadic_templates -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C 2015-09-21 15:50:30.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C 2016-07-05 17:55:36.000000000 +0000 -@@ -42,8 +42,8 @@ - # error "__cpp_attributes" // { dg-error "error" } - #endif - --#ifndef __cpp_rvalue_reference --# error "__cpp_rvalue_reference" // { dg-error "error" } -+#ifndef __cpp_rvalue_references -+# error "__cpp_rvalue_references" // { dg-error "error" } - #endif - - #ifndef __cpp_variadic_templates -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/lambda-conv1.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/lambda-conv1.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/lambda-conv1.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/lambda-conv1.C 2016-05-29 08:27:07.000000000 +0000 -@@ -0,0 +1,13 @@ -+// PR c++/71105 -+// { dg-do compile { target c++14 } } -+ -+void foo() -+{ -+ int i; -+ static_cast<void(*)(int)>([i](auto){}); // { dg-error "invalid static_cast" } -+ static_cast<void(*)(int)>([=](auto){}); // { dg-error "invalid static_cast" } -+ static_cast<void(*)(int)>([&](auto){}); // { dg-error "invalid static_cast" } -+ static_cast<float(*)(float)>([i](auto x){ return x; }); // { dg-error "invalid static_cast" } -+ static_cast<float(*)(float)>([=](auto x){ return x; }); // { dg-error "invalid static_cast" } -+ static_cast<float(*)(float)>([&](auto x){ return x; }); // { dg-error "invalid static_cast" } -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/lambda-conv2.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/lambda-conv2.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/lambda-conv2.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/lambda-conv2.C 2016-05-29 08:27:07.000000000 +0000 -@@ -0,0 +1,23 @@ -+// PR c++/71105 -+// { dg-do compile { target c++14 } } -+ -+template <typename T> T declval(); -+template <typename, typename> struct is_same -+{ static constexpr bool value = false; }; -+template <typename T> struct is_same<T, T> -+{ static constexpr bool value = true; }; -+ -+template <class F> -+struct indirected : F { -+ indirected(F f) : F(f) {} -+ template <class I> -+ auto operator()(I i) -> decltype(declval<F&>()(*i)) { -+ return static_cast<F&>(*this)(*i); -+ } -+}; -+ -+int main() { -+ auto f = [=](auto i) { return i + i; }; -+ auto i = indirected<decltype(f)>{f}; -+ static_assert(is_same<decltype(i(declval<int*>())), int>::value, ""); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/lambda-generic-conv2.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/lambda-generic-conv2.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/lambda-generic-conv2.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/lambda-generic-conv2.C 2016-07-21 06:16:11.000000000 +0000 -@@ -0,0 +1,26 @@ -+// PR c++/71117 -+// { dg-do compile { target c++14 } } -+ -+template <class T> T&& declval() noexcept; -+template <class, class> -+constexpr bool is_same = false; -+template <class T> -+constexpr bool is_same<T, T> = true; -+ -+template <class F> -+struct indirected : F { -+ indirected(F f) : F(f) {} -+ template <class I> -+ auto operator()(I i) -> decltype(declval<F&>()(*i)) { -+ return static_cast<F&>(*this)(*i); -+ } -+}; -+ -+int main() { -+ auto f = [](auto rng) { -+ static_assert(is_same<decltype(rng), int>, ""); -+ return 42; -+ }; -+ indirected<decltype(f)> i(f); -+ static_assert(is_same<decltype(i(declval<int*>())), int>, ""); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/lambda-generic-conv3.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/lambda-generic-conv3.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/lambda-generic-conv3.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/lambda-generic-conv3.C 2016-07-21 06:16:11.000000000 +0000 -@@ -0,0 +1,10 @@ -+// PR c++/70942 -+// { dg-do compile { target c++14 } } -+ -+int main() -+{ -+ int x = 0; -+ [](auto&& xv){ -+ static_cast<decltype(xv)>(xv) = 1; -+ }(x); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/lambda-generic-static1.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/lambda-generic-static1.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/lambda-generic-static1.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/lambda-generic-static1.C 2016-06-02 09:49:43.000000000 +0000 -@@ -0,0 +1,13 @@ -+// PR c++/70735 -+// { dg-do run { target c++14 } } -+ -+int main() -+{ -+ static int a; -+ auto f = [](auto) { return a; }; -+ if (f(0) != 0) -+ __builtin_abort(); -+ a = 1; -+ if (f(0) != 1) -+ __builtin_abort(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/lambda-generic-static2.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/lambda-generic-static2.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/lambda-generic-static2.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/lambda-generic-static2.C 2016-06-02 09:49:43.000000000 +0000 -@@ -0,0 +1,19 @@ -+// PR c++/70735 -+// { dg-do run { target c++14 } } -+ -+template <class T> -+static void g() -+{ -+ static int a; -+ auto f = [](auto) { return a; }; -+ if (f(0) != 0) -+ __builtin_abort(); -+ a = 1; -+ if (f(0) != 1) -+ __builtin_abort(); -+} -+ -+int main() -+{ -+ g<int>(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/paren4.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/paren4.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/paren4.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/paren4.C 2016-07-21 06:29:32.000000000 +0000 -@@ -0,0 +1,14 @@ -+// PR c++/70822 -+// { dg-do compile { target c++14 } } -+ -+struct a -+{ -+ static int b; -+}; -+ -+template <typename> -+void -+foo () -+{ -+ &(a::b); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/var-templ39.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/var-templ39.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/var-templ39.C 2015-08-05 17:56:14.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/var-templ39.C 2016-05-31 21:36:34.000000000 +0000 -@@ -1,5 +1,5 @@ - // PR c++/66260 --// { dg-do compile { target c++14 } } -+// { dg-do assemble { target c++14 } } - - template <class> - constexpr bool foo = false; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/var-templ39a.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/var-templ39a.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/var-templ39a.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/var-templ39a.C 2016-05-31 21:36:34.000000000 +0000 -@@ -0,0 +1,27 @@ -+// PR c++/66260 -+// { dg-do compile { target c++14 } } -+ -+template <class> -+bool foo = false; -+template <> -+bool foo<int> = true; -+template <class T, int N> -+bool foo<T[N]> = foo<T>; -+ -+#define assert(X) if (!(X)) __builtin_abort(); -+ -+int main() -+{ -+ // { dg-final { scan-assembler "_Z3fooIiE" } } -+ assert(foo<int>); -+ // { dg-final { scan-assembler "_Z3fooIdE" } } -+ assert(!foo<double>); -+ // { dg-final { scan-assembler "_Z3fooIA3_iE" } } -+ assert(foo<int[3]>); -+ // { dg-final { scan-assembler "_Z3fooIA3_dE" } } -+ assert(!foo<double[3]>); -+ // { dg-final { scan-assembler "_Z3fooIA2_A5_A3_iE" } } -+ assert(foo<int[2][5][3]>); -+ // { dg-final { scan-assembler "_Z3fooIA2_A5_A3_dE" } } -+ assert(!foo<double[2][5][3]>); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/var-templ51.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/var-templ51.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/var-templ51.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/var-templ51.C 2016-05-31 21:36:34.000000000 +0000 -@@ -0,0 +1,11 @@ -+// PR c++/60095 -+// { dg-do link { target c++14 } } -+ -+template <class> -+constexpr bool b = false; -+template<typename T> -+constexpr bool b<T*> = true; -+int main() { -+ b<int*>; -+ b<double*>; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/var-templ52.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/var-templ52.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp1y/var-templ52.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp1y/var-templ52.C 2016-05-31 21:36:34.000000000 +0000 -@@ -0,0 +1,14 @@ -+// PR c++/69515 -+// { dg-do link { target c++14 } } -+ -+struct A { A(int = 0) {} }; -+ -+template<class...> class meow; -+ -+template<typename T> A foo; -+template<typename... Ts> A foo<meow<Ts...>> = 1; -+ -+auto&& a = foo<meow<int>>; -+auto&& b = foo<meow<int, int>>; -+ -+int main() {} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C 2016-03-28 17:22:49.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C 2016-07-05 17:55:36.000000000 +0000 -@@ -58,10 +58,10 @@ - # error "__cpp_attributes != 200809" - #endif - --#ifndef __cpp_rvalue_reference --# error "__cpp_rvalue_reference" --#elif __cpp_rvalue_reference != 200610 --# error "__cpp_rvalue_reference != 200610" -+#ifndef __cpp_rvalue_references -+# error "__cpp_rvalue_references" -+#elif __cpp_rvalue_references != 200610 -+# error "__cpp_rvalue_references != 200610" - #endif - - #ifndef __cpp_variadic_templates -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/cpp1z/fold-mangle.C gcc-6-20160721/gcc/testsuite/g++.dg/cpp1z/fold-mangle.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/cpp1z/fold-mangle.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/cpp1z/fold-mangle.C 2016-07-21 06:15:23.000000000 +0000 -@@ -0,0 +1,20 @@ -+// PR c++/71711 -+// { dg-options -std=c++1z } -+ -+template < int > struct A {}; -+template < int ... N > void unary_left (A < (... + N) >); -+template < int ... N > void unary_right (A < (N + ...) >); -+template < int ... N > void binary_left (A < (42 + ... + N) >); -+template < int ... N > void binary_right (A < (N + ... + 42) >); -+ -+void bar () -+{ -+ // { dg-final { scan-assembler "_Z10unary_leftIJLi1ELi2ELi3EEEv1AIXflplT_EE" } } -+ unary_left < 1, 2, 3 > ({}); -+ // { dg-final { scan-assembler "_Z11unary_rightIJLi1ELi2ELi3EEEv1AIXfrplT_EE" } } -+ unary_right < 1, 2, 3 > ({}); -+ // { dg-final { scan-assembler "_Z11binary_leftIJLi1ELi2ELi3EEEv1AIXfLplLi42ET_EE" } } -+ binary_left < 1, 2, 3 > ({}); -+ // { dg-final { scan-assembler "_Z12binary_rightIJLi1ELi2ELi3EEEv1AIXfRplT_Li42EEE" } } -+ binary_right < 1, 2, 3 > ({}); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/debug/pr71057.C gcc-6-20160721/gcc/testsuite/g++.dg/debug/pr71057.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/debug/pr71057.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/debug/pr71057.C 2016-05-31 09:58:50.000000000 +0000 -@@ -0,0 +1,12 @@ -+// { dg-do compile } -+// { dg-options "-g" } -+template <typename _Tp> using decay_t = _Tp; -+template <typename> struct A; -+template <typename> struct B { B(A<int>); }; -+template <typename> struct C { -+ template <typename U> using constructor = B<decay_t<U>>; -+ typedef constructor<int> dummy; -+}; -+template <typename> struct D {}; -+C<int> a; -+D<B<int>> fn1() { fn1, a; } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/ext/flexary16.C gcc-6-20160721/gcc/testsuite/g++.dg/ext/flexary16.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/ext/flexary16.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/ext/flexary16.C 2016-05-25 16:01:24.000000000 +0000 -@@ -0,0 +1,37 @@ -+// PR c++/71147 - [6 Regression] Flexible array member wrongly rejected -+// in template -+// { dg-do compile } -+ -+template <typename> -+struct container -+{ -+ struct elem { -+ unsigned u; -+ }; -+ -+ struct incomplete { -+ int x; -+ elem array[]; -+ }; -+}; -+ -+unsigned f (container<void>::incomplete* i) -+{ -+ return i->array [0].u; -+} -+ -+ -+template <typename T> -+struct D: container<T> -+{ -+ struct S { -+ int x; -+ typename container<T>::elem array[]; -+ }; -+}; -+ -+ -+unsigned g (D<void>::S *s) -+{ -+ return s->array [0].u; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/ext/vector31.C gcc-6-20160721/gcc/testsuite/g++.dg/ext/vector31.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/ext/vector31.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/ext/vector31.C 2016-07-19 08:40:37.000000000 +0000 -@@ -0,0 +1,29 @@ -+// PR c++/71871 -+// { dg-do compile } -+ -+typedef unsigned int V __attribute__ ((__vector_size__ (32))); -+ -+template <int N> -+void -+foo (V *x) -+{ -+ V a = *x; -+ a = a ? a : -1; -+ *x = a; -+} -+ -+template <typename T> -+void -+bar (T *x) -+{ -+ T a = *x; -+ a = a ? a : -1; -+ *x = a; -+} -+ -+void -+test (V *x, V *y) -+{ -+ foo<0> (x); -+ bar<V> (y); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/gomp/declare-simd-6.C gcc-6-20160721/gcc/testsuite/g++.dg/gomp/declare-simd-6.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/gomp/declare-simd-6.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/gomp/declare-simd-6.C 2016-05-24 16:27:12.000000000 +0000 -@@ -0,0 +1,37 @@ -+// PR c++/71257 -+// { dg-do compile } -+// { dg-options "-fopenmp-simd" } -+ -+struct S { int a; }; -+#pragma omp declare simd linear(val(a):2) -+int f1 (int &a); -+#pragma omp declare simd linear(uval(a):2) -+unsigned short f2 (unsigned short &a); -+#pragma omp declare simd linear(ref(a):1) -+int f3 (long long int &a); -+#pragma omp declare simd linear(a:1) -+int f4 (int &a); -+#pragma omp declare simd linear(val(a)) -+int f5 (int a); -+#pragma omp declare simd linear(uval(a):2) // { dg-error "modifier applied to non-reference variable" } -+int f6 (unsigned short a); -+#pragma omp declare simd linear(ref(a):1) // { dg-error "modifier applied to non-reference variable" } -+int f7 (unsigned long int a); -+#pragma omp declare simd linear(a:1) -+int f8 (int a); -+#pragma omp declare simd linear(val(a):2) // { dg-error "applied to non-integral non-pointer variable" } -+int f9 (S &a); -+#pragma omp declare simd linear(uval(a):2) // { dg-error "applied to non-integral non-pointer variable" } -+int f10 (S &a); -+#pragma omp declare simd linear(ref(a):1) // { dg-bogus "applied to non-integral non-pointer variable" } -+int f11 (S &a); -+#pragma omp declare simd linear(a:1) // { dg-error "applied to non-integral non-pointer variable" } -+int f12 (S &a); -+#pragma omp declare simd linear(val(a)) // { dg-error "applied to non-integral non-pointer variable" } -+int f13 (S a); -+#pragma omp declare simd linear(uval(a):2) // { dg-error "modifier applied to non-reference variable" } -+int f14 (S a); -+#pragma omp declare simd linear(ref(a):1) // { dg-error "modifier applied to non-reference variable" } -+int f15 (S a); -+#pragma omp declare simd linear(a:1) // { dg-error "applied to non-integral non-pointer variable" } -+int f16 (S a); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/gomp/pr71941.C gcc-6-20160721/gcc/testsuite/g++.dg/gomp/pr71941.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/gomp/pr71941.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/gomp/pr71941.C 2016-07-21 07:13:42.000000000 +0000 -@@ -0,0 +1,22 @@ -+// PR c++/71941 -+// { dg-do compile } -+// { dg-options "-fopenmp" } -+ -+struct A { A (); A (A &); ~A (); }; -+ -+template <int N> -+struct B -+{ -+ struct C { A a; C () : a () {} }; -+ C c; -+ void foo (); -+}; -+ -+void -+bar () -+{ -+ B<0> b; -+#pragma omp task -+ for (int i = 0; i < 2; i++) -+ b.foo (); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/init/pr71516.C gcc-6-20160721/gcc/testsuite/g++.dg/init/pr71516.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/init/pr71516.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/init/pr71516.C 2016-06-14 14:47:17.000000000 +0000 -@@ -0,0 +1,10 @@ -+// PR c++/71516 -+// { dg-do compile } -+ -+struct A; // { dg-message "forward declaration of" } -+struct B -+{ -+ static A a; -+}; -+A B::a = A(); // { dg-error "has initializer but incomplete type|invalid use of incomplete type" } -+struct A {}; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/ipa/ipa-pta-2.C gcc-6-20160721/gcc/testsuite/g++.dg/ipa/ipa-pta-2.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/ipa/ipa-pta-2.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/ipa/ipa-pta-2.C 2016-05-13 13:22:42.000000000 +0000 -@@ -0,0 +1,37 @@ -+// { dg-do run } -+// { dg-options "-O2 -fipa-pta" } -+ -+extern "C" void abort (void); -+ -+struct Y { ~Y(); int i; }; -+ -+Y::~Y () {} -+ -+static Y __attribute__((noinline)) foo () -+{ -+ Y res; -+ res.i = 3; -+ return res; -+} -+ -+static Y __attribute__((noinline)) bar () -+{ -+ Y res; -+ res.i = 42; -+ return res; -+} -+ -+static Y (*fn) (); -+ -+int a; -+int main() -+{ -+ if (a) -+ fn = foo; -+ else -+ fn = bar; -+ Y res = fn (); -+ if (res.i != 42) -+ abort (); -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/lookup/scoped10.C gcc-6-20160721/gcc/testsuite/g++.dg/lookup/scoped10.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/lookup/scoped10.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/lookup/scoped10.C 2016-05-31 21:36:28.000000000 +0000 -@@ -0,0 +1,5 @@ -+namespace A { } -+namespace N { struct A; } -+using namespace N; -+ -+struct ::A *p; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/lookup/scoped9.C gcc-6-20160721/gcc/testsuite/g++.dg/lookup/scoped9.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/lookup/scoped9.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/lookup/scoped9.C 2016-05-31 21:36:28.000000000 +0000 -@@ -0,0 +1,10 @@ -+// PR c++/71173 -+ -+namespace foo { -+ namespace bar { -+ class foo {}; -+ } -+ class baz {}; -+} -+using namespace foo::bar; -+::foo::baz mybaz; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/opt/pr70847.C gcc-6-20160721/gcc/testsuite/g++.dg/opt/pr70847.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/opt/pr70847.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/opt/pr70847.C 2016-06-06 20:11:54.000000000 +0000 -@@ -0,0 +1,11 @@ -+// PR c++/70847 -+// { dg-do compile } -+ -+struct D { virtual D& f(); }; -+ -+void -+g() -+{ -+ D d; -+ d.f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/opt/pr71100.C gcc-6-20160721/gcc/testsuite/g++.dg/opt/pr71100.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/opt/pr71100.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/opt/pr71100.C 2016-05-18 21:24:16.000000000 +0000 -@@ -0,0 +1,18 @@ -+// PR c++/71100 -+// { dg-do compile } -+// { dg-options "-O2" } -+ -+struct D { ~D (); }; -+struct E { D foo () { throw 1; } }; -+ -+inline void -+bar (D (E::*f) (), E *o) -+{ -+ (o->*f) (); -+} -+ -+void -+baz (E *o) -+{ -+ bar (&E::foo, o); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/opt/pr71210-1.C gcc-6-20160721/gcc/testsuite/g++.dg/opt/pr71210-1.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/opt/pr71210-1.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/opt/pr71210-1.C 2016-05-20 19:06:09.000000000 +0000 -@@ -0,0 +1,14 @@ -+// PR c++/71210 -+// { dg-do compile } -+// { dg-options "-O2" } -+ -+#include <typeinfo> -+ -+void f1 (const std::type_info&) __attribute__((noreturn)); -+struct S1 { ~S1 (); }; -+struct S2 -+{ -+ virtual S1 f2 () const { f1 (typeid (*this)); } -+ S1 f3 () const { return f2 (); } -+}; -+void f4 () { S2 a; a.f3 (); } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/opt/pr71210-2.C gcc-6-20160721/gcc/testsuite/g++.dg/opt/pr71210-2.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/opt/pr71210-2.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/opt/pr71210-2.C 2016-05-20 19:06:09.000000000 +0000 -@@ -0,0 +1,23 @@ -+// PR c++/71210 -+// { dg-do compile } -+// { dg-options "-O2" } -+ -+struct C { int a; int b; C (); ~C (); }; -+ -+namespace -+{ -+ struct A -+ { -+ A () {} -+ virtual C bar (int) = 0; -+ C baz (int x) { return bar (x); } -+ }; -+} -+ -+A *a; -+ -+void -+foo () -+{ -+ C c = a->baz (0); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/opt/pr71387.C gcc-6-20160721/gcc/testsuite/g++.dg/opt/pr71387.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/opt/pr71387.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/opt/pr71387.C 2016-06-03 11:01:39.000000000 +0000 -@@ -0,0 +1,52 @@ -+// PR middle-end/71387 -+// { dg-do compile } -+// { dg-options "-Og" } -+ -+struct A -+{ -+ A (); -+ inline A (const A &); -+}; -+ -+struct B -+{ -+ explicit B (unsigned long) : b(0), c(1) {} -+ A a; -+ unsigned long b; -+ int c; -+}; -+ -+struct C {}; -+ -+struct D -+{ -+ explicit D (const C *) {} -+}; -+ -+struct E : public D -+{ -+ E (const C *x) : D(x) {} -+ virtual A foo () const = 0; -+ virtual A bar () const = 0; -+}; -+ -+struct F : public B -+{ -+ inline void baz (); -+ F (const E *); -+ const E *f; -+}; -+ -+inline void -+F::baz () -+{ -+ if (b == 0) -+ a = f->bar (); -+ else -+ a = f->foo (); -+} -+ -+F::F (const E *) : B(4) -+{ -+ baz (); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/opt/pr71528.C gcc-6-20160721/gcc/testsuite/g++.dg/opt/pr71528.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/opt/pr71528.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/opt/pr71528.C 2016-06-21 07:02:59.000000000 +0000 -@@ -0,0 +1,23 @@ -+// PR c++/71528 -+// { dg-do run } -+// { dg-options "-O2" } -+ -+extern int &x; -+int y; -+ -+int & -+foo () -+{ -+ return y; -+} -+ -+int &x = foo (); -+ -+int -+main () -+{ -+ if (&x != &y) -+ __builtin_abort (); -+} -+ -+extern int &x; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/other/i386-10.C gcc-6-20160721/gcc/testsuite/g++.dg/other/i386-10.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/other/i386-10.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/other/i386-10.C 2016-05-31 21:36:22.000000000 +0000 -@@ -0,0 +1,12 @@ -+// { dg-do compile { target i?86-*-* x86_64-*-* } } -+// { dg-options -maes } -+ -+typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__)); -+ -+int main() -+{ -+ const char index = 1; -+ __m128i r = { }; -+ -+ r = __builtin_ia32_aeskeygenassist128 (r, (int)(index)); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/other/pr71728.C gcc-6-20160721/gcc/testsuite/g++.dg/other/pr71728.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/other/pr71728.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/other/pr71728.C 2016-07-21 18:24:48.000000000 +0000 -@@ -0,0 +1,11 @@ -+// PR c++/71728 -+// { dg-do compile } -+// { dg-options "-std=gnu++14 -Wall" } -+ -+int -+foo () -+{ -+ if (({ goto test; test: 1; }) != 1) -+ return 1; -+ return 2; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/parse/pr71909.C gcc-6-20160721/gcc/testsuite/g++.dg/parse/pr71909.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/parse/pr71909.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/parse/pr71909.C 2016-07-20 14:05:00.000000000 +0000 -@@ -0,0 +1,22 @@ -+// PR c++/71909 -+// { dg-do compile } -+ -+struct S -+{ -+ S () try : m (0) {} -+ catch (...) {} -+ void foo () try {} -+ catch (int) {} -+ catch (...) {} -+ int m; -+}; -+ -+struct T -+{ -+ T () : m (0) {} -+ catch (...) {} // { dg-error "expected unqualified-id before" } -+ void foo () {} -+ catch (int) {} // { dg-error "expected unqualified-id before" } -+ catch (...) {} // { dg-error "expected unqualified-id before" } -+ int m; -+}; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/pr70098.C gcc-6-20160721/gcc/testsuite/g++.dg/pr70098.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/pr70098.C 2016-03-14 14:18:44.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/pr70098.C 2016-07-15 20:58:23.000000000 +0000 -@@ -2,8 +2,6 @@ - // { dg-do compile } - // { dg-options -O2 } - // { dg-require-effective-target c++11 } --// { dg-xfail-if "PR70098" { lp64 && powerpc64_no_dm } } --// { dg-prune-output ".*internal compiler error.*" } - - template < typename > struct traits; - template < typename, int _Rows, int _Cols, int = 0, int = _Rows, -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/pr71184.C gcc-6-20160721/gcc/testsuite/g++.dg/pr71184.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/pr71184.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/pr71184.C 2016-05-19 18:56:47.000000000 +0000 -@@ -0,0 +1 @@ -+operator new[ // { dg-error "expected type-specifier before 'new'" } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/pr71389.C gcc-6-20160721/gcc/testsuite/g++.dg/pr71389.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/pr71389.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/pr71389.C 2016-06-07 15:16:44.000000000 +0000 -@@ -0,0 +1,23 @@ -+// { dg-do compile { target i?86-*-* x86_64-*-* } } -+// { dg-options "-std=c++11 -O3 -march=ivybridge" } -+ -+#include <functional> -+ -+extern int le_s6, le_s9, le_s11; -+long foo_v14[16][16]; -+ -+void fn1() { -+ std::array<std::array<int, 16>, 16> v13; -+ for (; le_s6;) -+ for (int k1 = 2; k1 < 4; k1 = k1 + 1) { -+ for (int n1 = 0; n1 < le_s9; n1 = 8) { -+ *foo_v14[6] = 20923310; -+ for (int i2 = n1; i2 < n1 + 8; i2 = i2 + 1) -+ v13.at(5).at(i2 + 6 - n1) = 306146921; -+ } -+ -+ for (int l2 = 0; l2 < le_s11; l2 = l2 + 1) -+ *(l2 + v13.at(5).begin()) = 306146921; -+ } -+ v13.at(le_s6 - 4); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/pr71624.C gcc-6-20160721/gcc/testsuite/g++.dg/pr71624.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/pr71624.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/pr71624.C 2016-07-13 12:19:44.000000000 +0000 -@@ -0,0 +1,35 @@ -+/* PR71624 */ -+// { dg-do compile { target i?86-*-* x86_64-*-* } } -+/* { dg-options "-fcheck-pointer-bounds -mmpx -O2" } */ -+ -+class c1 -+{ -+public: -+ virtual int fn1 () const; -+ int fn2 (const int *) const; -+}; -+ -+class c2 -+{ -+ int fn1 (); -+ c1 obj; -+}; -+ -+int -+c1::fn1 () const -+{ -+ return 0; -+} -+ -+int -+c1::fn2 (const int *) const -+{ -+ return this->fn1 (); -+} -+ -+int -+c2::fn1 () -+{ -+ return obj.fn2 (0); -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/template/defarg21.C gcc-6-20160721/gcc/testsuite/g++.dg/template/defarg21.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/template/defarg21.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/template/defarg21.C 2016-07-19 08:42:12.000000000 +0000 -@@ -0,0 +1,21 @@ -+// PR c++/71822 -+// { dg-do compile } -+ -+int bar (int); -+ -+template <typename T> -+struct A -+{ -+ explicit A (int x = bar (sizeof (T))); -+}; -+ -+struct B -+{ -+ A <int> b[2]; -+}; -+ -+void -+baz () -+{ -+ B b; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/template/friend62.C gcc-6-20160721/gcc/testsuite/g++.dg/template/friend62.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/template/friend62.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/template/friend62.C 2016-05-31 21:36:40.000000000 +0000 -@@ -0,0 +1,16 @@ -+// PR c++/71227 -+// { dg-options "" } -+ -+class A { -+ public: -+ template<typename T> -+ friend int f(int x, T v) { // { dg-message "declaration" } -+ return x + v; -+ } -+}; -+ -+ -+template<> -+int f(int x, int v) { // { dg-warning "friend" } -+ return x + v; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/template/pr70466-1.C gcc-6-20160721/gcc/testsuite/g++.dg/template/pr70466-1.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/template/pr70466-1.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/template/pr70466-1.C 2016-05-18 17:17:03.000000000 +0000 -@@ -0,0 +1,27 @@ -+// PR c++/70466 -+ -+template < class T, class T > // { dg-error "conflicting" } -+class A -+{ -+public: -+ explicit A (T (S::*f) ()) {} // { dg-error "expected" } -+}; -+ -+template < class T, class S > -+A < T, S > foo (T (S::*f) ()) -+{ -+ return A < T, S > (f); -+} -+ -+class B -+{ -+public: -+ void bar () {} -+}; -+ -+int -+main () -+{ -+ foo (&B::bar); -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/template/pr70466-2.C gcc-6-20160721/gcc/testsuite/g++.dg/template/pr70466-2.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/template/pr70466-2.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/template/pr70466-2.C 2016-05-18 17:17:03.000000000 +0000 -@@ -0,0 +1,25 @@ -+// PR c++/70466 -+ -+template < class T, class S > -+struct A -+{ -+ explicit A (...) {} -+}; -+ -+template < class T, class S > -+A < T, S > foo (T (S::*f) ()) -+{ -+ return A < T, S > (f); -+} -+ -+struct B -+{ -+ void bar () {} -+}; -+ -+int -+main () -+{ -+ foo (&B::bar); -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/tm/pr71909.C gcc-6-20160721/gcc/testsuite/g++.dg/tm/pr71909.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/tm/pr71909.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/tm/pr71909.C 2016-07-20 14:05:00.000000000 +0000 -@@ -0,0 +1,18 @@ -+// PR c++/71909 -+// { dg-do compile { target c++11 } } -+// { dg-options "-fgnu-tm" } -+ -+struct S -+{ -+ S () __transaction_atomic [[outer]] try : m {0} {} catch (int) {} catch (...) {} -+ int m; -+}; -+ -+struct T -+{ -+ T () __transaction_atomic __attribute__((outer)) try : m {0} {} catch (int) {} catch (...) {} -+ int m; -+}; -+ -+void foo () __transaction_atomic [[outer]] try {} catch (int) {} catch (...) {} -+void bar () __transaction_atomic __attribute__((outer)) try {} catch (int) {} catch (...) {} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/torture/pr71002.C gcc-6-20160721/gcc/testsuite/g++.dg/torture/pr71002.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/torture/pr71002.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/torture/pr71002.C 2016-05-30 14:00:18.000000000 +0000 -@@ -0,0 +1,160 @@ -+// { dg-do run } -+ -+using size_t = __SIZE_TYPE__; -+ -+inline void* operator new(size_t, void* p) noexcept -+{ return p; } -+ -+inline void operator delete(void*, void*) -+{ } -+ -+struct long_t -+{ -+ size_t is_short : 1; -+ size_t length : (__SIZEOF_SIZE_T__ * __CHAR_BIT__ - 1); -+ size_t capacity; -+ char* pointer; -+}; -+ -+union long_raw_t { -+ unsigned char data[sizeof(long_t)]; -+ struct __attribute__((aligned(alignof(long_t)))) { } align; -+}; -+ -+struct short_header -+{ -+ unsigned char is_short : 1; -+ unsigned char length : (__CHAR_BIT__ - 1); -+}; -+ -+struct short_t -+{ -+ short_header h; -+ char data[23]; -+}; -+ -+union repr_t -+{ -+ long_raw_t r; -+ short_t s; -+ -+ const short_t& short_repr() const -+ { return s; } -+ -+ const long_t& long_repr() const -+ { return *static_cast<const long_t*>(static_cast<const void*>(&r)); } -+ -+ short_t& short_repr() -+ { return s; } -+ -+ long_t& long_repr() -+ { return *static_cast<long_t*>(static_cast<void*>(&r)); } -+}; -+ -+class string -+{ -+public: -+ string() -+ { -+ short_t& s = m_repr.short_repr(); -+ s.h.is_short = 1; -+ s.h.length = 0; -+ s.data[0] = '\0'; -+ } -+ -+ string(const char* str) -+ { -+ size_t length = __builtin_strlen(str); -+ if (length + 1 > 23) { -+ long_t& l = m_repr.long_repr(); -+ l.is_short = 0; -+ l.length = length; -+ l.capacity = length + 1; -+ l.pointer = new char[l.capacity]; -+ __builtin_memcpy(l.pointer, str, length + 1); -+ } else { -+ short_t& s = m_repr.short_repr(); -+ s.h.is_short = 1; -+ s.h.length = length; -+ __builtin_memcpy(s.data, str, length + 1); -+ } -+ } -+ -+ string(string&& other) -+ : string{} -+ { -+ swap_data(other); -+ } -+ -+ ~string() -+ { -+ if (!is_short()) { -+ delete[] m_repr.long_repr().pointer; -+ } -+ } -+ -+ size_t length() const -+ { return is_short() ? short_length() : long_length(); } -+ -+private: -+ bool is_short() const -+ { return m_repr.s.h.is_short != 0; } -+ -+ size_t short_length() const -+ { return m_repr.short_repr().h.length; } -+ -+ size_t long_length() const -+ { return m_repr.long_repr().length; } -+ -+ void swap_data(string& other) -+ { -+ if (is_short()) { -+ if (other.is_short()) { -+ repr_t tmp(m_repr); -+ m_repr = other.m_repr; -+ other.m_repr = tmp; -+ } else { -+ short_t short_backup(m_repr.short_repr()); -+ m_repr.short_repr().~short_t(); -+ ::new(&m_repr.long_repr()) long_t(other.m_repr.long_repr()); -+ other.m_repr.long_repr().~long_t(); -+ ::new(&other.m_repr.short_repr()) short_t(short_backup); -+ } -+ } else { -+ if (other.is_short()) { -+ short_t short_backup(other.m_repr.short_repr()); -+ other.m_repr.short_repr().~short_t(); -+ ::new(&other.m_repr.long_repr()) long_t(m_repr.long_repr()); -+ m_repr.long_repr().~long_t(); -+ ::new(&m_repr.short_repr()) short_t(short_backup); -+ } else { -+ long_t tmp(m_repr.long_repr()); -+ m_repr.long_repr() = other.m_repr.long_repr(); -+ other.m_repr.long_repr() = tmp; -+ } -+ } -+ } -+ -+ repr_t m_repr; -+}; -+ -+struct foo -+{ -+ __attribute__((noinline)) -+ foo(string str) -+ : m_str{static_cast<string&&>(str)}, -+ m_len{m_str.length()} -+ { } -+ -+ string m_str; -+ size_t m_len; -+}; -+ -+int main() -+{ -+ foo f{"the quick brown fox jumps over the lazy dog"}; -+ if (f.m_len == 0) { -+ __builtin_abort(); -+ } -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/torture/pr71405.C gcc-6-20160721/gcc/testsuite/g++.dg/torture/pr71405.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/torture/pr71405.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/torture/pr71405.C 2016-06-14 14:42:46.000000000 +0000 -@@ -0,0 +1,22 @@ -+// PR tree-optimization/71405 -+// { dg-do compile } -+ -+struct C -+{ -+ C () {} -+ int i; -+}; -+ -+void * -+operator new (__SIZE_TYPE__ x, void *y) -+{ -+ return y; -+} -+ -+int -+main () -+{ -+ int a; -+ new (&a) C; -+ return a; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/torture/pr71448.C gcc-6-20160721/gcc/testsuite/g++.dg/torture/pr71448.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/torture/pr71448.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/torture/pr71448.C 2016-06-14 14:43:42.000000000 +0000 -@@ -0,0 +1,27 @@ -+// PR c++/71448 -+// { dg-do compile } -+// { dg-additional-options "-std=c++11" } -+ -+static constexpr const char foo[] = "foo"; -+static constexpr const char *bar = "bar"; -+ -+static_assert ((foo + 3 - foo) == 3, "check"); -+static_assert (foo + 2 != foo, "check"); -+static_assert (foo + 2 >= foo, "check"); -+static_assert (3 + foo >= foo, "check"); -+static_assert (foo <= foo + 2, "check"); -+static_assert (foo <= 3 + foo, "check"); -+static_assert (foo + 2 > foo, "check"); -+static_assert (3 + foo > foo, "check"); -+static_assert (foo < 2 + foo, "check"); -+static_assert (foo < foo + 3, "check"); -+static_assert ((bar + 3 - bar) == 3, "check"); -+static_assert (bar + 2 != bar, "check"); -+static_assert (2 + bar >= bar, "check"); -+static_assert (bar + 3 >= bar, "check"); -+static_assert (bar <= bar + 2, "check"); -+static_assert (bar <= 3 + bar, "check"); -+static_assert (bar + 2 > bar, "check"); -+static_assert (3 + bar > bar, "check"); -+static_assert (bar < 2 + bar, "check"); -+static_assert (bar < bar + 3, "check"); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/torture/pr71452.C gcc-6-20160721/gcc/testsuite/g++.dg/torture/pr71452.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/torture/pr71452.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/torture/pr71452.C 2016-07-07 07:30:04.000000000 +0000 -@@ -0,0 +1,10 @@ -+// { dg-do run } -+ -+int main() -+{ -+ bool b; -+ *(char *)&b = 123; -+ if (*(char *)&b != 123) -+ __builtin_abort (); -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/torture/pr71874.C gcc-6-20160721/gcc/testsuite/g++.dg/torture/pr71874.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/torture/pr71874.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/torture/pr71874.C 2016-07-19 17:33:58.000000000 +0000 -@@ -0,0 +1,12 @@ -+// PR middle-end/71874 -+// { dg-do run } -+ -+int -+main () -+{ -+ char str[] = "abcdefghijklmnopqrstuvwxyzABCDEF"; -+ __builtin_memmove (str + 20, str + 15, 11); -+ if (__builtin_strcmp (str, "abcdefghijklmnopqrstpqrstuvwxyzF") != 0) -+ __builtin_abort (); -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/ubsan/null-7.C gcc-6-20160721/gcc/testsuite/g++.dg/ubsan/null-7.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/ubsan/null-7.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/ubsan/null-7.C 2016-05-06 10:50:03.000000000 +0000 -@@ -0,0 +1,24 @@ -+// PR sanitizer/70342 -+// { dg-do compile } -+// { dg-options "-fsanitize=null" } -+ -+class A {}; -+class B { -+public: -+ B(A); -+}; -+class C { -+public: -+ C operator<<(B); -+}; -+class D { -+ D(const int &); -+ C m_blackList; -+}; -+D::D(const int &) { -+ m_blackList << A() << A() << A() << A() << A() << A() << A() << A() << A() -+ << A() << A() << A() << A() << A() << A() << A() << A() << A() -+ << A() << A() << A() << A() << A() << A() << A() << A() << A() -+ << A() << A() << A() << A() << A() << A() << A() << A() << A() -+ << A() << A() << A() << A() << A() << A() << A() << A() << A(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/ubsan/pr70847.C gcc-6-20160721/gcc/testsuite/g++.dg/ubsan/pr70847.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/ubsan/pr70847.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/ubsan/pr70847.C 2016-06-06 20:11:54.000000000 +0000 -@@ -0,0 +1,11 @@ -+// PR c++/70847 -+// { dg-do compile } -+ -+struct D { virtual D& f(); }; -+ -+void -+g() -+{ -+ D d; -+ d.f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/ubsan/pr71393.C gcc-6-20160721/gcc/testsuite/g++.dg/ubsan/pr71393.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/ubsan/pr71393.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/ubsan/pr71393.C 2016-06-06 20:11:54.000000000 +0000 -@@ -0,0 +1,14 @@ -+// PR c++/71393 -+// { dg-do compile } -+// { dg-options "-fsanitize=undefined" } -+ -+struct B { B &operator << (long); }; -+struct A { A (); long a, b, c, d, e, f; }; -+ -+A::A () -+{ -+ B q; -+ q << 0 << a << 0 << b << 0 << (b / a) << 0 << c << 0 << (c / a) << 0 -+ << d << 0 << (d / a) << 0 << e << 0 << (e / a) << 0 << f << 0 -+ << (f / a) << 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/vect/simd-clone-6.cc gcc-6-20160721/gcc/testsuite/g++.dg/vect/simd-clone-6.cc ---- gcc-6.1.0/gcc/testsuite/g++.dg/vect/simd-clone-6.cc 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/vect/simd-clone-6.cc 2016-05-24 16:27:12.000000000 +0000 -@@ -0,0 +1,43 @@ -+// PR c++/71257 -+// { dg-require-effective-target vect_simd_clones } -+// { dg-additional-options "-fopenmp-simd -fno-inline" } -+// { dg-additional-options "-mavx" { target avx_runtime } } -+ -+#include "../../gcc.dg/vect/tree-vect.h" -+ -+#define N 1024 -+struct S { int a; }; -+int c[N], e[N], f[N]; -+S d[N]; -+ -+#pragma omp declare simd linear(ref(b, c) : 1) -+int -+foo (int a, S &b, int &c) -+{ -+ return a + b.a + c; -+} -+ -+void -+do_main () -+{ -+ int i; -+ for (i = 0; i < N; i++) -+ { -+ c[i] = i; -+ d[i].a = 2 * i; -+ f[i] = 3 * i; -+ } -+ #pragma omp simd -+ for (i = 0; i < N; i++) -+ e[i] = foo (c[i], d[i], f[i]); -+ for (i = 0; i < N; i++) -+ if (e[i] != 6 * i) -+ __builtin_abort (); -+} -+ -+int -+main () -+{ -+ check_vect (); -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/warn/Wno-narrowing1.C gcc-6-20160721/gcc/testsuite/g++.dg/warn/Wno-narrowing1.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/warn/Wno-narrowing1.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/warn/Wno-narrowing1.C 2016-05-24 16:44:09.000000000 +0000 -@@ -0,0 +1,7 @@ -+// PR c++/69872 -+// { dg-options "-Wall -Wextra -pedantic -Wno-narrowing" } -+ -+struct s { int x, y; }; -+short offsets[1] = { -+ ((char*) &(((struct s*)16)->y) - (char *)16), // { dg-bogus "note" } -+}; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/g++.dg/warn/Wplacement-new-size-3.C gcc-6-20160721/gcc/testsuite/g++.dg/warn/Wplacement-new-size-3.C ---- gcc-6.1.0/gcc/testsuite/g++.dg/warn/Wplacement-new-size-3.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/g++.dg/warn/Wplacement-new-size-3.C 2016-05-31 17:24:22.000000000 +0000 -@@ -0,0 +1,40 @@ -+// PR c++/71306 - bogus -Wplacement-new with an array element -+// { dg-do compile } -+// { dg-options "-Wplacement-new" } -+ -+void* operator new (__SIZE_TYPE__, void *p) { return p; } -+ -+struct S64 { char c [64]; }; -+ -+S64 s2 [2]; -+S64* ps2 [2]; -+S64* ps2_2 [2][2]; -+ -+void* pv2 [2]; -+ -+void f () -+{ -+ char a [2][sizeof (S64)]; -+ -+ new (a) S64; -+ new (a [0]) S64; -+ new (a [1]) S64; -+ -+ // Verify there is no warning with buffers of sufficient size. -+ new (&s2 [0]) S64; -+ new (&s2 [1]) S64; -+ -+ // ..and no warning with pointers to buffers of unknown size. -+ new (ps2 [0]) S64; -+ new (ps2 [1]) S64; -+ -+ // But a warning when using the ps2_2 array itself as opposed -+ // to the pointers it's elements might point to. -+ new (ps2_2 [0]) S64; // { dg-warning "placement new" } -+ new (ps2_2 [1]) S64; // { dg-warning "placement new" } -+ -+ // ..and no warning again with pointers to buffers of unknown -+ // size. -+ new (pv2 [0]) S64; -+ new (pv2 [1]) S64; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.c-torture/compile/pr70916.c gcc-6-20160721/gcc/testsuite/gcc.c-torture/compile/pr70916.c ---- gcc-6.1.0/gcc/testsuite/gcc.c-torture/compile/pr70916.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.c-torture/compile/pr70916.c 2016-05-10 16:59:04.000000000 +0000 -@@ -0,0 +1,28 @@ -+/* PR tree-optimization/70916 */ -+ -+int a, b, c, d, i, k; -+int static *e = &b, *j; -+int **f; -+int static ***g = &f; -+int *h; -+void -+fn1 () -+{ -+ for (;;) -+ { -+ int l[1] = { }; -+ int m = (__UINTPTR_TYPE__) l; -+ for (; d; d--) -+ { -+ int ****n; -+ int *****o = &n; -+ i = a & 7 ? : a; -+ *e = (((*o = &g) != (int ****) g) < h[c], 0) || k; -+ if (*e) -+ { -+ **n = &j; -+ *e = (__UINTPTR_TYPE__) h; -+ } -+ } -+ } -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.c-torture/compile/pr71693.c gcc-6-20160721/gcc/testsuite/gcc.c-torture/compile/pr71693.c ---- gcc-6.1.0/gcc/testsuite/gcc.c-torture/compile/pr71693.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.c-torture/compile/pr71693.c 2016-06-30 09:02:53.000000000 +0000 -@@ -0,0 +1,10 @@ -+/* PR middle-end/71693 */ -+ -+unsigned short v; -+ -+void -+foo (int x) -+{ -+ v = ((((unsigned short) (0x0001 | (x & 0x0070) | 0x0100) & 0x00ffU) << 8) -+ | (((unsigned short) (0x0001 | (x & 0x0070) | 0x0100) >> 8) & 0x00ffU)); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.c-torture/compile/pr71916.c gcc-6-20160721/gcc/testsuite/gcc.c-torture/compile/pr71916.c ---- gcc-6.1.0/gcc/testsuite/gcc.c-torture/compile/pr71916.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.c-torture/compile/pr71916.c 2016-07-19 19:55:54.000000000 +0000 -@@ -0,0 +1,36 @@ -+/* PR rtl-optimization/71916 */ -+ -+int a, b, c, d, f, g; -+short h; -+ -+short -+foo (short p1) -+{ -+ return a >= 2 || p1 > 7 >> a ? p1 : p1 << a; -+} -+ -+void -+bar (void) -+{ -+ for (;;) -+ { -+ int i, j[3]; -+ h = b >= 2 ? d : d >> b; -+ if (foo (f > h ^ c)) -+ { -+ d = 0; -+ while (f <= 2) -+ { -+ char k[2]; -+ for (;;) -+ k[i++] = 7; -+ } -+ } -+ else -+ for (;;) -+ g = j[2]; -+ if (g) -+ for (;;) -+ ; -+ } -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.c-torture/execute/pr71494.c gcc-6-20160721/gcc/testsuite/gcc.c-torture/execute/pr71494.c ---- gcc-6.1.0/gcc/testsuite/gcc.c-torture/execute/pr71494.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.c-torture/execute/pr71494.c 2016-06-14 14:45:23.000000000 +0000 -@@ -0,0 +1,22 @@ -+/* PR middle-end/71494 */ -+ -+int -+main () -+{ -+ void *label = &&out; -+ int i = 0; -+ void test (void) -+ { -+ label = &&out2; -+ goto *label; -+ out2:; -+ i++; -+ } -+ goto *label; -+ out: -+ i += 2; -+ test (); -+ if (i != 3) -+ __builtin_abort (); -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.c-torture/execute/pr71554.c gcc-6-20160721/gcc/testsuite/gcc.c-torture/execute/pr71554.c ---- gcc-6.1.0/gcc/testsuite/gcc.c-torture/execute/pr71554.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.c-torture/execute/pr71554.c 2016-06-16 10:21:43.000000000 +0000 -@@ -0,0 +1,28 @@ -+/* PR target/71554 */ -+ -+int v; -+ -+__attribute__ ((noinline, noclone)) void -+bar (void) -+{ -+ v++; -+} -+ -+__attribute__ ((noinline, noclone)) -+void -+foo (unsigned int x) -+{ -+ signed int y = ((-__INT_MAX__ - 1) / 2); -+ signed int r; -+ if (__builtin_mul_overflow (x, y, &r)) -+ bar (); -+} -+ -+int -+main () -+{ -+ foo (2); -+ if (v) -+ __builtin_abort (); -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.c-torture/execute/pr71626-1.c gcc-6-20160721/gcc/testsuite/gcc.c-torture/execute/pr71626-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.c-torture/execute/pr71626-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.c-torture/execute/pr71626-1.c 2016-07-02 10:21:24.000000000 +0000 -@@ -0,0 +1,19 @@ -+/* PR middle-end/71626 */ -+ -+typedef __INTPTR_TYPE__ V __attribute__((__vector_size__(sizeof (__INTPTR_TYPE__)))); -+ -+__attribute__((noinline, noclone)) V -+foo () -+{ -+ V v = { (__INTPTR_TYPE__) foo }; -+ return v; -+} -+ -+int -+main () -+{ -+ V v = foo (); -+ if (v[0] != (__INTPTR_TYPE__) foo) -+ __builtin_abort (); -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.c-torture/execute/pr71626-2.c gcc-6-20160721/gcc/testsuite/gcc.c-torture/execute/pr71626-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.c-torture/execute/pr71626-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.c-torture/execute/pr71626-2.c 2016-07-02 10:21:24.000000000 +0000 -@@ -0,0 +1,4 @@ -+/* PR middle-end/71626 */ -+/* { dg-additional-options "-fpic" { target fpic } } */ -+ -+#include "pr71626-1.c" -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/align-3.c gcc-6-20160721/gcc/testsuite/gcc.dg/align-3.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/align-3.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/align-3.c 2016-07-07 11:37:24.000000000 +0000 -@@ -0,0 +1,11 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fdump-rtl-expand" } */ -+ -+typedef struct { char a[2]; } __attribute__((__packed__)) TU2; -+unsigned short get16_unaligned(const void *p) { -+ unsigned short v; -+ *(TU2 *)(void *)(&v) = *(const TU2 *)p; -+ return v; -+} -+ -+/* { dg-final { scan-rtl-dump "MEM\[^\n\r\]*A8\\\]" "expand" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/const-float128-ped.c gcc-6-20160721/gcc/testsuite/gcc.dg/const-float128-ped.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/const-float128-ped.c 2008-07-02 18:54:04.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/const-float128-ped.c 2016-07-05 17:54:02.000000000 +0000 -@@ -1,5 +1,7 @@ - /* Test 'q' suffix with -pedantic on __float128 type constants. */ --/* { dg-do compile { target ia64-*-* i?86-*-* x86_64-*-* } } */ -+/* { dg-do compile } */ -+/* { dg-require-effective-target __float128 } */ - /* { dg-options "-pedantic" } */ -+/* { dg-add-options __float128 } */ - - __float128 a = 123.456789q; /* { dg-warning "non-standard suffix on floating constant" } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/const-float128.c gcc-6-20160721/gcc/testsuite/gcc.dg/const-float128.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/const-float128.c 2008-07-02 18:54:04.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/const-float128.c 2016-07-05 17:54:02.000000000 +0000 -@@ -1,6 +1,8 @@ - /* Test 'q' and 'Q' suffixes on __float128 type constants. */ --/* { dg-do compile { target ia64-*-* i?86-*-* x86_64-*-* } } */ -+/* { dg-do compile } */ -+/* { dg-require-effective-target __float128 } */ - /* { dg-options "" } */ -+/* { dg-add-options __float128 } */ - - __float128 a = 123.456789q; - __float128 b = 123.456789Q; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/debug/dwarf2/pr71855.c gcc-6-20160721/gcc/testsuite/gcc.dg/debug/dwarf2/pr71855.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/debug/dwarf2/pr71855.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/debug/dwarf2/pr71855.c 2016-07-19 19:31:24.000000000 +0000 -@@ -0,0 +1,11 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O0 -g -dA" } */ -+ -+// Test that there is only one DW_TAG_unspecified_parameters DIE. -+ -+void -+foo (const char *format, ...) -+{ -+} -+ -+// { dg-final { scan-assembler-times "DIE.*DW_TAG_unspecified_parameters" 1 } } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/goacc/nested-function-1.c gcc-6-20160721/gcc/testsuite/gcc.dg/goacc/nested-function-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/goacc/nested-function-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/goacc/nested-function-1.c 2016-06-10 09:46:18.000000000 +0000 -@@ -0,0 +1,100 @@ -+/* Exercise nested function decomposition, gcc/tree-nested.c. */ -+/* See gcc/testsuite/gfortran.dg/goacc/nested-function-1.f90 for the Fortran -+ version. */ -+ -+int main () -+{ -+#define N 100 -+ int nonlocal_arg; -+ int nonlocal_a[N]; -+ int nonlocal_i; -+ int nonlocal_j; -+ -+ for (int i = 0; i < N; ++i) -+ nonlocal_a[i] = 5; -+ nonlocal_arg = 5; -+ -+ void local () -+ { -+ int local_i; -+ int local_arg; -+ int local_a[N]; -+ int local_j; -+ -+ for (int i = 0; i < N; ++i) -+ local_a[i] = 5; -+ local_arg = 5; -+ -+#pragma acc kernels loop \ -+ gang(num:local_arg) worker(local_arg) vector(local_arg) \ -+ wait async(local_arg) -+ for (local_i = 0; local_i < N; ++local_i) -+ { -+#pragma acc cache (local_a[local_i:5]) -+ local_a[local_i] = 100; -+#pragma acc loop seq tile(*) -+ for (local_j = 0; local_j < N; ++local_j) -+ ; -+#pragma acc loop auto independent tile(1) -+ for (local_j = 0; local_j < N; ++local_j) -+ ; -+ } -+ -+#pragma acc kernels loop \ -+ gang(static:local_arg) worker(local_arg) vector(local_arg) \ -+ wait(local_arg, local_arg + 1, local_arg + 2) async -+ for (local_i = 0; local_i < N; ++local_i) -+ { -+#pragma acc cache (local_a[local_i:4]) -+ local_a[local_i] = 100; -+#pragma acc loop seq tile(1) -+ for (local_j = 0; local_j < N; ++local_j) -+ ; -+#pragma acc loop auto independent tile(*) -+ for (local_j = 0; local_j < N; ++local_j) -+ ; -+ } -+ } -+ -+ void nonlocal () -+ { -+ for (int i = 0; i < N; ++i) -+ nonlocal_a[i] = 5; -+ nonlocal_arg = 5; -+ -+#pragma acc kernels loop \ -+ gang(num:nonlocal_arg) worker(nonlocal_arg) vector(nonlocal_arg) \ -+ wait async(nonlocal_arg) -+ for (nonlocal_i = 0; nonlocal_i < N; ++nonlocal_i) -+ { -+#pragma acc cache (nonlocal_a[nonlocal_i:3]) -+ nonlocal_a[nonlocal_i] = 100; -+#pragma acc loop seq tile(2) -+ for (nonlocal_j = 0; nonlocal_j < N; ++nonlocal_j) -+ ; -+#pragma acc loop auto independent tile(3) -+ for (nonlocal_j = 0; nonlocal_j < N; ++nonlocal_j) -+ ; -+ } -+ -+#pragma acc kernels loop \ -+ gang(static:nonlocal_arg) worker(nonlocal_arg) vector(nonlocal_arg) \ -+ wait(nonlocal_arg, nonlocal_arg + 1, nonlocal_arg + 2) async -+ for (nonlocal_i = 0; nonlocal_i < N; ++nonlocal_i) -+ { -+#pragma acc cache (nonlocal_a[nonlocal_i:2]) -+ nonlocal_a[nonlocal_i] = 100; -+#pragma acc loop seq tile(*) -+ for (nonlocal_j = 0; nonlocal_j < N; ++nonlocal_j) -+ ; -+#pragma acc loop auto independent tile(*) -+ for (nonlocal_j = 0; nonlocal_j < N; ++nonlocal_j) -+ ; -+ } -+ } -+ -+ local (); -+ nonlocal (); -+ -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/goacc/nested-function-2.c gcc-6-20160721/gcc/testsuite/gcc.dg/goacc/nested-function-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/goacc/nested-function-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/goacc/nested-function-2.c 2016-06-10 09:46:18.000000000 +0000 -@@ -0,0 +1,45 @@ -+/* Exercise nested function decomposition, gcc/tree-nested.c. */ -+ -+int -+main (void) -+{ -+ int j = 0, k = 6, l = 7, m = 8; -+ void simple (void) -+ { -+ int i; -+#pragma acc parallel -+ { -+#pragma acc loop -+ for (i = 0; i < m; i+= k) -+ j = (m + i - j) * l; -+ } -+ } -+ void collapse (void) -+ { -+ int x, y, z; -+#pragma acc parallel -+ { -+#pragma acc loop collapse (3) -+ for (x = 0; x < k; x++) -+ for (y = -5; y < l; y++) -+ for (z = 0; z < m; z++) -+ j += x + y + z; -+ } -+ } -+ void reduction (void) -+ { -+ int x, y, z; -+#pragma acc parallel reduction (+:j) -+ { -+#pragma acc loop reduction (+:j) collapse (3) -+ for (x = 0; x < k; x++) -+ for (y = -5; y < l; y++) -+ for (z = 0; z < m; z++) -+ j += x + y + z; -+ } -+ } -+ simple(); -+ collapse(); -+ reduction(); -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/goacc/pr71373.c gcc-6-20160721/gcc/testsuite/gcc.dg/goacc/pr71373.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/goacc/pr71373.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/goacc/pr71373.c 2016-06-10 09:46:18.000000000 +0000 -@@ -0,0 +1,41 @@ -+/* Unintentional nested function usage. */ -+/* Due to missing right braces '}', the following functions are parsed as -+ nested functions. This ran into an ICE. */ -+ -+void foo (void) -+{ -+ #pragma acc parallel -+ { -+ #pragma acc loop independent -+ for (int i = 0; i < 16; i++) -+ ; -+ // Note right brace '}' commented out here. -+ //} -+} -+void bar (void) -+{ -+} -+ -+// Adding right brace '}' here, to make this compile. -+} -+ -+ -+// ..., and the other way round: -+ -+void BAR (void) -+{ -+// Note right brace '}' commented out here. -+//} -+ -+void FOO (void) -+{ -+ #pragma acc parallel -+ { -+ #pragma acc loop independent -+ for (int i = 0; i < 16; i++) -+ ; -+ } -+} -+ -+// Adding right brace '}' here, to make this compile. -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/graphite/pr69067.c gcc-6-20160721/gcc/testsuite/gcc.dg/graphite/pr69067.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/graphite/pr69067.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/graphite/pr69067.c 2016-05-30 15:54:06.000000000 +0000 -@@ -0,0 +1,28 @@ -+/* { dg-do link } */ -+/* { dg-options " -O1 -floop-nest-optimize" } */ -+/* { dg-additional-options "-flto" { target lto } } */ -+ -+int a1, c1, cr, kt; -+int aa[2]; -+ -+int -+ce (void) -+{ -+ while (a1 < 1) -+ { -+ int g8; -+ for (g8 = 0; g8 < 3; ++g8) -+ if (c1 != 0) -+ cr = aa[a1 * 2] = kt; -+ for (c1 = 0; c1 < 2; ++c1) -+ aa[c1] = cr; -+ ++a1; -+ } -+ return 0; -+} -+ -+int -+main (void) -+{ -+ return ce (); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/graphite/pr69068.c gcc-6-20160721/gcc/testsuite/gcc.dg/graphite/pr69068.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/graphite/pr69068.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/graphite/pr69068.c 2016-05-31 07:27:23.000000000 +0000 -@@ -0,0 +1,14 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O1 -fgraphite-identity" } */ -+ -+int qo; -+int zh[2]; -+ -+void -+td (void) -+{ -+ int ly, en; -+ for (ly = 0; ly < 2; ++ly) -+ for (en = 0; en < 2; ++en) -+ zh[en] = ((qo == 0) || (((qo * 2) != 0))) ? 1 : -1; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/graphite/pr70956.c gcc-6-20160721/gcc/testsuite/gcc.dg/graphite/pr70956.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/graphite/pr70956.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/graphite/pr70956.c 2016-05-07 07:02:36.000000000 +0000 -@@ -0,0 +1,4 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fgraphite-identity" } */ -+ -+#include "../tree-ssa/vrp66.c" -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/guality/param-5.c gcc-6-20160721/gcc/testsuite/gcc.dg/guality/param-5.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/guality/param-5.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/guality/param-5.c 2016-06-22 14:36:16.000000000 +0000 -@@ -0,0 +1,38 @@ -+/* { dg-do run } */ -+/* { dg-options "-g" } */ -+/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */ -+ -+typedef __UINTPTR_TYPE__ uintptr_t; -+ -+typedef struct { uintptr_t pa; uintptr_t pb; } fatp_t -+ __attribute__ ((aligned (2 * __alignof__ (uintptr_t)))); -+ -+__attribute__((noinline, noclone)) void -+clear_stack (void) -+{ -+ char a[128 * 1024 + 128]; -+ -+ __builtin_memset (a + 128 * 1024, 0, 128); -+} -+ -+__attribute__((noinline, noclone)) void -+foo (fatp_t str, int count) -+{ -+ char a[128 * 1024]; -+ -+ if (count > 0) -+ foo (str, count - 1); -+ clear_stack (); -+ count--; /* BREAK */ -+} -+ -+int -+main (void) -+{ -+ fatp_t ptr = { 31415927, 27182818 }; -+ foo (ptr, 1); -+ return 0; -+} -+ -+/* { dg-final { gdb-test 26 "str.pa" "31415927" } } */ -+/* { dg-final { gdb-test 26 "str.pb" "27182818" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/ipa/pr70646.c gcc-6-20160721/gcc/testsuite/gcc.dg/ipa/pr70646.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/ipa/pr70646.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/ipa/pr70646.c 2016-05-19 14:56:35.000000000 +0000 -@@ -0,0 +1,40 @@ -+/* { dg-do run } */ -+/* { dg-options "-O2" } */ -+ -+#pragma GCC optimize("no-unit-at-a-time") -+ -+typedef unsigned char u8; -+typedef unsigned long long u64; -+ -+static inline __attribute__((always_inline)) u64 __swab64p(const u64 *p) -+{ -+ return (__builtin_constant_p((u64)(*p)) ? ((u64)( (((u64)(*p) & (u64)0x00000000000000ffULL) << 56) | (((u64)(*p) & (u64)0x000000000000ff00ULL) << 40) | (((u64)(*p) & (u64)0x0000000000ff0000ULL) << 24) | (((u64)(*p) & (u64)0x00000000ff000000ULL) << 8) | (((u64)(*p) & (u64)0x000000ff00000000ULL) >> 8) | (((u64)(*p) & (u64)0x0000ff0000000000ULL) >> 24) | (((u64)(*p) & (u64)0x00ff000000000000ULL) >> 40) | (((u64)(*p) & (u64)0xff00000000000000ULL) >> 56))) : __builtin_bswap64(*p)); -+} -+ -+static inline u64 wwn_to_u64(void *wwn) -+{ -+ return __swab64p(wwn); -+} -+ -+void __attribute__((noinline,noclone)) broken(u64* shost) -+{ -+ u8 node_name[8] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; -+ *shost = wwn_to_u64(node_name); -+} -+ -+void __attribute__((noinline,noclone)) dummy(void) -+{ -+ __builtin_abort(); -+} -+ -+int main(int argc, char* argv[]) -+{ -+ u64 v; -+ -+ broken(&v); -+ -+ if(v != (u64)-1) -+ __builtin_abort(); -+ -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/pr71006.c gcc-6-20160721/gcc/testsuite/gcc.dg/pr71006.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/pr71006.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/pr71006.c 2016-05-12 14:07:13.000000000 +0000 -@@ -0,0 +1,16 @@ -+/* PR target/71006 */ -+/* { dg-do compile } */ -+/* { dg-options "-O1 -ftree-vectorize" } */ -+ -+unsigned char uu, gu, e2; -+ -+void -+fs (void) -+{ -+ char *nq = (char *)&gu, *k4 = (char *)&gu; -+ while (*k4 < 1) -+ { -+ uu += (*nq != 0 || e2 != 0); -+ ++*k4; -+ } -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/pr71071.c gcc-6-20160721/gcc/testsuite/gcc.dg/pr71071.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/pr71071.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/pr71071.c 2016-05-30 14:00:18.000000000 +0000 -@@ -0,0 +1,12 @@ -+/* PR bootstrap/71071 */ -+/* { dg-do compile } * -+/* { dg-options "-O2" } */ -+ -+struct S { unsigned b : 1; } a; -+ -+void -+foo () -+{ -+ if (a.b) -+ ; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/pr71279.c gcc-6-20160721/gcc/testsuite/gcc.dg/pr71279.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/pr71279.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/pr71279.c 2016-05-27 10:43:34.000000000 +0000 -@@ -0,0 +1,14 @@ -+/* PR middle-end/71279 */ -+/* { dg-do compile } */ -+/* { dg-options "-O3" } */ -+/* { dg-additional-options "-march=knl" { target { i?86-*-* x86_64-*-* } } } */ -+ -+extern int a, b; -+long c[1][1][1]; -+long d[1][1]; -+ -+void fn1 () -+{ -+ for (int e = 0; e < b; e = e + 1) -+ *(e + **c) = (a && *d[1]) - 1; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/pr71518.c gcc-6-20160721/gcc/testsuite/gcc.dg/pr71518.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/pr71518.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/pr71518.c 2016-07-11 15:21:20.000000000 +0000 -@@ -0,0 +1,25 @@ -+/* PR tree-optimization/71518 */ -+/* { dg-options "-O3" } */ -+ -+int a, *b[9], c, d, e; -+ -+static int -+fn1 () -+{ -+ for (c = 6; c >= 0; c--) -+ for (d = 0; d < 2; d++) -+ { -+ b[d * 2 + c] = 0; -+ e = a > 1 ? : 0; -+ if (e == 2) -+ return 0; -+ } -+ return 0; -+} -+ -+int -+main () -+{ -+ fn1 (); -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/pr71558.c gcc-6-20160721/gcc/testsuite/gcc.dg/pr71558.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/pr71558.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/pr71558.c 2016-06-21 07:15:36.000000000 +0000 -@@ -0,0 +1,17 @@ -+/* PR tree-optimization/71588 */ -+ -+/* strcpy must not be pure, but make sure we don't ICE even when -+ it is declared incorrectly. */ -+char *strcpy (char *, const char *) __attribute__ ((__pure__)); -+__SIZE_TYPE__ strlen (const char *); -+void *malloc (__SIZE_TYPE__); -+ -+char a[20]; -+ -+char * -+foo (void) -+{ -+ __SIZE_TYPE__ b = strlen (a); -+ char *c = malloc (b); -+ return strcpy (c, a); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/pr71581.c gcc-6-20160721/gcc/testsuite/gcc.dg/pr71581.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/pr71581.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/pr71581.c 2016-06-21 07:13:52.000000000 +0000 -@@ -0,0 +1,24 @@ -+/* PR middle-end/71581 */ -+/* { dg-do compile } */ -+/* { dg-options "-Wuninitialized" } */ -+ -+_Complex float -+f1 (void) -+{ -+ float x; -+ return x; /* { dg-warning "is used uninitialized in this function" } */ -+} -+ -+_Complex double -+f2 (void) -+{ -+ double x; -+ return x; /* { dg-warning "is used uninitialized in this function" } */ -+} -+ -+_Complex int -+f3 (void) -+{ -+ int x; -+ return x; /* { dg-warning "is used uninitialized in this function" } */ -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/pr71685.c gcc-6-20160721/gcc/testsuite/gcc.dg/pr71685.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/pr71685.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/pr71685.c 2016-07-02 10:22:11.000000000 +0000 -@@ -0,0 +1,6 @@ -+/* PR c/71685 */ -+/* { dg-do compile } */ -+/* { dg-options "-std=gnu11" } */ -+ -+extern struct S v, s; -+struct S { int t; int p[]; } v = { 4, 0 }; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/spellcheck-options-12.c gcc-6-20160721/gcc/testsuite/gcc.dg/spellcheck-options-12.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/spellcheck-options-12.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/spellcheck-options-12.c 2016-06-30 14:39:10.000000000 +0000 -@@ -0,0 +1,7 @@ -+/* Verify that we don't include -Wno- variants for options marked -+ with RejectNegative when considering hints for misspelled options -+ (PR driver/71651). */ -+ -+/* { dg-do compile } */ -+/* { dg-options "-fno-stack-protector-explicit" } */ -+/* { dg-error "unrecognized command line option .-fno-stack-protector-explicit.; did you mean .-fstack-protector-explicit.." "" { target *-*-* } 0 } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/torture/float128-cmp-invalid.c gcc-6-20160721/gcc/testsuite/gcc.dg/torture/float128-cmp-invalid.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/torture/float128-cmp-invalid.c 2013-11-14 14:29:12.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/torture/float128-cmp-invalid.c 2016-07-05 17:54:02.000000000 +0000 -@@ -1,7 +1,10 @@ - /* Test for "invalid" exceptions from __float128 comparisons. */ --/* { dg-do run { target i?86-*-* x86_64-*-* ia64-*-* } } */ -+/* { dg-do run } */ - /* { dg-options "" } */ -+/* { dg-require-effective-target __float128 } */ -+/* { dg-require-effective-target base_quadfloat_support } */ - /* { dg-require-effective-target fenv_exceptions } */ -+/* { dg-add-options __float128 } */ - - #include <fenv.h> - #include <stdlib.h> -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/torture/float128-div-underflow.c gcc-6-20160721/gcc/testsuite/gcc.dg/torture/float128-div-underflow.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/torture/float128-div-underflow.c 2013-11-14 14:29:12.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/torture/float128-div-underflow.c 2016-07-05 17:54:02.000000000 +0000 -@@ -1,7 +1,10 @@ - /* Test for spurious underflow from __float128 division. */ --/* { dg-do run { target i?86-*-* x86_64-*-* ia64-*-* } } */ -+/* { dg-do run } */ - /* { dg-options "" } */ -+/* { dg-require-effective-target __float128 } */ -+/* { dg-require-effective-target base_quadfloat_support } */ - /* { dg-require-effective-target fenv_exceptions } */ -+/* { dg-add-options __float128 } */ - - #include <fenv.h> - #include <stdlib.h> -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/torture/float128-extend-nan.c gcc-6-20160721/gcc/testsuite/gcc.dg/torture/float128-extend-nan.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/torture/float128-extend-nan.c 2013-11-14 14:29:12.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/torture/float128-extend-nan.c 2016-07-05 17:54:02.000000000 +0000 -@@ -1,7 +1,10 @@ - /* Test extensions to __float128 quiet signaling NaNs. */ --/* { dg-do run { target i?86-*-* x86_64-*-* ia64-*-* } } */ -+/* { dg-do run } */ - /* { dg-options "-fsignaling-nans" } */ -+/* { dg-require-effective-target __float128 } */ -+/* { dg-require-effective-target base_quadfloat_support } */ - /* { dg-require-effective-target fenv_exceptions } */ -+/* { dg-add-options __float128 } */ - - #include <fenv.h> - #include <float.h> -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode-2.c gcc-6-20160721/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode-2.c 2013-06-21 19:08:01.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode-2.c 2016-07-05 17:54:02.000000000 +0000 -@@ -1,9 +1,12 @@ - /* Test floating-point conversions. __float128 type with TImode: bug - 53317. */ - /* Origin: Joseph Myers <joseph@codesourcery.com> */ --/* { dg-do run { target i?86-*-* x86_64-*-* ia64-*-* } } */ -+/* { dg-do run } */ -+/* { dg-require-effective-target __float128 } */ -+/* { dg-require-effective-target base_quadfloat_support } */ - /* { dg-require-effective-target int128 } */ - /* { dg-options "" } */ -+/* { dg-add-options __float128 } */ - - extern void abort (void); - extern void exit (int); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode-3.c gcc-6-20160721/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode-3.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode-3.c 2013-11-06 22:46:39.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode-3.c 2016-07-05 17:54:02.000000000 +0000 -@@ -1,8 +1,11 @@ - /* Test for correct rounding of conversions from __int128 to - __float128. */ --/* { dg-do run { target i?86-*-* x86_64-*-* ia64-*-* } } */ -+/* { dg-do run } */ -+/* { dg-require-effective-target __float128 } */ -+/* { dg-require-effective-target base_quadfloat_support } */ - /* { dg-require-effective-target int128 } */ - /* { dg-options "-frounding-math" } */ -+/* { dg-add-options __float128 } */ - - #include <fenv.h> - #include <stdlib.h> -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode.c gcc-6-20160721/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode.c 2009-02-12 17:33:18.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode.c 2016-07-05 17:54:02.000000000 +0000 -@@ -1,7 +1,10 @@ - /* Test floating-point conversions. __float128 type with TImode. */ - /* Origin: Joseph Myers <joseph@codesourcery.com> */ --/* { dg-do run { target i?86-*-* x86_64-*-* ia64-*-* } } */ -+/* { dg-do run } */ -+/* { dg-require-effective-target __float128 } */ -+/* { dg-require-effective-target base_quadfloat_support } */ - /* { dg-options "" } */ -+/* { dg-add-options __float128 } */ - - #include "fp-int-convert.h" - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/torture/pr70935.c gcc-6-20160721/gcc/testsuite/gcc.dg/torture/pr70935.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/torture/pr70935.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/torture/pr70935.c 2016-05-10 14:26:37.000000000 +0000 -@@ -0,0 +1,39 @@ -+/* { dg-do compile } */
-+/* { dg-options "-O3 -g" } */
-+
-+int d0, sj, v0, rp, zi;
-+
-+void
-+zn(void)
-+{
-+ if (v0 != 0)
-+ {
-+ int *js, *r3;
-+ int pm, gc;
-+
-+ for (gc = 0; gc < 1; ++gc)
-+ {
-+ sj = 1;
-+ while (sj != 0)
-+ ;
-+ }
-+ r3 = ±
-+ *js = (long)&gc;
-+ka:
-+ for (d0 = 0; d0 < 2; ++d0)
-+ {
-+ d0 = zi;
-+ if (zi)
-+ for (pm = 2; pm != 0; --pm)
-+ ;
-+ }
-+ while (*r3 != 0)
-+ {
-+ while (pm)
-+ ;
-+ ++r3;
-+ }
-+ }
-+ rp = 0;
-+ goto ka;
-+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/torture/pr70941.c gcc-6-20160721/gcc/testsuite/gcc.dg/torture/pr70941.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/torture/pr70941.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/torture/pr70941.c 2016-05-13 13:22:42.000000000 +0000 -@@ -0,0 +1,12 @@ -+/* { dg-do run } */ -+/* { dg-require-effective-target int32plus } */ -+ -+signed char a = 0, b = 0, c = 0, d = 0; -+ -+int main() -+{ -+ a = -(b - 405418259) - ((d && c) ^ 2040097152); -+ if (a != (signed char) -1634678893) -+ __builtin_abort (); -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/torture/pr71423.c gcc-6-20160721/gcc/testsuite/gcc.dg/torture/pr71423.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/torture/pr71423.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/torture/pr71423.c 2016-07-07 07:30:04.000000000 +0000 -@@ -0,0 +1,20 @@ -+/* { dg-do run } */ -+ -+struct S1 -+{ -+ int f1:1; -+}; -+ -+volatile struct S1 b = { 0 }; -+ -+int -+main () -+{ -+ char c = b.f1; -+ b.f1 = 1; -+ -+ if (b.f1 > -1 || c) -+ __builtin_abort (); -+ -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/torture/pr71452.c gcc-6-20160721/gcc/testsuite/gcc.dg/torture/pr71452.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/torture/pr71452.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/torture/pr71452.c 2016-07-07 07:30:04.000000000 +0000 -@@ -0,0 +1,10 @@ -+/* { dg-do run } */ -+ -+int main() -+{ -+ _Bool b; -+ *(char *)&b = 123; -+ if (*(char *)&b != 123) -+ __builtin_abort (); -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/torture/pr71522.c gcc-6-20160721/gcc/testsuite/gcc.dg/torture/pr71522.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/torture/pr71522.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/torture/pr71522.c 2016-07-07 07:30:04.000000000 +0000 -@@ -0,0 +1,27 @@ -+/* { dg-do run } */ -+ -+#if __SIZEOF_LONG_DOUBLE__ == 16 -+#define STR "AAAAAAAAAAAAAAA" -+#elif __SIZEOF_LONG_DOUBLE__ == 12 -+#define STR "AAAAAAAAAAA" -+#elif __SIZEOF_LONG_DOUBLE__ == 8 -+#define STR "AAAAAAA" -+#elif __SIZEOF_LONG_DOUBLE__ == 4 -+#define STR "AAA" -+#else -+#define STR "A" -+#endif -+ -+int main() -+{ -+ long double d; -+ char s[sizeof d]; -+ -+ __builtin_memcpy(&d, STR, sizeof d); -+ __builtin_memcpy(&s, &d, sizeof s); -+ -+ if (__builtin_strncmp (s, STR, sizeof s) != 0) -+ __builtin_abort (); -+ -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/torture/pr71606.c gcc-6-20160721/gcc/testsuite/gcc.dg/torture/pr71606.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/torture/pr71606.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/torture/pr71606.c 2016-07-08 20:20:23.000000000 +0000 -@@ -0,0 +1,11 @@ -+_Complex a; -+void fn1 (); -+ -+int main () { -+ fn1 (a); -+ return 0; -+} -+ -+void fn1 (__complex__ long double p1) { -+ __imag__ p1 = 6.0L; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/tree-ssa/pr70919.c gcc-6-20160721/gcc/testsuite/gcc.dg/tree-ssa/pr70919.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/tree-ssa/pr70919.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/tree-ssa/pr70919.c 2016-05-23 11:27:14.000000000 +0000 -@@ -0,0 +1,46 @@ -+/* { dg-do run } */ -+/* { dg-options "-O" } */ -+ -+#pragma pack(1) -+struct S0 -+{ -+ int f0:24; -+}; -+ -+struct S1 -+{ -+ int f1; -+} a; -+ -+int b, c; -+ -+char -+fn1 (struct S1 p1) -+{ -+ return 0; -+} -+ -+int -+main () -+{ -+ c = fn1 (a); -+ if (b) -+ { -+ struct S0 f[3][9] = -+ { { { 0 }, { 0 }, { 1 }, { 1 }, { 0 }, { 0 }, { 0 }, { 1 }, { 1 } }, -+ { { 0 }, { 0 }, { 1 }, { 1 }, { 0 }, { 0 }, { 0 }, { 1 }, { 1 } }, -+ { { 0 }, { 0 }, { 1 }, { 1 }, { 0 }, { 0 }, { 0 }, { 1 }, { 1 } } -+ }; -+ b = f[1][8].f0; -+ } -+ struct S0 g[3][9] = -+ { { { 0 }, { 0 }, { 1 }, { 1 }, { 0 }, { 0 }, { 0 }, { 1 }, { 1 } }, -+ { { 0 }, { 0 }, { 1 }, { 1 }, { 0 }, { 0 }, { 0 }, { 1 }, { 1 } }, -+ { { 0 }, { 0 }, { 1 }, { 1 }, { 0 }, { 0 }, { 0 }, { 1 }, { 1 } } -+ }; -+ -+ if (g[1][8].f0 != 1) -+ __builtin_abort (); -+ -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/tree-ssa/vrp100.c gcc-6-20160721/gcc/testsuite/gcc.dg/tree-ssa/vrp100.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/tree-ssa/vrp100.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/tree-ssa/vrp100.c 2016-05-19 18:42:31.000000000 +0000 -@@ -0,0 +1,32 @@ -+/* PR tree-optimization/71031 */ -+/* { dg-do compile } */ -+/* { dg-options "-Os" } */ -+ -+int zj; -+int **yr; -+ -+void -+nn (void) -+{ -+ unsigned int od = 4; -+ -+ for (;;) -+ { -+ int lk; -+ -+ for (lk = 0; lk < 2; ++lk) -+ { -+ static int cm; -+ -+ zj = 0; -+ if (od == 0) -+ return; -+ ++od; -+ for (cm = 0; cm < 2; ++cm) -+ { -+ --od; -+ **yr = 0; -+ } -+ } -+ } -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/tree-ssa/vrp101.c gcc-6-20160721/gcc/testsuite/gcc.dg/tree-ssa/vrp101.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/tree-ssa/vrp101.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/tree-ssa/vrp101.c 2016-07-07 07:30:04.000000000 +0000 -@@ -0,0 +1,13 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fdump-tree-optimized" } */ -+ -+int x = 1; -+ -+int main () -+{ -+ int t = (1/(1>=x))>>1; -+ if (t != 0) __builtin_abort(); -+ return 0; -+} -+ -+/* { dg-final { scan-tree-dump "<bb 2>:\[\n\r \]*return 0;" "optimized" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/ubsan/bounds-3.c gcc-6-20160721/gcc/testsuite/gcc.dg/ubsan/bounds-3.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/ubsan/bounds-3.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/ubsan/bounds-3.c 2016-05-06 10:54:12.000000000 +0000 -@@ -0,0 +1,22 @@ -+/* PR sanitizer/70875 */ -+/* { dg-do run } */ -+/* { dg-options "-fsanitize=bounds" } */ -+ -+int -+foo (int n, int k) -+{ -+ struct S -+ { -+ int i[n]; -+ int value; -+ } s[2]; -+ return s[k].value = 0; -+} -+ -+int -+main () -+{ -+ return foo (2, 2); -+} -+ -+/* { dg-output "index 2 out of bounds for type 'S \\\[2\\\]'" } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/vect/pr66636.c gcc-6-20160721/gcc/testsuite/gcc.dg/vect/pr66636.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/vect/pr66636.c 2015-06-23 13:56:34.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/vect/pr66636.c 2016-05-14 09:25:41.000000000 +0000 -@@ -6,7 +6,8 @@ - - struct X { double x; double y; }; - --void foo (struct X *x, double px, int s) -+void __attribute__((noinline,noclone)) -+foo (struct X *x, double px, int s) - { - int i; - for (i = 0; i < 256; ++i) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/vect/pr71259.c gcc-6-20160721/gcc/testsuite/gcc.dg/vect/pr71259.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/vect/pr71259.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/vect/pr71259.c 2016-06-06 18:47:33.000000000 +0000 -@@ -0,0 +1,28 @@ -+/* PR tree-optimization/71259 */ -+/* { dg-do run } */ -+/* { dg-options "-O3" } */ -+/* { dg-additional-options "-mavx" { target avx_runtime } } */ -+ -+#include "tree-vect.h" -+ -+long a, b[1][44][2]; -+long long c[44][17][2]; -+ -+int -+main () -+{ -+ int i, j, k; -+ check_vect (); -+ asm volatile ("" : : : "memory"); -+ for (i = 0; i < 44; i++) -+ for (j = 0; j < 17; j++) -+ for (k = 0; k < 2; k++) -+ c[i][j][k] = (30995740 >= *(k + *(j + *b)) != (a != 8)) - 5105075050047261684; -+ asm volatile ("" : : : "memory"); -+ for (i = 0; i < 44; i++) -+ for (j = 0; j < 17; j++) -+ for (k = 0; k < 2; k++) -+ if (c[i][j][k] != -5105075050047261684) -+ __builtin_abort (); -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/vect/pr71264.c gcc-6-20160721/gcc/testsuite/gcc.dg/vect/pr71264.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/vect/pr71264.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/vect/pr71264.c 2016-07-07 07:30:04.000000000 +0000 -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-require-effective-target vect_int } */ -+ -+typedef unsigned char uint8_t; -+typedef uint8_t footype __attribute__((vector_size(4))); -+ -+void test(uint8_t *ptr, uint8_t *mask) -+{ -+ footype mv; -+ __builtin_memcpy(&mv, mask, sizeof(mv)); -+ for (unsigned i = 0; i < 16; i += 4) -+ { -+ footype temp; -+ __builtin_memcpy(&temp, &ptr[i], sizeof(temp)); -+ temp ^= mv; -+ __builtin_memcpy(&ptr[i], &temp, sizeof(temp)); -+ } -+} -+ -+/* { dg-final { scan-tree-dump "vectorized 1 loops in function" "vect" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/vect/pr71823.c gcc-6-20160721/gcc/testsuite/gcc.dg/vect/pr71823.c ---- gcc-6.1.0/gcc/testsuite/gcc.dg/vect/pr71823.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/vect/pr71823.c 2016-07-11 20:39:44.000000000 +0000 -@@ -0,0 +1,14 @@ -+/* PR tree-optimization/71823 */ -+/* { dg-do compile } */ -+/* { dg-additional-options "-mfma" { target i?86-*-* x86_64-*-* } } */ -+ -+float a[4], b[4]; -+ -+int -+main () -+{ -+ int i; -+ for (i = 0; i < 4; ++i) -+ b[i] = __builtin_fma (1024.0f, 1024.0f, a[i]); -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.dg/vect/tree-vect.h gcc-6-20160721/gcc/testsuite/gcc.dg/vect/tree-vect.h ---- gcc-6.1.0/gcc/testsuite/gcc.dg/vect/tree-vect.h 2015-07-08 20:29:26.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.dg/vect/tree-vect.h 2016-05-14 09:25:41.000000000 +0000 -@@ -32,25 +32,26 @@ - asm volatile (".long 0x10000484"); - #elif defined(__i386__) || defined(__x86_64__) - { -- unsigned int a, b, c, d, want_level, want_c, want_d; -+ unsigned int a, b, c, d, -+ want_level, want_b = 0, want_c = 0, want_d = 0; - - /* Determine what instruction set we've been compiled for, and detect - that we're running with it. This allows us to at least do a compile - check for, e.g. SSE4.1 when the machine only supports SSE2. */ --# ifdef __XOP__ -- want_level = 0x80000001, want_c = bit_XOP, want_d = 0; -+# if defined(__AVX2__) -+ want_level = 7, want_b = bit_AVX2; - # elif defined(__AVX__) -- want_level = 1, want_c = bit_AVX, want_d = 0; -+ want_level = 1, want_c = bit_AVX; - # elif defined(__SSE4_1__) -- want_level = 1, want_c = bit_SSE4_1, want_d = 0; -+ want_level = 1, want_c = bit_SSE4_1; - # elif defined(__SSSE3__) -- want_level = 1, want_c = bit_SSSE3, want_d = 0; -+ want_level = 1, want_c = bit_SSSE3; - # else -- want_level = 1, want_c = 0, want_d = bit_SSE2; -+ want_level = 1, want_d = bit_SSE2; - # endif - - if (!__get_cpuid (want_level, &a, &b, &c, &d) -- || ((c & want_c) | (d & want_d)) == 0) -+ || ((b & want_b) | (c & want_c) | (d & want_d)) == 0) - exit (0); - } - #elif defined(__sparc__) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/aarch64/noplt_3.c gcc-6-20160721/gcc/testsuite/gcc.target/aarch64/noplt_3.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/aarch64/noplt_3.c 2015-08-07 13:26:23.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/aarch64/noplt_3.c 2016-05-18 12:38:15.000000000 +0000 -@@ -16,5 +16,5 @@ - dec (a); - } - --/* { dg-final { scan-assembler-times "br" 2 } } */ -+/* { dg-final { scan-assembler-times "br\t" 2 } } */ - /* { dg-final { scan-assembler-not "b\t" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/aarch64/pr70809_1.c gcc-6-20160721/gcc/testsuite/gcc.target/aarch64/pr70809_1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/aarch64/pr70809_1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/aarch64/pr70809_1.c 2016-05-17 13:08:01.000000000 +0000 -@@ -0,0 +1,18 @@ -+/* PR target/70809. */ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -ftree-vectorize -ffp-contract=off -mtune=xgene1" } */ -+ -+/* Check that vector FMLS is not generated when contraction is disabled. */ -+ -+void -+foo (float *__restrict__ __attribute__ ((aligned (16))) a, -+ float *__restrict__ __attribute__ ((aligned (16))) x, -+ float *__restrict__ __attribute__ ((aligned (16))) y, -+ float *__restrict__ __attribute__ ((aligned (16))) z) -+{ -+ unsigned i = 0; -+ for (i = 0; i < 256; i++) -+ a[i] = x[i] - (y[i] * z[i]); -+} -+ -+/* { dg-final { scan-assembler-not "fmls\tv.*" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/aarch64/simd/vminmaxnm_1.c gcc-6-20160721/gcc/testsuite/gcc.target/aarch64/simd/vminmaxnm_1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/aarch64/simd/vminmaxnm_1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/aarch64/simd/vminmaxnm_1.c 2016-07-08 15:41:31.000000000 +0000 -@@ -0,0 +1,82 @@ -+/* Test the `v[min|max]nm{q}_f*' AArch64 SIMD intrinsic. */ -+ -+/* { dg-do run } */ -+/* { dg-options "-O2" } */ -+ -+#include "arm_neon.h" -+ -+extern void abort (); -+ -+#define CHECK(T, N, R, E) \ -+ {\ -+ int i = 0;\ -+ for (; i < N; i++)\ -+ if (* (T *) &R[i] != * (T *) &E[i])\ -+ abort ();\ -+ } -+ -+int -+main (int argc, char **argv) -+{ -+ float32x2_t f32x2_input1 = vdup_n_f32 (-1.0); -+ float32x2_t f32x2_input2 = vdup_n_f32 (0.0); -+ float32x2_t f32x2_exp_minnm = vdup_n_f32 (-1.0); -+ float32x2_t f32x2_exp_maxnm = vdup_n_f32 (0.0); -+ float32x2_t f32x2_ret_minnm = vminnm_f32 (f32x2_input1, f32x2_input2); -+ float32x2_t f32x2_ret_maxnm = vmaxnm_f32 (f32x2_input1, f32x2_input2); -+ -+ CHECK (uint32_t, 2, f32x2_ret_minnm, f32x2_exp_minnm); -+ CHECK (uint32_t, 2, f32x2_ret_maxnm, f32x2_exp_maxnm); -+ -+ f32x2_input1 = vdup_n_f32 (__builtin_nanf ("")); -+ f32x2_input2 = vdup_n_f32 (1.0); -+ f32x2_exp_minnm = vdup_n_f32 (1.0); -+ f32x2_exp_maxnm = vdup_n_f32 (1.0); -+ f32x2_ret_minnm = vminnm_f32 (f32x2_input1, f32x2_input2); -+ f32x2_ret_maxnm = vmaxnm_f32 (f32x2_input1, f32x2_input2); -+ -+ CHECK (uint32_t, 2, f32x2_ret_minnm, f32x2_exp_minnm); -+ CHECK (uint32_t, 2, f32x2_ret_maxnm, f32x2_exp_maxnm); -+ -+ float32x4_t f32x4_input1 = vdupq_n_f32 (-1024.0); -+ float32x4_t f32x4_input2 = vdupq_n_f32 (77.0); -+ float32x4_t f32x4_exp_minnm = vdupq_n_f32 (-1024.0); -+ float32x4_t f32x4_exp_maxnm = vdupq_n_f32 (77.0); -+ float32x4_t f32x4_ret_minnm = vminnmq_f32 (f32x4_input1, f32x4_input2); -+ float32x4_t f32x4_ret_maxnm = vmaxnmq_f32 (f32x4_input1, f32x4_input2); -+ -+ CHECK (uint32_t, 4, f32x4_ret_minnm, f32x4_exp_minnm); -+ CHECK (uint32_t, 4, f32x4_ret_maxnm, f32x4_exp_maxnm); -+ -+ f32x4_input1 = vdupq_n_f32 (-__builtin_nanf ("")); -+ f32x4_input2 = vdupq_n_f32 (-1.0); -+ f32x4_exp_minnm = vdupq_n_f32 (-1.0); -+ f32x4_exp_maxnm = vdupq_n_f32 (-1.0); -+ f32x4_ret_minnm = vminnmq_f32 (f32x4_input1, f32x4_input2); -+ f32x4_ret_maxnm = vmaxnmq_f32 (f32x4_input1, f32x4_input2); -+ -+ CHECK (uint32_t, 4, f32x4_ret_minnm, f32x4_exp_minnm); -+ CHECK (uint32_t, 4, f32x4_ret_maxnm, f32x4_exp_maxnm); -+ -+ float64x2_t f64x2_input1 = vdupq_n_f64 (1.23); -+ float64x2_t f64x2_input2 = vdupq_n_f64 (4.56); -+ float64x2_t f64x2_exp_minnm = vdupq_n_f64 (1.23); -+ float64x2_t f64x2_exp_maxnm = vdupq_n_f64 (4.56); -+ float64x2_t f64x2_ret_minnm = vminnmq_f64 (f64x2_input1, f64x2_input2); -+ float64x2_t f64x2_ret_maxnm = vmaxnmq_f64 (f64x2_input1, f64x2_input2); -+ -+ CHECK (uint64_t, 2, f64x2_ret_minnm, f64x2_exp_minnm); -+ CHECK (uint64_t, 2, f64x2_ret_maxnm, f64x2_exp_maxnm); -+ -+ f64x2_input1 = vdupq_n_f64 (-__builtin_nan ("")); -+ f64x2_input2 = vdupq_n_f64 (1.0); -+ f64x2_exp_minnm = vdupq_n_f64 (1.0); -+ f64x2_exp_maxnm = vdupq_n_f64 (1.0); -+ f64x2_ret_minnm = vminnmq_f64 (f64x2_input1, f64x2_input2); -+ f64x2_ret_maxnm = vmaxnmq_f64 (f64x2_input1, f64x2_input2); -+ -+ CHECK (uint64_t, 2, f64x2_ret_minnm, f64x2_exp_minnm); -+ CHECK (uint64_t, 2, f64x2_ret_maxnm, f64x2_exp_maxnm); -+ -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/aarch64/tail_indirect_call_1.c gcc-6-20160721/gcc/testsuite/gcc.target/aarch64/tail_indirect_call_1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/aarch64/tail_indirect_call_1.c 2014-05-23 12:13:56.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/aarch64/tail_indirect_call_1.c 2016-05-18 12:38:15.000000000 +0000 -@@ -3,8 +3,8 @@ - - typedef void FP (int); - --/* { dg-final { scan-assembler "br" } } */ --/* { dg-final { scan-assembler-not "blr" } } */ -+/* { dg-final { scan-assembler-times "br\t" 2 } } */ -+/* { dg-final { scan-assembler-not "blr\t" } } */ - void - f1 (FP fp, int n) - { -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/arm/interrupt-1.c gcc-6-20160721/gcc/testsuite/gcc.target/arm/interrupt-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/arm/interrupt-1.c 2015-11-06 18:43:15.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/arm/interrupt-1.c 2016-05-12 12:47:03.000000000 +0000 -@@ -1,8 +1,8 @@ - /* Verify that prologue and epilogue are correct for functions with - __attribute__ ((interrupt)). */ --/* { dg-do compile } */ -+/* { dg-do assemble } */ - /* { dg-require-effective-target arm_nothumb } */ --/* { dg-options "-O0 -marm" } */ -+/* { dg-options "-O0 -marm -save-temps" } */ - - /* This test is not valid when -mthumb. */ - extern void bar (int); -@@ -14,4 +14,4 @@ - } - - /* { dg-final { scan-assembler "push\t{r0, r1, r2, r3, r4, fp, ip, lr}" } } */ --/* { dg-final { scan-assembler "pop\t{r0, r1, r2, r3, r4, fp, ip, pc}\\^" } } */ -+/* { dg-final { scan-assembler "ldmfd\tsp!, {r0, r1, r2, r3, r4, fp, ip, pc}\\^" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/arm/interrupt-2.c gcc-6-20160721/gcc/testsuite/gcc.target/arm/interrupt-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/arm/interrupt-2.c 2015-11-06 18:43:15.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/arm/interrupt-2.c 2016-05-12 12:47:03.000000000 +0000 -@@ -1,8 +1,8 @@ - /* Verify that prologue and epilogue are correct for functions with - __attribute__ ((interrupt)). */ --/* { dg-do compile } */ -+/* { dg-do assemble } */ - /* { dg-require-effective-target arm_nothumb } */ --/* { dg-options "-O1 -marm" } */ -+/* { dg-options "-O1 -marm -save-temps" } */ - - /* This test is not valid when -mthumb. */ - extern void bar (int); -@@ -16,4 +16,4 @@ - } - - /* { dg-final { scan-assembler "push\t{r0, r1, r2, r3, r4, r5, ip, lr}" } } */ --/* { dg-final { scan-assembler "pop\t{r0, r1, r2, r3, r4, r5, ip, pc}\\^" } } */ -+/* { dg-final { scan-assembler "ldmfd\tsp!, {r0, r1, r2, r3, r4, r5, ip, pc}\\^" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/arm/pr70830.c gcc-6-20160721/gcc/testsuite/gcc.target/arm/pr70830.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/arm/pr70830.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/arm/pr70830.c 2016-05-12 12:47:03.000000000 +0000 -@@ -0,0 +1,14 @@ -+/* PR target/70830. */ -+/* { dg-do assemble } */ -+/* { dg-require-effective-target arm_arm_ok } */ -+/* { dg-options "-Os -marm -save-temps" } */ -+ -+/* This test is not valid when -mthumb. */ -+ -+extern void prints (char *); -+ -+void __attribute__ ((interrupt ("IRQ"))) dm3730_IRQHandler(void) -+{ -+ prints("IRQ" ); -+} -+/* { dg-final { scan-assembler "ldmfd\tsp!, {r0, r1, r2, r3, ip, pc}\\^" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/arm/pr71056.c gcc-6-20160721/gcc/testsuite/gcc.target/arm/pr71056.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/arm/pr71056.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/arm/pr71056.c 2016-05-31 08:29:39.000000000 +0000 -@@ -0,0 +1,32 @@ -+/* PR target/71056. */ -+/* { dg-do compile } */ -+/* { dg-require-effective-target arm_vfp3_ok } */ -+/* { dg-options "-O3 -mfpu=vfpv3" } */ -+ -+/* Check that compiling for a non-NEON target doesn't try to introduce -+ a NEON vectorized builtin. */ -+ -+extern char *buff; -+int f2 (); -+struct T1 -+{ -+ int reserved[2]; -+ unsigned int ip; -+ unsigned short cs; -+ unsigned short rsrv2; -+}; -+void -+f3 (const char *p) -+{ -+ struct T1 x; -+ __builtin_memcpy (&x, p, sizeof (struct T1)); -+ x.reserved[0] = __builtin_bswap32 (x.reserved[0]); -+ x.reserved[1] = __builtin_bswap32 (x.reserved[1]); -+ x.ip = __builtin_bswap32 (x.ip); -+ x.cs = x.cs << 8 | x.cs >> 8; -+ x.rsrv2 = x.rsrv2 << 8 | x.rsrv2 >> 8; -+ if (f2 ()) -+ { -+ __builtin_memcpy (buff, "\n", 1); -+ } -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/avr/pr50739.c gcc-6-20160721/gcc/testsuite/gcc.target/avr/pr50739.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/avr/pr50739.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/avr/pr50739.c 2016-07-06 13:53:36.000000000 +0000 -@@ -0,0 +1,7 @@ -+/* { dg-do compile } */ -+/* { dg-options "-fmerge-all-constants" } */ -+ -+char *ca = "123"; -+ -+const char a[] __attribute__((__progmem__))= "a"; -+const char b[] __attribute__((__progmem__))= "b"; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/avr/pr71103.c gcc-6-20160721/gcc/testsuite/gcc.target/avr/pr71103.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/avr/pr71103.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/avr/pr71103.c 2016-06-20 11:20:27.000000000 +0000 -@@ -0,0 +1,16 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O1" } */ -+ -+struct ResponseStruct{ -+ unsigned char responseLength; -+ char *response; -+}; -+ -+static char response[5]; -+struct ResponseStruct something(){ -+ struct ResponseStruct returnValue; -+ returnValue.responseLength = 5; -+ returnValue.response = response; -+ return returnValue; -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/avr/torture/pr71103-2.c gcc-6-20160721/gcc/testsuite/gcc.target/avr/torture/pr71103-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/avr/torture/pr71103-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/avr/torture/pr71103-2.c 2016-06-20 11:20:27.000000000 +0000 -@@ -0,0 +1,118 @@ -+/* Use -g0 so that this test case doesn't just fail because -+ of PR52472. */ -+ -+/* { dg-do compile } */ -+/* { dg-options "-std=gnu99 -g0" } */ -+ -+struct S12 -+{ -+ char c; -+ const char *p; -+}; -+ -+struct S12f -+{ -+ char c; -+ struct S12f (*f)(void); -+}; -+ -+struct S12labl -+{ -+ char c; -+ void **labl; -+}; -+ -+struct S121 -+{ -+ char c; -+ const char *p; -+ char d; -+}; -+ -+const char str[5] = "abcd"; -+ -+struct S12 test_S12_0 (void) -+{ -+ struct S12 s; -+ s.c = 'A'; -+ s.p = str; -+ return s; -+} -+ -+struct S12 test_S12_4 (void) -+{ -+ struct S12 s; -+ s.c = 'A'; -+ s.p = str + 4; -+ return s; -+} -+ -+struct S12f test_S12f (void) -+{ -+ struct S12f s; -+ s.c = 'A'; -+ s.f = test_S12f; -+ return s; -+} -+ -+struct S121 test_S121 (void) -+{ -+ struct S121 s; -+ s.c = 'c'; -+ s.p = str + 4; -+ s.d = 'd'; -+ return s; -+} -+ -+extern void use_S12lab (struct S12labl*); -+ -+struct S12labl test_S12lab (void) -+{ -+ struct S12labl s; -+labl:; -+ s.c = 'A'; -+ s.labl = &&labl; -+ return s; -+} -+ -+#ifdef __MEMX -+ -+struct S13 -+{ -+ char c; -+ const __memx char *p; -+}; -+ -+const __memx char str_x[] = "abcd"; -+ -+struct S13 test_S13_0 (void) -+{ -+ struct S13 s; -+ s.c = 'A'; -+ s.p = str_x; -+ return s; -+} -+ -+struct S13 test_S13_4a (void) -+{ -+ struct S13 s; -+ s.c = 'A'; -+ s.p = str_x + 4; -+ return s; -+} -+ -+#ifdef __FLASH1 -+ -+const __flash1 char str_1[] = "abcd"; -+ -+struct S13 test_13_4b (void) -+{ -+ struct S13 s; -+ s.c = 'A'; -+ s.p = str_1 + 4; -+ return s; -+} -+ -+#endif /* have __flash1 */ -+#endif /* have __memx */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx-pr71559.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx-pr71559.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx-pr71559.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx-pr71559.c 2016-07-02 10:18:27.000000000 +0000 -@@ -0,0 +1,8 @@ -+/* PR target/71559 */ -+/* { dg-do run { target avx } } */ -+/* { dg-options "-O2 -ftree-vectorize -mavx" } */ -+ -+#include "avx-check.h" -+#define PR71559_TEST avx_test -+ -+#include "sse2-pr71559.c" -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-ceil-vec-1.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-ceil-vec-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-ceil-vec-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-ceil-vec-1.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,52 @@ -+/* { dg-do run } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+/* { dg-require-effective-target avx512f } */ -+/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ -+ -+#define __NO_MATH_INLINES -+#include <math.h> -+#include "avx512f-check.h" -+ -+#define NUM 64 -+ -+static void -+__attribute__((__target__("fpmath=sse"))) -+init_src (double *src) -+{ -+ int i, sign = 1; -+ double f = rand (); -+ -+ for (i = 0; i < NUM; i++) -+ { -+ src[i] = (i + 1) * f * M_PI * sign; -+ if (i < (NUM / 2)) -+ { -+ if ((i % 6) == 0) -+ f = f * src[i]; -+ } -+ else if (i == (NUM / 2)) -+ f = rand (); -+ else if ((i % 6) == 0) -+ f = 1 / (f * (i + 1) * src[i] * M_PI * sign); -+ sign = -sign; -+ } -+} -+ -+static void -+__attribute__((__target__("fpmath=387"))) -+avx512f_test (void) -+{ -+ double a[NUM]; -+ double r[NUM]; -+ int i; -+ -+ init_src (a); -+ -+ for (i = 0; i < NUM; i++) -+ r[i] = ceil (a[i]); -+ -+ /* check results: */ -+ for (i = 0; i < NUM; i++) -+ if (r[i] != ceil (a[i])) -+ abort(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-ceil-vec-2.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-ceil-vec-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-ceil-vec-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-ceil-vec-2.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,6 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+ -+#include "avx512f-ceil-vec-1.c" -+ -+/* { dg-final { scan-assembler-times "vrndscalepd\[^\n\]+zmm\[0-9\](?:\n|\[ \\t\]+#)" 1 } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-ceilf-sfix-vec-1.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-ceilf-sfix-vec-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-ceilf-sfix-vec-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-ceilf-sfix-vec-1.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,52 @@ -+/* { dg-do run } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+/* { dg-require-effective-target avx512f } */ -+/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ -+ -+#define __NO_MATH_INLINES -+#include <math.h> -+#include "avx512f-check.h" -+ -+#define NUM 64 -+ -+static void -+__attribute__((__target__("fpmath=sse"))) -+init_src (float *src) -+{ -+ int i, sign = 1; -+ float f = rand (); -+ -+ for (i = 0; i < NUM; i++) -+ { -+ src[i] = (i + 1) * f * M_PI * sign; -+ if (i < (NUM / 2)) -+ { -+ if ((i % 6) == 0) -+ f = f * src[i]; -+ } -+ else if (i == (NUM / 2)) -+ f = rand (); -+ else if ((i % 6) == 0) -+ f = 1 / (f * (i + 1) * src[i] * M_PI * sign); -+ sign = -sign; -+ } -+} -+ -+static void -+__attribute__((__target__("fpmath=387"))) -+avx512f_test (void) -+{ -+ float a[NUM]; -+ int r[NUM]; -+ int i; -+ -+ init_src (a); -+ -+ for (i = 0; i < NUM; i++) -+ r[i] = (int) ceilf (a[i]); -+ -+ /* check results: */ -+ for (i = 0; i < NUM; i++) -+ if (r[i] != (int) ceilf (a[i])) -+ abort(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-ceilf-sfix-vec-2.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-ceilf-sfix-vec-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-ceilf-sfix-vec-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-ceilf-sfix-vec-2.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,7 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+ -+#include "avx512f-ceilf-sfix-vec-1.c" -+ -+/* { dg-final { scan-assembler-times "vrndscaleps\[^\n\]+zmm\[0-9\](?:\n|\[ \\t\]+#)" 1 } } */ -+/* { dg-final { scan-assembler-times "vcvttps2dq\[^\n\]+zmm\[0-9\].{7}(?:\n|\[ \\t\]+#)" 1 } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-ceilf-vec-1.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-ceilf-vec-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-ceilf-vec-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-ceilf-vec-1.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,52 @@ -+/* { dg-do run } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+/* { dg-require-effective-target avx512f } */ -+/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ -+ -+#define __NO_MATH_INLINES -+#include <math.h> -+#include "avx512f-check.h" -+ -+#define NUM 64 -+ -+static void -+__attribute__((__target__("fpmath=sse"))) -+init_src (float *src) -+{ -+ int i, sign = 1; -+ float f = rand (); -+ -+ for (i = 0; i < NUM; i++) -+ { -+ src[i] = (i + 1) * f * M_PI * sign; -+ if (i < (NUM / 2)) -+ { -+ if ((i % 6) == 0) -+ f = f * src[i]; -+ } -+ else if (i == (NUM / 2)) -+ f = rand (); -+ else if ((i % 6) == 0) -+ f = 1 / (f * (i + 1) * src[i] * M_PI * sign); -+ sign = -sign; -+ } -+} -+ -+static void -+__attribute__((__target__("fpmath=387"))) -+avx512f_test (void) -+{ -+ float a[NUM]; -+ float r[NUM]; -+ int i; -+ -+ init_src (a); -+ -+ for (i = 0; i < NUM; i++) -+ r[i] = ceilf (a[i]); -+ -+ /* check results: */ -+ for (i = 0; i < NUM; i++) -+ if (r[i] != ceilf (a[i])) -+ abort(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-ceilf-vec-2.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-ceilf-vec-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-ceilf-vec-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-ceilf-vec-2.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,6 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+ -+#include "avx512f-ceilf-vec-1.c" -+ -+/* { dg-final { scan-assembler-times "vrndscaleps\[^\n\]+zmm\[0-9\](?:\n|\[ \\t\]+#)" 1 } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-floor-vec-1.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-floor-vec-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-floor-vec-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-floor-vec-1.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,52 @@ -+/* { dg-do run } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+/* { dg-require-effective-target avx512f } */ -+/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ -+ -+#define __NO_MATH_INLINES -+#include <math.h> -+#include "avx512f-check.h" -+ -+#define NUM 64 -+ -+static void -+__attribute__((__target__("fpmath=sse"))) -+init_src (double *src) -+{ -+ int i, sign = 1; -+ double f = rand (); -+ -+ for (i = 0; i < NUM; i++) -+ { -+ src[i] = (i + 1) * f * M_PI * sign; -+ if (i < (NUM / 2)) -+ { -+ if ((i % 6) == 0) -+ f = f * src[i]; -+ } -+ else if (i == (NUM / 2)) -+ f = rand (); -+ else if ((i % 6) == 0) -+ f = 1 / (f * (i + 1) * src[i] * M_PI * sign); -+ sign = -sign; -+ } -+} -+ -+static void -+__attribute__((__target__("fpmath=387"))) -+avx512f_test (void) -+{ -+ double a[NUM]; -+ double r[NUM]; -+ int i; -+ -+ init_src (a); -+ -+ for (i = 0; i < NUM; i++) -+ r[i] = floor (a[i]); -+ -+ /* check results: */ -+ for (i = 0; i < NUM; i++) -+ if (r[i] != floor (a[i])) -+ abort(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-floor-vec-2.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-floor-vec-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-floor-vec-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-floor-vec-2.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,6 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+ -+#include "avx512f-floor-vec-1.c" -+ -+/* { dg-final { scan-assembler-times "vrndscalepd\[^\n\]+zmm\[0-9\](?:\n|\[ \\t\]+#)" 1 } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-floorf-sfix-vec-1.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-floorf-sfix-vec-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-floorf-sfix-vec-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-floorf-sfix-vec-1.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,52 @@ -+/* { dg-do run } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+/* { dg-require-effective-target avx512f } */ -+/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ -+ -+#define __NO_MATH_INLINES -+#include <math.h> -+#include "avx512f-check.h" -+ -+#define NUM 64 -+ -+static void -+__attribute__((__target__("fpmath=sse"))) -+init_src (float *src) -+{ -+ int i, sign = 1; -+ float f = rand (); -+ -+ for (i = 0; i < NUM; i++) -+ { -+ src[i] = (i + 1) * f * M_PI * sign; -+ if (i < (NUM / 2)) -+ { -+ if ((i % 6) == 0) -+ f = f * src[i]; -+ } -+ else if (i == (NUM / 2)) -+ f = rand (); -+ else if ((i % 6) == 0) -+ f = 1 / (f * (i + 1) * src[i] * M_PI * sign); -+ sign = -sign; -+ } -+} -+ -+static void -+__attribute__((__target__("fpmath=387"))) -+avx512f_test (void) -+{ -+ float a[NUM]; -+ int r[NUM]; -+ int i; -+ -+ init_src (a); -+ -+ for (i = 0; i < NUM; i++) -+ r[i] = (int) floorf (a[i]); -+ -+ /* check results: */ -+ for (i = 0; i < NUM; i++) -+ if (r[i] != (int) floorf (a[i])) -+ abort(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-floorf-sfix-vec-2.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-floorf-sfix-vec-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-floorf-sfix-vec-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-floorf-sfix-vec-2.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,7 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+ -+#include "avx512f-floorf-sfix-vec-1.c" -+ -+/* { dg-final { scan-assembler-times "vrndscaleps\[^\n\]+zmm\[0-9\](?:\n|\[ \\t\]+#)" 1 } } */ -+/* { dg-final { scan-assembler-times "vcvttps2dq\[^\n\]+zmm\[0-9\].{7}(?:\n|\[ \\t\]+#)" 1 } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-floorf-vec-1.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-floorf-vec-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-floorf-vec-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-floorf-vec-1.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,52 @@ -+/* { dg-do run } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+/* { dg-require-effective-target avx512f } */ -+/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ -+ -+#define __NO_MATH_INLINES -+#include <math.h> -+#include "avx512f-check.h" -+ -+#define NUM 64 -+ -+static void -+__attribute__((__target__("fpmath=sse"))) -+init_src (float *src) -+{ -+ int i, sign = 1; -+ float f = rand (); -+ -+ for (i = 0; i < NUM; i++) -+ { -+ src[i] = (i + 1) * f * M_PI * sign; -+ if (i < (NUM / 2)) -+ { -+ if ((i % 6) == 0) -+ f = f * src[i]; -+ } -+ else if (i == (NUM / 2)) -+ f = rand (); -+ else if ((i % 6) == 0) -+ f = 1 / (f * (i + 1) * src[i] * M_PI * sign); -+ sign = -sign; -+ } -+} -+ -+static void -+__attribute__((__target__("fpmath=387"))) -+avx512f_test (void) -+{ -+ float a[NUM]; -+ float r[NUM]; -+ int i; -+ -+ init_src (a); -+ -+ for (i = 0; i < NUM; i++) -+ r[i] = floorf (a[i]); -+ -+ /* check results: */ -+ for (i = 0; i < NUM; i++) -+ if (r[i] != floorf (a[i])) -+ abort(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-floorf-vec-2.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-floorf-vec-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-floorf-vec-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-floorf-vec-2.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,6 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+ -+#include "avx512f-floorf-vec-1.c" -+ -+/* { dg-final { scan-assembler-times "vrndscaleps\[^\n\]+zmm\[0-9\](?:\n|\[ \\t\]+#)" 1 } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-pr71559.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-pr71559.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-pr71559.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-pr71559.c 2016-07-02 10:18:27.000000000 +0000 -@@ -0,0 +1,8 @@ -+/* PR target/71559 */ -+/* { dg-do run { target avx512f } } */ -+/* { dg-options "-O2 -ftree-vectorize -mavx512f" } */ -+ -+#include "avx512f-check.h" -+#define PR71559_TEST avx512f_test -+ -+#include "sse2-pr71559.c" -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-rint-sfix-vec-1.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-rint-sfix-vec-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-rint-sfix-vec-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-rint-sfix-vec-1.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,52 @@ -+/* { dg-do run } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+/* { dg-require-effective-target avx512f } */ -+/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ -+ -+#define __NO_MATH_INLINES -+#include <math.h> -+#include "avx512f-check.h" -+ -+#define NUM 64 -+ -+static void -+__attribute__((__target__("fpmath=sse"))) -+init_src (double *src) -+{ -+ int i, sign = 1; -+ double f = rand (); -+ -+ for (i = 0; i < NUM; i++) -+ { -+ src[i] = (i + 1) * f * M_PI * sign; -+ if (i < (NUM / 2)) -+ { -+ if ((i % 6) == 0) -+ f = f * src[i]; -+ } -+ else if (i == (NUM / 2)) -+ f = rand (); -+ else if ((i % 6) == 0) -+ f = 1 / (f * (i + 1) * src[i] * M_PI * sign); -+ sign = -sign; -+ } -+} -+ -+static void -+__attribute__((__target__("fpmath=387"))) -+avx512f_test (void) -+{ -+ double a[NUM]; -+ int r[NUM]; -+ int i; -+ -+ init_src (a); -+ -+ for (i = 0; i < NUM; i++) -+ r[i] = (int) rint (a[i]); -+ -+ /* check results: */ -+ for (i = 0; i < NUM; i++) -+ if (r[i] != (int) rint (a[i])) -+ abort(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-rint-sfix-vec-2.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-rint-sfix-vec-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-rint-sfix-vec-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-rint-sfix-vec-2.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,7 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+ -+#include "avx512f-rint-sfix-vec-1.c" -+ -+/* { dg-final { scan-assembler-times "vcvtpd2dq\[^\n\]+ymm\[0-9\](?:\n|\[ \\t\]+#)" 2 } } */ -+/* { dg-final { scan-assembler-times "vinserti64x4\[^\n\]+zmm\[0-9\](?:\n|\[ \\t\]+#)" 1 } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-rintf-sfix-vec-1.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-rintf-sfix-vec-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-rintf-sfix-vec-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-rintf-sfix-vec-1.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,52 @@ -+/* { dg-do run } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+/* { dg-require-effective-target avx512f } */ -+/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ -+ -+#define __NO_MATH_INLINES -+#include <math.h> -+#include "avx512f-check.h" -+ -+#define NUM 64 -+ -+static void -+__attribute__((__target__("fpmath=sse"))) -+init_src (float *src) -+{ -+ int i, sign = 1; -+ float f = rand (); -+ -+ for (i = 0; i < NUM; i++) -+ { -+ src[i] = (i + 1) * f * M_PI * sign; -+ if (i < (NUM / 2)) -+ { -+ if ((i % 6) == 0) -+ f = f * src[i]; -+ } -+ else if (i == (NUM / 2)) -+ f = rand (); -+ else if ((i % 6) == 0) -+ f = 1 / (f * (i + 1) * src[i] * M_PI * sign); -+ sign = -sign; -+ } -+} -+ -+static void -+__attribute__((__target__("fpmath=387"))) -+avx512f_test (void) -+{ -+ float a[NUM]; -+ int r[NUM]; -+ int i; -+ -+ init_src (a); -+ -+ for (i = 0; i < NUM; i++) -+ r[i] = (int) rintf (a[i]); -+ -+ /* check results: */ -+ for (i = 0; i < NUM; i++) -+ if (r[i] != (int) rintf (a[i])) -+ abort(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-rintf-sfix-vec-2.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-rintf-sfix-vec-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-rintf-sfix-vec-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-rintf-sfix-vec-2.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,6 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+ -+#include "avx512f-rintf-sfix-vec-1.c" -+ -+/* { dg-final { scan-assembler-times "vcvtps2dq\[^\n\]+zmm\[0-9\](?:\n|\[ \\t\]+#)" 1 } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-round-sfix-vec-1.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-round-sfix-vec-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-round-sfix-vec-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-round-sfix-vec-1.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,52 @@ -+/* { dg-do run } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+/* { dg-require-effective-target avx512f } */ -+/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ -+ -+#define __NO_MATH_INLINES -+#include <math.h> -+#include "avx512f-check.h" -+ -+#define NUM 64 -+ -+static void -+__attribute__((__target__("fpmath=sse"))) -+init_src (double *src) -+{ -+ int i, sign = 1; -+ double f = rand (); -+ -+ for (i = 0; i < NUM; i++) -+ { -+ src[i] = (i + 1) * f * M_PI * sign; -+ if (i < (NUM / 2)) -+ { -+ if ((i % 6) == 0) -+ f = f * src[i]; -+ } -+ else if (i == (NUM / 2)) -+ f = rand (); -+ else if ((i % 6) == 0) -+ f = 1 / (f * (i + 1) * src[i] * M_PI * sign); -+ sign = -sign; -+ } -+} -+ -+static void -+__attribute__((__target__("fpmath=387"))) -+avx512f_test (void) -+{ -+ double a[NUM]; -+ int r[NUM]; -+ int i; -+ -+ init_src (a); -+ -+ for (i = 0; i < NUM; i++) -+ r[i] = (int) round (a[i]); -+ -+ /* check results: */ -+ for (i = 0; i < NUM; i++) -+ if (r[i] != (int) round (a[i])) -+ abort(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-round-sfix-vec-2.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-round-sfix-vec-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-round-sfix-vec-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-round-sfix-vec-2.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,7 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+ -+#include "avx512f-round-sfix-vec-1.c" -+ -+/* { dg-final { scan-assembler-times "vrndscalepd\[^\n\]+zmm\[0-9\](?:\n|\[ \\t\]+#)" 2 } } */ -+/* { dg-final { scan-assembler-times "vcvttpd2dq\[^\n\]+zmm\[0-9\].{7}(?:\n|\[ \\t\]+#)" 2 } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-roundf-sfix-vec-1.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-roundf-sfix-vec-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-roundf-sfix-vec-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-roundf-sfix-vec-1.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,52 @@ -+/* { dg-do run } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+/* { dg-require-effective-target avx512f } */ -+/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ -+ -+#define __NO_MATH_INLINES -+#include <math.h> -+#include "avx512f-check.h" -+ -+#define NUM 64 -+ -+static void -+__attribute__((__target__("fpmath=sse"))) -+init_src (float *src) -+{ -+ int i, sign = 1; -+ float f = rand (); -+ -+ for (i = 0; i < NUM; i++) -+ { -+ src[i] = (i + 1) * f * M_PI * sign; -+ if (i < (NUM / 2)) -+ { -+ if ((i % 6) == 0) -+ f = f * src[i]; -+ } -+ else if (i == (NUM / 2)) -+ f = rand (); -+ else if ((i % 6) == 0) -+ f = 1 / (f * (i + 1) * src[i] * M_PI * sign); -+ sign = -sign; -+ } -+} -+ -+static void -+__attribute__((__target__("fpmath=387"))) -+avx512f_test (void) -+{ -+ float a[NUM]; -+ int r[NUM]; -+ int i; -+ -+ init_src (a); -+ -+ for (i = 0; i < NUM; i++) -+ r[i] = (int) roundf (a[i]); -+ -+ /* check results: */ -+ for (i = 0; i < NUM; i++) -+ if (r[i] != (int) roundf (a[i])) -+ abort(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-roundf-sfix-vec-2.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-roundf-sfix-vec-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-roundf-sfix-vec-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-roundf-sfix-vec-2.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,7 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+ -+#include "avx512f-roundf-sfix-vec-1.c" -+ -+/* { dg-final { scan-assembler-times "vrndscaleps\[^\n\]+zmm\[0-9\](?:\n|\[ \\t\]+#)" 1 } } */ -+/* { dg-final { scan-assembler-times "vcvttps2dq\[^\n\]+zmm\[0-9\].{7}(?:\n|\[ \\t\]+#)" 1 } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-trunc-vec-1.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-trunc-vec-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-trunc-vec-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-trunc-vec-1.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,52 @@ -+/* { dg-do run } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+/* { dg-require-effective-target avx512f } */ -+/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ -+ -+#define __NO_MATH_INLINES -+#include <math.h> -+#include "avx512f-check.h" -+ -+#define NUM 64 -+ -+static void -+__attribute__((__target__("fpmath=sse"))) -+init_src (double *src) -+{ -+ int i, sign = 1; -+ double f = rand (); -+ -+ for (i = 0; i < NUM; i++) -+ { -+ src[i] = (i + 1) * f * M_PI * sign; -+ if (i < (NUM / 2)) -+ { -+ if ((i % 6) == 0) -+ f = f * src[i]; -+ } -+ else if (i == (NUM / 2)) -+ f = rand (); -+ else if ((i % 6) == 0) -+ f = 1 / (f * (i + 1) * src[i] * M_PI * sign); -+ sign = -sign; -+ } -+} -+ -+static void -+__attribute__((__target__("fpmath=387"))) -+avx512f_test (void) -+{ -+ double a[NUM]; -+ double r[NUM]; -+ int i; -+ -+ init_src (a); -+ -+ for (i = 0; i < NUM; i++) -+ r[i] = trunc (a[i]); -+ -+ /* check results: */ -+ for (i = 0; i < NUM; i++) -+ if (r[i] != trunc (a[i])) -+ abort(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-trunc-vec-2.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-trunc-vec-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-trunc-vec-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-trunc-vec-2.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,6 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+ -+#include "avx512f-trunc-vec-1.c" -+ -+/* { dg-final { scan-assembler-times "vrndscalepd\[^\n\]+zmm\[0-9\](?:\n|\[ \\t\]+#)" 1 } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-truncf-vec-1.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-truncf-vec-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-truncf-vec-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-truncf-vec-1.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,52 @@ -+/* { dg-do run } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+/* { dg-require-effective-target avx512f } */ -+/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ -+ -+#define __NO_MATH_INLINES -+#include <math.h> -+#include "avx512f-check.h" -+ -+#define NUM 64 -+ -+static void -+__attribute__((__target__("fpmath=sse"))) -+init_src (float *src) -+{ -+ int i, sign = 1; -+ float f = rand (); -+ -+ for (i = 0; i < NUM; i++) -+ { -+ src[i] = (i + 1) * f * M_PI * sign; -+ if (i < (NUM / 2)) -+ { -+ if ((i % 6) == 0) -+ f = f * src[i]; -+ } -+ else if (i == (NUM / 2)) -+ f = rand (); -+ else if ((i % 6) == 0) -+ f = 1 / (f * (i + 1) * src[i] * M_PI * sign); -+ sign = -sign; -+ } -+} -+ -+static void -+__attribute__((__target__("fpmath=387"))) -+avx512f_test (void) -+{ -+ float a[NUM]; -+ float r[NUM]; -+ int i; -+ -+ init_src (a); -+ -+ for (i = 0; i < NUM; i++) -+ r[i] = truncf (a[i]); -+ -+ /* check results: */ -+ for (i = 0; i < NUM; i++) -+ if (r[i] != truncf (a[i])) -+ abort(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-truncf-vec-2.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-truncf-vec-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/avx512f-truncf-vec-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/avx512f-truncf-vec-2.c 2016-06-08 13:06:24.000000000 +0000 -@@ -0,0 +1,6 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */ -+ -+#include "avx512f-truncf-vec-1.c" -+ -+/* { dg-final { scan-assembler-times "vrndscaleps\[^\n\]+zmm\[0-9\](?:\n|\[ \\t\]+#)" 1 } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/fabsneg-1.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/fabsneg-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/fabsneg-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/fabsneg-1.c 2016-05-09 19:03:11.000000000 +0000 -@@ -0,0 +1,36 @@ -+/* { dg-do run } */ -+/* { dg-require-effective-target lp64 } */ -+/* { dg-options "-O2 -mtune=nocona" } */ -+ -+double x; -+ -+void -+__attribute__ ((noinline, noclone)) -+test_fabs (double a) -+{ -+ asm volatile ("" : "+r" (a)); -+ x = __builtin_fabs (a); -+} -+ -+void -+__attribute__ ((noinline, noclone)) -+test_neg (double a) -+{ -+ asm volatile ("" : "+r" (a)); -+ x = -a; -+} -+ -+int main () -+{ -+ test_fabs (-1.0); -+ -+ if (x != 1.0) -+ __builtin_abort (); -+ -+ test_neg (-1.0); -+ -+ if (x != 1.0) -+ __builtin_abort (); -+ -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/iamcu/args.h gcc-6-20160721/gcc/testsuite/gcc.target/i386/iamcu/args.h ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/iamcu/args.h 2015-06-30 16:46:45.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/iamcu/args.h 2016-05-30 14:53:28.000000000 +0000 -@@ -30,7 +30,7 @@ - /* Clear all scratch integer registers, excluding the one used to return - aggregate. */ - #define clear_non_sret_int_hardware_registers \ -- asm __volatile__ ("xor %%edx, %%ebx\n\t" \ -+ asm __volatile__ ("xor %%edx, %%edx\n\t" \ - "xor %%ecx, %%ecx\n\t" \ - ::: "edx", "ecx"); - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/pr68657.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/pr68657.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/pr68657.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/pr68657.c 2016-06-14 14:44:28.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* PR c/68657 */ -+/* { dg-options "-mno-avx512f -Werror=psabi" } */ -+ -+typedef int V __attribute__((vector_size (64))); -+ -+void foo (V x, V *y) { /* { dg-error "AVX512F vector argument without AVX512F enabled" } */ -+ *y = x; -+} -+ -+V bar (V *x) { /* { dg-error "AVX512F vector return without AVX512F enabled" } */ -+ return *x; -+} -+ -+/* { dg-message "The ABI for passing parameters with 64-byte alignment has changed" "" { target *-*-* } 6 } */ -+/* { dg-message "some warnings being treated as errors" "" { target *-*-* } 0 } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/pr70728.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/pr70728.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/pr70728.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/pr70728.c 2016-04-27 12:09:45.000000000 +0000 -@@ -0,0 +1,30 @@ -+/* PR target/70728 */ -+/* { dg-do compile } */ -+/* { dg-options "-S -Ofast -march=knl" } */ -+ -+short a = -15726; -+int b = (int)-7003557328690506537LL; -+short c[5][5][3][6]; -+char d[2][5][3][2][4]; -+void fn1() { -+ for (int e = 0; e < 3; e = e + 1) -+ for (int f = 0; f < 2; f = f + 1) -+ for (int g = 0; g < 4; g = g + 1) -+ for (int h = 0; h < 3; h = h + 1) -+ for (int i = 0; i < 2; i = i + 1) -+ for (int j = 0; j < 4; j = j + 1) -+ d[f][g][h][i][j] = -+ 7 << (1236110361944357083 >> a + 15728) - 309027590486089270 >> -+ (c[e][f][h][j] + 2147483647 << ~b - 7003557328690506536) - -+ 2147480981; -+} -+int main() { -+ for (int k = 0; k < 5; ++k) -+ for (int l = 0; l < 5; ++l) -+ for (int m = 0; m < 3; ++m) -+ for (int n = 0; n < 4; ++n) -+ c[k][l][m][n] = -2639; -+ fn1(); -+} -+ -+/* { dg-final { scan-assembler-not "sll\[ \\t\]+\[^\n\]*%\.mm(?:1\[6-9\]|\[2-3\]\[0-9\])" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/pr70750-1.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/pr70750-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/pr70750-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/pr70750-1.c 2016-04-27 13:35:03.000000000 +0000 -@@ -0,0 +1,11 @@ -+/* { dg-do compile { target *-*-linux* } } */ -+/* { dg-options "-O2" } */ -+ -+int -+f (int (**p) (void)) -+{ -+ return p[1](); -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\].*\\(%rdi\\)" { target { lp64 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]\\*%rax" { target { x32 } } } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/pr70750-2.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/pr70750-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/pr70750-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/pr70750-2.c 2016-04-27 13:35:03.000000000 +0000 -@@ -0,0 +1,11 @@ -+/* { dg-do compile { target *-*-linux* } } */ -+/* { dg-options "-O2" } */ -+ -+int -+f (int (**p) (void)) -+{ -+ return -p[1](); -+} -+ -+/* { dg-final { scan-assembler "call\[ \t\].*\\(%rdi\\)" { target { lp64 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]\\*%rax" { target { x32 } } } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/pr70858.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/pr70858.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/pr70858.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/pr70858.c 2016-04-28 19:45:48.000000000 +0000 -@@ -0,0 +1,45 @@ -+/* PR target/70858 */ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mlwp -mbmi -mtbm -mbmi2 -std=gnu11" } */ -+ -+void -+f1 (unsigned long long x, unsigned int y) -+{ -+ __builtin_ia32_lwpval64 (x, y, 1); /* { dg-warning "implicit declaration of function .__builtin_ia32_lwpval64." "" { target ia32 } } */ -+} -+ -+char -+f2 (unsigned long long x, unsigned int y) -+{ -+ return __builtin_ia32_lwpins64 (x, y, 1); /* { dg-warning "implicit declaration of function .__builtin_ia32_lwpins64." "" { target ia32 } } */ -+} -+ -+unsigned long long -+f3 (unsigned long long x, unsigned long long y) -+{ -+ return __builtin_ia32_bextr_u64 (x, y); /* { dg-warning "implicit declaration of function .__builtin_ia32_bextr_u64." "" { target ia32 } } */ -+} -+ -+unsigned long long -+f4 (unsigned long long x) -+{ -+ return __builtin_ia32_bextri_u64 (x, 1); /* { dg-warning "implicit declaration of function .__builtin_ia32_bextri_u64." "" { target ia32 } } */ -+} -+ -+unsigned long long -+f5 (unsigned long long x, unsigned long long y) -+{ -+ return __builtin_ia32_bzhi_di (x, y); /* { dg-warning "implicit declaration of function .__builtin_ia32_bzhi_di." "" { target ia32 } } */ -+} -+ -+unsigned long long -+f6 (unsigned long long x, unsigned long long y) -+{ -+ return __builtin_ia32_pdep_di (x, y); /* { dg-warning "implicit declaration of function .__builtin_ia32_pdep_di." "" { target ia32 } } */ -+} -+ -+unsigned long long -+f7 (unsigned long long x, unsigned long long y) -+{ -+ return __builtin_ia32_pext_di (x, y); /* { dg-warning "implicit declaration of function .__builtin_ia32_pext_di." "" { target ia32 } } */ -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/pr70876.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/pr70876.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/pr70876.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/pr70876.c 2016-05-11 09:51:49.000000000 +0000 -@@ -0,0 +1,13 @@ -+/* { dg-do compile { target { ! x32 } } } */ -+/* { dg-options "-fcheck-pointer-bounds -mmpx -Wno-implicit-function-declaration" } */ -+ -+void f (char *s1, char *s2) -+{ -+ int z = 5; -+ -+ struct { char a[z]; } x; -+ -+ s1[0] = s2[0]; -+ -+ foo (x, x); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/pr70877.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/pr70877.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/pr70877.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/pr70877.c 2016-05-11 09:55:55.000000000 +0000 -@@ -0,0 +1,14 @@ -+/* { dg-do compile { target { ! x32 } } } */ -+/* { dg-options "-fcheck-pointer-bounds -mmpx" } */ -+ -+int foo(int); -+ -+typedef struct { -+ double d; -+ int a; -+} str_t; -+ -+void bar(double d, int i, str_t s) -+{ -+ d = ((double (*) (int)) foo) (i); /* { dg-warning "function called through a non-compatible type" } */ -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/pr71529.C gcc-6-20160721/gcc/testsuite/gcc.target/i386/pr71529.C ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/pr71529.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/pr71529.C 2016-06-20 11:35:02.000000000 +0000 -@@ -0,0 +1,22 @@ -+/* PR71529 */ -+/* { dg-do compile { target { ! x32 } } } */ -+/* { dg-options "-fcheck-pointer-bounds -mmpx -O2" } */ -+ -+class c1 -+{ -+ public: -+ virtual ~c1 (); -+}; -+ -+class c2 -+{ -+ public: -+ virtual ~c2 (); -+}; -+ -+class c3 : c1, c2 { }; -+ -+int main (int, char **) -+{ -+ c3 obj; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/pr71647.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/pr71647.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/pr71647.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/pr71647.c 2016-06-24 18:46:47.000000000 +0000 -@@ -0,0 +1,32 @@ -+/* PR tree-optimization/71647 */ -+/* { dg-do compile } */ -+/* { dg-options "-O3 -fopenmp-simd -mavx -mno-avx512f -fdump-tree-vect-details" } */ -+ -+void -+foo (double *a, double *b) -+{ -+ int i; -+#pragma omp simd aligned(a,b:4*sizeof(double)) -+ for (i = 0; i < 32768; i++) -+ a[i] += b[i]; -+} -+ -+void -+bar (double *a, double *b) -+{ -+ int i; -+#pragma omp simd aligned(a,b:32) -+ for (i = 0; i < 32768; i++) -+ a[i] += b[i]; -+} -+ -+void -+baz (double *a, double *b) -+{ -+ int i; -+#pragma omp simd aligned(a,b:32L) -+ for (i = 0; i < 32768; i++) -+ a[i] += b[i]; -+} -+ -+/* { dg-final { scan-tree-dump-not "Alignment of access forced using peeling" "vect" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/i386/sse2-pr71559.c gcc-6-20160721/gcc/testsuite/gcc.target/i386/sse2-pr71559.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/i386/sse2-pr71559.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/i386/sse2-pr71559.c 2016-07-02 10:18:27.000000000 +0000 -@@ -0,0 +1,73 @@ -+/* PR target/71559 */ -+/* { dg-do run { target sse2 } } */ -+/* { dg-options "-O2 -ftree-vectorize -msse2" } */ -+ -+#ifndef PR71559_TEST -+#include "sse2-check.h" -+#define PR71559_TEST sse2_test -+#endif -+ -+#define N 16 -+float a[N] = { 5.0f, -3.0f, 1.0f, __builtin_nanf (""), 9.0f, 7.0f, -3.0f, -9.0f, -+ -3.0f, -5.0f, -9.0f, __builtin_nanf (""), 0.5f, -0.5f, 0.0f, 0.0f }; -+float b[N] = { -5.0f, 3.0f, 1.0f, 7.0f, 8.0f, 8.0f, -3.0f, __builtin_nanf (""), -+ -4.0f, -4.0f, -9.0f, __builtin_nanf (""), 0.0f, 0.0f, 0.0f, __builtin_nanf ("") }; -+int c[N], d[N]; -+ -+#define FN(name, op) \ -+void \ -+name (void) \ -+{ \ -+ int i; \ -+ for (i = 0; i < N; i++) \ -+ c[i] = (op || d[i] > 37) ? 5 : 32; \ -+} -+FN (eq, a[i] == b[i]) -+FN (ne, a[i] != b[i]) -+FN (gt, a[i] > b[i]) -+FN (ge, a[i] >= b[i]) -+FN (lt, a[i] < b[i]) -+FN (le, a[i] <= b[i]) -+FN (unle, !__builtin_isgreater (a[i], b[i])) -+FN (unlt, !__builtin_isgreaterequal (a[i], b[i])) -+FN (unge, !__builtin_isless (a[i], b[i])) -+FN (ungt, !__builtin_islessequal (a[i], b[i])) -+FN (uneq, !__builtin_islessgreater (a[i], b[i])) -+FN (ordered, !__builtin_isunordered (a[i], b[i])) -+FN (unordered, __builtin_isunordered (a[i], b[i])) -+ -+#define TEST(name, GT, LT, EQ, UO) \ -+ name (); \ -+ for (i = 0; i < N; i++) \ -+ { \ -+ int v; \ -+ switch (i % 4) \ -+ { \ -+ case 0: v = GT ? 5 : 32; break; \ -+ case 1: v = LT ? 5 : 32; break; \ -+ case 2: v = EQ ? 5 : 32; break; \ -+ case 3: v = UO ? 5 : 32; break; \ -+ } \ -+ if (c[i] != v) \ -+ __builtin_abort (); \ -+ } -+ -+void -+PR71559_TEST (void) -+{ -+ int i; -+ asm volatile ("" : : "g" (a), "g" (b), "g" (c), "g" (d) : "memory"); -+ TEST (eq, 0, 0, 1, 0) -+ TEST (ne, 1, 1, 0, 1) -+ TEST (gt, 1, 0, 0, 0) -+ TEST (ge, 1, 0, 1, 0) -+ TEST (lt, 0, 1, 0, 0) -+ TEST (le, 0, 1, 1, 0) -+ TEST (unle, 0, 1, 1, 1) -+ TEST (unlt, 0, 1, 0, 1) -+ TEST (unge, 1, 0, 1, 1) -+ TEST (ungt, 1, 0, 0, 1) -+ TEST (uneq, 0, 0, 1, 1) -+ TEST (ordered, 1, 1, 1, 0) -+ TEST (unordered, 0, 0, 0, 1) -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/abs128-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/abs128-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/abs128-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/abs128-1.c 2016-07-01 17:19:15.000000000 +0000 -@@ -0,0 +1,61 @@ -+/* { dg-do run { target { powerpc64*-*-* && vsx_hw } } } */ -+/* { dg-options "-mfloat128 -mvsx" } */ -+ -+void abort (); -+ -+typedef unsigned long long int uint64_t; -+ -+typedef union -+{ -+ __float128 value; -+ -+ struct -+ { -+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ -+ unsigned negative:1; -+ unsigned exponent:15; -+ unsigned quiet_nan:1; -+ uint64_t mant_high:47; -+ uint64_t mant_low:64; -+#else -+ uint64_t mant_low:64; -+ uint64_t mant_high:47; -+ unsigned quiet_nan:1; -+ unsigned exponent:15; -+ unsigned negative:1; -+#endif -+ } nan; -+ -+} ieee854_float128; -+ -+int -+main (int argc, int *argv[]) -+{ -+ ieee854_float128 x, z; -+ -+ x.nan.negative = 1; -+ x.nan.exponent = 0x22; -+ x.nan.quiet_nan = 0; -+ x.nan.mant_high = 0x1234; -+ x.nan.mant_low = 0xabcdef; -+ -+ z.value = __builtin_fabsq (x.value); -+ -+ if (z.nan.negative != 0 -+ || z.nan.exponent != 0x22 -+ || z.nan.quiet_nan != 0 -+ || z.nan.mant_high != 0x1234 -+ || z.nan.mant_low != 0xabcdef) -+ abort (); -+ -+ z.value = __builtin_fabsq (z.value); -+ -+ if (z.nan.negative != 0 -+ || z.nan.exponent != 0x22 -+ || z.nan.quiet_nan != 0 -+ || z.nan.mant_high != 0x1234 -+ || z.nan.mant_low != 0xabcdef) -+ abort (); -+ -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/copysign128-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/copysign128-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/copysign128-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/copysign128-1.c 2016-07-01 17:19:15.000000000 +0000 -@@ -0,0 +1,58 @@ -+/* { dg-do run { target { powerpc64*-*-* && vsx_hw } } } */ -+/* { dg-options "-mfloat128 -mvsx" } */ -+ -+void abort (); -+ -+typedef unsigned long long int uint64_t; -+ -+typedef union -+{ -+ __float128 value; -+ -+ struct -+ { -+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ -+ unsigned negative:1; -+ unsigned exponent:15; -+ unsigned quiet_nan:1; -+ uint64_t mant_high:47; -+ uint64_t mant_low:64; -+#else -+ uint64_t mant_low:64; -+ uint64_t mant_high:47; -+ unsigned quiet_nan:1; -+ unsigned exponent:15; -+ unsigned negative:1; -+#endif -+ } nan; -+ -+} ieee854_float128; -+ -+int -+main (int argc, int *argv[]) -+{ -+ ieee854_float128 x, y, z; -+ -+ x.nan.negative = 0; -+ x.nan.exponent = 0x22; -+ x.nan.quiet_nan = 0; -+ x.nan.mant_high = 0x1234; -+ x.nan.mant_low = 0xabcdef; -+ -+ y.nan.negative = 1; -+ y.nan.exponent = 0; -+ y.nan.quiet_nan = 0; -+ y.nan.mant_high = 0; -+ y.nan.mant_low = 0; -+ -+ z.value = __builtin_copysignq (x.value, y.value); -+ -+ if (z.nan.negative != 1 -+ || z.nan.exponent != 0x22 -+ || z.nan.quiet_nan != 0 -+ || z.nan.mant_high != 0x1234 -+ || z.nan.mant_low != 0xabcdef) -+ abort (); -+ -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/ctz-3.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/ctz-3.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/ctz-3.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/ctz-3.c 2016-06-01 23:23:42.000000000 +0000 -@@ -0,0 +1,62 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-options "-mcpu=power9 -O2 -ftree-vectorize -fvect-cost-model=dynamic -fno-unroll-loops -fno-unroll-all-loops" } */ -+ -+#ifndef SIZE -+#define SIZE 1024 -+#endif -+ -+#ifndef ALIGN -+#define ALIGN 32 -+#endif -+ -+#define ALIGN_ATTR __attribute__((__aligned__(ALIGN))) -+ -+#define DO_BUILTIN(PREFIX, TYPE, CTZ) \ -+TYPE PREFIX ## _a[SIZE] ALIGN_ATTR; \ -+TYPE PREFIX ## _b[SIZE] ALIGN_ATTR; \ -+ \ -+void \ -+PREFIX ## _ctz (void) \ -+{ \ -+ unsigned long i; \ -+ \ -+ for (i = 0; i < SIZE; i++) \ -+ PREFIX ## _a[i] = CTZ (PREFIX ## _b[i]); \ -+} -+ -+#if !defined(DO_LONG_LONG) && !defined(DO_LONG) && !defined(DO_INT) && !defined(DO_SHORT) && !defined(DO_CHAR) -+#define DO_INT 1 -+#endif -+ -+#if DO_LONG_LONG -+/* At the moment, only int is auto vectorized. */ -+DO_BUILTIN (sll, long long, __builtin_ctzll) -+DO_BUILTIN (ull, unsigned long long, __builtin_ctzll) -+#endif -+ -+#if defined(_ARCH_PPC64) && DO_LONG -+DO_BUILTIN (sl, long, __builtin_ctzl) -+DO_BUILTIN (ul, unsigned long, __builtin_ctzl) -+#endif -+ -+#if DO_INT -+DO_BUILTIN (si, int, __builtin_ctz) -+DO_BUILTIN (ui, unsigned int, __builtin_ctz) -+#endif -+ -+#if DO_SHORT -+DO_BUILTIN (ss, short, __builtin_ctz) -+DO_BUILTIN (us, unsigned short, __builtin_ctz) -+#endif -+ -+#if DO_CHAR -+DO_BUILTIN (sc, signed char, __builtin_ctz) -+DO_BUILTIN (uc, unsigned char, __builtin_ctz) -+#endif -+ -+/* { dg-final { scan-assembler-times "vctzw" 2 } } */ -+/* { dg-final { scan-assembler-not "cnttzd" } } */ -+/* { dg-final { scan-assembler-not "cnttzw" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/ctz-4.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/ctz-4.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/ctz-4.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/ctz-4.c 2016-06-01 23:23:42.000000000 +0000 -@@ -0,0 +1,110 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-options "-mcpu=power9 -O2" } */ -+ -+#include <altivec.h> -+ -+vector signed char -+count_trailing_zeros_v16qi_1s (vector signed char a) -+{ -+ return vec_vctz (a); -+} -+ -+vector signed char -+count_trailing_zeros_v16qi_2s (vector signed char a) -+{ -+ return vec_vctzb (a); -+} -+ -+vector unsigned char -+count_trailing_zeros_v16qi_1u (vector unsigned char a) -+{ -+ return vec_vctz (a); -+} -+ -+vector unsigned char -+count_trailing_zeros_v16qi_2u (vector unsigned char a) -+{ -+ return vec_vctzb (a); -+} -+ -+vector short -+count_trailing_zeros_v8hi_1s (vector short a) -+{ -+ return vec_vctz (a); -+} -+ -+vector short -+count_trailing_zeros_v8hi_2s (vector short a) -+{ -+ return vec_vctzh (a); -+} -+ -+vector unsigned short -+count_trailing_zeros_v8hi_1u (vector unsigned short a) -+{ -+ return vec_vctz (a); -+} -+ -+vector unsigned short -+count_trailing_zeros_v8hi_2u (vector unsigned short a) -+{ -+ return vec_vctzh (a); -+} -+ -+vector int -+count_trailing_zeros_v4si_1s (vector int a) -+{ -+ return vec_vctz (a); -+} -+ -+vector int -+count_trailing_zeros_v4si_2s (vector int a) -+{ -+ return vec_vctzw (a); -+} -+ -+vector unsigned int -+count_trailing_zeros_v4si_1u (vector unsigned int a) -+{ -+ return vec_vctz (a); -+} -+ -+vector unsigned int -+count_trailing_zeros_v4si_2u (vector unsigned int a) -+{ -+ return vec_vctzw (a); -+} -+ -+vector long long -+count_trailing_zeros_v2di_1s (vector long long a) -+{ -+ return vec_vctz (a); -+} -+ -+vector long long -+count_trailing_zeros_v2di_2s (vector long long a) -+{ -+ return vec_vctzd (a); -+} -+ -+vector unsigned long long -+count_trailing_zeros_v2di_1u (vector unsigned long long a) -+{ -+ return vec_vctz (a); -+} -+ -+vector unsigned long long -+count_trailing_zeros_v2di_2u (vector unsigned long long a) -+{ -+ return vec_vctzd (a); -+} -+ -+/* { dg-final { scan-assembler "vctzb" } } */ -+/* { dg-final { scan-assembler "vctzd" } } */ -+/* { dg-final { scan-assembler "vctzh" } } */ -+/* { dg-final { scan-assembler "vctzw" } } */ -+/* { dg-final { scan-assembler-not "cnttzd" } } */ -+/* { dg-final { scan-assembler-not "cnttzw" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/darn-0.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/darn-0.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/darn-0.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/darn-0.c 2016-07-01 20:09:06.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+int get_random () -+{ -+ return __builtin_darn_32 (); -+} -+ -+/* { dg-final { scan-assembler "darn" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/darn-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/darn-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/darn-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/darn-1.c 2016-07-01 20:09:06.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-require-effective-target lp64 } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+long long get_conditioned_random () -+{ -+ return __builtin_darn (); -+} -+ -+/* { dg-final { scan-assembler "darn" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/darn-2.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/darn-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/darn-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/darn-2.c 2016-07-01 20:09:06.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-require-effective-target lp64 } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+long long get_raw_random () -+{ -+ return __builtin_darn_raw (); -+} -+ -+/* { dg-final { scan-assembler "darn" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dform-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dform-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dform-1.c 2015-11-25 22:49:41.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dform-1.c 2016-06-01 22:09:14.000000000 +0000 -@@ -1,7 +1,7 @@ - /* { dg-do compile { target { powerpc*-*-* && lp64 } } } */ - /* { dg-require-effective-target powerpc_p9vector_ok } */ - /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ --/* { dg-options "-mcpu=power9 -mpower9-dform -O2" } */ -+/* { dg-options "-mcpu=power9 -mpower9-dform -O2 -mlra" } */ - - #ifndef TYPE - #define TYPE double -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dform-2.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dform-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dform-2.c 2015-11-25 22:49:41.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dform-2.c 2016-06-01 22:09:14.000000000 +0000 -@@ -1,7 +1,7 @@ - /* { dg-do compile { target { powerpc*-*-* && lp64 } } } */ - /* { dg-require-effective-target powerpc_p9vector_ok } */ - /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ --/* { dg-options "-mcpu=power9 -mpower9-dform -O2" } */ -+/* { dg-options "-mcpu=power9 -mpower9-dform -O2 -mlra" } */ - - #ifndef TYPE - #define TYPE float -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dform-3.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dform-3.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dform-3.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dform-3.c 2016-06-01 22:15:47.000000000 +0000 -@@ -0,0 +1,39 @@ -+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-options "-mcpu=power9 -mpower9-dform -O2 -mlra" } */ -+ -+#ifndef TYPE -+#define TYPE vector double -+#endif -+ -+struct foo { -+ TYPE a, b, c, d; -+}; -+ -+/* Test whether ISA 3.0 vector d-form instructions are implemented. */ -+void -+add (struct foo *p) -+{ -+ p->b = p->c + p->d; -+} -+ -+/* Make sure we don't use direct moves to get stuff into GPR registers. */ -+void -+gpr (struct foo *p) -+{ -+ TYPE x = p->c; -+ -+ __asm__ (" # reg = %0" : "+r" (x)); -+ -+ p->b = x; -+} -+ -+/* { dg-final { scan-assembler "lxv " } } */ -+/* { dg-final { scan-assembler "stxv " } } */ -+/* { dg-final { scan-assembler-not "lxvx " } } */ -+/* { dg-final { scan-assembler-not "stxvx " } } */ -+/* { dg-final { scan-assembler-not "mfvsrd " } } */ -+/* { dg-final { scan-assembler-not "mfvsrld " } } */ -+/* { dg-final { scan-assembler "l\[dq\] " } } */ -+/* { dg-final { scan-assembler "st\[dq\] " } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dfp.exp gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dfp.exp ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dfp.exp 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dfp.exp 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,39 @@ -+# Copyright (C) 2014-2016 Free Software Foundation, Inc. -+# -+# This file is part of GCC. -+# -+# GCC is free software; you can redistribute it and/or modify -+# it under the terms of the GNU General Public License as published by -+# the Free Software Foundation; either version 3, or (at your option) -+# any later version. -+# -+# GCC is distributed in the hope that it will be useful, -+# but WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+# GNU General Public License for more details. -+# -+# You should have received a copy of the GNU General Public License -+# along with GCC; see the file COPYING3. If not see -+# <http://www.gnu.org/licenses/>. -+ -+# Exit immediately if this isn't a PowerPC target. -+if { ![istarget powerpc*-*-*] && ![istarget rs6000-*-*] } then { -+ return -+} -+ -+global DEFAULT_CFLAGS -+if ![info exists DEFAULT_CFLAGS] then { -+ set DEFAULT_CFLAGS " -ansi -pedantic-errors" -+} -+ -+# Load support procs. -+load_lib gcc-dg.exp -+load_lib torture-options.exp -+ -+# Initialize. -+dg-init -+ -+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.c*]] "" $DEFAULT_CFLAGS -+ -+# All done. -+dg-finish -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-0.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-0.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-0.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-0.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,17 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_lt (5, source); -+} -+ -+/* { dg-final { scan-assembler "dtstsfi" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-1.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power8" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_lt (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_lt_dd requires" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-10.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-10.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-10.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-10.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,17 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_lt_dd (5, source); -+} -+ -+/* { dg-final { scan-assembler "dtstsfi" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power8" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_lt_dd (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_lt_dd requires" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-12.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-12.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-12.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-12.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_lt_dd (65, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-13.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-13.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-13.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-13.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ if (__builtin_dfp_dtstsfi_lt_dd (63, source)) -+ return 3; -+ else -+ return 5; -+} -+ -+/* { dg-final { scan-assembler "dtstsfi" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-14.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-14.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-14.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-14.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p, unsigned int significance) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_lt_dd (significance, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-15.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-15.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-15.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-15.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,18 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_lt_td (5, source); -+} -+ -+/* { dg-final { scan-assembler "dtstsfiq" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,16 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power8" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_lt_td (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_lt_td requires" } */ -+} -+ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-17.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-17.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-17.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-17.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,16 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_lt_td (65, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-18.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-18.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-18.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-18.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ if (__builtin_dfp_dtstsfi_lt_td (63, source)) -+ return 3; -+ else -+ return 5; -+} -+ -+/* { dg-final { scan-assembler "dtstsfiq" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-19.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-19.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-19.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-19.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,14 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p, unsigned int significance) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_lt_td (significance, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-2.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-2.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_lt (65, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-20.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-20.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-20.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-20.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,17 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_gt (5, source); -+} -+ -+/* { dg-final { scan-assembler "dtstsfi" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-21.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-21.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-21.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-21.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power8" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_gt (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_gt_dd requires" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-22.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-22.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-22.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-22.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_gt (65, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-23.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-23.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-23.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-23.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ if (__builtin_dfp_dtstsfi_gt (63, source)) -+ return 3; -+ else -+ return 5; -+} -+ -+/* { dg-final { scan-assembler "dtstsfi" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-24.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-24.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-24.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-24.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p, unsigned int significance) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_gt (significance, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-25.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-25.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-25.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-25.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,18 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_gt (5, source); -+} -+ -+/* { dg-final { scan-assembler "dtstsfiq" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-26.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-26.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-26.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-26.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,16 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power8" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_gt (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_gt_td requires" } */ -+} -+ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-27.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-27.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-27.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-27.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,16 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_gt (65, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-28.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-28.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-28.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-28.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ if (__builtin_dfp_dtstsfi_gt (63, source)) -+ return 3; -+ else -+ return 5; -+} -+ -+/* { dg-final { scan-assembler "dtstsfiq" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-29.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-29.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-29.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-29.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,14 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p, unsigned int significance) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_gt (significance, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-3.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-3.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-3.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-3.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ if (__builtin_dfp_dtstsfi_lt (63, source)) -+ return 3; -+ else -+ return 5; -+} -+ -+/* { dg-final { scan-assembler "dtstsfi" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-30.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-30.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-30.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-30.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,17 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_gt_dd (5, source); -+} -+ -+/* { dg-final { scan-assembler "dtstsfi" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power8" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_gt_dd (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_gt_dd requires" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-32.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-32.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-32.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-32.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_gt_dd (65, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-33.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-33.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-33.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-33.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ if (__builtin_dfp_dtstsfi_gt_dd (63, source)) -+ return 3; -+ else -+ return 5; -+} -+ -+/* { dg-final { scan-assembler "dtstsfi" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-34.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-34.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-34.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-34.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p, unsigned int significance) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_gt_dd (significance, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-35.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-35.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-35.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-35.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,18 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_gt_td (5, source); -+} -+ -+/* { dg-final { scan-assembler "dtstsfiq" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,16 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power8" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_gt_td (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_gt_td requires" } */ -+} -+ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-37.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-37.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-37.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-37.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,16 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_gt_td (65, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-38.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-38.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-38.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-38.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ if (__builtin_dfp_dtstsfi_gt_td (63, source)) -+ return 3; -+ else -+ return 5; -+} -+ -+/* { dg-final { scan-assembler "dtstsfiq" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-39.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-39.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-39.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-39.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,14 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p, unsigned int significance) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_gt_td (significance, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-4.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-4.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-4.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-4.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p, unsigned int significance) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_lt (significance, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-40.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-40.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-40.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-40.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,17 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_eq (5, source); -+} -+ -+/* { dg-final { scan-assembler "dtstsfi" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-41.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-41.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-41.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-41.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power8" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_eq (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_eq_dd requires" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-42.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-42.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-42.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-42.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_eq (65, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-43.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-43.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-43.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-43.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ if (__builtin_dfp_dtstsfi_eq (63, source)) -+ return 3; -+ else -+ return 5; -+} -+ -+/* { dg-final { scan-assembler "dtstsfi" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-44.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-44.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-44.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-44.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p, unsigned int significance) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_eq (significance, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-45.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-45.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-45.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-45.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,18 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_eq (5, source); -+} -+ -+/* { dg-final { scan-assembler "dtstsfiq" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-46.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-46.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-46.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-46.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,16 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power8" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_eq (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_eq_td requires" } */ -+} -+ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-47.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-47.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-47.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-47.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,16 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_eq (65, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-48.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-48.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-48.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-48.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ if (__builtin_dfp_dtstsfi_eq (63, source)) -+ return 3; -+ else -+ return 5; -+} -+ -+/* { dg-final { scan-assembler "dtstsfiq" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-49.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-49.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-49.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-49.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,14 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p, unsigned int significance) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_eq (significance, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-5.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-5.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-5.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-5.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,18 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_lt (5, source); -+} -+ -+/* { dg-final { scan-assembler "dtstsfiq" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-50.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-50.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-50.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-50.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,17 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_eq_dd (5, source); -+} -+ -+/* { dg-final { scan-assembler "dtstsfi" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power8" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_eq_dd (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_eq_dd requires" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-52.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-52.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-52.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-52.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_eq_dd (65, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-53.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-53.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-53.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-53.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ if (__builtin_dfp_dtstsfi_eq_dd (63, source)) -+ return 3; -+ else -+ return 5; -+} -+ -+/* { dg-final { scan-assembler "dtstsfi" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-54.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-54.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-54.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-54.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p, unsigned int significance) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_eq_dd (significance, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-55.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-55.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-55.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-55.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,18 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_eq_td (5, source); -+} -+ -+/* { dg-final { scan-assembler "dtstsfiq" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,16 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power8" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_eq_td (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_eq_td requires" } */ -+} -+ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-57.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-57.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-57.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-57.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,16 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_eq_td (65, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-58.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-58.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-58.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-58.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ if (__builtin_dfp_dtstsfi_eq_td (63, source)) -+ return 3; -+ else -+ return 5; -+} -+ -+/* { dg-final { scan-assembler "dtstsfiq" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-59.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-59.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-59.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-59.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,14 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p, unsigned int significance) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_eq_td (significance, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-6.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-6.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-6.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-6.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,16 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power8" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_lt (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_lt_td requires" } */ -+} -+ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-60.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-60.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-60.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-60.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,17 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_ov (5, source); -+} -+ -+/* { dg-final { scan-assembler "dtstsfi" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-61.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-61.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-61.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-61.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power8" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_ov (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_ov_dd requires" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-62.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-62.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-62.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-62.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_ov (65, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-63.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-63.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-63.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-63.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ if (__builtin_dfp_dtstsfi_ov (63, source)) -+ return 3; -+ else -+ return 5; -+} -+ -+/* { dg-final { scan-assembler "dtstsfi" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-64.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-64.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-64.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-64.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p, unsigned int significance) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_ov (significance, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-65.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-65.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-65.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-65.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,18 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_ov (5, source); -+} -+ -+/* { dg-final { scan-assembler "dtstsfiq" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-66.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-66.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-66.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-66.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,16 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power8" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_ov (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_ov_td requires" } */ -+} -+ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-67.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-67.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-67.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-67.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,16 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_ov (65, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-68.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-68.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-68.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-68.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ if (__builtin_dfp_dtstsfi_ov (63, source)) -+ return 3; -+ else -+ return 5; -+} -+ -+/* { dg-final { scan-assembler "dtstsfiq" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-69.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-69.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-69.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-69.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,14 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p, unsigned int significance) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_ov (significance, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-7.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-7.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-7.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-7.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,14 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_lt (65, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-70.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-70.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-70.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-70.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,17 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_ov_dd (5, source); -+} -+ -+/* { dg-final { scan-assembler "dtstsfi" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power8" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_ov_dd (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_ov_dd requires" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-72.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-72.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-72.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-72.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_ov_dd (65, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-73.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-73.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-73.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-73.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p) -+{ -+ _Decimal64 source = *p; -+ -+ if (__builtin_dfp_dtstsfi_ov_dd (63, source)) -+ return 3; -+ else -+ return 5; -+} -+ -+/* { dg-final { scan-assembler "dtstsfi" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-74.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-74.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-74.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-74.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal64 *p, unsigned int significance) -+{ -+ _Decimal64 source = *p; -+ -+ return __builtin_dfp_dtstsfi_ov_dd (significance, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-75.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-75.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-75.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-75.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,18 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_ov_td (5, source); -+} -+ -+/* { dg-final { scan-assembler "dtstsfiq" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,16 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power8" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_ov_td (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_ov_td requires" } */ -+} -+ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-77.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-77.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-77.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-77.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,16 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_ov_td (65, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -+ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-78.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-78.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-78.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-78.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ if (__builtin_dfp_dtstsfi_ov_td (63, source)) -+ return 3; -+ else -+ return 5; -+} -+ -+/* { dg-final { scan-assembler "dtstsfiq" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-79.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-79.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-79.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-79.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,14 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p, unsigned int significance) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_ov_td (significance, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-8.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-8.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-8.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-8.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p) -+{ -+ _Decimal128 source = *p; -+ -+ if (__builtin_dfp_dtstsfi_lt (63, source)) -+ return 3; -+ else -+ return 5; -+} -+ -+/* { dg-final { scan-assembler "dtstsfiq" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-9.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-9.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-9.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-9.c 2016-07-07 19:42:07.000000000 +0000 -@@ -0,0 +1,14 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+int doTestBCDSignificance (_Decimal128 *p, unsigned int significance) -+{ -+ _Decimal128 source = *p; -+ -+ return __builtin_dfp_dtstsfi_lt (significance, source); /* { dg-error "argument 1 must be a 6-bit unsigned literal" } */ -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/divkc3-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/divkc3-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/divkc3-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/divkc3-1.c 2016-07-15 20:22:23.000000000 +0000 -@@ -0,0 +1,23 @@ -+/* { dg-do run { target { powerpc64*-*-* && vsx_hw } } } */ -+/* { dg-require-effective-target powerpc_p8vector_ok } */ -+/* { dg-options "-mfloat128 -mvsx" } */ -+ -+void abort (); -+ -+typedef __complex float __cfloat128 __attribute__((mode(KC))); -+ -+__cfloat128 divide (__cfloat128 x, __cfloat128 y) -+{ -+ return x / y; -+} -+ -+__cfloat128 z, a; -+ -+int main () -+{ -+ z = divide (5.0q + 5.0jq, 2.0q + 1.0jq); -+ a = 3.0q + 1.0jq; -+ if (z != a) -+ abort (); -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/float128-complex-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/float128-complex-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/float128-complex-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/float128-complex-1.c 2016-06-27 18:25:58.000000000 +0000 -@@ -0,0 +1,157 @@ -+/* { dg-do compile { target { powerpc*-*-linux* } } } */ -+/* { dg-require-effective-target powerpc_float128_sw_ok } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */ -+/* { dg-options "-O2 -mcpu=power7 -mfloat128" } */ -+ -+#ifndef NO_FLOAT -+typedef _Complex float float_complex; -+extern float_complex cfloat1 (void); -+extern float_complex cfloat2 (void); -+ -+#define FLOAT_ARG(NAME, OP) ARG_OP(float, float_complex, NAME, OP) -+#define FLOAT_PTR(NAME, OP) PTR_OP(float, float_complex, NAME, OP) -+#define FLOAT_CALL() CALL_OP(float, float_complex, cfloat1, cfloat2) -+ -+#else -+#define FLOAT_ARG(NAME, OP) -+#define FLOAT_PTR(NAME, OP) -+#define FLOAT_CALL() -+#endif -+ -+#ifndef NO_DOUBLE -+typedef _Complex double double_complex; -+extern double_complex cdouble1 (void); -+extern double_complex cdouble2 (void); -+ -+#define DOUBLE_ARG(NAME, OP) ARG_OP(double, double_complex, NAME, OP) -+#define DOUBLE_PTR(NAME, OP) PTR_OP(double, double_complex, NAME, OP) -+#define DOUBLE_CALL() CALL_OP(double, double_complex, cdouble1, cdouble2) -+ -+#else -+#define DOUBLE_ARG(NAME, OP) -+#define DOUBLE_PTR(NAME, OP) -+#define DOUBLE_CALL() -+#endif -+ -+#ifndef NO_FLOAT128 -+#ifdef __VSX__ -+typedef _Complex float __attribute__((mode(KC))) float128_complex; -+#else -+typedef _Complex float __attribute__((mode(TC))) float128_complex; -+#endif -+ -+extern float128_complex cfloat128_1 (void); -+extern float128_complex cfloat128_2 (void); -+ -+#define FLOAT128_ARG(NAME, OP) ARG_OP(float128, float128_complex, NAME, OP) -+#define FLOAT128_PTR(NAME, OP) PTR_OP(float128, float128_complex, NAME, OP) -+#define FLOAT128_CALL() CALL_OP(float128, float128_complex, cfloat128_1, cfloat128_2) -+ -+#else -+#define FLOAT128_ARG(NAME, OP) -+#define FLOAT128_PTR(NAME, OP) -+#define FLOAT128_CALL() -+#endif -+ -+#ifndef NO_LDOUBLE -+typedef _Complex long double ldouble_complex; -+extern ldouble_complex cldouble1 (void); -+extern ldouble_complex cldouble2 (void); -+ -+#define LDOUBLE_ARG(NAME, OP) ARG_OP(ldouble, ldouble_complex, NAME, OP) -+#define LDOUBLE_PTR(NAME, OP) PTR_OP(ldouble, ldouble_complex, NAME, OP) -+#define LDOUBLE_CALL() CALL_OP(ldouble, ldouble_complex, cldouble1, cldouble2) -+ -+#else -+#define LDOUBLE_ARG(NAME, OP) -+#define LDOUBLE_PTR(NAME, OP) -+#define LDOUBLE_CALL() -+#endif -+ -+ -+#define ARG_OP(SUFFIX, TYPE, NAME, OP) \ -+TYPE arg_ ## NAME ## _ ## SUFFIX (TYPE a, TYPE b) \ -+{ \ -+ return a OP b; \ -+} -+ -+#define PTR_OP(SUFFIX, TYPE, NAME, OP) \ -+void ptr_ ## NAME ## _ ## SUFFIX (TYPE *p, TYPE *a, TYPE *b) \ -+{ \ -+ *p = *a OP *b; \ -+} -+ -+#define CALL_OP(SUFFIX, TYPE, FUNC1, FUNC2) \ -+TYPE call_ ## SUFFIX (void) \ -+{ \ -+ TYPE value1 = FUNC1 (); \ -+ TYPE value2 = FUNC2 (); \ -+ return value1 + value2; \ -+} -+ -+#ifndef NO_ARG -+#ifndef NO_ADD -+FLOAT_ARG (add, +) -+DOUBLE_ARG (add, +) -+FLOAT128_ARG (add, +) -+LDOUBLE_ARG (add, +) -+#endif -+ -+#ifndef NO_SUB -+FLOAT_ARG (sub, -) -+DOUBLE_ARG (sub, -) -+FLOAT128_ARG (sub, -) -+LDOUBLE_ARG (sub, -) -+#endif -+ -+#ifndef NO_MUL -+FLOAT_ARG (mul, *) -+DOUBLE_ARG (mul, *) -+FLOAT128_ARG (mul, *) -+LDOUBLE_ARG (mul, *) -+#endif -+ -+#ifndef NO_DIV -+FLOAT_ARG (div, /) -+DOUBLE_ARG (div, /) -+FLOAT128_ARG (div, /) -+LDOUBLE_ARG (div, /) -+#endif -+#endif -+ -+#ifndef NO_PTR -+#ifndef NO_ADD -+FLOAT_PTR (add, +) -+DOUBLE_PTR (add, +) -+FLOAT128_PTR (add, +) -+LDOUBLE_PTR (add, +) -+#endif -+ -+#ifndef NO_SUB -+FLOAT_PTR (sub, -) -+DOUBLE_PTR (sub, -) -+FLOAT128_PTR (sub, -) -+LDOUBLE_PTR (sub, -) -+#endif -+ -+#ifndef NO_MUL -+FLOAT_PTR (mul, *) -+DOUBLE_PTR (mul, *) -+FLOAT128_PTR (mul, *) -+LDOUBLE_PTR (mul, *) -+#endif -+ -+#ifndef NO_DIV -+FLOAT_PTR (div, /) -+DOUBLE_PTR (div, /) -+FLOAT128_PTR (div, /) -+LDOUBLE_PTR (div, /) -+#endif -+#endif -+ -+#ifndef NO_CALL -+FLOAT_CALL () -+DOUBLE_CALL () -+FLOAT128_CALL () -+LDOUBLE_CALL () -+#endif -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/float128-complex-2.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/float128-complex-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/float128-complex-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/float128-complex-2.c 2016-06-27 18:25:58.000000000 +0000 -@@ -0,0 +1,160 @@ -+/* { dg-do compile { target { powerpc*-*-linux* } } } */ -+/* { dg-require-effective-target powerpc_float128_hw_ok } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-options "-O2 -mcpu=power9 -mfloat128 -mfloat128-hardware" } */ -+ -+#ifndef NO_FLOAT -+typedef _Complex float float_complex; -+extern float_complex cfloat1 (void); -+extern float_complex cfloat2 (void); -+ -+#define FLOAT_ARG(NAME, OP) ARG_OP(float, float_complex, NAME, OP) -+#define FLOAT_PTR(NAME, OP) PTR_OP(float, float_complex, NAME, OP) -+#define FLOAT_CALL() CALL_OP(float, float_complex, cfloat1, cfloat2) -+ -+#else -+#define FLOAT_ARG(NAME, OP) -+#define FLOAT_PTR(NAME, OP) -+#define FLOAT_CALL() -+#endif -+ -+#ifndef NO_DOUBLE -+typedef _Complex double double_complex; -+extern double_complex cdouble1 (void); -+extern double_complex cdouble2 (void); -+ -+#define DOUBLE_ARG(NAME, OP) ARG_OP(double, double_complex, NAME, OP) -+#define DOUBLE_PTR(NAME, OP) PTR_OP(double, double_complex, NAME, OP) -+#define DOUBLE_CALL() CALL_OP(double, double_complex, cdouble1, cdouble2) -+ -+#else -+#define DOUBLE_ARG(NAME, OP) -+#define DOUBLE_PTR(NAME, OP) -+#define DOUBLE_CALL() -+#endif -+ -+#ifndef NO_FLOAT128 -+#ifdef __VSX__ -+typedef _Complex float __attribute__((mode(KC))) float128_complex; -+#else -+typedef _Complex float __attribute__((mode(TC))) float128_complex; -+#endif -+ -+extern float128_complex cfloat128_1 (void); -+extern float128_complex cfloat128_2 (void); -+ -+#define FLOAT128_ARG(NAME, OP) ARG_OP(float128, float128_complex, NAME, OP) -+#define FLOAT128_PTR(NAME, OP) PTR_OP(float128, float128_complex, NAME, OP) -+#define FLOAT128_CALL() CALL_OP(float128, float128_complex, cfloat128_1, cfloat128_2) -+ -+#else -+#define FLOAT128_ARG(NAME, OP) -+#define FLOAT128_PTR(NAME, OP) -+#define FLOAT128_CALL() -+#endif -+ -+#ifndef NO_LDOUBLE -+typedef _Complex long double ldouble_complex; -+extern ldouble_complex cldouble1 (void); -+extern ldouble_complex cldouble2 (void); -+ -+#define LDOUBLE_ARG(NAME, OP) ARG_OP(ldouble, ldouble_complex, NAME, OP) -+#define LDOUBLE_PTR(NAME, OP) PTR_OP(ldouble, ldouble_complex, NAME, OP) -+#define LDOUBLE_CALL() CALL_OP(ldouble, ldouble_complex, cldouble1, cldouble2) -+ -+#else -+#define LDOUBLE_ARG(NAME, OP) -+#define LDOUBLE_PTR(NAME, OP) -+#define LDOUBLE_CALL() -+#endif -+ -+ -+#define ARG_OP(SUFFIX, TYPE, NAME, OP) \ -+TYPE arg_ ## NAME ## _ ## SUFFIX (TYPE a, TYPE b) \ -+{ \ -+ return a OP b; \ -+} -+ -+#define PTR_OP(SUFFIX, TYPE, NAME, OP) \ -+void ptr_ ## NAME ## _ ## SUFFIX (TYPE *p, TYPE *a, TYPE *b) \ -+{ \ -+ *p = *a OP *b; \ -+} -+ -+#define CALL_OP(SUFFIX, TYPE, FUNC1, FUNC2) \ -+TYPE call_ ## SUFFIX (void) \ -+{ \ -+ TYPE value1 = FUNC1 (); \ -+ TYPE value2 = FUNC2 (); \ -+ return value1 + value2; \ -+} -+ -+#ifndef NO_ARG -+#ifndef NO_ADD -+FLOAT_ARG (add, +) -+DOUBLE_ARG (add, +) -+FLOAT128_ARG (add, +) -+LDOUBLE_ARG (add, +) -+#endif -+ -+#ifndef NO_SUB -+FLOAT_ARG (sub, -) -+DOUBLE_ARG (sub, -) -+FLOAT128_ARG (sub, -) -+LDOUBLE_ARG (sub, -) -+#endif -+ -+#ifndef NO_MUL -+FLOAT_ARG (mul, *) -+DOUBLE_ARG (mul, *) -+FLOAT128_ARG (mul, *) -+LDOUBLE_ARG (mul, *) -+#endif -+ -+#ifndef NO_DIV -+FLOAT_ARG (div, /) -+DOUBLE_ARG (div, /) -+FLOAT128_ARG (div, /) -+LDOUBLE_ARG (div, /) -+#endif -+#endif -+ -+#ifndef NO_PTR -+#ifndef NO_ADD -+FLOAT_PTR (add, +) -+DOUBLE_PTR (add, +) -+FLOAT128_PTR (add, +) -+LDOUBLE_PTR (add, +) -+#endif -+ -+#ifndef NO_SUB -+FLOAT_PTR (sub, -) -+DOUBLE_PTR (sub, -) -+FLOAT128_PTR (sub, -) -+LDOUBLE_PTR (sub, -) -+#endif -+ -+#ifndef NO_MUL -+FLOAT_PTR (mul, *) -+DOUBLE_PTR (mul, *) -+FLOAT128_PTR (mul, *) -+LDOUBLE_PTR (mul, *) -+#endif -+ -+#ifndef NO_DIV -+FLOAT_PTR (div, /) -+DOUBLE_PTR (div, /) -+FLOAT128_PTR (div, /) -+LDOUBLE_PTR (div, /) -+#endif -+#endif -+ -+#ifndef NO_CALL -+FLOAT_CALL () -+DOUBLE_CALL () -+FLOAT128_CALL () -+LDOUBLE_CALL () -+#endif -+ -+/* { dg-final { scan-assembler "xsaddqp" } } */ -+/* { dg-final { scan-assembler "xssubqp" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/inf128-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/inf128-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/inf128-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/inf128-1.c 2016-07-01 17:19:15.000000000 +0000 -@@ -0,0 +1,55 @@ -+/* { dg-do run { target { powerpc64*-*-* && vsx_hw } } } */ -+/* { dg-options "-mfloat128 -mvsx" } */ -+ -+void abort (); -+ -+typedef unsigned long long int uint64_t; -+ -+typedef union -+{ -+ __float128 value; -+ -+ struct -+ { -+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ -+ unsigned negative:1; -+ unsigned exponent:15; -+ unsigned quiet_nan:1; -+ uint64_t mant_high:47; -+ uint64_t mant_low:64; -+#else -+ uint64_t mant_low:64; -+ uint64_t mant_high:47; -+ unsigned quiet_nan:1; -+ unsigned exponent:15; -+ unsigned negative:1; -+#endif -+ } nan; -+ -+} ieee854_float128; -+ -+int -+main (int argc, int *argv[]) -+{ -+ ieee854_float128 y; -+ -+ y.value = __builtin_infq (); -+ -+ if (y.nan.negative != 0 -+ || y.nan.exponent != 0x7fff -+ || y.nan.quiet_nan != 0 -+ || y.nan.mant_high != 0 -+ || y.nan.mant_low != 0) -+ abort (); -+ -+ y.value = __builtin_huge_valq (); -+ -+ if (y.nan.negative != 0 -+ || y.nan.exponent != 0x7fff -+ || y.nan.quiet_nan != 0 -+ || y.nan.mant_high != 0 -+ || y.nan.mant_low != 0) -+ abort (); -+ -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/mulkc3-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/mulkc3-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/mulkc3-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/mulkc3-1.c 2016-07-15 20:22:23.000000000 +0000 -@@ -0,0 +1,23 @@ -+/* { dg-do run { target { powerpc64*-*-* && vsx_hw } } } */ -+/* { dg-require-effective-target powerpc_p8vector_ok } */ -+/* { dg-options "-mfloat128 -mvsx" } */ -+ -+void abort (); -+ -+typedef __complex float __cfloat128 __attribute__((mode(KC))); -+ -+__cfloat128 multiply (__cfloat128 x, __cfloat128 y) -+{ -+ return x * y; -+} -+ -+__cfloat128 z, a; -+ -+int main () -+{ -+ z = multiply (2.0q + 1.0jq, 3.0q + 1.0jq); -+ a = 5.0q + 5.0jq; -+ if (z != a) -+ abort (); -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/nan128-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/nan128-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/nan128-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/nan128-1.c 2016-07-01 17:19:15.000000000 +0000 -@@ -0,0 +1,77 @@ -+/* { dg-do run { target { powerpc64*-*-* && vsx_hw } } } */ -+/* { dg-options "-mfloat128 -mvsx" } */ -+ -+#include <stdio.h> -+ -+void abort (); -+ -+typedef unsigned long long int uint64_t; -+ -+typedef union -+{ -+ __float128 value; -+ -+ struct -+ { -+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ -+ unsigned negative:1; -+ unsigned exponent:15; -+ unsigned quiet_nan:1; -+ uint64_t mant_high:47; -+ uint64_t mant_low:64; -+#else -+ uint64_t mant_low:64; -+ uint64_t mant_high:47; -+ unsigned quiet_nan:1; -+ unsigned exponent:15; -+ unsigned negative:1; -+#endif -+ } nan; -+ -+} ieee854_float128; -+ -+int -+main (int argc, int *argv[]) -+{ -+ ieee854_float128 y; -+ -+ y.value = __builtin_nanq ("1"); -+ -+ if (y.nan.negative != 0 -+ || y.nan.exponent != 0x7fff -+ || y.nan.quiet_nan != 1 -+ || y.nan.mant_high != 0 -+ || y.nan.mant_low != 1) -+ abort (); -+ -+ y.value = __builtin_nanq ("0x2ab3c"); -+ -+ if (y.nan.negative != 0 -+ || y.nan.exponent != 0x7fff -+ || y.nan.quiet_nan != 1 -+ || y.nan.mant_high != 0 -+ || y.nan.mant_low != 0x2ab3c) -+ abort (); -+ -+ y.value = __builtin_nansq ("1"); -+ -+ if ( -+ y.nan.negative != 0 -+ || y.nan.exponent != 0x7fff -+ || y.nan.quiet_nan != 0 -+ || y.nan.mant_high != 0 -+ || y.nan.mant_low != 1 -+ ) -+ abort (); -+ -+ y.value = __builtin_nansq ("0x2ab3c"); -+ -+ if (y.nan.negative != 0 -+ || y.nan.exponent != 0x7fff -+ || y.nan.quiet_nan != 0 -+ || y.nan.mant_high != 0 -+ || y.nan.mant_low != 0x2ab3c) -+ abort (); -+ -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c 2014-11-04 12:09:50.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c 2016-06-01 22:09:14.000000000 +0000 -@@ -2,7 +2,7 @@ - /* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ - /* { dg-require-effective-target powerpc_p8vector_ok } */ - /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ --/* { dg-options "-mcpu=power8 -O3 -mvsx-timode" } */ -+/* { dg-options "-mcpu=power8 -O3 -mvsx-timode -mlra" } */ - - #include <altivec.h> - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-3.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-3.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-3.c 2016-03-01 21:31:47.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-3.c 2016-07-08 14:51:44.000000000 +0000 -@@ -1,6 +1,6 @@ - /* { dg-do compile { target { powerpc64le-*-* } } } */ - /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ --/* { dg-options "-mcpu=power9 -O3" } */ -+/* { dg-options "-mcpu=power9 -O3 -mfloat128" } */ - /* { dg-require-effective-target powerpc_p9vector_ok } */ - /* { dg-final { scan-assembler "lxvx" } } */ - /* { dg-final { scan-assembler "stxvx" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-minmax-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-minmax-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-minmax-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-minmax-1.c 2016-06-02 19:41:47.000000000 +0000 -@@ -0,0 +1,171 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-options "-mcpu=power9 -O2 -mpower9-minmax -ffast-math" } */ -+/* { dg-final { scan-assembler-not "fsel" } } */ -+/* { dg-final { scan-assembler "xscmpeqdp" } } */ -+/* { dg-final { scan-assembler "xscmpgtdp" } } */ -+/* { dg-final { scan-assembler "xscmpgedp" } } */ -+/* { dg-final { scan-assembler-not "xscmpodp" } } */ -+/* { dg-final { scan-assembler-not "xscmpudp" } } */ -+/* { dg-final { scan-assembler "xsmaxcdp" } } */ -+/* { dg-final { scan-assembler-not "xsmaxdp" } } */ -+/* { dg-final { scan-assembler "xsmincdp" } } */ -+/* { dg-final { scan-assembler-not "xsmindp" } } */ -+/* { dg-final { scan-assembler "xxsel" } } */ -+ -+double -+dbl_max1 (double a, double b) -+{ -+ return (a >= b) ? a : b; -+} -+ -+double -+dbl_max2 (double a, double b) -+{ -+ return (a > b) ? a : b; -+} -+ -+double -+dbl_min1 (double a, double b) -+{ -+ return (a < b) ? a : b; -+} -+ -+double -+dbl_min2 (double a, double b) -+{ -+ return (a <= b) ? a : b; -+} -+ -+double -+dbl_cmp_eq (double a, double b, double c, double d) -+{ -+ return (a == b) ? c : d; -+} -+ -+double -+dbl_cmp_ne (double a, double b, double c, double d) -+{ -+ return (a != b) ? c : d; -+} -+ -+double -+dbl_cmp_gt (double a, double b, double c, double d) -+{ -+ return (a > b) ? c : d; -+} -+ -+double -+dbl_cmp_ge (double a, double b, double c, double d) -+{ -+ return (a >= b) ? c : d; -+} -+ -+double -+dbl_cmp_lt (double a, double b, double c, double d) -+{ -+ return (a < b) ? c : d; -+} -+ -+double -+dbl_cmp_le (double a, double b, double c, double d) -+{ -+ return (a <= b) ? c : d; -+} -+ -+float -+flt_max1 (float a, float b) -+{ -+ return (a >= b) ? a : b; -+} -+ -+float -+flt_max2 (float a, float b) -+{ -+ return (a > b) ? a : b; -+} -+ -+float -+flt_min1 (float a, float b) -+{ -+ return (a < b) ? a : b; -+} -+ -+float -+flt_min2 (float a, float b) -+{ -+ return (a <= b) ? a : b; -+} -+ -+float -+flt_cmp_eq (float a, float b, float c, float d) -+{ -+ return (a == b) ? c : d; -+} -+ -+float -+flt_cmp_ne (float a, float b, float c, float d) -+{ -+ return (a != b) ? c : d; -+} -+ -+float -+flt_cmp_gt (float a, float b, float c, float d) -+{ -+ return (a > b) ? c : d; -+} -+ -+float -+flt_cmp_ge (float a, float b, float c, float d) -+{ -+ return (a >= b) ? c : d; -+} -+ -+float -+flt_cmp_lt (float a, float b, float c, float d) -+{ -+ return (a < b) ? c : d; -+} -+ -+float -+flt_cmp_le (float a, float b, float c, float d) -+{ -+ return (a <= b) ? c : d; -+} -+ -+double -+dbl_flt_max1 (float a, float b) -+{ -+ return (a > b) ? a : b; -+} -+ -+double -+dbl_flt_max2 (double a, float b) -+{ -+ return (a > b) ? a : b; -+} -+ -+double -+dbl_flt_max3 (float a, double b) -+{ -+ return (a > b) ? a : b; -+} -+ -+double -+dbl_flt_min1 (float a, float b) -+{ -+ return (a < b) ? a : b; -+} -+ -+double -+dbl_flt_min2 (double a, float b) -+{ -+ return (a < b) ? a : b; -+} -+ -+double -+dbl_flt_min3 (float a, double b) -+{ -+ return (a < b) ? a : b; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-minmax-2.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-minmax-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-minmax-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-minmax-2.c 2016-06-02 19:41:47.000000000 +0000 -@@ -0,0 +1,191 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-options "-mcpu=power9 -O2 -mpower9-minmax" } */ -+/* { dg-final { scan-assembler-not "fsel" } } */ -+/* { dg-final { scan-assembler "xscmpeqdp" } } */ -+/* { dg-final { scan-assembler "xscmpgtdp" } } */ -+/* { dg-final { scan-assembler-not "xscmpodp" } } */ -+/* { dg-final { scan-assembler-not "xscmpudp" } } */ -+/* { dg-final { scan-assembler "xsmaxcdp" } } */ -+/* { dg-final { scan-assembler-not "xsmaxdp" } } */ -+/* { dg-final { scan-assembler "xsmincdp" } } */ -+/* { dg-final { scan-assembler-not "xsmindp" } } */ -+/* { dg-final { scan-assembler "xxsel" } } */ -+ -+/* Due to NaN support, <= and >= are not handled presently unless -ffast-math -+ is used. At some point this will be fixed and the xscmpgedp instruction can -+ be generated normally. The <= and >= tests are bracketed with -+ #ifdef DO_GE_LE. */ -+ -+#ifdef DO_GE_LE -+double -+dbl_max1 (double a, double b) -+{ -+ return (a >= b) ? a : b; -+} -+#endif -+ -+double -+dbl_max2 (double a, double b) -+{ -+ return (a > b) ? a : b; -+} -+ -+double -+dbl_min1 (double a, double b) -+{ -+ return (a < b) ? a : b; -+} -+ -+#ifdef DO_GE_LE -+double -+dbl_min2 (double a, double b) -+{ -+ return (a <= b) ? a : b; -+} -+#endif -+ -+double -+dbl_cmp_eq (double a, double b, double c, double d) -+{ -+ return (a == b) ? c : d; -+} -+ -+double -+dbl_cmp_ne (double a, double b, double c, double d) -+{ -+ return (a != b) ? c : d; -+} -+ -+double -+dbl_cmp_gt (double a, double b, double c, double d) -+{ -+ return (a > b) ? c : d; -+} -+ -+#ifdef DO_GE_LE -+double -+dbl_cmp_ge (double a, double b, double c, double d) -+{ -+ return (a >= b) ? c : d; -+} -+#endif -+ -+double -+dbl_cmp_lt (double a, double b, double c, double d) -+{ -+ return (a < b) ? c : d; -+} -+ -+#ifdef DO_GE_LE -+double -+dbl_cmp_le (double a, double b, double c, double d) -+{ -+ return (a <= b) ? c : d; -+} -+#endif -+ -+#ifdef DO_GE_LE -+float -+flt_max1 (float a, float b) -+{ -+ return (a >= b) ? a : b; -+} -+#endif -+ -+float -+flt_max2 (float a, float b) -+{ -+ return (a > b) ? a : b; -+} -+ -+float -+flt_min1 (float a, float b) -+{ -+ return (a < b) ? a : b; -+} -+ -+#ifdef DO_GE_LE -+float -+flt_min2 (float a, float b) -+{ -+ return (a <= b) ? a : b; -+} -+#endif -+ -+float -+flt_cmp_eq (float a, float b, float c, float d) -+{ -+ return (a == b) ? c : d; -+} -+ -+float -+flt_cmp_ne (float a, float b, float c, float d) -+{ -+ return (a != b) ? c : d; -+} -+ -+float -+flt_cmp_gt (float a, float b, float c, float d) -+{ -+ return (a > b) ? c : d; -+} -+ -+#ifdef DO_GE_LE -+float -+flt_cmp_ge (float a, float b, float c, float d) -+{ -+ return (a >= b) ? c : d; -+} -+#endif -+ -+float -+flt_cmp_lt (float a, float b, float c, float d) -+{ -+ return (a < b) ? c : d; -+} -+ -+#ifdef DO_GE_LE -+float -+flt_cmp_le (float a, float b, float c, float d) -+{ -+ return (a <= b) ? c : d; -+} -+#endif -+ -+double -+dbl_flt_max1 (float a, float b) -+{ -+ return (a > b) ? a : b; -+} -+ -+double -+dbl_flt_max2 (double a, float b) -+{ -+ return (a > b) ? a : b; -+} -+ -+double -+dbl_flt_max3 (float a, double b) -+{ -+ return (a > b) ? a : b; -+} -+ -+double -+dbl_flt_min1 (float a, float b) -+{ -+ return (a < b) ? a : b; -+} -+ -+double -+dbl_flt_min2 (double a, float b) -+{ -+ return (a < b) ? a : b; -+} -+ -+double -+dbl_flt_min3 (float a, double b) -+{ -+ return (a < b) ? a : b; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-permute.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-permute.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-permute.c 2016-03-01 21:31:47.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-permute.c 2016-06-01 23:23:42.000000000 +0000 -@@ -1,4 +1,4 @@ --/* { dg-do compile { target { powerpc64le-*-* } } } */ -+/* { dg-do compile { target { powerpc64*-*-* } } } */ - /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ - /* { dg-options "-mcpu=power9 -O2" } */ - /* { dg-require-effective-target powerpc_p9vector_ok } */ -@@ -17,5 +17,6 @@ - return vec_perm (a, b, mask); - } - -+/* expect xxpermr on little-endian, xxperm on big-endian */ - /* { dg-final { scan-assembler "xxperm" } } */ - /* { dg-final { scan-assembler-not "vperm" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-splat-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-splat-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-splat-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-splat-1.c 2016-06-09 23:28:23.000000000 +0000 -@@ -0,0 +1,27 @@ -+/* { dg-do compile { target { powerpc64le-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-options "-mcpu=power9 -O2" } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+ -+#include <altivec.h> -+ -+vector int -+foo_r (int a) -+{ -+ return (vector int) { a, a, a, a }; /* mtvsrws */ -+} -+ -+vector int -+foo_r2 (int a) -+{ -+ return vec_splats (a); /* mtvsrws */ -+} -+ -+vector int -+foo_p (int *a) -+{ -+ return (vector int) { *a, *a, *a, *a }; /* lxvwsx */ -+} -+ -+/* { dg-final { scan-assembler-times "mtvsrws" 2 } } */ -+/* { dg-final { scan-assembler-times "lxvwsx" 1 } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-splat-2.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-splat-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-splat-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-splat-2.c 2016-06-09 23:28:23.000000000 +0000 -@@ -0,0 +1,38 @@ -+/* { dg-do compile { target { powerpc64le-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-options "-mcpu=power9 -O2" } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+ -+#include <altivec.h> -+ -+vector float -+foo_r (float a) -+{ -+ return (vector float) { a, a, a, a }; /* xscvdpspn/xxspltw */ -+} -+ -+vector float -+foo_r2 (float a) -+{ -+ return vec_splats (a); /* xscvdpspn/xxspltw */ -+} -+ -+vector float -+foo_g (float *a) -+{ -+ float f = *a; -+ -+ __asm__ (" # %0" : "+r" (f)); -+ return (vector float) { f, f, f, f }; /* mtvsrws */ -+} -+ -+vector float -+foo_p (float *a) -+{ -+ return (vector float) { *a, *a, *a, *a }; /* lxvwsx */ -+} -+ -+/* { dg-final { scan-assembler-times "xscvdpspn" 2 } } */ -+/* { dg-final { scan-assembler-times "xxspltw" 2 } } */ -+/* { dg-final { scan-assembler-times "mtvsrws" 1 } } */ -+/* { dg-final { scan-assembler-times "lxvwsx" 1 } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-splat-3.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-splat-3.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-splat-3.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-splat-3.c 2016-06-09 23:28:23.000000000 +0000 -@@ -0,0 +1,61 @@ -+/* { dg-do compile { target { powerpc64le-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-options "-mcpu=power9 -O2" } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+ -+#include <altivec.h> -+ -+typedef vector signed char v16qi_t; -+typedef vector short v8hi_t; -+typedef vector int v4si_t; -+typedef vector long long v2di_t; -+ -+void v16qi_0a (v16qi_t *p) { *p = (v16qi_t) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; } -+void v8hi_0a (v8hi_t *p) { *p = (v8hi_t) { 0, 0, 0, 0, 0, 0, 0, 0 }; } -+void v4si_0a (v4si_t *p) { *p = (v4si_t) { 0, 0, 0, 0 }; } -+void v2di_0a (v2di_t *p) { *p = (v2di_t) { 0, 0 }; } -+ -+void v16qi_0b (v16qi_t *p) { *p = (v16qi_t) vec_splats ((signed char)0); } -+void v8hi_0b (v8hi_t *p) { *p = (v8hi_t) vec_splats ((short)0); } -+void v4si_0b (v4si_t *p) { *p = (v4si_t) vec_splats ((int)0); } -+void v2di_0b (v2di_t *p) { *p = (v2di_t) vec_splats ((long long)0); } -+ -+void v16qi_m1a (v16qi_t *p) { *p = (v16qi_t) { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; } -+void v8hi_m1a (v8hi_t *p) { *p = (v8hi_t) { -1, -1, -1, -1, -1, -1, -1, -1 }; } -+void v4si_m1a (v4si_t *p) { *p = (v4si_t) { -1, -1, -1, -1 }; } -+void v2di_m1a (v2di_t *p) { *p = (v2di_t) { -1, -1 }; } -+ -+void v16qi_m1b (v16qi_t *p) { *p = (v16qi_t) vec_splats ((signed char)-1); } -+void v8hi_m1b (v8hi_t *p) { *p = (v8hi_t) vec_splats ((short)-1); } -+void v4si_m1b (v4si_t *p) { *p = (v4si_t) vec_splats ((int)-1); } -+void v2di_m1b (v2di_t *p) { *p = (v2di_t) vec_splats ((long long)-1); } -+ -+void v16qi_5a (v16qi_t *p) { *p = (v16qi_t) { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; } -+void v8hi_5a (v8hi_t *p) { *p = (v8hi_t) { 5, 5, 5, 5, 5, 5, 5, 5 }; } -+void v4si_5a (v4si_t *p) { *p = (v4si_t) { 5, 5, 5, 5 }; } -+void v2di_5a (v2di_t *p) { *p = (v2di_t) { 5, 5 }; } -+ -+void v16qi_5b (v16qi_t *p) { *p = (v16qi_t) vec_splats ((signed char)5); } -+void v8hi_5b (v8hi_t *p) { *p = (v8hi_t) vec_splats ((short)5); } -+void v4si_5b (v4si_t *p) { *p = (v4si_t) vec_splats ((int)5); } -+void v2di_5b (v2di_t *p) { *p = (v2di_t) vec_splats ((long long)5); } -+ -+void v16qi_33a (v16qi_t *p) { *p = (v16qi_t) { 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33 }; } -+void v8hi_33a (v8hi_t *p) { *p = (v8hi_t) { 33, 33, 33, 33, 33, 33, 33, 33 }; } -+void v4si_33a (v4si_t *p) { *p = (v4si_t) { 33, 33, 33, 33 }; } -+void v2di_33a (v2di_t *p) { *p = (v2di_t) { 33, 33 }; } -+ -+void v16qi_33b (v16qi_t *p) { *p = (v16qi_t) vec_splats ((signed char)33); } -+void v8hi_33b (v8hi_t *p) { *p = (v8hi_t) vec_splats ((short)33); } -+void v4si_33b (v4si_t *p) { *p = (v4si_t) vec_splats ((int)33); } -+void v2di_33b (v2di_t *p) { *p = (v2di_t) vec_splats ((long long)33); } -+ -+/* { dg-final { scan-assembler "xxspltib" } } */ -+/* { dg-final { scan-assembler "vextsb2d" } } */ -+/* { dg-final { scan-assembler "vextsb2w" } } */ -+/* { dg-final { scan-assembler "vupk\[hl\]sb" } } */ -+/* { dg-final { scan-assembler-not "lxvd2x" } } */ -+/* { dg-final { scan-assembler-not "lxvw4x" } } */ -+/* { dg-final { scan-assembler-not "lxv " } } */ -+/* { dg-final { scan-assembler-not "lxvx" } } */ -+/* { dg-final { scan-assembler-not "lvx" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-splat-4.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-splat-4.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-splat-4.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-splat-4.c 2016-06-09 23:28:23.000000000 +0000 -@@ -0,0 +1,10 @@ -+/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-options "-mcpu=power9 -O2" } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+ -+#include <altivec.h> -+ -+vector long long foo (long long a) { return (vector long long) { a, a }; } -+ -+/* { dg-final { scan-assembler "mtvsrdd" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-vneg.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-vneg.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-vneg.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-vneg.c 2016-06-01 23:23:42.000000000 +0000 -@@ -0,0 +1,12 @@ -+/* { dg-do compile { target { powerpc64*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-options "-mcpu=power9 -O2" } */ -+ -+/* Verify P9 vector negate instructions. */ -+ -+vector long long v2di_neg (vector long long a) { return -a; } -+vector int v4si_neg (vector int a) { return -a; } -+ -+/* { dg-final { scan-assembler "vnegd" } } */ -+/* { dg-final { scan-assembler "vnegw" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-vparity.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-vparity.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-vparity.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-vparity.c 2016-06-01 23:23:42.000000000 +0000 -@@ -0,0 +1,107 @@ -+/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */ -+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-options "-mcpu=power9 -O2 -mlra -mvsx-timode" } */ -+ -+#include <altivec.h> -+ -+vector int -+parity_v4si_1s (vector int a) -+{ -+ return vec_vprtyb (a); -+} -+ -+vector int -+parity_v4si_2s (vector int a) -+{ -+ return vec_vprtybw (a); -+} -+ -+vector unsigned int -+parity_v4si_1u (vector unsigned int a) -+{ -+ return vec_vprtyb (a); -+} -+ -+vector unsigned int -+parity_v4si_2u (vector unsigned int a) -+{ -+ return vec_vprtybw (a); -+} -+ -+vector long long -+parity_v2di_1s (vector long long a) -+{ -+ return vec_vprtyb (a); -+} -+ -+vector long long -+parity_v2di_2s (vector long long a) -+{ -+ return vec_vprtybd (a); -+} -+ -+vector unsigned long long -+parity_v2di_1u (vector unsigned long long a) -+{ -+ return vec_vprtyb (a); -+} -+ -+vector unsigned long long -+parity_v2di_2u (vector unsigned long long a) -+{ -+ return vec_vprtybd (a); -+} -+ -+vector __int128_t -+parity_v1ti_1s (vector __int128_t a) -+{ -+ return vec_vprtyb (a); -+} -+ -+vector __int128_t -+parity_v1ti_2s (vector __int128_t a) -+{ -+ return vec_vprtybq (a); -+} -+ -+__int128_t -+parity_ti_3s (__int128_t a) -+{ -+ return vec_vprtyb (a); -+} -+ -+__int128_t -+parity_ti_4s (__int128_t a) -+{ -+ return vec_vprtybq (a); -+} -+ -+vector __uint128_t -+parity_v1ti_1u (vector __uint128_t a) -+{ -+ return vec_vprtyb (a); -+} -+ -+vector __uint128_t -+parity_v1ti_2u (vector __uint128_t a) -+{ -+ return vec_vprtybq (a); -+} -+ -+__uint128_t -+parity_ti_3u (__uint128_t a) -+{ -+ return vec_vprtyb (a); -+} -+ -+__uint128_t -+parity_ti_4u (__uint128_t a) -+{ -+ return vec_vprtybq (a); -+} -+ -+/* { dg-final { scan-assembler "vprtybd" } } */ -+/* { dg-final { scan-assembler "vprtybq" } } */ -+/* { dg-final { scan-assembler "vprtybw" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-vpermr.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-vpermr.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/p9-vpermr.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/p9-vpermr.c 2016-06-01 23:23:42.000000000 +0000 -@@ -0,0 +1,21 @@ -+/* { dg-do compile { target { powerpc64le-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-options "-mcpu=power9 -O2" } */ -+ -+/* Test generation of VPERMR/XXPERMR on ISA 3.0 in little endian. */ -+ -+#include <altivec.h> -+ -+vector long long -+permute (vector long long *p, vector long long *q, vector unsigned char mask) -+{ -+ vector long long a = *p; -+ vector long long b = *q; -+ -+ /* Force a, b to be in altivec registers to select vpermr insn. */ -+ __asm__ (" # a: %x0, b: %x1" : "+v" (a), "+v" (b)); -+ -+ return vec_perm (a, b, mask); -+} -+ -+/* { dg-final { scan-assembler "vpermr\|xxpermr" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr47755.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr47755.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr47755.c 2014-11-04 12:09:50.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr47755.c 2016-06-09 23:28:23.000000000 +0000 -@@ -3,7 +3,7 @@ - /* { dg-require-effective-target powerpc_vsx_ok } */ - /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */ - /* { dg-options "-O3 -mcpu=power7" } */ --/* { dg-final { scan-assembler "xxlxor" } } */ -+/* { dg-final { scan-assembler "xxlxor\|vspltis\[bhw\]" } } */ - /* { dg-final { scan-assembler-not "lxvd2x" } } */ - /* { dg-final { scan-assembler-not "lxvw4x" } } */ - /* { dg-final { scan-assembler-not "lvx" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr68805.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr68805.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr68805.c 2015-12-17 01:01:24.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr68805.c 2016-06-01 22:09:14.000000000 +0000 -@@ -1,6 +1,6 @@ - /* { dg-do compile { target powerpc64le-*-* } } */ - /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ --/* { dg-options "-O2 -mvsx-timode -mcpu=power8" } */ -+/* { dg-options "-O2 -mvsx-timode -mcpu=power8 -mlra" } */ - - typedef struct bar { - void *a; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr70963.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr70963.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr70963.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr70963.c 2016-05-15 21:48:43.000000000 +0000 -@@ -0,0 +1,44 @@ -+/* { dg-do run { target powerpc64*-*-* } } */ -+/* { dg-require-effective-target p8vector_hw } */ -+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ -+/* { dg-options "-mcpu=power8" } */ -+ -+#include <stdlib.h> -+#include <stdio.h> -+#include <altivec.h> -+ -+static int failed; -+static void test (void); -+ -+static void check (int result, const char *name) -+{ -+ if (!result) -+ { -+ failed++; -+ printf ("fail %s\n", name); -+ } -+} -+ -+int main (void) -+{ -+ test (); -+ if (failed) -+ abort (); -+ return 0; -+} -+ -+vector double x = { 81.0, 76.0 }; -+vector long long y = { 81, 76 }; -+ -+static void test() -+{ -+ vector long long a = vec_cts (x, 0); -+ vector double b = vec_ctf (a, 0); -+ vector long long c = __builtin_vsx_xvcvdpuxds_scale (x, 0); -+ vector double d = vec_ctf (c, 0); -+ check (vec_all_eq (a, y), "vec_cts"); -+ check (vec_all_eq (b, x), "vec_ctf"); -+ check (vec_all_eq (c, y), "xvcvdpuxds"); -+ check (vec_all_eq (d, x), "vec_ctf unsigned"); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr71186.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr71186.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr71186.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr71186.c 2016-06-09 23:28:23.000000000 +0000 -@@ -0,0 +1,32 @@ -+/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-options "-mcpu=power9 -O2" } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+ -+static unsigned short x[(16384/sizeof(unsigned short))] __attribute__ ((aligned (16))); -+static unsigned short y[(16384/sizeof(unsigned short))] __attribute__ ((aligned (16))); -+static unsigned short a; -+ -+void obfuscate(void *a, ...); -+ -+static void __attribute__((noinline)) do_one(void) -+{ -+ unsigned long i; -+ -+ obfuscate(x, y, &a); -+ -+ for (i = 0; i < (16384/sizeof(unsigned short)); i++) -+ y[i] = a * x[i]; -+ -+ obfuscate(x, y, &a); -+} -+ -+int main(void) -+{ -+ unsigned long i; -+ -+ for (i = 0; i < 1000000; i++) -+ do_one(); -+ -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr71493-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr71493-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr71493-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr71493-1.c 2016-07-19 03:39:34.000000000 +0000 -@@ -0,0 +1,13 @@ -+/* { dg-do compile { target { powerpc*-*-linux* && ilp32 } } } */ -+/* { dg-options "-O2 -msvr4-struct-return" } */ -+ -+struct S1 { float f; }; -+ -+struct S1 foo1 (void) -+{ -+ struct S1 s = { 1.0f }; -+ return s; -+} -+ -+/* { dg-final { scan-assembler "lwz" } } */ -+/* { dg-final { scan-assembler-not "lfs" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr71493-2.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr71493-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr71493-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr71493-2.c 2016-07-19 03:39:34.000000000 +0000 -@@ -0,0 +1,13 @@ -+/* { dg-do compile { target { powerpc*-*-linux* && ilp32 } } } */ -+/* { dg-options "-O2 -msvr4-struct-return" } */ -+ -+struct S2 { double d; }; -+ -+struct S2 foo2 (void) -+{ -+ struct S2 s = { 1.0 }; -+ return s; -+} -+ -+/* { dg-final { scan-assembler "lwz" } } */ -+/* { dg-final { scan-assembler-not "lfd" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr71656-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr71656-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr71656-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr71656-1.c 2016-07-01 17:56:54.000000000 +0000 -@@ -0,0 +1,20 @@ -+/* Test for reload ICE arising from POWER9 Vector Dform code generation. */ -+/* { dg-do compile } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-options "-O1 -mcpu=power9 -mpower9-dform-vector -mno-lra" } */ -+ -+typedef __attribute__((altivec(vector__))) int type_t; -+type_t -+func (type_t *src) -+{ -+ asm volatile ("# force the base reg on the load below to be spilled" -+ : /* no outputs */ -+ : /* no inputs */ -+ : "r0", "r3", "r4", "r5", "r6", "r7", -+ "r8", "r9", "r10", "r11", "r12", "r14", "r15", -+ "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", -+ "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31"); -+ return src[1]; -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr71656-2.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr71656-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr71656-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr71656-2.c 2016-07-01 17:56:54.000000000 +0000 -@@ -0,0 +1,47 @@ -+/* Test for reload ICE arising from POWER9 Vector Dform code generation. */ -+/* { dg-do compile } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-options "-O3 -mcpu=power9 -mpower9-dform-vector -mno-lra -funroll-loops -fno-aggressive-loop-optimizations" } */ -+ -+typedef double vec[3]; -+struct vec_t -+{ -+ vec x; -+ vec y; -+}; -+int a, j, k, l, m, n, o, p, q; -+double b, i; -+vec c; -+double h[6]; -+void func1 (vec); -+ -+void -+func2 (double *b) -+{ -+ for (; k; k--) -+ for (; j <= k;) -+ for (; m <= q; m++) -+ for (; n <= k; n++) -+ for (; o <= l; o++) -+ { -+ j = p + m + n + o; -+ h[j] = i; -+ } -+} -+ -+void -+func3 (void) -+{ -+ struct vec_t d; -+ func1 (d.y); -+ func2 (&b); -+ for (; a;) -+ { -+ double *e = d.y, *g; -+ double f; -+ c[0] = g[0] + f * e[0]; -+ c[1] = g[1] + f * e[1]; -+ func1 (c); -+ } -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr71670.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr71670.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr71670.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr71670.c 2016-07-04 09:52:38.000000000 +0000 -@@ -0,0 +1,7 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-options "-mcpu=power9 -O1" } */ -+ -+volatile int a; -+int b; -+void fn1(void) { b + (long)b || a; } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr71698.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr71698.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr71698.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr71698.c 2016-07-01 16:06:26.000000000 +0000 -@@ -0,0 +1,13 @@ -+/* Test for a reload ICE arising from trying to direct move a TDmode value. */ -+/* { dg-do compile } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-require-effective-target dfp } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-options "-O1 -mcpu=power9 -mno-lra" } */ -+ -+extern void testvad128 (int n, ...); -+void -+testitd128 (_Decimal128 g01d128) -+{ -+ testvad128 (1, g01d128); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr71720.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr71720.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr71720.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr71720.c 2016-07-07 22:44:15.000000000 +0000 -@@ -0,0 +1,15 @@ -+/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-options "-mcpu=power9 -O2" } */ -+ -+/* Verify that we generate xxspltw <reg>,<reg>,0 for V4SFmode splat. */ -+ -+vector float -+splat_v4sf (float f) -+{ -+ return (vector float) { f, f, f, f }; -+} -+ -+/* { dg-final { scan-assembler "xscvdpspn " } } */ -+/* { dg-final { scan-assembler "xxspltw .*,.*,0" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr71763.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr71763.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr71763.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr71763.c 2016-07-15 20:58:23.000000000 +0000 -@@ -0,0 +1,25 @@ -+// PR target/71763 -+// { dg-do compile } -+// { dg-options "-O1 -mvsx" } -+ -+int a, b; -+float c; -+ -+void fn2(void); -+ -+void fn1(void) -+{ -+ long d; -+ -+ for (d = 3; d; d--) { -+ for (a = 0; a <= 1; a++) { -+ b &= 1; -+ if (b) { -+ for (;;) { -+ fn2(); -+ c = d; -+ } -+ } -+ } -+ } -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr71805.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr71805.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/pr71805.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/pr71805.c 2016-07-12 18:12:11.000000000 +0000 -@@ -0,0 +1,113 @@ -+/* { dg-require-effective-target p9vector_hw } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-options "-mcpu=power9 -O3 --param tree-reassoc-width=1" } */ -+ -+/* Originally from gcc.dg/vect/pr45752.c. */ -+#include <stdarg.h> -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+extern void abort (void); -+extern void exit (int); -+#ifdef __cplusplus -+} -+#endif -+ -+#define M00 100 -+#define M10 216 -+#define M20 23 -+#define M30 237 -+#define M40 437 -+ -+#define M01 1322 -+#define M11 13 -+#define M21 27271 -+#define M31 2280 -+#define M41 284 -+ -+#define M02 74 -+#define M12 191 -+#define M22 500 -+#define M32 111 -+#define M42 1114 -+ -+#define M03 134 -+#define M13 117 -+#define M23 11 -+#define M33 771 -+#define M43 71 -+ -+#define M04 334 -+#define M14 147 -+#define M24 115 -+#define M34 7716 -+#define M44 16 -+ -+#define N 20 -+ -+void foo (unsigned int *__restrict__ pInput, -+ unsigned int *__restrict__ pOutput, -+ unsigned int *__restrict__ pInput2, -+ unsigned int *__restrict__ pOutput2) -+{ -+ unsigned int i, a, b, c, d, e; -+ -+ for (i = 0; i < N / 5; i++) -+ { -+ a = *pInput++; -+ b = *pInput++; -+ c = *pInput++; -+ d = *pInput++; -+ e = *pInput++; -+ -+ *pOutput++ = M00 * a + M01 * b + M02 * c + M03 * d + M04 * e; -+ *pOutput++ = M10 * a + M11 * b + M12 * c + M13 * d + M14 * e; -+ *pOutput++ = M20 * a + M21 * b + M22 * c + M23 * d + M24 * e; -+ *pOutput++ = M30 * a + M31 * b + M32 * c + M33 * d + M34 * e; -+ *pOutput++ = M40 * a + M41 * b + M42 * c + M43 * d + M44 * e; -+ -+ -+ a = *pInput2++; -+ b = *pInput2++; -+ c = *pInput2++; -+ d = *pInput2++; -+ e = *pInput2++; -+ -+ *pOutput2++ = M00 * a + M01 * b + M02 * c + M03 * d + M04 * e; -+ *pOutput2++ = M10 * a + M11 * b + M12 * c + M13 * d + M14 * e; -+ *pOutput2++ = M20 * a + M21 * b + M22 * c + M23 * d + M24 * e; -+ *pOutput2++ = M30 * a + M31 * b + M32 * c + M33 * d + M34 * e; -+ *pOutput2++ = M40 * a + M41 * b + M42 * c + M43 * d + M44 * e; -+ -+ } -+} -+ -+int main (int argc, const char* argv[]) -+{ -+ unsigned int input[N], output[N], i, input2[N], output2[N]; -+ unsigned int check_results[N] -+ = {3208, 1334, 28764, 35679, 2789, 13028, 4754, 168364, 91254, 12399, -+ 22848, 8174, 307964, 146829, 22009, 32668, 11594, 447564, 202404, 31619 }; -+ unsigned int check_results2[N] -+ = {7136, 2702, 84604, 57909, 6633, 16956, 6122, 224204, 113484, 16243, -+ 26776, 9542, 363804, 169059, 25853, 36596, 12962, 503404, 224634, 35463 }; -+ -+ for (i = 0; i < N; i++) -+ { -+ input[i] = i%256; -+ input2[i] = i + 2; -+ output[i] = 0; -+ output2[i] = 0; -+ __asm__ volatile (""); -+ } -+ -+ foo (input, output, input2, output2); -+ -+ for (i = 0; i < N; i++) -+ if (output[i] != check_results[i] -+ || output2[i] != check_results2[i]) -+ abort (); -+ -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/signbit-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/signbit-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/signbit-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/signbit-1.c 2016-07-12 19:51:09.000000000 +0000 -@@ -0,0 +1,16 @@ -+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */ -+/* { dg-skip-if "" { powerpc*-*-darwin* } } */ -+/* { dg-require-effective-target powerpc_p8vector_ok } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ -+/* { dg-options "-mcpu=power8 -O2 -mfloat128" } */ -+ -+int do_signbit_kf (__float128 a) { return __builtin_signbit (a); } -+int do_signbit_if (__ibm128 a) { return __builtin_signbit (a); } -+int do_signbit_tf (long double a) { return __builtin_signbit (a); } -+ -+/* { dg-final { scan-assembler-not "stxvd2x" } } */ -+/* { dg-final { scan-assembler-not "stxvw4x" } } */ -+/* { dg-final { scan-assembler-not "stxsd" } } */ -+/* { dg-final { scan-assembler-not "stxsdx" } } */ -+/* { dg-final { scan-assembler-times "mfvsrd" 3 } } */ -+/* { dg-final { scan-assembler-times "srdi" 3 } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/signbit-2.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/signbit-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/signbit-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/signbit-2.c 2016-07-12 19:51:09.000000000 +0000 -@@ -0,0 +1,18 @@ -+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */ -+/* { dg-skip-if "" { powerpc*-*-darwin* } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-options "-mcpu=power9 -O2 -mfloat128" } */ -+ -+int do_signbit_kf (__float128 *a) { return __builtin_signbit (*a); } -+ -+/* { dg-final { scan-assembler-not "stxvd2x" } } */ -+/* { dg-final { scan-assembler-not "stxvw4x" } } */ -+/* { dg-final { scan-assembler-not "stxsd" } } */ -+/* { dg-final { scan-assembler-not "stxsdx" } } */ -+/* { dg-final { scan-assembler-not "lxvd2x" } } */ -+/* { dg-final { scan-assembler-not "lxvw4x" } } */ -+/* { dg-final { scan-assembler-not "lxsd" } } */ -+/* { dg-final { scan-assembler-not "lxsdx" } } */ -+/* { dg-final { scan-assembler-times "ld" 1 } } */ -+/* { dg-final { scan-assembler-times "srdi" 1 } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/signbit-3.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/signbit-3.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/signbit-3.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/signbit-3.c 2016-07-12 19:51:09.000000000 +0000 -@@ -0,0 +1,172 @@ -+/* { dg-do run { target { powerpc*-*-linux* } } } */ -+/* { dg-require-effective-target ppc_float128_sw } */ -+/* { dg-options "-mcpu=power7 -O2 -mfloat128 -lm" } */ -+ -+#ifdef DEBUG -+#include <stdio.h> -+#endif -+ -+#include <stddef.h> -+#include <stdint.h> -+#include <inttypes.h> -+#include <stdlib.h> -+#include <math.h> -+ -+#if defined(__BIG_ENDIAN__) -+struct ieee128 { -+ uint64_t upper; -+ uint64_t lower; -+}; -+ -+#elif defined(__LITTLE_ENDIAN__) -+struct ieee128 { -+ uint64_t lower; -+ uint64_t upper; -+}; -+ -+#else -+#error "Unknown system" -+#endif -+ -+union ieee_union { -+ __float128 f128; -+ struct ieee128 st128; -+}; -+ -+#ifdef DEBUG -+static int num_errors = 0; -+ -+__attribute__((__noinline__)) -+static void -+failure (int expected, int got, __float128 x) -+{ -+ unsigned sign; -+ unsigned exponent; -+ uint64_t mantissa1; -+ uint64_t mantissa2; -+ uint64_t upper; -+ uint64_t lower; -+ -+ union ieee_union u; -+ -+ u.f128 = x; -+ upper = u.st128.upper; -+ lower = u.st128.lower; -+ -+ sign = (unsigned)((upper >> 63) & 1); -+ exponent = (unsigned)((upper >> 48) & ((((uint64_t)1) << 16) - 1)); -+ mantissa1 = (upper & ((((uint64_t)1) << 48) - 1)); -+ mantissa2 = lower; -+ -+ printf ("Expected %d, got %d, %c 0x%.4x 0x%.12" PRIx64 " 0x%.16" PRIx64, -+ expected, got, -+ sign ? '-' : '+', -+ exponent, -+ mantissa1, -+ mantissa2); -+ -+ num_errors++; -+} -+ -+#else -+ -+#define failure(E, G, F) abort () -+#endif -+ -+__attribute__((__noinline__)) -+static void -+test_signbit_arg (__float128 f128, int expected) -+{ -+ int sign = __builtin_signbit (f128); -+ -+ if ((expected != 0 && sign == 0) -+ || (expected == 0 && sign != 0)) -+ failure (f128, expected, sign); -+} -+ -+__attribute__((__noinline__)) -+static void -+test_signbit_mem (__float128 *ptr, int expected) -+{ -+ int sign = __builtin_signbit (*ptr); -+ -+ if ((expected != 0 && sign == 0) -+ || (expected == 0 && sign != 0)) -+ failure (*ptr, expected, sign); -+} -+ -+__attribute__((__noinline__)) -+static void -+test_signbit_gpr (__float128 *ptr, int expected) -+{ -+ __float128 f128 = *ptr; -+ int sign; -+ -+ __asm__ (" # %0" : "+r" (f128)); -+ -+ sign = __builtin_signbit (f128); -+ if ((expected != 0 && sign == 0) -+ || (expected == 0 && sign != 0)) -+ failure (f128, expected, sign); -+} -+ -+__attribute__((__noinline__)) -+static void -+test_signbit (__float128 f128, int expected) -+{ -+#ifdef DEBUG -+ union ieee_union u; -+ u.f128 = f128; -+ printf ("Expecting %d, trying %-5g " -+ "(0x%.16" PRIx64 " 0x%.16" PRIx64 ")\n", -+ expected, (double)f128, -+ u.st128.upper, u.st128.lower); -+#endif -+ -+ test_signbit_arg (f128, expected); -+ test_signbit_mem (&f128, expected); -+ test_signbit_gpr (&f128, expected); -+} -+ -+int -+main (void) -+{ -+ union ieee_union u; -+ -+ test_signbit (+0.0q, 0); -+ test_signbit (+1.0q, 0); -+ -+ test_signbit (-0.0q, 1); -+ test_signbit (-1.0q, 1); -+ -+ test_signbit (__builtin_copysign (__builtin_infq (), +1.0q), 0); -+ test_signbit (__builtin_copysign (__builtin_infq (), -1.0q), 1); -+ -+ test_signbit (__builtin_copysign (__builtin_nanq (""), +1.0q), 0); -+ test_signbit (__builtin_copysign (__builtin_nanq (""), -1.0q), 1); -+ -+ /* force the bottom double word to have specific bits in the 'sign' bit to -+ make sure we are picking the right word. */ -+ u.f128 = 1.0q; -+ u.st128.lower = 0ULL; -+ test_signbit (u.f128, 0); -+ -+ u.st128.lower = ~0ULL; -+ test_signbit (u.f128, 0); -+ -+ u.f128 = -1.0q; -+ u.st128.lower = 0ULL; -+ test_signbit (u.f128, 1); -+ -+ u.st128.lower = ~0ULL; -+ test_signbit (u.f128, 1); -+ -+#ifdef DEBUG -+ printf ("%d error(s) were found\n", num_errors); -+ if (num_errors) -+ return num_errors; -+#endif -+ -+ return 0; -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsdu-0.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsdu-0.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsdu-0.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsdu-0.c 2016-06-30 17:07:42.000000000 +0000 -@@ -0,0 +1,24 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+__vector unsigned int -+doAbsoluteDifferenceUnsignedInt (__vector unsigned int *p, -+ __vector unsigned int *q) -+{ -+ __vector unsigned int source_1, source_2; -+ __vector unsigned int result; -+ -+ source_1 = *p; -+ source_2 = *q; -+ -+ result = __builtin_vec_vadu (source_1, source_2); -+ return result; -+} -+ -+/* { dg-final { scan-assembler "vabsduw" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsdu-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsdu-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsdu-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsdu-1.c 2016-06-30 17:07:42.000000000 +0000 -@@ -0,0 +1,23 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+__vector unsigned int -+doAbsoluteDifferenceUnsignedIntMacro (__vector unsigned int *p, -+ __vector unsigned int *q) -+{ -+ __vector unsigned int result, source_1, source_2; -+ -+ source_1 = *p; -+ source_2 = *q; -+ -+ result = vec_absd (source_1, source_2); -+ return result; -+} -+ -+/* { dg-final { scan-assembler "vabsduw" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsdu-2.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsdu-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsdu-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsdu-2.c 2016-06-30 17:07:42.000000000 +0000 -@@ -0,0 +1,24 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+__vector unsigned short -+doAbsoluteDifferenceUnsignedShort (__vector unsigned short *p, -+ __vector unsigned short *q) -+{ -+ __vector unsigned short source_1, source_2; -+ __vector unsigned short result; -+ -+ source_1 = *p; -+ source_2 = *q; -+ -+ result = __builtin_vec_vadu (source_1, source_2); -+ return result; -+} -+ -+/* { dg-final { scan-assembler "vabsduh" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsdu-3.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsdu-3.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsdu-3.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsdu-3.c 2016-06-30 17:07:42.000000000 +0000 -@@ -0,0 +1,23 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+__vector unsigned short -+doAbsoluteDifferenceUnsignedShortMacro (__vector unsigned short *p, -+ __vector unsigned short *q) -+{ -+ __vector unsigned short result, source_1, source_2; -+ -+ source_1 = *p; -+ source_2 = *q; -+ -+ result = vec_absd (source_1, source_2); -+ return result; -+} -+ -+/* { dg-final { scan-assembler "vabsduh" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsdu-4.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsdu-4.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsdu-4.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsdu-4.c 2016-06-30 17:07:42.000000000 +0000 -@@ -0,0 +1,24 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+__vector unsigned char -+doAbsoluteDifferenceUnsignedChar (__vector unsigned char *p, -+ __vector unsigned char *q) -+{ -+ __vector unsigned char source_1, source_2; -+ __vector unsigned char result; -+ -+ source_1 = *p; -+ source_2 = *q; -+ -+ result = __builtin_vec_vadu (source_1, source_2); -+ return result; -+} -+ -+/* { dg-final { scan-assembler "vabsdub" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsdu-5.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsdu-5.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsdu-5.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsdu-5.c 2016-06-30 17:07:42.000000000 +0000 -@@ -0,0 +1,23 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+__vector unsigned char -+doAbsoluteDifferenceUnsignedCharMacro (__vector unsigned char *p, -+ __vector unsigned char *q) -+{ -+ __vector unsigned char result, source_1, source_2; -+ -+ source_1 = *p; -+ source_2 = *q; -+ -+ result = vec_absd (source_1, source_2); -+ return result; -+} -+ -+/* { dg-final { scan-assembler "vabsdub" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsdub-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsdub-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsdub-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsdub-1.c 2016-06-30 17:07:42.000000000 +0000 -@@ -0,0 +1,24 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+__vector unsigned char -+doAbsoluteDifferenceUnsigned (__vector unsigned char *p, -+ __vector unsigned char *q) -+{ -+ __vector unsigned char source_1, source_2; -+ __vector unsigned char uc_result; -+ -+ source_1 = *p; -+ source_2 = *q; -+ -+ uc_result = __builtin_vec_vadub (source_1, source_2); -+ return uc_result; -+} -+ -+/* { dg-final { scan-assembler "vabsdub" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsdub-2.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsdub-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsdub-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsdub-2.c 2016-06-30 17:07:42.000000000 +0000 -@@ -0,0 +1,24 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+__vector unsigned char -+doAbsoluteDifferenceUnsigned (__vector unsigned char *p, -+ __vector unsigned char *q) -+{ -+ __vector unsigned char source_1, source_2; -+ __vector unsigned char uc_result; -+ -+ source_1 = *p; -+ source_2 = *q; -+ -+ uc_result = vec_absdb (source_1, source_2); -+ return uc_result; -+} -+ -+/* { dg-final { scan-assembler "vabsdub" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsduh-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsduh-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsduh-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsduh-1.c 2016-06-30 17:07:42.000000000 +0000 -@@ -0,0 +1,24 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+__vector unsigned short -+doAbsoluteDifferenceUnsigned (__vector unsigned short *p, -+ __vector unsigned short *q) -+{ -+ __vector unsigned short source_1, source_2; -+ __vector unsigned short us_result; -+ -+ source_1 = *p; -+ source_2 = *q; -+ -+ us_result = __builtin_vec_vaduh (source_1, source_2); -+ return us_result; -+} -+ -+/* { dg-final { scan-assembler "vabsduh" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsduh-2.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsduh-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsduh-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsduh-2.c 2016-06-30 17:07:42.000000000 +0000 -@@ -0,0 +1,23 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+__vector unsigned short -+doAbsoluteDifferenceUnsignedMacro (__vector unsigned short *p, -+ __vector unsigned short *q) -+{ -+ __vector unsigned short result, source_1, source_2; -+ -+ source_1 = *p; -+ source_2 = *q; -+ -+ result = vec_absdh (source_1, source_2); -+ return result; -+} -+ -+/* { dg-final { scan-assembler "vabsduh" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsduw-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsduw-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsduw-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsduw-1.c 2016-06-30 17:07:42.000000000 +0000 -@@ -0,0 +1,24 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+__vector unsigned int -+doAbsoluteDifferenceUnsigned (__vector unsigned int *p, -+ __vector unsigned int *q) -+{ -+ __vector unsigned int source_1, source_2; -+ __vector unsigned int ui_result; -+ -+ source_1 = *p; -+ source_2 = *q; -+ -+ ui_result = __builtin_vec_vaduw (source_1, source_2); -+ return ui_result; -+} -+ -+/* { dg-final { scan-assembler "vabsduw" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsduw-2.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsduw-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vadsduw-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vadsduw-2.c 2016-06-30 17:07:42.000000000 +0000 -@@ -0,0 +1,23 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+/* This test should succeed on both 32- and 64-bit configurations. */ -+#include <altivec.h> -+ -+__vector unsigned int -+doAbsoluteDifferenceUnsignedMacro (__vector unsigned int *p, -+ __vector unsigned int *q) -+{ -+ __vector unsigned int result, source_1, source_2; -+ -+ source_1 = *p; -+ source_2 = *q; -+ -+ result = vec_absdw (source_1, source_2); -+ return result; -+} -+ -+/* { dg-final { scan-assembler "vabsduw" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vslv-0.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vslv-0.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vslv-0.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vslv-0.c 2016-07-01 20:09:06.000000000 +0000 -@@ -0,0 +1,17 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+__vector unsigned char -+doCharShiftLeft (__vector unsigned char *p, __vector unsigned char *q) -+{ -+ __vector unsigned char result, input, shift_distance; -+ result = __builtin_vec_vslv (input, shift_distance); -+ return result; -+} -+ -+/* { dg-final { scan-assembler "vslv" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vslv-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vslv-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vslv-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vslv-1.c 2016-07-01 20:09:06.000000000 +0000 -@@ -0,0 +1,17 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+__vector unsigned char -+doCharShiftLeft (__vector unsigned char *p, __vector unsigned char *q) -+{ -+ __vector unsigned char result, input, shift_distance; -+ result = vec_slv (input, shift_distance); -+ return result; -+} -+ -+/* { dg-final { scan-assembler "vslv" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vsrv-0.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vsrv-0.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vsrv-0.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vsrv-0.c 2016-07-01 20:09:06.000000000 +0000 -@@ -0,0 +1,17 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+__vector unsigned char -+doCharShiftLeft (__vector unsigned char *p, __vector unsigned char *q) -+{ -+ __vector unsigned char result, input, shift_distance; -+ result = __builtin_vec_vsrv (input, shift_distance); -+ return result; -+} -+ -+/* { dg-final { scan-assembler "vsrv" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vsrv-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vsrv-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vsrv-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vsrv-1.c 2016-07-01 20:09:06.000000000 +0000 -@@ -0,0 +1,17 @@ -+/* { dg-do compile { target { powerpc*-*-* } } } */ -+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } } */ -+/* { dg-options "-mcpu=power9" } */ -+ -+#include <altivec.h> -+ -+__vector unsigned char -+doCharShiftLeft (__vector unsigned char *p, __vector unsigned char *q) -+{ -+ __vector unsigned char result, input, shift_distance; -+ result = vec_srv (input, shift_distance); -+ return result; -+} -+ -+/* { dg-final { scan-assembler "vsrv" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-1.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-1.c 2016-05-30 17:09:22.000000000 +0000 -@@ -0,0 +1,143 @@ -+/* { dg-do compile { target { powerpc64le*-*-* } } } */ -+/* { dg-skip-if "do not override mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ -+/* { dg-options "-mcpu=power8 -O0" } */ -+/* { dg-final { scan-assembler-times "lxvd2x" 18 } } */ -+/* { dg-final { scan-assembler-times "lxvw4x" 6 } } */ -+/* { dg-final { scan-assembler-times "stxvd2x" 18 } } */ -+/* { dg-final { scan-assembler-times "stxvw4x" 6 } } */ -+/* { dg-final { scan-assembler-times "xxpermdi" 24 } } */ -+ -+#include <altivec.h> -+ -+extern vector double vd, *vdp; -+extern vector signed long long vsll, *vsllp; -+extern vector unsigned long long vull, *vullp; -+extern vector float vf, *vfp; -+extern vector signed int vsi, *vsip; -+extern vector unsigned int vui, *vuip; -+extern double *dp; -+extern signed long long *sllp; -+extern unsigned long long *ullp; -+extern float *fp; -+extern signed int *sip; -+extern unsigned int *uip; -+ -+void foo0 (void) -+{ -+ vd = vec_xl (0, vdp); -+} -+ -+void foo1 (void) -+{ -+ vsll = vec_xl (0, vsllp); -+} -+ -+void foo2 (void) -+{ -+ vull = vec_xl (0, vullp); -+} -+ -+void foo3 (void) -+{ -+ vf = vec_xl (0, vfp); -+} -+ -+void foo4 (void) -+{ -+ vsi = vec_xl (0, vsip); -+} -+ -+void foo5 (void) -+{ -+ vui = vec_xl (0, vuip); -+} -+ -+void foo6 (void) -+{ -+ vec_xst (vd, 0, vdp); -+} -+ -+void foo7 (void) -+{ -+ vec_xst (vsll, 0, vsllp); -+} -+ -+void foo8 (void) -+{ -+ vec_xst (vull, 0, vullp); -+} -+ -+void foo9 (void) -+{ -+ vec_xst (vf, 0, vfp); -+} -+ -+void foo10 (void) -+{ -+ vec_xst (vsi, 0, vsip); -+} -+ -+void foo11 (void) -+{ -+ vec_xst (vui, 0, vuip); -+} -+ -+void foo20 (void) -+{ -+ vd = vec_xl (0, dp); -+} -+ -+void foo21 (void) -+{ -+ vsll = vec_xl (0, sllp); -+} -+ -+void foo22 (void) -+{ -+ vull = vec_xl (0, ullp); -+} -+ -+void foo23 (void) -+{ -+ vf = vec_xl (0, fp); -+} -+ -+void foo24 (void) -+{ -+ vsi = vec_xl (0, sip); -+} -+ -+void foo25 (void) -+{ -+ vui = vec_xl (0, uip); -+} -+ -+void foo26 (void) -+{ -+ vec_xst (vd, 0, dp); -+} -+ -+void foo27 (void) -+{ -+ vec_xst (vsll, 0, sllp); -+} -+ -+void foo28 (void) -+{ -+ vec_xst (vull, 0, ullp); -+} -+ -+void foo29 (void) -+{ -+ vec_xst (vf, 0, fp); -+} -+ -+void foo30 (void) -+{ -+ vec_xst (vsi, 0, sip); -+} -+ -+void foo31 (void) -+{ -+ vec_xst (vui, 0, uip); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-2.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-2.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-2.c 2016-06-16 16:27:24.000000000 +0000 -@@ -0,0 +1,236 @@ -+/* { dg-do compile { target { powerpc64le*-*-* } } } */ -+/* { dg-skip-if "do not override mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-options "-mcpu=power9 -O0" } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } { "*" } { "" } } */ -+/* { dg-final { scan-assembler-times "lxvd2x" 6 } } */ -+/* { dg-final { scan-assembler-times "lxvw4x" 6 } } */ -+/* { dg-final { scan-assembler-times "lxvh8x" 4 } } */ -+/* { dg-final { scan-assembler-times "lxvb16x" 4 } } */ -+/* { dg-final { scan-assembler-times "stxvd2x" 6 } } */ -+/* { dg-final { scan-assembler-times "stxvw4x" 6 } } */ -+/* { dg-final { scan-assembler-times "stxvh8x" 4 } } */ -+/* { dg-final { scan-assembler-times "stxvb16x" 4 } } */ -+ -+#include <altivec.h> -+ -+extern vector double vd, *vdp; -+extern vector signed long long vsll, *vsllp; -+extern vector unsigned long long vull, *vullp; -+extern vector float vf, *vfp; -+extern vector signed int vsi, *vsip; -+extern vector unsigned int vui, *vuip; -+extern vector signed short vss, *vssp; -+extern vector unsigned short vus, *vusp; -+extern vector signed char vsc, *vscp; -+extern vector unsigned char vuc, *vucp; -+extern double *dp; -+extern signed long long *sllp; -+extern unsigned long long *ullp; -+extern float *fp; -+extern signed int *sip; -+extern unsigned int *uip; -+extern signed short *ssp; -+extern unsigned short *usp; -+extern signed char *scp; -+extern unsigned char *ucp; -+ -+void foo0 (void) -+{ -+ vd = vec_xl (0, vdp); -+} -+ -+void foo1 (void) -+{ -+ vsll = vec_xl (0, vsllp); -+} -+ -+void foo2 (void) -+{ -+ vull = vec_xl (0, vullp); -+} -+ -+void foo3 (void) -+{ -+ vf = vec_xl (0, vfp); -+} -+ -+void foo4 (void) -+{ -+ vsi = vec_xl (0, vsip); -+} -+ -+void foo5 (void) -+{ -+ vui = vec_xl (0, vuip); -+} -+ -+void foo6 (void) -+{ -+ vss = vec_xl (0, vssp); -+} -+ -+void foo7 (void) -+{ -+ vus = vec_xl (0, vusp); -+} -+ -+void foo8 (void) -+{ -+ vsc = vec_xl (0, vscp); -+} -+ -+void foo9 (void) -+{ -+ vuc = vec_xl (0, vucp); -+} -+ -+void foo10 (void) -+{ -+ vec_xst (vd, 0, vdp); -+} -+ -+void foo11 (void) -+{ -+ vec_xst (vsll, 0, vsllp); -+} -+ -+void foo12 (void) -+{ -+ vec_xst (vull, 0, vullp); -+} -+ -+void foo13 (void) -+{ -+ vec_xst (vf, 0, vfp); -+} -+ -+void foo14 (void) -+{ -+ vec_xst (vsi, 0, vsip); -+} -+ -+void foo15 (void) -+{ -+ vec_xst (vui, 0, vuip); -+} -+ -+void foo16 (void) -+{ -+ vec_xst (vss, 0, vssp); -+} -+ -+void foo17 (void) -+{ -+ vec_xst (vus, 0, vusp); -+} -+ -+void foo18 (void) -+{ -+ vec_xst (vsc, 0, vscp); -+} -+ -+void foo19 (void) -+{ -+ vec_xst (vuc, 0, vucp); -+} -+ -+void foo20 (void) -+{ -+ vd = vec_xl (0, dp); -+} -+ -+void foo21 (void) -+{ -+ vsll = vec_xl (0, sllp); -+} -+ -+void foo22 (void) -+{ -+ vull = vec_xl (0, ullp); -+} -+ -+void foo23 (void) -+{ -+ vf = vec_xl (0, fp); -+} -+ -+void foo24 (void) -+{ -+ vsi = vec_xl (0, sip); -+} -+ -+void foo25 (void) -+{ -+ vui = vec_xl (0, uip); -+} -+ -+void foo26 (void) -+{ -+ vss = vec_xl (0, ssp); -+} -+ -+void foo27 (void) -+{ -+ vus = vec_xl (0, usp); -+} -+ -+void foo28 (void) -+{ -+ vsc = vec_xl (0, scp); -+} -+ -+void foo29 (void) -+{ -+ vuc = vec_xl (0, ucp); -+} -+ -+void foo30 (void) -+{ -+ vec_xst (vd, 0, dp); -+} -+ -+void foo31 (void) -+{ -+ vec_xst (vsll, 0, sllp); -+} -+ -+void foo32 (void) -+{ -+ vec_xst (vull, 0, ullp); -+} -+ -+void foo33 (void) -+{ -+ vec_xst (vf, 0, fp); -+} -+ -+void foo34 (void) -+{ -+ vec_xst (vsi, 0, sip); -+} -+ -+void foo35 (void) -+{ -+ vec_xst (vui, 0, uip); -+} -+ -+void foo36 (void) -+{ -+ vec_xst (vss, 0, ssp); -+} -+ -+void foo37 (void) -+{ -+ vec_xst (vus, 0, usp); -+} -+ -+void foo38 (void) -+{ -+ vec_xst (vsc, 0, scp); -+} -+ -+void foo39 (void) -+{ -+ vec_xst (vuc, 0, ucp); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-3.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-3.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-3.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-3.c 2016-05-30 17:09:22.000000000 +0000 -@@ -0,0 +1,142 @@ -+/* { dg-do compile { target { powerpc64-*-* } } } */ -+/* { dg-skip-if "do not override mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ -+/* { dg-options "-mcpu=power8 -O0" } */ -+/* { dg-final { scan-assembler-times "lxvd2x" 16 } } */ -+/* { dg-final { scan-assembler-times "lxvw4x" 8 } } */ -+/* { dg-final { scan-assembler-times "stxvd2x" 16 } } */ -+/* { dg-final { scan-assembler-times "stxvw4x" 8 } } */ -+ -+#include <altivec.h> -+ -+extern vector double vd, *vdp; -+extern vector signed long long vsll, *vsllp; -+extern vector unsigned long long vull, *vullp; -+extern vector float vf, *vfp; -+extern vector signed int vsi, *vsip; -+extern vector unsigned int vui, *vuip; -+extern double *dp; -+extern signed long long *sllp; -+extern unsigned long long *ullp; -+extern float *fp; -+extern signed int *sip; -+extern unsigned int *uip; -+ -+void foo0 (void) -+{ -+ vd = vec_xl (0, vdp); -+} -+ -+void foo1 (void) -+{ -+ vsll = vec_xl (0, vsllp); -+} -+ -+void foo2 (void) -+{ -+ vull = vec_xl (0, vullp); -+} -+ -+void foo3 (void) -+{ -+ vf = vec_xl (0, vfp); -+} -+ -+void foo4 (void) -+{ -+ vsi = vec_xl (0, vsip); -+} -+ -+void foo5 (void) -+{ -+ vui = vec_xl (0, vuip); -+} -+ -+void foo6 (void) -+{ -+ vec_xst (vd, 0, vdp); -+} -+ -+void foo7 (void) -+{ -+ vec_xst (vsll, 0, vsllp); -+} -+ -+void foo8 (void) -+{ -+ vec_xst (vull, 0, vullp); -+} -+ -+void foo9 (void) -+{ -+ vec_xst (vf, 0, vfp); -+} -+ -+void foo10 (void) -+{ -+ vec_xst (vsi, 0, vsip); -+} -+ -+void foo11 (void) -+{ -+ vec_xst (vui, 0, vuip); -+} -+ -+void foo20 (void) -+{ -+ vd = vec_xl (0, dp); -+} -+ -+void foo21 (void) -+{ -+ vsll = vec_xl (0, sllp); -+} -+ -+void foo22 (void) -+{ -+ vull = vec_xl (0, ullp); -+} -+ -+void foo23 (void) -+{ -+ vf = vec_xl (0, fp); -+} -+ -+void foo24 (void) -+{ -+ vsi = vec_xl (0, sip); -+} -+ -+void foo25 (void) -+{ -+ vui = vec_xl (0, uip); -+} -+ -+void foo26 (void) -+{ -+ vec_xst (vd, 0, dp); -+} -+ -+void foo27 (void) -+{ -+ vec_xst (vsll, 0, sllp); -+} -+ -+void foo28 (void) -+{ -+ vec_xst (vull, 0, ullp); -+} -+ -+void foo29 (void) -+{ -+ vec_xst (vf, 0, fp); -+} -+ -+void foo30 (void) -+{ -+ vec_xst (vsi, 0, sip); -+} -+ -+void foo31 (void) -+{ -+ vec_xst (vui, 0, uip); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-4.c gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-4.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-4.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-4.c 2016-06-16 16:27:24.000000000 +0000 -@@ -0,0 +1,230 @@ -+/* { dg-do compile { target { powerpc64-*-* } } } */ -+/* { dg-skip-if "do not override mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -+/* { dg-options "-mcpu=power9 -O0" } */ -+/* { dg-require-effective-target powerpc_p9vector_ok } */ -+/* { dg-skip-if "" { powerpc*-*-aix* } { "*" } { "" } } */ -+/* { dg-final { scan-assembler-times "lxvx" 40 } } */ -+/* { dg-final { scan-assembler-times "stxvx" 40 } } */ -+ -+#include <altivec.h> -+ -+extern vector double vd, *vdp; -+extern vector signed long long vsll, *vsllp; -+extern vector unsigned long long vull, *vullp; -+extern vector float vf, *vfp; -+extern vector signed int vsi, *vsip; -+extern vector unsigned int vui, *vuip; -+extern vector signed short vss, *vssp; -+extern vector unsigned short vus, *vusp; -+extern vector signed char vsc, *vscp; -+extern vector unsigned char vuc, *vucp; -+extern double *dp; -+extern signed long long *sllp; -+extern unsigned long long *ullp; -+extern float *fp; -+extern signed int *sip; -+extern unsigned int *uip; -+extern signed short *ssp; -+extern unsigned short *usp; -+extern signed char *scp; -+extern unsigned char *ucp; -+ -+void foo0 (void) -+{ -+ vd = vec_xl (0, vdp); -+} -+ -+void foo1 (void) -+{ -+ vsll = vec_xl (0, vsllp); -+} -+ -+void foo2 (void) -+{ -+ vull = vec_xl (0, vullp); -+} -+ -+void foo3 (void) -+{ -+ vf = vec_xl (0, vfp); -+} -+ -+void foo4 (void) -+{ -+ vsi = vec_xl (0, vsip); -+} -+ -+void foo5 (void) -+{ -+ vui = vec_xl (0, vuip); -+} -+ -+void foo6 (void) -+{ -+ vss = vec_xl (0, vssp); -+} -+ -+void foo7 (void) -+{ -+ vus = vec_xl (0, vusp); -+} -+ -+void foo8 (void) -+{ -+ vsc = vec_xl (0, vscp); -+} -+ -+void foo9 (void) -+{ -+ vuc = vec_xl (0, vucp); -+} -+ -+void foo10 (void) -+{ -+ vec_xst (vd, 0, vdp); -+} -+ -+void foo11 (void) -+{ -+ vec_xst (vsll, 0, vsllp); -+} -+ -+void foo12 (void) -+{ -+ vec_xst (vull, 0, vullp); -+} -+ -+void foo13 (void) -+{ -+ vec_xst (vf, 0, vfp); -+} -+ -+void foo14 (void) -+{ -+ vec_xst (vsi, 0, vsip); -+} -+ -+void foo15 (void) -+{ -+ vec_xst (vui, 0, vuip); -+} -+ -+void foo16 (void) -+{ -+ vec_xst (vss, 0, vssp); -+} -+ -+void foo17 (void) -+{ -+ vec_xst (vus, 0, vusp); -+} -+ -+void foo18 (void) -+{ -+ vec_xst (vsc, 0, vscp); -+} -+ -+void foo19 (void) -+{ -+ vec_xst (vuc, 0, vucp); -+} -+ -+void foo20 (void) -+{ -+ vd = vec_xl (0, dp); -+} -+ -+void foo21 (void) -+{ -+ vsll = vec_xl (0, sllp); -+} -+ -+void foo22 (void) -+{ -+ vull = vec_xl (0, ullp); -+} -+ -+void foo23 (void) -+{ -+ vf = vec_xl (0, fp); -+} -+ -+void foo24 (void) -+{ -+ vsi = vec_xl (0, sip); -+} -+ -+void foo25 (void) -+{ -+ vui = vec_xl (0, uip); -+} -+ -+void foo26 (void) -+{ -+ vss = vec_xl (0, ssp); -+} -+ -+void foo27 (void) -+{ -+ vus = vec_xl (0, usp); -+} -+ -+void foo28 (void) -+{ -+ vsc = vec_xl (0, scp); -+} -+ -+void foo29 (void) -+{ -+ vuc = vec_xl (0, ucp); -+} -+ -+void foo30 (void) -+{ -+ vec_xst (vd, 0, dp); -+} -+ -+void foo31 (void) -+{ -+ vec_xst (vsll, 0, sllp); -+} -+ -+void foo32 (void) -+{ -+ vec_xst (vull, 0, ullp); -+} -+ -+void foo33 (void) -+{ -+ vec_xst (vf, 0, fp); -+} -+ -+void foo34 (void) -+{ -+ vec_xst (vsi, 0, sip); -+} -+ -+void foo35 (void) -+{ -+ vec_xst (vui, 0, uip); -+} -+ -+void foo36 (void) -+{ -+ vec_xst (vss, 0, ssp); -+} -+ -+void foo37 (void) -+{ -+ vec_xst (vus, 0, usp); -+} -+ -+void foo38 (void) -+{ -+ vec_xst (vsc, 0, scp); -+} -+ -+void foo39 (void) -+{ -+ vec_xst (vuc, 0, ucp); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/s390/nolrl-1.c gcc-6-20160721/gcc/testsuite/gcc.target/s390/nolrl-1.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/s390/nolrl-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/s390/nolrl-1.c 2016-07-18 10:52:23.000000000 +0000 -@@ -0,0 +1,19 @@ -+/* Make sure the compiler does not try to use a relative long -+ instruction to load the string since it might not meet the -+ alignment requirements of the instruction. */ -+ -+/* { dg-do compile } */ -+/* { dg-options "-march=z10 -O3 -mzarch" } */ -+ -+extern void foo (char*); -+ -+void -+bar () -+{ -+ unsigned char z[32]; -+ -+ __builtin_memcpy (z, "\001\000\000\000", 4); -+ foo (z); -+} -+ -+/* { dg-final { scan-assembler-not "lrl" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/sparc/fpcmp.c gcc-6-20160721/gcc/testsuite/gcc.target/sparc/fpcmp.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/sparc/fpcmp.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/sparc/fpcmp.c 2016-06-08 13:34:25.000000000 +0000 -@@ -0,0 +1,18 @@ -+/* { dg-do compile } */ -+/* { dg-options "-mvis4" } */ -+ -+typedef unsigned char vec8 __attribute__((vector_size(8))); -+ -+long test_fpcmple8 (vec8 a, vec8 b) -+{ -+ return __builtin_vis_fpcmple8 (a, b); -+} -+ -+long test_fpcmpgt8 (vec8 a, vec8 b) -+{ -+ return __builtin_vis_fpcmpgt8 (a, b); -+} -+ -+/* { dg-final { scan-assembler "fpcmple8\t%" } } */ -+/* { dg-final { scan-assembler "fpcmpgt8\t%" } } */ -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/sparc/fpcmpu.c gcc-6-20160721/gcc/testsuite/gcc.target/sparc/fpcmpu.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/sparc/fpcmpu.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/sparc/fpcmpu.c 2016-06-08 13:34:25.000000000 +0000 -@@ -0,0 +1,31 @@ -+/* { dg-do compile } */ -+/* { dg-options "-mvis4" } */ -+ -+ -+typedef short vec16 __attribute__((vector_size(8))); -+typedef int vec32 __attribute__((vector_size(8))); -+ -+long test_fpcmpule16 (vec16 a, vec16 b) -+{ -+ return __builtin_vis_fpcmpule16 (a, b); -+} -+ -+long test_fpcmpugt16 (vec16 a, vec16 b) -+{ -+ return __builtin_vis_fpcmpugt16 (a, b); -+} -+ -+long test_fpcmpule32 (vec32 a, vec32 b) -+{ -+ return __builtin_vis_fpcmpule32 (a, b); -+} -+ -+long test_fpcmpugt32 (vec32 a, vec32 b) -+{ -+ return __builtin_vis_fpcmpugt32 (a, b); -+} -+ -+/* { dg-final { scan-assembler "fpcmpule16\t%" } } */ -+/* { dg-final { scan-assembler "fpcmpugt16\t%" } } */ -+/* { dg-final { scan-assembler "fpcmpule32\t%" } } */ -+/* { dg-final { scan-assembler "fpcmpugt32\t%" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gcc.target/sparc/vis4misc.c gcc-6-20160721/gcc/testsuite/gcc.target/sparc/vis4misc.c ---- gcc-6.1.0/gcc/testsuite/gcc.target/sparc/vis4misc.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gcc.target/sparc/vis4misc.c 2016-06-08 13:34:25.000000000 +0000 -@@ -0,0 +1,126 @@ -+/* { dg-do compile } */ -+/* { dg-options "-mvis4" } */ -+typedef int __v2si __attribute__((vector_size(8))); -+typedef short __v4hi __attribute__((vector_size(8))); -+typedef unsigned char __v8qi __attribute__((vector_size(8))); -+ -+__v8qi test_fpadd8 (__v8qi x, __v8qi y) -+{ -+ return __builtin_vis_fpadd8 (x, y); -+} -+ -+__v8qi test_fpadds8 (__v8qi x, __v8qi y) -+{ -+ return __builtin_vis_fpadds8 (x, y); -+} -+ -+__v8qi test_fpaddus8 (__v8qi x, __v8qi y) -+{ -+ return __builtin_vis_fpaddus8 (x, y); -+} -+ -+__v4hi test_fpaddus16 (__v4hi x, __v4hi y) -+{ -+ return __builtin_vis_fpaddus16 (x, y); -+} -+ -+__v8qi test_fpsub8 (__v8qi x, __v8qi y) -+{ -+ return __builtin_vis_fpsub8 (x, y); -+} -+ -+__v8qi test_fpsubs8 (__v8qi x, __v8qi y) -+{ -+ return __builtin_vis_fpsubs8 (x, y); -+} -+ -+__v8qi test_fpsubus8 (__v8qi x, __v8qi y) -+{ -+ return __builtin_vis_fpsubus8 (x, y); -+} -+ -+__v4hi test_fpsubus16 (__v4hi x, __v4hi y) -+{ -+ return __builtin_vis_fpsubus16 (x, y); -+} -+ -+__v8qi test_fpmax8 (__v8qi x, __v8qi y) -+{ -+ return __builtin_vis_fpmax8 (x, y); -+} -+ -+__v4hi test_fpmax16 (__v4hi x, __v4hi y) -+{ -+ return __builtin_vis_fpmax16 (x, y); -+} -+ -+__v2si test_fpmax32 (__v2si x, __v2si y) -+{ -+ return __builtin_vis_fpmax32 (x, y); -+} -+ -+__v8qi test_fpmaxu8 (__v8qi x, __v8qi y) -+{ -+ return __builtin_vis_fpmaxu8 (x, y); -+} -+ -+__v4hi test_fpmaxu16 (__v4hi x, __v4hi y) -+{ -+ return __builtin_vis_fpmaxu16 (x, y); -+} -+ -+__v2si test_fpmaxu32 (__v2si x, __v2si y) -+{ -+ return __builtin_vis_fpmaxu32 (x, y); -+} -+ -+__v8qi test_fpmin8 (__v8qi x, __v8qi y) -+{ -+ return __builtin_vis_fpmin8 (x, y); -+} -+ -+__v4hi test_fpmin16 (__v4hi x, __v4hi y) -+{ -+ return __builtin_vis_fpmin16 (x, y); -+} -+ -+__v2si test_fpmin32 (__v2si x, __v2si y) -+{ -+ return __builtin_vis_fpmin32 (x, y); -+} -+ -+__v8qi test_fpminu8 (__v8qi x, __v8qi y) -+{ -+ return __builtin_vis_fpminu8 (x, y); -+} -+ -+__v4hi test_fpminu16 (__v4hi x, __v4hi y) -+{ -+ return __builtin_vis_fpminu16 (x, y); -+} -+ -+__v2si test_fpminu32 (__v2si x, __v2si y) -+{ -+ return __builtin_vis_fpminu32 (x, y); -+} -+ -+/* { dg-final { scan-assembler "fpadd8\t%" } } */ -+/* { dg-final { scan-assembler "fpadds8\t%" } } */ -+/* { dg-final { scan-assembler "fpaddus8\t%" } } */ -+/* { dg-final { scan-assembler "fpaddus16\t%" } } */ -+/* { dg-final { scan-assembler "fpsub8\t%" } } */ -+/* { dg-final { scan-assembler "fpsubs8\t%" } } */ -+/* { dg-final { scan-assembler "fpsubus8\t%" } } */ -+/* { dg-final { scan-assembler "fpsubus16\t%" } } */ -+/* { dg-final { scan-assembler "fpmax8\t%" } } */ -+/* { dg-final { scan-assembler "fpmax16\t%" } } */ -+/* { dg-final { scan-assembler "fpmax32\t%" } } */ -+/* { dg-final { scan-assembler "fpmaxu8\t%" } } */ -+/* { dg-final { scan-assembler "fpmaxu16\t%" } } */ -+/* { dg-final { scan-assembler "fpmaxu32\t%" } } */ -+/* { dg-final { scan-assembler "fpmin8\t%" } } */ -+/* { dg-final { scan-assembler "fpmin16\t%" } } */ -+/* { dg-final { scan-assembler "fpmin32\t%" } } */ -+/* { dg-final { scan-assembler "fpminu8\t%" } } */ -+/* { dg-final { scan-assembler "fpminu16\t%" } } */ -+/* { dg-final { scan-assembler "fpminu32\t%" } } */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/array_constructor_49.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/array_constructor_49.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/array_constructor_49.f90 2015-05-29 08:20:29.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/array_constructor_49.f90 2016-06-12 14:04:08.000000000 +0000 -@@ -6,7 +6,7 @@ - program t - integer :: ndim=2, ndfp=4, i - character (len=8) :: line -- write (unit=line,fmt='(4I2)'), (/ ( i, i = 1, ndfp ) /) + ndim -+ write (unit=line,fmt='(4I2)') (/ ( i, i = 1, ndfp ) /) + ndim - if (line /= ' 3 4 5 6') call abort - end program t - ! { dg-final { scan-tree-dump-times "__var" 3 "original" } } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/class_array_22.f03 gcc-6-20160721/gcc/testsuite/gfortran.dg/class_array_22.f03 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/class_array_22.f03 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/class_array_22.f03 2016-06-05 18:09:27.000000000 +0000 -@@ -0,0 +1,25 @@ -+! { dg-do compile } -+! { dg-options "-frepack-arrays " } -+! -+! Original class_array_11.f03 but with -frepack-arrays a new -+! ICE was produced reported in -+! PR fortran/69659 -+! -+! Original testcase by Ian Harvey <ian_harvey@bigpond.com> -+! Reduced by Janus Weil <Janus@gcc.gnu.org> -+ -+ IMPLICIT NONE -+ -+ TYPE :: ParentVector -+ INTEGER :: a -+ END TYPE ParentVector -+ -+CONTAINS -+ -+ SUBROUTINE vector_operation(pvec) -+ CLASS(ParentVector), INTENT(INOUT) :: pvec(:) -+ print *,pvec(1)%a -+ END SUBROUTINE -+ -+END -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/comma_IO_extension_1.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/comma_IO_extension_1.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/comma_IO_extension_1.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/comma_IO_extension_1.f90 2016-06-12 14:04:08.000000000 +0000 -@@ -0,0 +1,8 @@ -+! { dg-do compile } -+! PR 60751 -+! Contributed by Walter Spector <w6ws@earthlink.net> -+program extracomma -+ implicit none -+ -+ write (*,*), 1, 2, 3 ! { dg-warning "Legacy Extension: Comma before i/o item list" } -+end program -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/comma_IO_extension_2.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/comma_IO_extension_2.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/comma_IO_extension_2.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/comma_IO_extension_2.f90 2016-06-12 14:04:08.000000000 +0000 -@@ -0,0 +1,9 @@ -+! { dg-do compile } -+! { dg-options "-std=legacy" } -+! PR 60751 -+! Contributed by Walter Spector <w6ws@earthlink.net> -+program extracomma -+ implicit none -+ -+ write (*,*), 1, 2, 3 -+end program -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_1.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_1.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_1.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_1.f90 2016-05-14 19:52:46.000000000 +0000 -@@ -0,0 +1,56 @@ -+! { dg-do run } -+! { dg-options "-fdec-structure" } -+! -+! Basic STRUCTURE test. -+! -+ -+subroutine aborts (s) -+ character(*), intent(in) :: s -+ print *, s -+ call abort() -+end subroutine -+ -+! Basic structure -+structure /s1/ ! type s1 -+ integer i1 -+ logical l1 -+ real r1 -+ character c1 -+end structure ! end type s1 -+ -+record /s1/ r1 ! type (s1) r1 -+record /s1/ r1_a(3) ! type (s1) r1_a(3) -+ -+! Basic records -+r1.i1 = 13579 ! r1%i1 = ... -+r1.l1 = .true. -+r1.r1 = 13.579 -+r1.c1 = 'F' -+r1_a(2) = r1 -+r1_a(3).r1 = 135.79 -+ -+if (r1.i1 .ne. 13579) then -+ call aborts("r1.i1") -+endif -+ -+if (r1.l1 .neqv. .true.) then -+ call aborts("r1.l1") -+endif -+ -+if (r1.r1 .ne. 13.579) then -+ call aborts("r1.r1") -+endif -+ -+if (r1.c1 .ne. 'F') then -+ call aborts("r1.c1") -+endif -+ -+if (r1_a(2).i1 .ne. 13579) then -+ call aborts("r1_a(2).i1") -+endif -+ -+if (r1_a(3).r1 .ne. 135.79) then -+ call aborts("r1_a(3).r1") -+endif -+ -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_10.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_10.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_10.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_10.f90 2016-05-14 19:52:46.000000000 +0000 -@@ -0,0 +1,119 @@ -+! { dg-do run } -+! { dg-options "-fdec-structure" } -+! -+! Runtime tests for rules governing dot ('.') as a member accessor, including -+! voodoo with aliased user-defined vs. intrinsic operators and nested members. -+! See gcc/fortran/match.c (gfc_match_member_sep). -+! -+ -+module dec_structure_10 -+ ! Operator overload tests with .ne. and constant member -+ structure /s1/ -+ integer i -+ integer ne -+ logical b -+ end structure -+ -+ ! Operator overload tests with .eq., .test. and nested members -+ structure /s2/ -+ record /s1/ eq -+ record /s1/ test -+ record /s1/ and -+ integer i -+ end structure -+ -+ ! Deep nested access tests -+ structure /s3/ -+ record /s2/ r2 -+ end structure -+ structure /s4/ -+ record /s3/ r3 -+ end structure -+ structure /s5/ -+ record /s4/ r4 -+ end structure -+ structure /s6/ -+ record /s5/ r5 -+ end structure -+ structure /s7/ -+ record /s6/ r6 -+ end structure -+ -+ ! Operator overloads to mess with nested member accesses -+ interface operator (.ne.) -+ module procedure ne_func -+ end interface operator (.ne.) -+ interface operator (.eq.) -+ module procedure eq_func -+ end interface operator (.eq.) -+ interface operator (.test.) -+ module procedure tstfunc -+ end interface operator (.test.) -+ contains -+ ! ne_func will be called on (x) .ne. (y) -+ function ne_func (r, i) -+ integer, intent(in) :: i -+ type(s1), intent(in) :: r -+ integer ne_func -+ ne_func = r%i + i -+ end function -+ ! eq_func will be called on (x) .eq. (y) -+ function eq_func (r, i) -+ integer, intent(in) :: i -+ type(s2), intent(in) :: r -+ integer eq_func -+ eq_func = r%eq%i + i -+ end function eq_func -+ ! tstfunc will be called on (x) .test. (y) -+ function tstfunc (r, i) -+ integer, intent(in) :: i -+ type(s2), intent(in) :: r -+ integer tstfunc -+ tstfunc = r%i + i -+ end function tstfunc -+end module -+ -+use dec_structure_10 -+ -+record /s1/ r -+record /s2/ struct -+record /s7/ r7 -+integer i, j -+logical l -+struct%eq%i = 5 -+i = -5 -+ -+! Nested access: struct has a member and which has a member b -+l = struct .and. b ! struct%and%b -+l = struct .and. b .or. .false. ! (struct%and%b) .or. (.false.) -+ -+! Intrinsic op: r has no member 'ne' -+j = r .ne. i ! <intrinsic> ne(r, i) -+j = (r) .ne. i ! <intrinsic> ne(r, i) -+ -+! Intrinsic op; r has a member 'ne' but it is not a record -+j = r .ne. i ! <intrinsic> ne(r, i) -+j = (r) .ne. i ! <intrinsic> ne(r, i) -+ -+! Nested access: struct has a member eq which has a member i -+j = struct .eq. i ! struct%eq%i -+if ( j .ne. struct%eq%i ) call abort() -+ -+! User op: struct is compared to i with eq_func -+j = (struct) .eq. i ! eq_func(struct, i) -> struct%eq%i + i -+if ( j .ne. struct%eq%i + i ) call abort() -+ -+! User op: struct has a member test which has a member i, but test is a uop -+j = struct .test. i ! tstfunc(struct, i) -> struct%i + i -+if ( j .ne. struct%i + i ) call abort() -+ -+! User op: struct is compared to i with eq_func -+j = (struct) .test. i ! tstfunc(struct, i) -> struct%i + i -+if ( j .ne. struct%i + i ) call abort() -+ -+! Deep nested access tests -+r7.r6.r5.r4.r3.r2.i = 1337 -+j = r7.r6.r5.r4.r3.r2.i -+if ( j .ne. 1337 ) call abort() -+ -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_11.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_11.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_11.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_11.f90 2016-05-14 19:52:46.000000000 +0000 -@@ -0,0 +1,20 @@ -+! { dg-do compile } -+! { dg-options "-fdec-structure" } -+! -+! Tests for what CAN'T be done with dot ('.') as a member accessor. -+! -+ -+structure /s1/ -+ integer eq -+end structure -+ -+record /s1/ r -+integer i, j, k -+ -+j = i.j ! { dg-error "nonderived-type variable" } -+j = r .eq. i ! { dg-error "Operands of comparison" } -+j = r.i ! { dg-error "is not a member of" } -+j = r. ! { dg-error "Expected structure component or operator name" } -+j = .i ! { dg-error "Invalid character in name" } -+ -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_2.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_2.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_2.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_2.f90 2016-05-14 19:52:46.000000000 +0000 -@@ -0,0 +1,41 @@ -+! { dg-do run } -+! { dg-options "-fdec-structure" } -+! -+! Test STRUCTUREs containin other STRUCTUREs. -+! -+ -+subroutine aborts (s) -+ character(*), intent(in) :: s -+ print *, s -+ call abort() -+end subroutine -+ -+! Basic structure -+structure /s1/ -+ integer i1 -+ logical l1 -+ real r1 -+ character c1 -+end structure -+ -+structure /s2/ -+ integer i -+ record /s1/ r1 -+endstructure -+ -+record /s1/ r1 -+record /s2/ r2, r2_a(10) -+ -+! Nested and array records -+r2.r1.r1 = 135.79 -+r2_a(3).r1.i1 = -13579 -+ -+if (r2.r1.r1 .ne. 135.79) then -+ call aborts("r1.r1.r1") -+endif -+ -+if (r2_a(3).r1.i1 .ne. -13579) then -+ call aborts("r2_a(3).r1.i1") -+endif -+ -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_3.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_3.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_3.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_3.f90 2016-05-14 19:52:46.000000000 +0000 -@@ -0,0 +1,52 @@ -+! { dg-do run } -+! { dg-options "-fdec-structure" } -+! -+! Test nested STRUCTURE definitions. -+! -+ -+subroutine aborts (s) -+ character(*), intent(in) :: s -+ print *, s -+ call abort() -+end subroutine -+ -+structure /s3/ -+ real p -+ structure /s4/ recrd, recrd_a(3) -+ integer i, j -+ end structure -+ real q -+end structure -+ -+record /s3/ r3 -+record /s4/ r4 -+ -+r3.p = 1.3579 -+r4.i = 0 -+r4.j = 1 -+r3.recrd = r4 -+r3.recrd_a(1) = r3.recrd -+r3.recrd_a(2).i = 1 -+r3.recrd_a(2).j = 0 -+ -+if (r3.p .ne. 1.3579) then -+ call aborts("r3.p") -+endif -+ -+if (r4.i .ne. 0) then -+ call aborts("r4.i") -+endif -+ -+if (r4.j .ne. 1) then -+ call aborts("r4.j") -+endif -+ -+if (r3.recrd.i .ne. 0 .or. r3.recrd.j .ne. 1) then -+ call aborts("r3.recrd") -+endif -+ -+if (r3.recrd_a(2).i .ne. 1 .or. r3.recrd_a(2).j .ne. 0) then -+ call aborts("r3.recrd_a(2)") -+endif -+ -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_4.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_4.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_4.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_4.f90 2016-05-14 19:52:46.000000000 +0000 -@@ -0,0 +1,43 @@ -+! { dg-do run } -+! { dg-options "-fdec-structure" } -+! -+! Test anonymous STRUCTURE definitions. -+! -+ -+subroutine aborts (s) -+ character(*), intent(in) :: s -+ print *, s -+ call abort() -+end subroutine -+ -+structure /s5/ -+ structure recrd, recrd_a(3) -+ real x, y -+ end structure -+end structure -+ -+record /s5/ r5 -+ -+r5.recrd.x = 1.3 -+r5.recrd.y = 5.7 -+r5.recrd_a(1) = r5.recrd -+r5.recrd_a(2).x = 5.7 -+r5.recrd_a(2).y = 1.3 -+ -+if (r5.recrd.x .ne. 1.3) then -+ call aborts("r5.recrd.x") -+endif -+ -+if (r5.recrd.y .ne. 5.7) then -+ call aborts("r5.recrd.y") -+endif -+ -+if (r5.recrd_a(1).x .ne. 1.3 .or. r5.recrd_a(1).y .ne. 5.7) then -+ call aborts("r5.recrd_a(1)") -+endif -+ -+if (r5.recrd_a(2).x .ne. 5.7 .or. r5.recrd_a(2).y .ne. 1.3) then -+ call aborts("r5.recrd_a(2)") -+endif -+ -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_5.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_5.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_5.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_5.f90 2016-05-14 19:52:46.000000000 +0000 -@@ -0,0 +1,49 @@ -+! { dg-do run } -+! { dg-options "-fdec-structure" } -+! -+! Test STRUCTUREs which share names with variables. -+! -+ -+subroutine aborts (s) -+ character(*), intent(in) :: s -+ print *, s -+ call abort() -+end subroutine -+ -+! Special regression where shared names within a module caused an ICE -+! from gfc_get_module_backend_decl -+module dec_structure_5m -+ structure /s6/ -+ integer i -+ end structure -+ -+ record /s6/ s6 -+end module -+ -+program dec_structure_5 -+ use dec_structure_5m -+ -+ structure /s7/ -+ real r -+ end structure -+ -+ record /s7/ s7(3) -+ -+ s6.i = 0 -+ s7(1).r = 1.0 -+ s7(2).r = 2.0 -+ s7(3).r = 3.0 -+ -+ if (s6.i .ne. 0) then -+ call aborts("s6.i") -+ endif -+ -+ if (s7(1).r .ne. 1.0) then -+ call aborts("s7(1).r") -+ endif -+ -+ if (s7(2).r .ne. 2.0) then -+ call aborts("s7(2).r") -+ endif -+ -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_6.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_6.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_6.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_6.f90 2016-05-14 19:52:46.000000000 +0000 -@@ -0,0 +1,46 @@ -+! { dg-do run } -+! { dg-options "-fdec-structure" } -+! -+! Test old-style CLIST initializers in STRUCTURE. -+! -+ -+subroutine aborts (s) -+ character(*), intent(in) :: s -+ print *, s -+ call abort() -+end subroutine -+ -+integer, parameter :: as = 3 -+structure /s8/ -+ character*20 c /"HELLO"/ ! ok -+ integer*2 j /300_4/ ! ok, converted -+ integer k /65536_8/ ! ok, implicit -+ integer*4 l /200000/ ! ok, types match -+ integer m(5) /5,4,3,2,1/! ok -+ integer n(5) /1,3*2,1/ ! ok, with repeat spec (/1,2,2,2,1/) -+ integer o(as) /as*9/ ! ok, parameter array spec -+ integer p(2,2) /1,2,3,4/! ok -+ real q(3) /1_2,3.5,2.4E-12_8/ ! ok, with some implicit conversions -+ integer :: canary = z'3D3D3D3D' -+end structure -+ -+record /s8/ r8 -+ -+! Old-style (clist) initializers in structures -+if ( r8.c /= "HELLO" ) call aborts ("r8.c") -+if ( r8.j /= 300 ) call aborts ("r8.j") -+if ( r8.k /= 65536 ) call aborts ("r8.k") -+if ( r8.l /= 200000 ) call aborts ("r8.l") -+if ( r8.m(1) /= 5 .or. r8.m(2) /= 4 .or. r8.m(3) /= 3 & -+ .or. r8.m(4) /= 2 .or. r8.m(5) /= 1) & -+ call aborts ("r8.m") -+if ( r8.n(1) /= 1 .or. r8.n(2) /= 2 .or. r8.n(3) /= 2 .or. r8.n(4) /= 2 & -+ .or. r8.n(5) /= 1) & -+ call aborts ("r8.n") -+if ( r8.o(1) /= 9 .or. r8.o(2) /= 9 .or. r8.o(3) /= 9 ) call aborts ("r8.o") -+if ( r8.p(1,1) /= 1 .or. r8.p(2,1) /= 2 .or. r8.p(1,2) /= 3 & -+ .or. r8.p(2,2) /= 4) & -+ call aborts ("r8.p") -+if ( r8.canary /= z'3D3D3D3D' ) call aborts ("r8.canary") -+ -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_7.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_7.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_7.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_7.f90 2016-05-14 19:52:46.000000000 +0000 -@@ -0,0 +1,75 @@ -+! { dg-do run } -+! { dg-options "-fdec-structure" } -+! -+! Test passing STRUCTUREs through functions and subroutines. -+! -+ -+subroutine aborts (s) -+ character(*), intent(in) :: s -+ print *, s -+ call abort() -+end subroutine -+ -+module dec_structure_7m -+ structure /s1/ -+ integer i1 -+ logical l1 -+ real r1 -+ character c1 -+ end structure -+ -+ structure /s2/ -+ integer i -+ record /s1/ r1 -+ endstructure -+ -+contains -+ ! Pass structure through subroutine -+ subroutine sub (rec1, i) -+ implicit none -+ integer, intent(in) :: i -+ record /s1/ rec1 -+ rec1.i1 = i -+ end subroutine -+ -+ ! Pass structure through function -+ function func (rec2, r) -+ implicit none -+ real, intent(in) :: r -+ record /s2/ rec2 -+ real func -+ rec2.r1.r1 = r -+ func = rec2.r1.r1 -+ return -+ end function -+end module -+ -+program dec_structure_7 -+ use dec_structure_7m -+ -+ implicit none -+ record /s1/ r1 -+ record /s2/ r2 -+ real junk -+ -+ ! Passing through functions and subroutines -+ r1.i1 = 0 -+ call sub (r1, 10) -+ -+ r2.r1.r1 = 0.0 -+ junk = func (r2, -20.14) -+ -+ if (r1.i1 .ne. 10) then -+ call aborts("sub(r1, 10)") -+ endif -+ -+ if (r2.r1.r1 .ne. -20.14) then -+ call aborts("func(r2, -20.14)") -+ endif -+ -+ if (junk .ne. -20.14) then -+ print *, junk -+ call aborts("junk = func()") -+ endif -+ -+end program -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_8.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_8.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_8.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_8.f90 2016-05-14 19:52:46.000000000 +0000 -@@ -0,0 +1,60 @@ -+! { dg-do compile } -+! { dg-options "-fdec-structure -fmax-errors=0" } -+! -+! Comprehensive compile tests for what structures CAN'T do. -+! -+ -+! Old-style (clist) initialization -+integer,parameter :: as = 3 -+structure /t1/ -+ integer*1 a /300_2/ ! { dg-error "Arithmetic overflow" } -+ integer b // ! { dg-error "Empty old style initializer list" } -+ integer c /2*3/ ! { dg-error "Repeat spec invalid in scalar" } -+ integer d /1,2,3/ ! { dg-error "End of scalar initializer expected" } -+ integer e /"HI"/ ! { dg-error "Can't convert" } -+ integer f(as) /4*9/ ! { dg-error "Too many elements" } -+ integer g(3) /1,3/ ! { dg-error "Not enough elements" } -+ integer h(3) /1,3,5,7/ ! { dg-error "Too many elements" } -+ integer i(3) /2*1/ ! { dg-error "Not enough elements" } -+ integer j(3) /10*1/ ! { dg-error "Too many elements" } -+ integer k(3) /2.5*3/ ! { dg-error "Repeat spec must be an integer" } -+ integer l(2) /2*/ ! { dg-error "Expected data constant" } -+ integer m(1) / ! { dg-error "Syntax error in old style" } -+ integer n(2) /1 ! { dg-error "Syntax error in old style" } -+ integer o(2) /1, ! { dg-error "Syntax error in old style" } -+ integer p(1) /x/ ! { dg-error "must be a PARAMETER" } -+end structure -+ -+structure ! { dg-error "Structure name expected" } -+structure / ! { dg-error "Structure name expected" } -+structure // ! { dg-error "Structure name expected" } -+structure /.or./ ! { dg-error "Structure name expected" } -+structure /integer/ ! { dg-error "Structure name.*cannot be the same" } -+structure /foo/ bar ! { dg-error "Junk after" } -+structure /t1/ ! { dg-error "Type definition.*T1" } -+ -+record ! { dg-error "Structure name expected" } -+record bar ! { dg-error "Structure name expected" } -+record / bar ! { dg-error "Structure name expected" } -+record // bar ! { dg-error "Structure name expected" } -+record foo/ bar ! { dg-error "Structure name expected" } -+record /foo bar ! { dg-error "Structure name expected" } -+record /foo/ bar ! { dg-error "used before it is defined" } -+record /t1/ ! { dg-error "Invalid character in name" } -+ -+structure /t2/ -+ ENTRY here ! { dg-error "ENTRY statement.*cannot appear" } -+ integer a -+ integer a ! { dg-error "Component.*already declared" } -+ structure $z ! { dg-error "Invalid character in name" } -+ structure // ! { dg-error "Invalid character in name" } -+ structure // x ! { dg-error "Invalid character in name" } -+ structure /t3/ ! { dg-error "Invalid character in name" } -+ structure /t3/ x,$y ! { dg-error "Invalid character in name" } -+ structure /t4/ y -+ integer i, j, k -+ end structure -+ structure /t4/ z ! { dg-error "Type definition.*T4" } -+end structure -+ -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_9.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_9.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_structure_9.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_structure_9.f90 2016-05-14 19:52:46.000000000 +0000 -@@ -0,0 +1,42 @@ -+! { dg-do compile } -+! { dg-options "-fdec-structure" } -+! -+! Basic compile tests for what CAN be done with dot ('.') as a member accessor. -+! -+ -+logical :: l, l2 = .true., l3 = .false., and -+integer i -+character(5) s -+real r -+ -+structure /s1/ -+ integer i -+ character(5) s -+ real r -+end structure -+ -+record /s1/ r1 -+ -+! Basic -+l = l .and. l2 .or. l3 -+l = and .and. and .and. and -+l = l2 .eqv. l3 -+l = (l2) .eqv. l3 -+ -+! Integers -+l = .not. (i .eq. 0) -+l = .not. (0 .eq. i) -+l = .not. (r1.i .eq. 0) -+l = .not. (0 .eq. r1.i) -+! Characters -+l = .not. (s .eq. "hello") -+l = .not. ("hello" .eq. s) -+l = .not. (r1.s .eq. "hello") -+l = .not. ("hello" .eq. r1.s) -+! Reals -+l = .not. (r .eq. 3.14) -+l = .not. (3.14 .eq. r) -+l = .not. (r1.r .eq. 3.14) -+l = .not. (3.14 .eq. r1.r) -+ -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_union_1.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_union_1.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_union_1.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_union_1.f90 2016-05-14 19:52:46.000000000 +0000 -@@ -0,0 +1,66 @@ -+! { dg-do run } -+! { dg-options "-fdec-structure" } -+! -+! Test whether union backend declarations are corrently _not_ copied when they -+! are not in fact equal. The structure defined in sub() is seen later, but -+! where siz has a different value. -+! -+ -+subroutine aborts (s) -+ character(*), intent(in) :: s -+ print *, s -+ call abort() -+end subroutine -+ -+subroutine sub () -+ integer, parameter :: siz = 1024 -+ structure /s6/ -+ union ! U0 -+ map ! M0 -+ integer ibuf(siz) -+ end map -+ map ! M1 -+ character(8) cbuf(siz) -+ end map -+ map ! M2 -+ real rbuf(siz) -+ end map -+ end union -+ end structure -+ record /s6/ r6 -+ r6.ibuf(1) = z'badbeef' -+ r6.ibuf(2) = z'badbeef' -+end subroutine -+ -+! Repeat definition from subroutine sub with different size parameter. -+! If the structure definition is copied here the stack may get messed up. -+integer, parameter :: siz = 65536 -+structure /s6/ -+ union ! U12 -+ map -+ integer ibuf(siz) -+ end map -+ map -+ character(8) cbuf(siz) -+ end map -+ map -+ real rbuf(siz) -+ end map -+ end union -+end structure -+ -+record /s6/ r6 -+integer :: r6_canary = 0 -+ -+! Copied type declaration - this should not cause problems -+i = 1 -+do while (i < siz) -+ r6.ibuf(i) = z'badbeef' -+ i = i + 1 -+end do -+ -+if ( r6_canary .ne. 0 ) then -+ call aborts ('copied decls: overflow') -+endif -+ -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_union_2.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_union_2.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_union_2.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_union_2.f90 2016-05-14 19:52:46.000000000 +0000 -@@ -0,0 +1,60 @@ -+! { dg-do run } -+! { dg-options "-fdec-structure" } -+! -+! Test basic UNION implementation. -+! -+ -+subroutine aborts (s) -+ character(*), intent(in) :: s -+ print *, s -+ call abort() -+end subroutine -+ -+! Empty union -+structure /s0/ -+ union ! U0 -+ map ! M0 -+ end map -+ map ! M1 -+ end map -+ end union -+end structure -+ -+! Basic unions -+structure /s1/ -+ union ! U1 -+ map ! M2 -+ integer(4) a -+ end map -+ map ! M3 -+ real(4) b -+ end map -+ end union -+end structure -+structure /s2/ -+ union ! U2 -+ map ! M4 -+ integer(2) w1, w2 -+ end map -+ map ! M5 -+ integer(4) long -+ end map -+ end union -+end structure -+ -+record /s1/ r1 -+record /s2/ r2 -+ -+! Basic unions -+r1.a = 0 -+r1.b = 1.33e7 -+if ( r1.a .eq. 0 ) call aborts ("basic union 1") -+ -+! Endian-agnostic runtime check -+r2.long = z'12345678' -+if (.not. ( (r2.w1 .eq. z'1234' .and. r2.w2 .eq. z'5678') & -+ .or. (r2.w1 .eq. z'5678' .and. r2.w2 .eq. z'1234')) ) then -+ call aborts ("basic union 2") -+endif -+ -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_union_3.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_union_3.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_union_3.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_union_3.f90 2016-05-14 19:52:46.000000000 +0000 -@@ -0,0 +1,35 @@ -+! { dg-do run } -+! { dg-options "-fdec-structure" } -+! -+! Test UNIONs with initializations. -+! -+ -+subroutine aborts (s) -+ character(*), intent(in) :: s -+ print *, s -+ call abort() -+end subroutine -+ -+! Initialization expressions -+structure /s3/ -+ integer(4) :: i = 8 -+ union ! U7 -+ map -+ integer(4) :: x = 1600 -+ integer(4) :: y = 1800 -+ end map -+ map -+ integer(2) a, b, c -+ end map -+ end union -+end structure -+ -+record /s3/ r3 -+ -+! Initialized unions -+if ( r3.x .ne. 1600 .or. r3.y .ne. 1800) then -+ r3.x = r3.y ! If r3 isn't used the initializations are optimized out -+ call aborts ("union initialization") -+endif -+ -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_union_4.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_union_4.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_union_4.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_union_4.f90 2016-05-14 19:52:46.000000000 +0000 -@@ -0,0 +1,63 @@ -+! { dg-do run } -+! { dg-options "-fdec-structure" } -+! -+! Test nested UNIONs. -+! -+ -+subroutine aborts (s) -+ character(*), intent(in) :: s -+ print *, s -+ call abort() -+end subroutine -+ -+! Nested unions -+structure /s4/ -+ union ! U0 ! rax -+ map -+ character(16) rx -+ end map -+ map -+ character(8) rh ! rah -+ union ! U1 -+ map -+ character(8) rl ! ral -+ end map -+ map -+ character(8) ex ! eax -+ end map -+ map -+ character(4) eh ! eah -+ union ! U2 -+ map -+ character(4) el ! eal -+ end map -+ map -+ character(4) x ! ax -+ end map -+ map -+ character(2) h ! ah -+ character(2) l ! al -+ end map -+ end union -+ end map -+ end union -+ end map -+ end union -+end structure -+record /s4/ r4 -+ -+ -+! Nested unions -+r4.rx = 'AAAAAAAA.BBB.C.D' -+ -+if ( r4.rx .ne. 'AAAAAAAA.BBB.C.D' ) call aborts ("rax") -+if ( r4.rh .ne. 'AAAAAAAA' ) call aborts ("rah") -+if ( r4.rl .ne. '.BBB.C.D' ) call aborts ("ral") -+if ( r4.ex .ne. '.BBB.C.D' ) call aborts ("eax") -+if ( r4.eh .ne. '.BBB' ) call aborts ("eah") -+if ( r4.el .ne. '.C.D' ) call aborts ("eal") -+if ( r4.x .ne. '.C.D' ) call aborts ("ax") -+if ( r4.h .ne. '.C' ) call aborts ("ah") -+if ( r4.l .ne. '.D' ) call aborts ("al") -+ -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_union_5.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_union_5.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_union_5.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_union_5.f90 2016-05-14 19:52:46.000000000 +0000 -@@ -0,0 +1,41 @@ -+! { dg-do run } -+! { dg-options "-fdec-structure" } -+! -+! Test UNIONs with array components. -+! -+ -+subroutine aborts (s) -+ character(*), intent(in) :: s -+ print *, s -+ call abort() -+end subroutine -+ -+! Unions with arrays -+structure /s5/ -+ union -+ map -+ character :: s(5) -+ end map -+ map -+ integer(1) :: a(5) -+ end map -+ end union -+end structure -+ -+record /s5/ r5 -+ -+! Unions with arrays -+r5.a(1) = z'41' -+r5.a(2) = z'42' -+r5.a(3) = z'43' -+r5.a(4) = z'44' -+r5.a(5) = z'45' -+if ( r5.s(1) .ne. 'A' & -+ .or. r5.s(2) .ne. 'B' & -+ .or. r5.s(3) .ne. 'C' & -+ .or. r5.s(4) .ne. 'D' & -+ .or. r5.s(5) .ne. 'E') then -+ call aborts ("arrays") -+endif -+ -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_union_6.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_union_6.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_union_6.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_union_6.f90 2016-05-14 19:52:46.000000000 +0000 -@@ -0,0 +1,59 @@ -+! { dg-do run } -+! { dg-options "-fdec-structure" } -+! -+! sub0 and sub1 test a regression where calling gfc_use_derived from -+! gfc_find_component on the structure type symbol being parsed caused the -+! symbol to be freed and swapped for the previously seen type symbol, leaving -+! dangling pointers and causing all sorts of mayhem. -+! -+ -+subroutine sub0 (u) -+ structure /s/ -+ union ! U0 -+ map ! M0 -+ integer i -+ end map -+ end union -+ end structure -+ record /s/ u -+ u.i = 0 -+end subroutine sub0 -+ -+subroutine sub1 () -+ structure /s/ -+ union ! U1 -+ map ! M1 -+ integer i -+ end map -+ end union -+ end structure -+ record /s/ u -+ interface ! matches the declaration of sub0 above -+ subroutine sub0 (u) -+ structure /s/ -+ union ! U2 -+ map ! M2 -+ integer i ! gfc_find_component should not call gfc_use_derived -+ end map ! here, otherwise this structure's type symbol is freed -+ end union ! out from under it -+ end structure -+ record /s/ u -+ end subroutine sub0 -+ end interface -+ call sub0(u) -+end subroutine -+ -+! If sub0 and sub1 aren't used they may be omitted -+structure /s/ -+ union ! U1 -+ map ! M3 -+ integer i -+ end map -+ end union -+end structure -+record /s/ u -+ -+call sub0(u) -+call sub1() -+ -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_union_7.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_union_7.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/dec_union_7.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/dec_union_7.f90 2016-05-14 19:52:46.000000000 +0000 -@@ -0,0 +1,38 @@ -+! { dg-do compile } -+! { dg-options "-fdec-structure" } -+! -+! Comprehensive compile tests for what unions CAN'T do. -+! -+ -+! Syntax errors -+structure /s0/ -+ union a b c ! { dg-error "Junk after UNION" } -+ union -+ map a b c ! { dg-error "Junk after MAP" } -+ integer x ! { dg-error "Unexpected" } -+ structure /s2/ ! { dg-error "Unexpected" } -+ map -+ map ! { dg-error "Unexpected" } -+ end map -+ end union -+end structure -+ -+! Initialization expressions -+structure /s1/ -+ union -+ map -+ integer(4) :: x = 1600 ! { dg-error "Conflicting initializers" } -+ integer(4) :: y = 1800 -+ end map -+ map -+ integer(2) a, b, c, d -+ integer :: e = 0 ! { dg-error "Conflicting initializers" } -+ end map -+ map -+ real :: p = 1.3, q = 3.7 ! { dg-error "Conflicting initializers" } -+ end map -+ end union -+end structure -+record /s1/ r1 -+ -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/deferred_character_17.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/deferred_character_17.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/deferred_character_17.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/deferred_character_17.f90 2016-07-13 16:09:57.000000000 +0000 -@@ -0,0 +1,13 @@ -+!{ dg-do run } -+ -+! Check fix for PR fortran/71623 -+ -+program allocatemvce -+ implicit none -+ character(len=:), allocatable :: string -+ integer, dimension(4), target :: array = [1,2,3,4] -+ integer, dimension(:), pointer :: array_ptr -+ array_ptr => array -+ ! The allocate used to segfault -+ allocate(character(len=size(array_ptr))::string) -+end program allocatemvce -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/dependency_46.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/dependency_46.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/dependency_46.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/dependency_46.f90 2016-07-10 21:26:28.000000000 +0000 -@@ -0,0 +1,11 @@ -+! { dg-do compile } -+! PR 71783 - this used to ICE due to a missing charlen for the temporary. -+! Test case by Toon Moene. -+ -+SUBROUTINE prtdata(ilen) -+ INTEGER :: ilen -+ character(len=ilen), allocatable :: cline(:) -+ allocate(cline(2)) -+ cline(1) = 'a' -+ cline(2) = cline(1) -+END SUBROUTINE prtdata -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/asyncwait-2.f95 gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/asyncwait-2.f95 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/asyncwait-2.f95 2015-01-15 20:11:12.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/asyncwait-2.f95 2016-06-29 16:08:13.000000000 +0000 -@@ -83,6 +83,18 @@ - end do - !$acc end parallel ! { dg-error "Unexpected \\\!\\\$ACC END PARALLEL" } - -+ !$acc parallel copyin (a(1:N)) copy (b(1:N)) waitasync ! { dg-error "Unclassifiable OpenACC directive" } -+ do i = 1, N -+ b(i) = a(i) -+ end do -+ !$acc end parallel ! { dg-error "Unexpected \\\!\\\$ACC END PARALLEL" } -+ -+ !$acc parallel copyin (a(1:N)) copy (b(1:N)) asyncwait ! { dg-error "Unclassifiable OpenACC directive" } -+ do i = 1, N -+ b(i) = a(i) -+ end do -+ !$acc end parallel ! { dg-error "Unexpected \\\!\\\$ACC END PARALLEL" } -+ - !$acc parallel copyin (a(1:N)) copy (b(1:N)) wait - do i = 1, N - b(i) = a(i) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/asyncwait-3.f95 gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/asyncwait-3.f95 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/asyncwait-3.f95 2015-01-15 20:11:12.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/asyncwait-3.f95 2016-06-29 16:08:13.000000000 +0000 -@@ -11,17 +11,17 @@ - a(:) = 3.0 - b(:) = 0.0 - -- !$acc wait (1 2) ! { dg-error "Unexpected junk in \\\!\\\$ACC WAIT at" } -+ !$acc wait (1 2) ! { dg-error "Syntax error in OpenACC expression list at" } - -- !$acc wait (1,) ! { dg-error "Unexpected junk in \\\!\\\$ACC WAIT at" } -+ !$acc wait (1,) ! { dg-error "Syntax error in OpenACC expression list at" } - -- !$acc wait (,1) ! { dg-error "Unexpected junk in \\\!\\\$ACC WAIT at" } -+ !$acc wait (,1) ! { dg-error "Syntax error in OpenACC expression list at" } - -- !$acc wait (1, 2, ) ! { dg-error "Unexpected junk in \\\!\\\$ACC WAIT at" } -+ !$acc wait (1, 2, ) ! { dg-error "Syntax error in OpenACC expression list at" } - -- !$acc wait (1, 2, ,) ! { dg-error "Unexpected junk in \\\!\\\$ACC WAIT at" } -+ !$acc wait (1, 2, ,) ! { dg-error "Syntax error in OpenACC expression list at" } - -- !$acc wait (1 ! { dg-error "Unexpected junk in \\\!\\\$ACC WAIT at" } -+ !$acc wait (1 ! { dg-error "Syntax error in OpenACC expression list at" } - - !$acc wait (1, *) ! { dg-error "Invalid argument to \\\$\\\!ACC WAIT" } - -@@ -33,9 +33,9 @@ - - !$acc wait (1.0) ! { dg-error "WAIT clause at \\\(1\\\) requires a scalar INTEGER expression" } - -- !$acc wait 1 ! { dg-error "Unexpected junk in \\\!\\\$ACC WAIT at" } -+ !$acc wait 1 ! { dg-error "Unclassifiable OpenACC directive" } - -- !$acc wait N ! { dg-error "Unexpected junk in \\\!\\\$ACC WAIT at" } -+ !$acc wait N ! { dg-error "Unclassifiable OpenACC directive" } - - !$acc wait (1) - end program asyncwait -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/asyncwait-4.f95 gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/asyncwait-4.f95 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/asyncwait-4.f95 2015-01-15 20:11:12.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/asyncwait-4.f95 2016-06-29 16:08:13.000000000 +0000 -@@ -11,21 +11,21 @@ - a(:) = 3.0 - b(:) = 0.0 - -- !$acc wait async (1 2) ! { dg-error "Unexpected junk in \\\!\\\$ACC WAIT at" } -+ !$acc wait async (1 2) ! { dg-error "Unclassifiable OpenACC directive" } - -- !$acc wait async (1,) ! { dg-error "Unexpected junk in \\\!\\\$ACC WAIT at" } -+ !$acc wait async (1,) ! { dg-error "Unclassifiable OpenACC directive" } - -- !$acc wait async (,1) ! { dg-error "Unexpected junk in \\\!\\\$ACC WAIT at" } -+ !$acc wait async (,1) ! { dg-error "Invalid character in name" } - -- !$acc wait async (1, 2, ) ! { dg-error "Unexpected junk in \\\!\\\$ACC WAIT at" } -+ !$acc wait async (1, 2, ) ! { dg-error "Unclassifiable OpenACC directive" } - -- !$acc wait async (1, 2, ,) ! { dg-error "Unexpected junk in \\\!\\\$ACC WAIT at" } -+ !$acc wait async (1, 2, ,) ! { dg-error "Unclassifiable OpenACC directive" } - -- !$acc wait async (1 ! { dg-error "Unexpected junk in \\\!\\\$ACC WAIT at" } -+ !$acc wait async (1 ! { dg-error "Unclassifiable OpenACC directive" } - -- !$acc wait async (1, *) ! { dg-error "Unexpected junk in \\\!\\\$ACC WAIT at" } -+ !$acc wait async (1, *) ! { dg-error "Unclassifiable OpenACC directive" } - -- !$acc wait async (1, a) ! { dg-error "Unexpected junk in \\\!\\\$ACC WAIT at" } -+ !$acc wait async (1, a) ! { dg-error "Unclassifiable OpenACC directive" } - - !$acc wait async (a) ! { dg-error "ASYNC clause at \\\(1\\\) requires a scalar INTEGER expression" } - -@@ -33,5 +33,9 @@ - - !$acc wait async (1.0) ! { dg-error "ASYNC clause at \\\(1\\\) requires a scalar INTEGER expression" } - -- !$acc wait async 1 ! { dg-error "Unexpected junk in \\\!\\\$ACC WAIT at" } -+ !$acc wait async 1 ! { dg-error "Unclassifiable OpenACC directive" } -+ -+ !$acc waitasync ! { dg-error "Unclassifiable OpenACC directive" } -+ -+ !$acc wait,async ! { dg-error "Unclassifiable OpenACC directive" } - end program asyncwait -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/cache-1.f95 gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/cache-1.f95 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/cache-1.f95 2015-10-27 16:54:52.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/cache-1.f95 2016-06-10 09:46:04.000000000 +0000 -@@ -1,4 +1,6 @@ --! { dg-do compile } -+! OpenACC cache directive: valid usage. -+! For execution testing, this file is "#include"d from -+! libgomp/testsuite/libgomp.oacc-fortran/cache-1.f95. - ! { dg-additional-options "-std=f2008" } - - program test -@@ -6,11 +8,8 @@ - integer :: i, d(10), e(5,13) - - do concurrent (i=1:5) -- !$acc cache (d) - !$acc cache (d(1:3)) - !$acc cache (d(i:i+2)) -- -- !$acc cache (e) - !$acc cache (e(1:3,2:4)) - !$acc cache (e(i:i+2,i+1:i+3)) - enddo -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/cache-2.f95 gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/cache-2.f95 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/cache-2.f95 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/cache-2.f95 2016-06-10 09:46:04.000000000 +0000 -@@ -0,0 +1,12 @@ -+! OpenACC cache directive: invalid usage. -+! { dg-additional-options "-std=f2008" } -+ -+program test -+ implicit none -+ integer :: i, d(10), e(5,13) -+ -+ do concurrent (i=1:5) -+ !$acc cache (d) ! { dg-error "" "TODO" { xfail *-*-* } } -+ !$acc cache (e) ! { dg-error "" "TODO" { xfail *-*-* } } -+ enddo -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/coarray.f95 gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/coarray.f95 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/coarray.f95 2015-12-02 19:59:27.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/coarray.f95 2016-06-10 09:46:04.000000000 +0000 -@@ -24,7 +24,7 @@ - !$acc end parallel loop - !$acc parallel loop - do i = 1,5 -- !$acc cache (a) -+ !$acc cache (a) ! { dg-error "" "TODO" { xfail *-*-* } } - enddo - !$acc end parallel loop - !$acc update device (a) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/combined-directives.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/combined-directives.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/combined-directives.f90 2016-03-30 15:08:47.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/combined-directives.f90 2016-06-10 09:46:18.000000000 +0000 -@@ -143,7 +143,8 @@ - ! { dg-final { scan-tree-dump-times "acc loop private.i. private.j. vector" 2 "gimple" } } - ! { dg-final { scan-tree-dump-times "acc loop private.i. private.j. seq" 2 "gimple" } } - ! { dg-final { scan-tree-dump-times "acc loop private.i. private.j. auto" 2 "gimple" } } --! { dg-final { scan-tree-dump-times "acc loop private.i. private.j. tile.2, 3" 2 "gimple" } } -+! XFAILed: OpenACC tile clauses are discarded during gimplification. -+! { dg-final { scan-tree-dump-times "acc loop private.i. private.j. tile.2, 3" 2 "gimple" { xfail *-*-* } } } - ! { dg-final { scan-tree-dump-times "acc loop private.i. independent" 2 "gimple" } } - ! { dg-final { scan-tree-dump-times "private.z" 2 "gimple" } } - ! { dg-final { scan-tree-dump-times "omp target oacc_\[^ \]+ map.force_tofrom:y" 2 "gimple" } } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/cray-2.f95 gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/cray-2.f95 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/cray-2.f95 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/cray-2.f95 2016-06-10 09:46:18.000000000 +0000 -@@ -0,0 +1,56 @@ -+! { dg-additional-options "-fcray-pointer" } -+! See also cray.f95. -+ -+program test -+ call oacc1 -+contains -+ subroutine oacc1 -+ implicit none -+ integer :: i -+ real :: pointee -+ pointer (ptr, pointee) -+ !$acc declare device_resident (pointee) -+ !$acc declare device_resident (ptr) -+ !$acc data copy (pointee) ! { dg-error "Cray pointee" } -+ !$acc end data -+ !$acc data deviceptr (pointee) ! { dg-error "Cray pointee" } -+ !$acc end data -+ !$acc parallel private (pointee) ! { dg-error "Cray pointee" } -+ !$acc end parallel -+ !$acc host_data use_device (pointee) ! { dg-error "Cray pointee" } -+ !$acc end host_data -+ !$acc parallel loop reduction(+:pointee) ! { dg-error "Cray pointee" } -+ do i = 1,5 -+ enddo -+ !$acc end parallel loop -+ !$acc parallel loop -+ do i = 1,5 -+ !$acc cache (pointee) ! { dg-error "Cray pointee" } -+ enddo -+ !$acc end parallel loop -+ !$acc update device (pointee) ! { dg-error "Cray pointee" } -+ !$acc update host (pointee) ! { dg-error "Cray pointee" } -+ !$acc update self (pointee) ! { dg-error "Cray pointee" } -+ !$acc data copy (ptr) -+ !$acc end data -+ !$acc data deviceptr (ptr) ! { dg-error "Cray pointer" } -+ !$acc end data -+ !$acc parallel private (ptr) -+ !$acc end parallel -+ !$acc host_data use_device (ptr) ! { dg-error "Cray pointer" } -+ !$acc end host_data -+ !$acc parallel loop reduction(+:ptr) ! { dg-error "Cray pointer" } -+ do i = 1,5 -+ enddo -+ !$acc end parallel loop -+ !$acc parallel loop -+ do i = 1,5 -+ !TODO: This must fail, as in openacc-1_0-branch. -+ !$acc cache (ptr) ! { dg-error "" "TODO" { xfail *-*-* } } -+ enddo -+ !$acc end parallel loop -+ !$acc update device (ptr) -+ !$acc update host (ptr) -+ !$acc update self (ptr) -+ end subroutine oacc1 -+end program test -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/cray.f95 gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/cray.f95 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/cray.f95 2015-10-27 16:54:52.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/cray.f95 2016-06-10 09:46:18.000000000 +0000 -@@ -1,5 +1,5 @@ --! { dg-do compile } - ! { dg-additional-options "-fcray-pointer" } -+! See also cray-2.f95. - - module test - contains -@@ -8,8 +8,8 @@ - integer :: i - real :: pointee - pointer (ptr, pointee) -- !$acc declare device_resident (pointee) -- !$acc declare device_resident (ptr) -+ !$acc declare device_resident (pointee) -+ !$acc declare device_resident (ptr) - !$acc data copy (pointee) ! { dg-error "Cray pointee" } - !$acc end data - !$acc data deviceptr (pointee) ! { dg-error "Cray pointee" } -@@ -44,7 +44,8 @@ - !$acc end parallel loop - !$acc parallel loop - do i = 1,5 -- !$acc cache (ptr) ! TODO: This must fail, as in openacc-1_0-branch -+ !TODO: This must fail, as in openacc-1_0-branch. -+ !$acc cache (ptr) ! { dg-error "" "TODO" { xfail *-*-* } } - enddo - !$acc end parallel loop - !$acc update device (ptr) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/loop-1-2.f95 gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/loop-1-2.f95 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/loop-1-2.f95 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/loop-1-2.f95 2016-06-10 09:46:18.000000000 +0000 -@@ -0,0 +1,176 @@ -+! See also loop-1.f95. -+ -+program test -+ call test1 -+contains -+ -+subroutine test1 -+ integer :: i, j, k, b(10) -+ integer, dimension (30) :: a -+ double precision :: d -+ real :: r -+ i = 0 -+ !$acc loop -+ do 100 ! { dg-error "cannot be a DO WHILE or DO without loop control" } -+ if (i .gt. 0) exit ! { dg-error "EXIT statement" } -+ 100 i = i + 1 -+ i = 0 -+ !$acc loop -+ do ! { dg-error "cannot be a DO WHILE or DO without loop control" } -+ if (i .gt. 0) exit ! { dg-error "EXIT statement" } -+ i = i + 1 -+ end do -+ i = 0 -+ !$acc loop -+ do 200 while (i .lt. 4) ! { dg-error "cannot be a DO WHILE or DO without loop control" } -+ 200 i = i + 1 -+ !$acc loop -+ do while (i .lt. 8) ! { dg-error "cannot be a DO WHILE or DO without loop control" } -+ i = i + 1 -+ end do -+ !$acc loop -+ do 300 d = 1, 30, 6 -+ i = d -+ 300 a(i) = 1 -+ ! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 32 } -+ ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 32 } -+ !$acc loop -+ do d = 1, 30, 5 -+ i = d -+ a(i) = 2 -+ end do -+ ! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 38 } -+ ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 38 } -+ !$acc loop -+ do i = 1, 30 -+ if (i .eq. 16) exit ! { dg-error "EXIT statement" } -+ end do -+ !$acc loop -+ outer: do i = 1, 30 -+ do j = 5, 10 -+ if (i .eq. 6 .and. j .eq. 7) exit outer ! { dg-error "EXIT statement" } -+ end do -+ end do outer -+ last: do i = 1, 30 -+ end do last -+ -+ ! different types of loop are allowed -+ !$acc loop -+ do i = 1,10 -+ end do -+ !$acc loop -+ do 400, i = 1,10 -+400 a(i) = i -+ -+ ! after loop directive must be loop -+ !$acc loop -+ a(1) = 1 ! { dg-error "Expected DO loop" } -+ do i = 1,10 -+ enddo -+ -+ ! combined directives may be used with/without end -+ !$acc parallel loop -+ do i = 1,10 -+ enddo -+ !$acc parallel loop -+ do i = 1,10 -+ enddo -+ !$acc end parallel loop -+ !$acc kernels loop -+ do i = 1,10 -+ enddo -+ !$acc kernels loop -+ do i = 1,10 -+ enddo -+ !$acc end kernels loop -+ -+ !$acc kernels loop reduction(max:i) -+ do i = 1,10 -+ enddo -+ !$acc kernels -+ !$acc loop reduction(max:i) -+ do i = 1,10 -+ enddo -+ !$acc end kernels -+ -+ !$acc parallel loop collapse(0) ! { dg-error "constant positive integer" } -+ do i = 1,10 -+ enddo -+ -+ !$acc parallel loop collapse(-1) ! { dg-error "constant positive integer" } -+ do i = 1,10 -+ enddo -+ -+ !$acc parallel loop collapse(i) ! { dg-error "Constant expression required" } -+ do i = 1,10 -+ enddo -+ -+ !$acc parallel loop collapse(4) ! { dg-error "not enough DO loops for collapsed" } -+ do i = 1, 3 -+ do j = 4, 6 -+ do k = 5, 7 -+ a(i+j-k) = i + j + k -+ end do -+ end do -+ end do -+ !$acc parallel loop collapse(2) -+ do i = 1, 5, 2 -+ do j = i + 1, 7, i ! { dg-error "collapsed loops don.t form rectangular iteration space" } -+ end do -+ end do -+ !$acc parallel loop collapse(2) -+ do i = 1, 3 -+ do j = 4, 6 -+ end do -+ end do -+ !$acc parallel loop collapse(2) -+ do i = 1, 3 -+ do j = 4, 6 -+ end do -+ k = 4 -+ end do -+ !$acc parallel loop collapse(3-1) -+ do i = 1, 3 -+ do j = 4, 6 -+ end do -+ k = 4 -+ end do -+ !$acc parallel loop collapse(1+1) -+ do i = 1, 3 -+ do j = 4, 6 -+ end do -+ k = 4 -+ end do -+ !$acc parallel loop collapse(2) -+ do i = 1, 3 -+ do ! { dg-error "cannot be a DO WHILE or DO without loop control" } -+ end do -+ end do -+ !$acc parallel loop collapse(2) -+ do i = 1, 3 -+ do r = 4, 6 -+ end do -+ ! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 151 } -+ ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 151 } -+ end do -+ -+ ! Both seq and independent are not allowed -+ !$acc loop independent seq ! { dg-error "SEQ conflicts with INDEPENDENT" } -+ do i = 1,10 -+ enddo -+ -+ -+ !$acc cache (a(1:10)) ! { dg-error "ACC CACHE directive must be inside of loop" } -+ -+ do i = 1,10 -+ !$acc cache(a(i:i+1)) -+ enddo -+ -+ do i = 1,10 -+ !$acc cache(a(i:i+1)) -+ a(i) = i -+ !$acc cache(a(i+2:i+2+1)) -+ enddo -+ -+end subroutine test1 -+end program test -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/loop-1.f95 gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/loop-1.f95 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/loop-1.f95 2016-03-30 15:08:47.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/loop-1.f95 2016-06-10 09:46:18.000000000 +0000 -@@ -1,8 +1,10 @@ -+! See also loop-1-2.f95. -+ - module test - implicit none - contains - --subroutine test1 -+subroutine test1 - integer :: i, j, k, b(10) - integer, dimension (30) :: a - double precision :: d -@@ -30,15 +32,15 @@ - do 300 d = 1, 30, 6 - i = d - 300 a(i) = 1 -- ! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 30 } -- ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 30 } -+ ! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 32 } -+ ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 32 } - !$acc loop - do d = 1, 30, 5 - i = d - a(i) = 2 - end do -- ! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 36 } -- ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 36 } -+ ! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 38 } -+ ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 38 } - !$acc loop - do i = 1, 30 - if (i .eq. 16) exit ! { dg-error "EXIT statement" } -@@ -53,7 +55,7 @@ - end do last - - ! different types of loop are allowed -- !$acc loop -+ !$acc loop - do i = 1,10 - end do - !$acc loop -@@ -65,8 +67,8 @@ - a(1) = 1 ! { dg-error "Expected DO loop" } - do i = 1,10 - enddo -- -- ! combined directives may be used with/without end -+ -+ ! combined directives may be used with/without end - !$acc parallel loop - do i = 1,10 - enddo -@@ -82,11 +84,11 @@ - enddo - !$acc end kernels loop - -- !$acc kernels loop reduction(max:i) -+ !$acc kernels loop reduction(max:i) - do i = 1,10 - enddo -- !$acc kernels -- !$acc loop reduction(max:i) -+ !$acc kernels -+ !$acc loop reduction(max:i) - do i = 1,10 - enddo - !$acc end kernels -@@ -118,7 +120,7 @@ - end do - !$acc parallel loop collapse(2) - do i = 1, 3 -- do j = 4, 6 -+ do j = 4, 6 - end do - end do - !$acc parallel loop collapse(2) -@@ -148,8 +150,8 @@ - do i = 1, 3 - do r = 4, 6 - end do -- ! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 149 } -- ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 149 } -+ ! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 151 } -+ ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 151 } - end do - - ! Both seq and independent are not allowed -@@ -158,15 +160,16 @@ - enddo - - -- !$acc cache (a) ! { dg-error "inside of loop" } -+ !$acc cache (a(1:10)) ! { dg-error "ACC CACHE directive must be inside of loop" } - - do i = 1,10 -- !$acc cache(a) -+ !$acc cache(a(i:i+1)) - enddo - - do i = 1,10 -+ !$acc cache(a(i:i+1)) - a(i) = i -- !$acc cache(a) -+ !$acc cache(a(i+2:i+2+1)) - enddo - - end subroutine test1 -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/loop-3-2.f95 gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/loop-3-2.f95 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/loop-3-2.f95 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/loop-3-2.f95 2016-06-10 09:46:18.000000000 +0000 -@@ -0,0 +1,58 @@ -+! { dg-additional-options "-std=f2008" } -+! See also loop-3.f95. -+ -+program test -+ call test1 -+contains -+subroutine test1 -+ implicit none -+ integer :: i, j -+ -+ ! !$acc end loop not required by spec -+ !$acc loop -+ do i = 1,5 -+ enddo -+ !$acc end loop ! { dg-warning "Redundant" } -+ -+ !$acc loop -+ do i = 1,5 -+ enddo -+ j = 1 -+ !$acc end loop ! { dg-error "Unexpected" } -+ -+ !$acc parallel -+ !$acc loop -+ do i = 1,5 -+ enddo -+ !$acc end parallel -+ !$acc end loop ! { dg-error "Unexpected" } -+ -+ ! OpenACC supports Fortran 2008 do concurrent statement -+ !$acc loop -+ do concurrent (i = 1:5) -+ end do -+ -+ !$acc loop -+ outer_loop: do i = 1, 5 -+ inner_loop: do j = 1,5 -+ if (i .eq. j) cycle outer_loop -+ if (i .ne. j) exit outer_loop ! { dg-error "EXIT statement" } -+ end do inner_loop -+ end do outer_loop -+ -+ outer_loop1: do i = 1, 5 -+ !$acc loop -+ inner_loop1: do j = 1,5 -+ if (i .eq. j) cycle outer_loop1 ! { dg-error "CYCLE statement" } -+ end do inner_loop1 -+ end do outer_loop1 -+ -+ !$acc loop collapse(2) -+ outer_loop2: do i = 1, 5 -+ inner_loop2: do j = 1,5 -+ if (i .eq. j) cycle outer_loop2 ! { dg-error "CYCLE statement" } -+ if (i .ne. j) exit outer_loop2 ! { dg-error "EXIT statement" } -+ end do inner_loop2 -+ end do outer_loop2 -+end subroutine test1 -+end program test -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/loop-3.f95 gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/loop-3.f95 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/loop-3.f95 2015-01-15 20:11:12.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/loop-3.f95 2016-06-10 09:46:18.000000000 +0000 -@@ -1,10 +1,10 @@ --! { dg-do compile } - ! { dg-additional-options "-std=f2008" } -+! See also loop-3-2.f95. - - subroutine test1 - implicit none - integer :: i, j -- -+ - ! !$acc end loop not required by spec - !$acc loop - do i = 1,5 -@@ -23,7 +23,7 @@ - enddo - !$acc end parallel - !$acc end loop ! { dg-error "Unexpected" } -- -+ - ! OpenACC supports Fortran 2008 do concurrent statement - !$acc loop - do concurrent (i = 1:5) -@@ -35,7 +35,7 @@ - if (i .eq. j) cycle outer_loop - if (i .ne. j) exit outer_loop ! { dg-error "EXIT statement" } - end do inner_loop -- end do outer_loop -+ end do outer_loop - - outer_loop1: do i = 1, 5 - !$acc loop -@@ -50,6 +50,5 @@ - if (i .eq. j) cycle outer_loop2 ! { dg-error "CYCLE statement" } - if (i .ne. j) exit outer_loop2 ! { dg-error "EXIT statement" } - end do inner_loop2 -- end do outer_loop2 -+ end do outer_loop2 - end subroutine test1 -- -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/nested-function-1.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/nested-function-1.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/nested-function-1.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/nested-function-1.f90 2016-06-10 09:46:18.000000000 +0000 -@@ -0,0 +1,93 @@ -+! Exercise nested function decomposition, gcc/tree-nested.c. -+! See gcc/testsuite/gcc.dg/goacc/nested-function-1.c for the C version. -+ -+program main -+ integer, parameter :: N = 100 -+ integer :: nonlocal_arg -+ integer :: nonlocal_a(N) -+ integer :: nonlocal_i -+ integer :: nonlocal_j -+ -+ nonlocal_a (:) = 5 -+ nonlocal_arg = 5 -+ -+ call local () -+ call nonlocal () -+ -+contains -+ -+ subroutine local () -+ integer :: local_i -+ integer :: local_arg -+ integer :: local_a(N) -+ integer :: local_j -+ -+ local_a (:) = 5 -+ local_arg = 5 -+ -+ !$acc kernels loop & -+ !$acc gang(num:local_arg) worker(local_arg) vector(local_arg) & -+ !$acc wait async(local_arg) -+ do local_i = 1, N -+ !$acc cache (local_a(local_i:local_i + 5)) -+ local_a(local_i) = 100 -+ !$acc loop seq tile(*) -+ do local_j = 1, N -+ enddo -+ !$acc loop auto independent tile(1) -+ do local_j = 1, N -+ enddo -+ enddo -+ !$acc end kernels loop -+ -+ !$acc kernels loop & -+ !$acc gang(static:local_arg) worker(local_arg) vector(local_arg) & -+ !$acc wait(local_arg, local_arg + 1, local_arg + 2) async -+ do local_i = 1, N -+ !$acc cache (local_a(local_i:local_i + 4)) -+ local_a(local_i) = 100 -+ !$acc loop seq tile(1) -+ do local_j = 1, N -+ enddo -+ !$acc loop auto independent tile(*) -+ do local_j = 1, N -+ enddo -+ enddo -+ !$acc end kernels loop -+ end subroutine local -+ -+ subroutine nonlocal () -+ nonlocal_a (:) = 5 -+ nonlocal_arg = 5 -+ -+ !$acc kernels loop & -+ !$acc gang(num:nonlocal_arg) worker(nonlocal_arg) vector(nonlocal_arg) & -+ !$acc wait async(nonlocal_arg) -+ do nonlocal_i = 1, N -+ !$acc cache (nonlocal_a(nonlocal_i:nonlocal_i + 3)) -+ nonlocal_a(nonlocal_i) = 100 -+ !$acc loop seq tile(2) -+ do nonlocal_j = 1, N -+ enddo -+ !$acc loop auto independent tile(3) -+ do nonlocal_j = 1, N -+ enddo -+ enddo -+ !$acc end kernels loop -+ -+ !$acc kernels loop & -+ !$acc gang(static:nonlocal_arg) worker(nonlocal_arg) vector(nonlocal_arg) & -+ !$acc wait(nonlocal_arg, nonlocal_arg + 1, nonlocal_arg + 2) async -+ do nonlocal_i = 1, N -+ !$acc cache (nonlocal_a(nonlocal_i:nonlocal_i + 2)) -+ nonlocal_a(nonlocal_i) = 100 -+ !$acc loop seq tile(*) -+ do nonlocal_j = 1, N -+ enddo -+ !$acc loop auto independent tile(*) -+ do nonlocal_j = 1, N -+ enddo -+ enddo -+ !$acc end kernels loop -+ end subroutine nonlocal -+end program main -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/pr71704.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/pr71704.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/pr71704.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/pr71704.f90 2016-07-08 21:27:22.000000000 +0000 -@@ -0,0 +1,60 @@ -+! PR fortran/71704 -+! { dg-do compile } -+ -+real function f1 () -+!$acc routine (f1) -+ f1 = 1 -+end -+ -+real function f2 (a) -+ integer a -+ !$acc enter data copyin(a) -+ f2 = 1 -+end -+ -+real function f3 (a) -+ integer a -+!$acc enter data copyin(a) -+ f3 = 1 -+end -+ -+real function f4 () -+!$acc wait -+ f4 = 1 -+end -+ -+real function f5 (a) -+ integer a -+!$acc update device(a) -+ f5 = 1 -+end -+ -+real function f6 () -+!$acc parallel -+!$acc end parallel -+ f6 = 1 -+end -+ -+real function f7 () -+!$acc kernels -+!$acc end kernels -+ f7 = 1 -+end -+ -+real function f8 () -+!$acc data -+!$acc end data -+ f8 = 1 -+end -+ -+real function f9 () -+!$acc host_data -+!$acc end host_data -+ f8 = 1 -+end -+ -+real function f10 (a) -+ integer a -+!$acc declare present (a) -+ f8 = 1 -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/reduction-2.f95 gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/reduction-2.f95 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc/reduction-2.f95 2015-12-02 19:59:27.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/goacc/reduction-2.f95 2016-04-29 17:37:55.000000000 +0000 -@@ -15,7 +15,7 @@ - !$acc end kernels loop - end subroutine - --! { dg-final { scan-tree-dump-times "target oacc_parallel firstprivate.a." 1 "gimple" } } -+! { dg-final { scan-tree-dump-times "target oacc_parallel reduction..:a. map.tofrom.a." 1 "gimple" } } - ! { dg-final { scan-tree-dump-times "acc loop private.p. reduction..:a." 1 "gimple" } } - ! { dg-final { scan-tree-dump-times "target oacc_kernels map.force_tofrom:a .len: 4.." 1 "gimple" } } - ! { dg-final { scan-tree-dump-times "acc loop private.k. reduction..:a." 1 "gimple" } } -Only in gcc-6.1.0/gcc/testsuite/gfortran.dg/goacc: subroutines.f90 -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/gomp/order-1.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/gomp/order-1.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/gomp/order-1.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/gomp/order-1.f90 2016-06-01 12:22:54.000000000 +0000 -@@ -0,0 +1,92 @@ -+! { dg-do compile } -+ -+module m -+ integer :: i -+end module m -+subroutine f1 -+ type t -+ integer :: i -+ end type t -+ interface -+ integer function f3 (a, b) -+ !$omp declare simd (f3) uniform (a) -+ use m -+ import :: t -+ implicit none -+ type (t) :: a -+ integer :: b -+ end function f3 -+ end interface -+ interface -+ integer function f4 (a, b) -+ use m -+ !$omp declare simd (f4) uniform (a) -+ import :: t -+ implicit none -+ type (t) :: a -+ integer :: b -+ end function f4 -+ end interface -+ interface -+ integer function f5 (a, b) -+ use m -+ import :: t -+ !$omp declare simd (f5) uniform (a) -+ implicit none -+ type (t) :: a -+ integer :: b -+ end function f5 -+ end interface -+ interface -+ integer function f6 (a, b) -+ use m -+ import :: t -+ implicit none -+ !$omp declare simd (f6) uniform (a) -+ type (t) :: a -+ integer :: b -+ end function f6 -+ end interface -+ interface -+ integer function f7 (a, b) -+ use m -+ import :: t -+ implicit none -+ type (t) :: a -+ !$omp declare simd (f7) uniform (a) -+ integer :: b -+ end function f7 -+ end interface -+ call f2 -+contains -+ subroutine f2 -+ !$omp threadprivate (t1) -+ use m -+ !$omp threadprivate (t2) -+ implicit none -+ !$omp threadprivate (t3) -+ integer, save :: t1, t2, t3, t4 -+ !$omp threadprivate (t4) -+ t1 = 1; t2 = 2; t3 = 3; t4 = 4 -+ end subroutine f2 -+ subroutine f8 -+ !$omp declare reduction (f8_1:real:omp_out = omp_out + omp_in) -+ use m -+ !$omp declare reduction (f8_2:real:omp_out = omp_out + omp_in) -+ implicit none -+ !$omp declare reduction (f8_3:real:omp_out = omp_out + omp_in) -+ integer :: j -+ !$omp declare reduction (f8_4:real:omp_out = omp_out + omp_in) -+ end subroutine f8 -+ subroutine f9 -+ !$omp declare target (f9_1) -+ use m -+ !$omp declare target (f9_2) -+ implicit none -+ !$omp declare target (f9_3) -+ !$omp declare target -+ integer, save :: f9_1, f9_2, f9_3, f9_4 -+ !$omp declare target (f9_4) -+ f9_1 = 1; f9_2 = 2; f9_3 = 3; f9_4 = 4 -+ end subroutine f9 -+end subroutine f1 -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/gomp/order-2.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/gomp/order-2.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/gomp/order-2.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/gomp/order-2.f90 2016-06-01 12:22:54.000000000 +0000 -@@ -0,0 +1,37 @@ -+! { dg-do compile } -+ -+module m -+ integer :: i -+end module m -+subroutine f1 -+ call f2 -+contains -+ subroutine f2 -+ use m -+ implicit none -+ integer, save :: t -+ t = 1 -+ !$omp threadprivate (t1) ! { dg-error "Unexpected" } -+ end subroutine f2 -+ subroutine f3 -+ use m -+ implicit none -+ integer :: j -+ j = 1 -+ !$omp declare reduction (foo:real:omp_out = omp_out + omp_in) ! { dg-error "Unexpected" } -+ end subroutine f3 -+ subroutine f4 -+ use m -+ implicit none -+ !$omp declare target -+ integer, save :: f4_1 -+ f4_1 = 1 -+ !$omp declare target (f4_1) ! { dg-error "Unexpected" } -+ !$omp declare target ! { dg-error "Unexpected" } -+ end subroutine f4 -+ integer function f5 (a, b) -+ integer :: a, b -+ a = 1; b = 2 -+ !$omp declare simd (f5) notinbranch ! { dg-error "Unexpected" } -+ end function f5 -+end subroutine f1 -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/gomp/pr70855.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/gomp/pr70855.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/gomp/pr70855.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/gomp/pr70855.f90 2016-05-11 13:18:05.000000000 +0000 -@@ -0,0 +1,18 @@ -+! PR fortran/70855 -+! { dg-do compile } -+! { dg-additional-options "-O2" } -+ -+program pr70855 -+ integer, parameter :: m = 4 -+ integer, parameter :: n = 2 -+ real :: a(m,n) -+ real :: x(n) -+ real :: y(m) -+ a = 1.0 -+ x = 1.0 -+!$omp parallel -+!$omp workshare -+ y(1:m) = matmul ( a(1:m,1:n), x(1:n) ) -+!$omp end workshare -+!$omp end parallel -+end program pr70855 -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/gomp/pr71687.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/gomp/pr71687.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/gomp/pr71687.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/gomp/pr71687.f90 2016-07-02 10:25:52.000000000 +0000 -@@ -0,0 +1,11 @@ -+! PR fortran/71687 -+! { dg-do compile } -+! { dg-additional-options "-fstack-arrays -O2" } -+ -+subroutine s (n, x) -+ integer :: n -+ real :: x(n) -+!$omp parallel -+ x(1:n) = x(n:1:-1) -+!$omp end parallel -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/gomp/pr71704.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/gomp/pr71704.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/gomp/pr71704.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/gomp/pr71704.f90 2016-07-02 10:23:45.000000000 +0000 -@@ -0,0 +1,58 @@ -+! PR fortran/71704 -+! { dg-do compile } -+ -+real function f0 () -+!$omp declare simd (f0) -+ f0 = 1 -+end -+ -+real function f1 () -+!$omp declare target (f1) -+ f1 = 1 -+end -+ -+real function f2 () -+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) & -+!$omp & initializer (omp_priv = 0) -+ f2 = 1 -+end -+ -+real function f3 () -+ real, save :: t -+!$omp threadprivate (t) -+ f3 = 1 -+end -+ -+real function f4 () -+!$omp taskwait -+ f4 = 1 -+end -+ -+real function f5 () -+!$omp barrier -+ f5 = 1 -+end -+ -+real function f6 () -+!$omp parallel -+!$omp end parallel -+ f6 = 1 -+end -+ -+real function f7 () -+!$omp single -+!$omp end single -+ f7 = 1 -+end -+ -+real function f8 () -+!$omp critical -+!$omp end critical -+ f8 = 1 -+end -+ -+real function f9 () -+!$omp critical -+!$omp end critical -+ f9 = 1 -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/gomp/pr71705.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/gomp/pr71705.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/gomp/pr71705.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/gomp/pr71705.f90 2016-07-02 10:22:48.000000000 +0000 -@@ -0,0 +1,7 @@ -+! PR fortran/71705 -+! { dg-do compile } -+ -+ real :: x -+ x = 0.0 -+ !$omp target update to(x) -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/gomp/pr71758.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/gomp/pr71758.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/gomp/pr71758.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/gomp/pr71758.f90 2016-07-11 20:43:11.000000000 +0000 -@@ -0,0 +1,10 @@ -+! PR middle-end/71758 -+ -+subroutine pr71758 (p) -+ integer(8) :: i -+ integer :: p(20) -+ i = 0 -+ !$omp target device(i) -+ !$omp end target -+ !$omp target update to(p(1:1)) device(i) -+end subroutine -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/graphite/pr38083.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/graphite/pr38083.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/graphite/pr38083.f90 2009-07-31 02:45:54.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/graphite/pr38083.f90 2016-06-12 14:04:08.000000000 +0000 -@@ -8,7 +8,7 @@ - 10 IF (IL .GE. IH) GO TO 80 - 20 NSEGS = (IH + IL) / 2 - IF (NSEGS .GT. MAXSGS) THEN -- WRITE (IOUNIT),MAXSGS -+ WRITE (IOUNIT) MAXSGS - ENDIF - 80 NSEGS = NSEGS - 1 - 90 IF (IH - IL .GE. 11) GO TO 20 -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/guality/pr41558.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/guality/pr41558.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/guality/pr41558.f90 2012-02-07 22:28:18.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/guality/pr41558.f90 2016-06-12 14:04:08.000000000 +0000 -@@ -5,7 +5,7 @@ - - subroutine f (s) - character(len=3) :: s -- write (*,*), s ! { dg-final { gdb-test 7 "s" "'foo'" } } -+ write (*,*) s ! { dg-final { gdb-test 7 "s" "'foo'" } } - end - call f ('foo') - end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/integer_exponentiation_6.F90 gcc-6-20160721/gcc/testsuite/gfortran.dg/integer_exponentiation_6.F90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/integer_exponentiation_6.F90 2015-02-23 23:02:50.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/integer_exponentiation_6.F90 2016-06-12 14:04:08.000000000 +0000 -@@ -1,4 +1,4 @@ - ! { dg-options "-fno-range-check" } - program test -- write (*), (2_8 ** 64009999_8) / 2 -+ write (*,*) (2_8 ** 64009999_8) / 2 - end program test -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/pr69603.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/pr69603.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/pr69603.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/pr69603.f90 2016-05-15 18:48:40.000000000 +0000 -@@ -0,0 +1,16 @@ -+! { dg-do compile } -+! { dg-options "-fimplicit-none" } -+! PR fortran/69603 - segfault with -fimplicit-none and proc_ptr_comp_24.f90 -+! Based on reduced testcase by Dominique d'Humieres -+PROGRAM prog -+ implicit none -+ TYPE object -+ PROCEDURE(), POINTER, NOPASS :: f -+ END TYPE object -+ TYPE (object) :: o1 -+ CALL set_func(o1%f) -+CONTAINS -+ SUBROUTINE set_func(f) -+ PROCEDURE(), POINTER :: f -+ END SUBROUTINE set_func -+END PROGRAM prog -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/pr70673.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/pr70673.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/pr70673.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/pr70673.f90 2016-06-27 19:18:21.000000000 +0000 -@@ -0,0 +1,25 @@ -+! { dg-do run } -+! -+! Test the fix for PR70673 -+! -+! Contributed by David Kinniburgh <davidgkinniburgh@yahoo.co.uk> -+! -+module m -+contains -+ subroutine s(inp) -+ character(*), intent(in) :: inp -+ character(:), allocatable :: a -+ a = a ! This used to ICE. -+ a = inp -+ a = a ! This used to ICE too -+ if ((len (a) .ne. 5) .or. (a .ne. "hello")) call abort -+ a = a(2:3) ! Make sure that temporary creation is not broken. -+ if ((len (a) .ne. 2) .or. (a .ne. "el")) call abort -+ deallocate (a) -+ a = a ! This would ICE too. -+ end subroutine s -+end module m -+ -+ use m -+ call s("hello") -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/pr70931.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/pr70931.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/pr70931.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/pr70931.f90 2016-05-13 13:22:42.000000000 +0000 -@@ -0,0 +1,10 @@ -+! { dg-do compile } -+! { dg-options "-g" } -+program p -+ type t -+ integer :: a -+ integer :: b(0) -+ end type -+ type(t), parameter :: z = t(1, [2]) -+ print *, z -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/pr71047.f08 gcc-6-20160721/gcc/testsuite/gfortran.dg/pr71047.f08 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/pr71047.f08 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/pr71047.f08 2016-05-14 19:52:46.000000000 +0000 -@@ -0,0 +1,48 @@ -+! { dg-do compile } -+! { dg-options "-fdump-tree-original" } -+! -+! Fortran/PR71047 -+! -+ -+module m -+ implicit none -+ -+ type, abstract :: c_abstr -+ integer :: i = 0 -+ end type c_abstr -+ -+ type, extends(c_abstr) :: t_a -+ class(c_abstr), allocatable :: f -+ end type t_a -+ -+ type, extends(c_abstr) :: t_b -+ end type t_b -+ -+contains -+ -+ subroutine set(y,x) -+ class(c_abstr), intent(in) :: x -+ type(t_a), intent(out) :: y -+ allocate( y%f , source=x ) -+ end subroutine set -+ -+end module m -+ -+ -+program p -+ use m -+ implicit none -+ -+ type(t_a) :: res -+ type(t_b) :: var -+ -+ call set( res , var ) -+ write(*,*) res%i -+ -+end program p -+ -+! -+! Check to ensure the vtable is actually initialized. -+! -+! { dg-final { scan-tree-dump "t_a\\.\\d+\\.f\\._vptr =" "original" } } -+! -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/pr71204.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/pr71204.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/pr71204.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/pr71204.f90 2016-05-20 18:52:38.000000000 +0000 -@@ -0,0 +1,17 @@ -+! PR fortran/71204 -+! { dg-do compile } -+! { dg-options "-O0" } -+ -+module pr71204 -+ character(10), allocatable :: z(:) -+end module -+ -+subroutine s1 -+ use pr71204 -+ z(2) = z(1) -+end -+ -+subroutine s2 -+ use pr71204 -+ z(2) = z(1) -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/pr71688.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/pr71688.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/pr71688.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/pr71688.f90 2016-07-20 13:24:19.000000000 +0000 -@@ -0,0 +1,13 @@ -+! { dg-do compile } -+! { dg-options "-fcoarray=lib" } -+ -+program p -+ call s -+contains -+ subroutine s -+ real :: x[*] = 1 -+ block -+ end block -+ x = 2 -+ end -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/pr71764.f90 gcc-6-20160721/gcc/testsuite/gfortran.dg/pr71764.f90 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/pr71764.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/pr71764.f90 2016-07-16 03:54:12.000000000 +0000 -@@ -0,0 +1,34 @@ -+! { dg-do run } -+! PR71764 -+program p -+ use iso_c_binding, only: c_ptr, c_null_ptr, c_ptr, c_associated, c_loc -+ logical, target :: rls -+ real, target :: t = 3.14 -+ type(c_ptr) :: nullptr,c -+ real, pointer :: k -+ nullptr = c_null_ptr -+ c = nullptr -+ rls = c_associated(c) -+ if (rls) call abort -+ if (c_associated(c)) call abort -+ c = c_loc(rls) -+ if (.not. c_associated(c)) call abort -+ c = nullptr -+ if (c_associated(c)) call abort -+ c = c_loc(t) -+ k => t -+ call association_test(k, c) -+contains -+ subroutine association_test(a,b) -+ use iso_c_binding, only: c_associated, c_loc, c_ptr -+ implicit none -+ real, pointer :: a -+ type(c_ptr) :: b -+ if(c_associated(b, c_loc(a))) then -+ return -+ else -+ call abort -+ end if -+ end subroutine association_test -+end -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/submodule_14.f08 gcc-6-20160721/gcc/testsuite/gfortran.dg/submodule_14.f08 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/submodule_14.f08 2016-03-12 13:59:10.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/submodule_14.f08 2016-06-01 18:46:11.000000000 +0000 -@@ -27,7 +27,7 @@ - Call sub1 (x) - End If - End Procedure sub1 -- module function fcn1 (x) result(res) -+ recursive module function fcn1 (x) result(res) - integer, intent (inout) :: x - integer :: res - res = x - 1 -@@ -46,4 +46,4 @@ - x = 10 - if (fcn1 (x) .ne. 0) call abort - end -- -+! { dg-final { cleanup-submodules "test@testson" } } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/submodule_15.f08 gcc-6-20160721/gcc/testsuite/gfortran.dg/submodule_15.f08 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/submodule_15.f08 2016-03-12 13:59:10.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/submodule_15.f08 2016-04-27 16:58:19.000000000 +0000 -@@ -56,3 +56,4 @@ - incr = 1 - if (a3(i) .ne. 11) call abort - end -+! { dg-final { cleanup-submodules "a@a_son" } } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/submodule_16.f08 gcc-6-20160721/gcc/testsuite/gfortran.dg/submodule_16.f08 ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/submodule_16.f08 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/submodule_16.f08 2016-06-01 18:46:11.000000000 +0000 -@@ -0,0 +1,53 @@ -+! { dg-do compile } -+! -+! Tests the fix for PR71156 in which the valid code (f7, f8 and f9 below) -+! triggered an error, while the invalid code (f1 to f6) compiled. -+! -+! Contributed by Damian Rousn <damian@sourceryinstitute.org> -+! -+module my_interface -+ implicit none -+ interface -+ module subroutine f1 -+ end subroutine -+ module subroutine f2 -+ end subroutine -+ module subroutine f3 -+ end subroutine -+ elemental module subroutine f4 -+ end subroutine -+ pure module subroutine f5 -+ end subroutine -+ recursive module subroutine f6 -+ end subroutine -+ elemental module subroutine f7 -+ end subroutine -+ pure module subroutine f8 -+ end subroutine -+ recursive module subroutine f9 -+ end subroutine -+ end interface -+end module -+ -+submodule(my_interface) my_implementation -+ implicit none -+contains -+ elemental module subroutine f1 ! { dg-error "Mismatch in ELEMENTAL attribute" } -+ end subroutine -+ pure module subroutine f2 ! { dg-error "Mismatch in PURE attribute" } -+ end subroutine -+ recursive module subroutine f3 ! { dg-error "Mismatch in RECURSIVE attribute" } -+ end subroutine -+ module subroutine f4 ! { dg-error "ELEMENTAL prefix" } -+ end subroutine -+ module subroutine f5 ! { dg-error "PURE prefix" } -+ end subroutine -+ module subroutine f6 ! { dg-error "RECURSIVE prefix" } -+ end subroutine -+ elemental module subroutine f7 -+ end subroutine -+ pure module subroutine f8 -+ end subroutine -+ recursive module subroutine f9 -+ end subroutine -+end submodule -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gfortran.dg/unexpected_eof.f gcc-6-20160721/gcc/testsuite/gfortran.dg/unexpected_eof.f ---- gcc-6.1.0/gcc/testsuite/gfortran.dg/unexpected_eof.f 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gfortran.dg/unexpected_eof.f 2016-05-27 01:05:21.000000000 +0000 -@@ -0,0 +1,8 @@ -+! { dg-do compile } -+! PR66461 ICE on missing end program in fixed source -+ program p -+ integer x(2) -+ x = -1 -+ if ( x(1) < 0 .or. -+ & x(2) < 0 ) print *, x -+! { dg-error "Unexpected end of file" "" { target *-*-* } 0 } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gnat.dg/case_character.adb gcc-6-20160721/gcc/testsuite/gnat.dg/case_character.adb ---- gcc-6.1.0/gcc/testsuite/gnat.dg/case_character.adb 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gnat.dg/case_character.adb 2016-06-11 11:55:51.000000000 +0000 -@@ -0,0 +1,19 @@ -+-- { dg-do run } -+ -+procedure Case_Character is -+ -+ function Test (C : Character) return Integer is -+ begin -+ case C is -+ when ASCII.HT | ' ' .. Character'Last => return 1; -+ when others => return 0; -+ end case; -+ end; -+ -+begin -+ -+ if Test ('A') /= 1 then -+ raise Program_Error; -+ end if; -+ -+end; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gnat.dg/debug5.adb gcc-6-20160721/gcc/testsuite/gnat.dg/debug5.adb ---- gcc-6.1.0/gcc/testsuite/gnat.dg/debug5.adb 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gnat.dg/debug5.adb 2016-05-03 16:20:47.000000000 +0000 -@@ -0,0 +1,22 @@ -+-- { dg-do compile } -+-- { dg-options "-g" } -+ -+procedure Debug5 is -+ -+ type Record_Type (L1, L2 : Natural) is record -+ S1 : String (1 .. L1); -+ case L2 is -+ when 0 => null; -+ when others => S2 : String (L1 .. L2); -+ end case; -+ end record; -+ -+ procedure Discard (R : Record_Type) is -+ begin -+ null; -+ end Discard; -+ -+ R : constant Record_Type := (0, 0, others => <>); -+begin -+ Discard (R); -+end Debug5; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gnat.dg/opt56.adb gcc-6-20160721/gcc/testsuite/gnat.dg/opt56.adb ---- gcc-6.1.0/gcc/testsuite/gnat.dg/opt56.adb 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gnat.dg/opt56.adb 2016-06-01 10:38:35.000000000 +0000 -@@ -0,0 +1,15 @@ -+-- { dg-do compile }
-+-- { dg-options "-O3" }
-+
-+package body Opt56 is
-+
-+ function F (Values : Vector) return Boolean is
-+ Result : Boolean := True;
-+ begin
-+ for I in Values'Range loop
-+ Result := Result and Values (I) >= 0.0;
-+ end loop;
-+ return Result;
-+ end;
-+
-+end Opt56;
-diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gnat.dg/opt56.ads gcc-6-20160721/gcc/testsuite/gnat.dg/opt56.ads ---- gcc-6.1.0/gcc/testsuite/gnat.dg/opt56.ads 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gnat.dg/opt56.ads 2016-06-01 10:38:35.000000000 +0000 -@@ -0,0 +1,7 @@ -+package Opt56 is
-+
-+ type Vector is array (Positive range <>) of Float;
-+
-+ function F (Values : Vector) return Boolean;
-+
-+end Opt56;
-diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gnat.dg/renaming10.adb gcc-6-20160721/gcc/testsuite/gnat.dg/renaming10.adb ---- gcc-6.1.0/gcc/testsuite/gnat.dg/renaming10.adb 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gnat.dg/renaming10.adb 2016-06-13 08:02:10.000000000 +0000 -@@ -0,0 +1,12 @@ -+-- { dg-do compile } -+ -+package body Renaming10 is -+ -+ function F (Input : Rec) return Natural is -+ Position : Natural renames Input.Position; -+ Index : Natural renames Natural'Succ(Position); -+ begin -+ return Index; -+ end; -+ -+end Renaming10; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/gnat.dg/renaming10.ads gcc-6-20160721/gcc/testsuite/gnat.dg/renaming10.ads ---- gcc-6.1.0/gcc/testsuite/gnat.dg/renaming10.ads 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/gnat.dg/renaming10.ads 2016-06-13 08:02:10.000000000 +0000 -@@ -0,0 +1,9 @@ -+package Renaming10 is -+ -+ type Rec is record -+ Position : Natural; -+ end record; -+ -+ function F (Input : Rec) return Natural; -+ -+end Renaming10; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/lib/target-supports.exp gcc-6-20160721/gcc/testsuite/lib/target-supports.exp ---- gcc-6.1.0/gcc/testsuite/lib/target-supports.exp 2016-04-11 19:45:35.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/lib/target-supports.exp 2016-07-05 17:54:02.000000000 +0000 -@@ -2300,6 +2300,40 @@ - float dummy = 1.0q; - } "$opts"] - } -+ -+# Return 1 if the target supports __float128, -+# 0 otherwise. -+ -+proc check_effective_target___float128 { } { -+ if { [istarget powerpc*-*-*] } { -+ return [check_ppc_float128_sw_available] -+ } -+ if { [istarget ia64-*-*] -+ || [istarget i?86-*-*] -+ || [istarget x86_64-*-*] } { -+ return 1 -+ } -+ return 0 -+} -+ -+proc add_options_for___float128 { flags } { -+ if { [istarget powerpc*-*-*] } { -+ return "$flags -mfloat128 -mvsx" -+ } -+ return "$flags" -+} -+ -+# Return 1 if the target supports any special run-time requirements -+# for __float128 or _Float128, -+# 0 otherwise. -+ -+proc check_effective_target_base_quadfloat_support { } { -+ if { [istarget powerpc*-*-*] } { -+ return [check_vsx_hw_available] -+ } -+ return 1 -+} -+ - # Return 1 if the target supports compiling fixed-point, - # 0 otherwise. - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/opt55.adb gcc-6-20160721/gcc/testsuite/opt55.adb ---- gcc-6.1.0/gcc/testsuite/opt55.adb 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/opt55.adb 2016-05-25 20:44:21.000000000 +0000 -@@ -0,0 +1,20 @@ -+-- { dg-do compile }
-+-- { dg-options "-O" }
-+
-+package body Opt55 is
-+
-+ function Cond (B : Boolean; If_True, If_False : Date) return Date is
-+ begin
-+ if B then
-+ return If_True;
-+ else
-+ return If_False;
-+ end if;
-+ end;
-+
-+ function F (C : Rec2; B : Boolean) return Date is
-+ begin
-+ return Cond (B, C.D1, C.D2);
-+ end;
-+
-+end Opt55;
-diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/testsuite/opt55.ads gcc-6-20160721/gcc/testsuite/opt55.ads ---- gcc-6.1.0/gcc/testsuite/opt55.ads 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/gcc/testsuite/opt55.ads 2016-05-25 20:44:21.000000000 +0000 -@@ -0,0 +1,22 @@ -+package Opt55 is
-+
-+ type Date is record
-+ D : Float;
-+ end record;
-+
-+ type Rec1 (Kind : Boolean := False) is record
-+ case Kind is
-+ when True => N : Natural;
-+ when False => null;
-+ end case;
-+ end record;
-+
-+ type Rec2 (D : Positive) is record
-+ R : Rec1;
-+ D1 : Date;
-+ D2 : Date;
-+ end record;
-+
-+ function F (C : Rec2; B : Boolean) return Date;
-+
-+end Opt55;
-diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/timevar.def gcc-6-20160721/gcc/timevar.def ---- gcc-6.1.0/gcc/timevar.def 2016-02-10 11:22:29.000000000 +0000 -+++ gcc-6-20160721/gcc/timevar.def 2016-07-21 06:18:06.000000000 +0000 -@@ -137,6 +137,8 @@ - DEFTIMEVAR (TV_PARSE_INLINE , "parser inl. func. body") - DEFTIMEVAR (TV_PARSE_INMETH , "parser inl. meth. body") - DEFTIMEVAR (TV_TEMPLATE_INST , "template instantiation") -+DEFTIMEVAR (TV_CONSTRAINT_SAT , "constraint satisfaction") -+DEFTIMEVAR (TV_CONSTRAINT_SUB , "constraint subsumption") - DEFTIMEVAR (TV_FLATTEN_INLINING , "flatten inlining") - DEFTIMEVAR (TV_EARLY_INLINING , "early inlining heuristics") - DEFTIMEVAR (TV_INLINE_PARAMETERS , "inline parameters") -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/timevar.h gcc-6-20160721/gcc/timevar.h ---- gcc-6.1.0/gcc/timevar.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/timevar.h 2016-07-21 06:18:06.000000000 +0000 -@@ -229,6 +229,14 @@ - m_timer->push (m_tv); - } - -+ explicit auto_timevar (timevar_id_t tv) -+ : m_timer (g_timer) -+ , m_tv (tv) -+ { -+ if (m_timer) -+ m_timer->push (m_tv); -+ } -+ - ~auto_timevar () - { - if (m_timer) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree-chkp.c gcc-6-20160721/gcc/tree-chkp.c ---- gcc-6.1.0/gcc/tree-chkp.c 2016-02-21 11:25:31.000000000 +0000 -+++ gcc-6-20160721/gcc/tree-chkp.c 2016-05-11 09:55:55.000000000 +0000 -@@ -1853,7 +1853,9 @@ - - /* If function decl is available then use it for - formal arguments list. Otherwise use function type. */ -- if (fndecl && DECL_ARGUMENTS (fndecl)) -+ if (fndecl -+ && DECL_ARGUMENTS (fndecl) -+ && gimple_call_fntype (call) == TREE_TYPE (fndecl)) - first_formal_arg = DECL_ARGUMENTS (fndecl); - else - { -@@ -1929,7 +1931,16 @@ - { - tree new_decl = chkp_maybe_create_clone (fndecl)->decl; - gimple_call_set_fndecl (new_call, new_decl); -- gimple_call_set_fntype (new_call, TREE_TYPE (new_decl)); -+ /* In case of a type cast we should modify used function -+ type instead of using type of new fndecl. */ -+ if (gimple_call_fntype (call) != TREE_TYPE (fndecl)) -+ { -+ tree type = gimple_call_fntype (call); -+ type = chkp_copy_function_type_adding_bounds (type); -+ gimple_call_set_fntype (new_call, type); -+ } -+ else -+ gimple_call_set_fntype (new_call, TREE_TYPE (new_decl)); - } - /* For indirect call we should fix function pointer type if - pass some bounds. */ -@@ -3646,6 +3657,7 @@ - break; - - case ADDR_EXPR: -+ case WITH_SIZE_EXPR: - bounds = chkp_make_addressed_object_bounds (TREE_OPERAND (ptr_src, 0), iter); - break; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree-inline.c gcc-6-20160721/gcc/tree-inline.c ---- gcc-6.1.0/gcc/tree-inline.c 2016-04-04 15:42:19.000000000 +0000 -+++ gcc-6-20160721/gcc/tree-inline.c 2016-05-12 14:34:18.000000000 +0000 -@@ -840,7 +840,7 @@ - static unsigned short - remap_dependence_clique (copy_body_data *id, unsigned short clique) - { -- if (clique == 0) -+ if (clique == 0 || processing_debug_stmt) - return 0; - if (!id->dependence_map) - id->dependence_map = new hash_map<dependence_hash, unsigned short>; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree-nested.c gcc-6-20160721/gcc/tree-nested.c ---- gcc-6.1.0/gcc/tree-nested.c 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/tree-nested.c 2016-06-14 14:45:23.000000000 +0000 -@@ -1114,6 +1114,8 @@ - case OMP_CLAUSE_GANG: - case OMP_CLAUSE_WORKER: - case OMP_CLAUSE_VECTOR: -+ case OMP_CLAUSE_ASYNC: -+ case OMP_CLAUSE_WAIT: - /* Several OpenACC clauses have optional arguments. Check if they - are present. */ - if (OMP_CLAUSE_OPERAND (clause, 0)) -@@ -1197,8 +1199,22 @@ - case OMP_CLAUSE_SIMD: - case OMP_CLAUSE_DEFAULTMAP: - case OMP_CLAUSE_SEQ: -+ case OMP_CLAUSE_INDEPENDENT: -+ case OMP_CLAUSE_AUTO: - break; - -+ case OMP_CLAUSE_TILE: -+ /* OpenACC tile clauses are discarded during gimplification, so we -+ don't expect to see anything here. */ -+ gcc_unreachable (); -+ -+ case OMP_CLAUSE__CACHE_: -+ /* These clauses belong to the OpenACC cache directive, which is -+ discarded during gimplification, so we don't expect to see -+ anything here. */ -+ gcc_unreachable (); -+ -+ case OMP_CLAUSE_DEVICE_RESIDENT: - default: - gcc_unreachable (); - } -@@ -1332,7 +1348,7 @@ - { - wi->val_only = true; - wi->is_lhs = false; -- *handled_ops_p = true; -+ *handled_ops_p = false; - return NULL_TREE; - } - break; -@@ -1790,6 +1806,8 @@ - case OMP_CLAUSE_GANG: - case OMP_CLAUSE_WORKER: - case OMP_CLAUSE_VECTOR: -+ case OMP_CLAUSE_ASYNC: -+ case OMP_CLAUSE_WAIT: - /* Several OpenACC clauses have optional arguments. Check if they - are present. */ - if (OMP_CLAUSE_OPERAND (clause, 0)) -@@ -1878,8 +1896,22 @@ - case OMP_CLAUSE_SIMD: - case OMP_CLAUSE_DEFAULTMAP: - case OMP_CLAUSE_SEQ: -+ case OMP_CLAUSE_INDEPENDENT: -+ case OMP_CLAUSE_AUTO: - break; - -+ case OMP_CLAUSE_TILE: -+ /* OpenACC tile clauses are discarded during gimplification, so we -+ don't expect to see anything here. */ -+ gcc_unreachable (); -+ -+ case OMP_CLAUSE__CACHE_: -+ /* These clauses belong to the OpenACC cache directive, which is -+ discarded during gimplification, so we don't expect to see -+ anything here. */ -+ gcc_unreachable (); -+ -+ case OMP_CLAUSE_DEVICE_RESIDENT: - default: - gcc_unreachable (); - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree-object-size.c gcc-6-20160721/gcc/tree-object-size.c ---- gcc-6.1.0/gcc/tree-object-size.c 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/tree-object-size.c 2016-07-21 07:49:15.000000000 +0000 -@@ -43,7 +43,12 @@ - unsigned int *stack, *tos; - }; - --static const unsigned HOST_WIDE_INT unknown[4] = { -1, -1, 0, 0 }; -+static const unsigned HOST_WIDE_INT unknown[4] = { -+ HOST_WIDE_INT_M1U, -+ HOST_WIDE_INT_M1U, -+ 0, -+ 0 -+}; - - static tree compute_object_offset (const_tree, const_tree); - static unsigned HOST_WIDE_INT addr_object_size (struct object_size_info *, -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree-sra.c gcc-6-20160721/gcc/tree-sra.c ---- gcc-6.1.0/gcc/tree-sra.c 2016-04-13 20:35:59.000000000 +0000 -+++ gcc-6-20160721/gcc/tree-sra.c 2016-05-23 11:27:14.000000000 +0000 -@@ -2074,7 +2074,8 @@ - access->grp_scalar_write = grp_scalar_write; - access->grp_assignment_read = grp_assignment_read; - access->grp_assignment_write = grp_assignment_write; -- access->grp_hint = multiple_scalar_reads || total_scalarization; -+ access->grp_hint = total_scalarization -+ || (multiple_scalar_reads && !constant_decl_p (var)); - access->grp_total_scalarization = total_scalarization; - access->grp_partial_lhs = grp_partial_lhs; - access->grp_unscalarizable_region = unscalarizable_region; -@@ -3559,32 +3560,31 @@ - unsigned i; - - EXECUTE_IF_SET_IN_BITMAP (candidate_bitmap, 0, i, bi) -- if (bitmap_bit_p (should_scalarize_away_bitmap, i) -- && !bitmap_bit_p (cannot_scalarize_away_bitmap, i)) -- { -- tree var = candidate (i); -- if (!constant_decl_p (var)) -- continue; -- vec<access_p> *access_vec = get_base_access_vector (var); -- if (!access_vec) -- continue; -- for (unsigned i = 0; i < access_vec->length (); i++) -- { -- struct access *access = (*access_vec)[i]; -- if (!access->replacement_decl) -- continue; -- gassign *stmt = gimple_build_assign ( -- get_access_replacement (access), unshare_expr (access->expr)); -- if (dump_file && (dump_flags & TDF_DETAILS)) -- { -- fprintf (dump_file, "Generating constant initializer: "); -- print_gimple_stmt (dump_file, stmt, 0, 1); -- fprintf (dump_file, "\n"); -- } -- gsi_insert_after (&gsi, stmt, GSI_NEW_STMT); -- update_stmt (stmt); -- } -- } -+ { -+ tree var = candidate (i); -+ if (!constant_decl_p (var)) -+ continue; -+ vec<access_p> *access_vec = get_base_access_vector (var); -+ if (!access_vec) -+ continue; -+ for (unsigned i = 0; i < access_vec->length (); i++) -+ { -+ struct access *access = (*access_vec)[i]; -+ if (!access->replacement_decl) -+ continue; -+ gassign *stmt -+ = gimple_build_assign (get_access_replacement (access), -+ unshare_expr (access->expr)); -+ if (dump_file && (dump_flags & TDF_DETAILS)) -+ { -+ fprintf (dump_file, "Generating constant initializer: "); -+ print_gimple_stmt (dump_file, stmt, 0, 1); -+ fprintf (dump_file, "\n"); -+ } -+ gsi_insert_after (&gsi, stmt, GSI_NEW_STMT); -+ update_stmt (stmt); -+ } -+ } - - seq = gsi_seq (gsi); - if (seq) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree-ssa-coalesce.c gcc-6-20160721/gcc/tree-ssa-coalesce.c ---- gcc-6.1.0/gcc/tree-ssa-coalesce.c 2016-04-08 17:28:20.000000000 +0000 -+++ gcc-6-20160721/gcc/tree-ssa-coalesce.c 2016-05-04 20:25:10.000000000 +0000 -@@ -1505,7 +1505,8 @@ - /* Given SSA_NAMEs NAME1 and NAME2, return true if they are candidates for - coalescing together, false otherwise. - -- This must stay consistent with var_map_base_init in tree-ssa-live.c. */ -+ This must stay consistent with compute_samebase_partition_bases and -+ compute_optimized_partition_bases. */ - - bool - gimple_can_coalesce_p (tree name1, tree name2) -@@ -1759,7 +1760,7 @@ - else - /* This restricts what anonymous SSA names we can coalesce - as it restricts the sets we compute conflicts for. -- Using TREE_TYPE to generate sets is the easies as -+ Using TREE_TYPE to generate sets is the easiest as - type equivalency also holds for SSA names with the same - underlying decl. - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree-ssa-loop-unswitch.c gcc-6-20160721/gcc/tree-ssa-loop-unswitch.c ---- gcc-6.1.0/gcc/tree-ssa-loop-unswitch.c 2016-04-12 13:38:46.000000000 +0000 -+++ gcc-6-20160721/gcc/tree-ssa-loop-unswitch.c 2016-05-10 14:26:37.000000000 +0000 -@@ -532,6 +532,12 @@ - guard_edge->src->index, guard_edge->dest->index); - return NULL; - } -+ if (guard_edge->dest == loop->latch) -+ { -+ if (dump_file && (dump_flags & TDF_DETAILS)) -+ fprintf (dump_file, "Guard edge destination is loop latch.\n"); -+ return NULL; -+ } - - if (dump_file && (dump_flags & TDF_DETAILS)) - fprintf (dump_file, -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree-ssa-phiopt.c gcc-6-20160721/gcc/tree-ssa-phiopt.c ---- gcc-6.1.0/gcc/tree-ssa-phiopt.c 2016-03-14 14:50:40.000000000 +0000 -+++ gcc-6-20160721/gcc/tree-ssa-phiopt.c 2016-05-25 20:44:21.000000000 +0000 -@@ -438,15 +438,18 @@ - /* Check if arg0 is an SSA_NAME and the stmt which defines arg0 is - a conversion. */ - arg0_def_stmt = SSA_NAME_DEF_STMT (arg0); -- if (!is_gimple_assign (arg0_def_stmt) -- || !gimple_assign_cast_p (arg0_def_stmt)) -+ if (!gimple_assign_cast_p (arg0_def_stmt)) - return NULL; - - /* Use the RHS as new_arg0. */ - convert_code = gimple_assign_rhs_code (arg0_def_stmt); - new_arg0 = gimple_assign_rhs1 (arg0_def_stmt); - if (convert_code == VIEW_CONVERT_EXPR) -- new_arg0 = TREE_OPERAND (new_arg0, 0); -+ { -+ new_arg0 = TREE_OPERAND (new_arg0, 0); -+ if (!is_gimple_reg_type (TREE_TYPE (new_arg0))) -+ return NULL; -+ } - - if (TREE_CODE (arg1) == SSA_NAME) - { -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree-ssa-sccvn.c gcc-6-20160721/gcc/tree-ssa-sccvn.c ---- gcc-6.1.0/gcc/tree-ssa-sccvn.c 2016-04-19 13:17:46.000000000 +0000 -+++ gcc-6-20160721/gcc/tree-ssa-sccvn.c 2016-06-13 17:44:29.000000000 +0000 -@@ -1976,11 +1976,7 @@ - /* We need to pre-pend vr->operands[0..i] to rhs. */ - vec<vn_reference_op_s> old = vr->operands; - if (i + 1 + rhs.length () > vr->operands.length ()) -- { -- vr->operands.safe_grow (i + 1 + rhs.length ()); -- if (old == shared_lookup_references) -- shared_lookup_references = vr->operands; -- } -+ vr->operands.safe_grow (i + 1 + rhs.length ()); - else - vr->operands.truncate (i + 1 + rhs.length ()); - FOR_EACH_VEC_ELT (rhs, j, vro) -@@ -2131,8 +2127,7 @@ - { - vec<vn_reference_op_s> old = vr->operands; - vr->operands.safe_grow_cleared (2); -- if (old == shared_lookup_references -- && vr->operands != old) -+ if (old == shared_lookup_references) - shared_lookup_references = vr->operands; - } - else -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree-ssa-strlen.c gcc-6-20160721/gcc/tree-ssa-strlen.c ---- gcc-6.1.0/gcc/tree-ssa-strlen.c 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/gcc/tree-ssa-strlen.c 2016-06-21 07:15:36.000000000 +0000 -@@ -859,6 +859,65 @@ - } - } - -+/* Return true if STMT is a call to a builtin function with the right -+ arguments and attributes that should be considered for optimization -+ by this pass. */ -+ -+static bool -+valid_builtin_call (gimple *stmt) -+{ -+ if (!gimple_call_builtin_p (stmt, BUILT_IN_NORMAL)) -+ return false; -+ -+ tree callee = gimple_call_fndecl (stmt); -+ switch (DECL_FUNCTION_CODE (callee)) -+ { -+ case BUILT_IN_MEMCMP: -+ case BUILT_IN_STRCHR: -+ case BUILT_IN_STRCHR_CHKP: -+ case BUILT_IN_STRLEN: -+ case BUILT_IN_STRLEN_CHKP: -+ /* The above functions should be pure. Punt if they aren't. */ -+ if (gimple_vdef (stmt) || gimple_vuse (stmt) == NULL_TREE) -+ return false; -+ break; -+ -+ case BUILT_IN_CALLOC: -+ case BUILT_IN_MALLOC: -+ case BUILT_IN_MEMCPY: -+ case BUILT_IN_MEMCPY_CHK: -+ case BUILT_IN_MEMCPY_CHKP: -+ case BUILT_IN_MEMCPY_CHK_CHKP: -+ case BUILT_IN_MEMPCPY: -+ case BUILT_IN_MEMPCPY_CHK: -+ case BUILT_IN_MEMPCPY_CHKP: -+ case BUILT_IN_MEMPCPY_CHK_CHKP: -+ case BUILT_IN_MEMSET: -+ case BUILT_IN_STPCPY: -+ case BUILT_IN_STPCPY_CHK: -+ case BUILT_IN_STPCPY_CHKP: -+ case BUILT_IN_STPCPY_CHK_CHKP: -+ case BUILT_IN_STRCAT: -+ case BUILT_IN_STRCAT_CHK: -+ case BUILT_IN_STRCAT_CHKP: -+ case BUILT_IN_STRCAT_CHK_CHKP: -+ case BUILT_IN_STRCPY: -+ case BUILT_IN_STRCPY_CHK: -+ case BUILT_IN_STRCPY_CHKP: -+ case BUILT_IN_STRCPY_CHK_CHKP: -+ /* The above functions should be neither const nor pure. Punt if they -+ aren't. */ -+ if (gimple_vdef (stmt) == NULL_TREE || gimple_vuse (stmt) == NULL_TREE) -+ return false; -+ break; -+ -+ default: -+ break; -+ } -+ -+ return true; -+} -+ - /* If the last .MEM setter statement before STMT is - memcpy (x, y, strlen (y) + 1), the only .MEM use of it is STMT - and STMT is known to overwrite x[strlen (x)], adjust the last memcpy to -@@ -934,7 +993,7 @@ - return; - } - -- if (!gimple_call_builtin_p (last.stmt, BUILT_IN_NORMAL)) -+ if (!valid_builtin_call (last.stmt)) - return; - - callee = gimple_call_fndecl (last.stmt); -@@ -1810,7 +1869,7 @@ - if (!stmt1 || !is_gimple_call (stmt1)) - return true; - tree callee1 = gimple_call_fndecl (stmt1); -- if (!gimple_call_builtin_p (stmt1, BUILT_IN_NORMAL)) -+ if (!valid_builtin_call (stmt1)) - return true; - enum built_in_function code1 = DECL_FUNCTION_CODE (callee1); - tree size = gimple_call_arg (stmt2, 2); -@@ -2055,7 +2114,7 @@ - if (is_gimple_call (stmt)) - { - tree callee = gimple_call_fndecl (stmt); -- if (gimple_call_builtin_p (stmt, BUILT_IN_NORMAL)) -+ if (valid_builtin_call (stmt)) - switch (DECL_FUNCTION_CODE (callee)) - { - case BUILT_IN_STRLEN: -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree-ssa-structalias.c gcc-6-20160721/gcc/tree-ssa-structalias.c ---- gcc-6.1.0/gcc/tree-ssa-structalias.c 2016-03-10 08:06:03.000000000 +0000 -+++ gcc-6-20160721/gcc/tree-ssa-structalias.c 2016-05-13 13:22:42.000000000 +0000 -@@ -4639,12 +4639,11 @@ - auto_vec<ce_s, 2> lhsc; - struct constraint_expr rhs; - struct constraint_expr *lhsp; -+ bool aggr_p = aggregate_value_p (lhsop, gimple_call_fntype (t)); - - get_constraint_for (lhsop, &lhsc); - rhs = get_function_part_constraint (fi, fi_result); -- if (fndecl -- && DECL_RESULT (fndecl) -- && DECL_BY_REFERENCE (DECL_RESULT (fndecl))) -+ if (aggr_p) - { - auto_vec<ce_s, 2> tem; - tem.quick_push (rhs); -@@ -4654,22 +4653,19 @@ - } - FOR_EACH_VEC_ELT (lhsc, j, lhsp) - process_constraint (new_constraint (*lhsp, rhs)); -- } - -- /* If we pass the result decl by reference, honor that. */ -- if (lhsop -- && fndecl -- && DECL_RESULT (fndecl) -- && DECL_BY_REFERENCE (DECL_RESULT (fndecl))) -- { -- struct constraint_expr lhs; -- struct constraint_expr *rhsp; -+ /* If we pass the result decl by reference, honor that. */ -+ if (aggr_p) -+ { -+ struct constraint_expr lhs; -+ struct constraint_expr *rhsp; - -- get_constraint_for_address_of (lhsop, &rhsc); -- lhs = get_function_part_constraint (fi, fi_result); -- FOR_EACH_VEC_ELT (rhsc, j, rhsp) -- process_constraint (new_constraint (lhs, *rhsp)); -- rhsc.truncate (0); -+ get_constraint_for_address_of (lhsop, &rhsc); -+ lhs = get_function_part_constraint (fi, fi_result); -+ FOR_EACH_VEC_ELT (rhsc, j, rhsp) -+ process_constraint (new_constraint (lhs, *rhsp)); -+ rhsc.truncate (0); -+ } - } - - /* If we use a static chain, pass it along. */ -@@ -7486,7 +7482,7 @@ - = { true, false, false, false, false, false, false, false, NULL }; - - /* Associate node with varinfo DATA. Worker for -- cgraph_for_node_and_aliases. */ -+ cgraph_for_symbol_thunks_and_aliases. */ - static bool - associate_varinfo_to_alias (struct cgraph_node *node, void *data) - { -@@ -7496,6 +7492,29 @@ - return false; - } - -+/* Compute whether node is refered to non-locally. Worker for -+ cgraph_for_symbol_thunks_and_aliases. */ -+static bool -+refered_from_nonlocal_fn (struct cgraph_node *node, void *data) -+{ -+ bool *nonlocal_p = (bool *)data; -+ *nonlocal_p |= (node->used_from_other_partition -+ || node->externally_visible -+ || node->force_output); -+ return false; -+} -+ -+/* Same for varpool nodes. */ -+static bool -+refered_from_nonlocal_var (struct varpool_node *node, void *data) -+{ -+ bool *nonlocal_p = (bool *)data; -+ *nonlocal_p |= (node->used_from_other_partition -+ || node->externally_visible -+ || node->force_output); -+ return false; -+} -+ - /* Execute the driver for IPA PTA. */ - static unsigned int - ipa_pta_execute (void) -@@ -7559,6 +7578,8 @@ - || node->externally_visible - || node->force_output - || node_address_taken); -+ node->call_for_symbol_thunks_and_aliases (refered_from_nonlocal_fn, -+ &nonlocal_p, true); - - vi = create_function_info_for (node->decl, - alias_get_name (node->decl), false, -@@ -7596,6 +7617,8 @@ - bool nonlocal_p = (var->used_from_other_partition - || var->externally_visible - || var->force_output); -+ var->call_for_symbol_and_aliases (refered_from_nonlocal_var, -+ &nonlocal_p, true); - if (nonlocal_p) - vi->is_ipa_escape_point = true; - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree-ssa-tail-merge.c gcc-6-20160721/gcc/tree-ssa-tail-merge.c ---- gcc-6.1.0/gcc/tree-ssa-tail-merge.c 2016-03-07 14:50:13.000000000 +0000 -+++ gcc-6-20160721/gcc/tree-ssa-tail-merge.c 2016-06-10 09:45:51.000000000 +0000 -@@ -538,6 +538,9 @@ - gimple *s1, *s2; - basic_block bb1, bb2; - -+ if (e1 == e2) -+ return 1; -+ - if (e1->hashval != e2->hashval) - return 0; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree-ssa-uninit.c gcc-6-20160721/gcc/tree-ssa-uninit.c ---- gcc-6.1.0/gcc/tree-ssa-uninit.c 2016-01-13 12:15:01.000000000 +0000 -+++ gcc-6-20160721/gcc/tree-ssa-uninit.c 2016-06-21 07:13:52.000000000 +0000 -@@ -133,6 +133,29 @@ - if (!has_undefined_value_p (t)) - return; - -+ /* Anonymous SSA_NAMEs shouldn't be uninitialized, but ssa_undefined_value_p -+ can return true if the def stmt of anonymous SSA_NAME is COMPLEX_EXPR -+ created for conversion from scalar to complex. Use the underlying var of -+ the COMPLEX_EXPRs real part in that case. See PR71581. */ -+ if (expr == NULL_TREE -+ && var == NULL_TREE -+ && SSA_NAME_VAR (t) == NULL_TREE -+ && is_gimple_assign (SSA_NAME_DEF_STMT (t)) -+ && gimple_assign_rhs_code (SSA_NAME_DEF_STMT (t)) == COMPLEX_EXPR) -+ { -+ tree v = gimple_assign_rhs1 (SSA_NAME_DEF_STMT (t)); -+ if (TREE_CODE (v) == SSA_NAME -+ && has_undefined_value_p (v) -+ && zerop (gimple_assign_rhs2 (SSA_NAME_DEF_STMT (t)))) -+ { -+ expr = SSA_NAME_VAR (v); -+ var = expr; -+ } -+ } -+ -+ if (expr == NULL_TREE) -+ return; -+ - /* TREE_NO_WARNING either means we already warned, or the front end - wishes to suppress the warning. */ - if ((context -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree-ssa.c gcc-6-20160721/gcc/tree-ssa.c ---- gcc-6.1.0/gcc/tree-ssa.c 2016-02-09 08:35:22.000000000 +0000 -+++ gcc-6-20160721/gcc/tree-ssa.c 2016-07-07 07:30:04.000000000 +0000 -@@ -1342,6 +1342,18 @@ - tree decl = TREE_OPERAND (TREE_OPERAND (lhs, 0), 0); - if (DECL_P (decl) - && DECL_SIZE (decl) == TYPE_SIZE (TREE_TYPE (lhs)) -+ /* If the dynamic type of the decl has larger precision than -+ the decl itself we can't use the decls type for SSA rewriting. */ -+ && ((! INTEGRAL_TYPE_P (TREE_TYPE (decl)) -+ || compare_tree_int (DECL_SIZE (decl), -+ TYPE_PRECISION (TREE_TYPE (decl))) == 0) -+ || (INTEGRAL_TYPE_P (TREE_TYPE (lhs)) -+ && (TYPE_PRECISION (TREE_TYPE (decl)) -+ >= TYPE_PRECISION (TREE_TYPE (lhs))))) -+ /* Make sure we are not re-writing non-float copying into float -+ copying as that can incur normalization. */ -+ && (! FLOAT_TYPE_P (TREE_TYPE (decl)) -+ || types_compatible_p (TREE_TYPE (lhs), TREE_TYPE (decl))) - && (TREE_THIS_VOLATILE (decl) == TREE_THIS_VOLATILE (lhs))) - return false; - } -@@ -1590,9 +1602,16 @@ - if (gimple_assign_lhs (stmt) != lhs - && !useless_type_conversion_p (TREE_TYPE (lhs), - TREE_TYPE (rhs))) -- rhs = fold_build1 (VIEW_CONVERT_EXPR, -- TREE_TYPE (lhs), rhs); -- -+ { -+ if (gimple_clobber_p (stmt)) -+ { -+ rhs = build_constructor (TREE_TYPE (lhs), NULL); -+ TREE_THIS_VOLATILE (rhs) = 1; -+ } -+ else -+ rhs = fold_build1 (VIEW_CONVERT_EXPR, -+ TREE_TYPE (lhs), rhs); -+ } - if (gimple_assign_lhs (stmt) != lhs) - gimple_assign_set_lhs (stmt, lhs); - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree-vect-data-refs.c gcc-6-20160721/gcc/tree-vect-data-refs.c ---- gcc-6.1.0/gcc/tree-vect-data-refs.c 2016-04-15 07:28:44.000000000 +0000 -+++ gcc-6-20160721/gcc/tree-vect-data-refs.c 2016-07-11 15:21:20.000000000 +0000 -@@ -692,6 +692,7 @@ - tree base, base_addr; - tree misalign = NULL_TREE; - tree aligned_to; -+ tree step; - unsigned HOST_WIDE_INT alignment; - - if (dump_enabled_p ()) -@@ -822,16 +823,20 @@ - DR_VECT_AUX (dr)->base_element_aligned = true; - } - -+ if (loop && nested_in_vect_loop_p (loop, stmt)) -+ step = STMT_VINFO_DR_STEP (stmt_info); -+ else -+ step = DR_STEP (dr); - /* If this is a backward running DR then first access in the larger - vectype actually is N-1 elements before the address in the DR. - Adjust misalign accordingly. */ -- if (tree_int_cst_sgn (DR_STEP (dr)) < 0) -+ if (tree_int_cst_sgn (step) < 0) - { - tree offset = ssize_int (TYPE_VECTOR_SUBPARTS (vectype) - 1); - /* DR_STEP(dr) is the same as -TYPE_SIZE of the scalar type, - otherwise we wouldn't be here. */ -- offset = fold_build2 (MULT_EXPR, ssizetype, offset, DR_STEP (dr)); -- /* PLUS because DR_STEP was negative. */ -+ offset = fold_build2 (MULT_EXPR, ssizetype, offset, step); -+ /* PLUS because STEP was negative. */ - misalign = size_binop (PLUS_EXPR, misalign, offset); - } - -@@ -2751,7 +2756,7 @@ - /* Sorting has ensured that DR_INIT (dra) <= DR_INIT (drb). */ - HOST_WIDE_INT init_a = TREE_INT_CST_LOW (DR_INIT (dra)); - HOST_WIDE_INT init_b = TREE_INT_CST_LOW (DR_INIT (drb)); -- gcc_assert (init_a < init_b); -+ gcc_assert (init_a <= init_b); - - /* If init_b == init_a + the size of the type * k, we have an - interleaving, and DRA is accessed before DRB. */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree-vect-loop.c gcc-6-20160721/gcc/tree-vect-loop.c ---- gcc-6.1.0/gcc/tree-vect-loop.c 2016-04-12 13:38:46.000000000 +0000 -+++ gcc-6-20160721/gcc/tree-vect-loop.c 2016-06-01 16:06:29.000000000 +0000 -@@ -216,7 +216,8 @@ - - gcc_assert (stmt_info); - -- if (STMT_VINFO_RELEVANT_P (stmt_info)) -+ if (STMT_VINFO_RELEVANT_P (stmt_info) -+ || STMT_VINFO_LIVE_P (stmt_info)) - { - gcc_assert (!STMT_VINFO_VECTYPE (stmt_info)); - scalar_type = TREE_TYPE (PHI_RESULT (phi)); -@@ -437,9 +438,12 @@ - /* Bool ops don't participate in vectorization factor - computation. For comparison use compared types to - compute a factor. */ -- if (TREE_CODE (scalar_type) == BOOLEAN_TYPE) -+ if (TREE_CODE (scalar_type) == BOOLEAN_TYPE -+ && is_gimple_assign (stmt) -+ && gimple_assign_rhs_code (stmt) != COND_EXPR) - { -- if (STMT_VINFO_RELEVANT_P (stmt_info)) -+ if (STMT_VINFO_RELEVANT_P (stmt_info) -+ || STMT_VINFO_LIVE_P (stmt_info)) - mask_producers.safe_push (stmt_info); - bool_result = true; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree-vect-patterns.c gcc-6-20160721/gcc/tree-vect-patterns.c ---- gcc-6.1.0/gcc/tree-vect-patterns.c 2016-03-23 09:52:00.000000000 +0000 -+++ gcc-6-20160721/gcc/tree-vect-patterns.c 2016-05-10 16:59:04.000000000 +0000 -@@ -3673,8 +3673,10 @@ - if (!rhs1_type) - return NULL; - } -- else -+ else if (COMPARISON_CLASS_P (rhs1)) - rhs1_type = TREE_TYPE (TREE_OPERAND (rhs1, 0)); -+ else -+ return NULL; - - vectype2 = get_mask_type_for_scalar_type (rhs1_type); - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree-vect-slp.c gcc-6-20160721/gcc/tree-vect-slp.c ---- gcc-6.1.0/gcc/tree-vect-slp.c 2016-02-29 13:24:24.000000000 +0000 -+++ gcc-6-20160721/gcc/tree-vect-slp.c 2016-06-06 18:47:33.000000000 +0000 -@@ -3050,7 +3050,7 @@ - if (integer_zerop (op)) - op = build_int_cst (TREE_TYPE (vector_type), 0); - else if (integer_onep (op)) -- op = build_int_cst (TREE_TYPE (vector_type), 1); -+ op = build_all_ones_cst (TREE_TYPE (vector_type)); - else - gcc_unreachable (); - } -@@ -3065,8 +3065,14 @@ - gimple *init_stmt; - if (VECTOR_BOOLEAN_TYPE_P (vector_type)) - { -+ tree true_val -+ = build_all_ones_cst (TREE_TYPE (vector_type)); -+ tree false_val -+ = build_zero_cst (TREE_TYPE (vector_type)); - gcc_assert (INTEGRAL_TYPE_P (TREE_TYPE (op))); -- init_stmt = gimple_build_assign (new_temp, NOP_EXPR, op); -+ init_stmt = gimple_build_assign (new_temp, COND_EXPR, -+ op, true_val, -+ false_val); - } - else - { -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree-vect-stmts.c gcc-6-20160721/gcc/tree-vect-stmts.c ---- gcc-6.1.0/gcc/tree-vect-stmts.c 2016-04-20 07:21:42.000000000 +0000 -+++ gcc-6-20160721/gcc/tree-vect-stmts.c 2016-07-11 20:39:44.000000000 +0000 -@@ -1256,10 +1256,11 @@ - gimple *init_stmt; - tree new_temp; - -- if (TREE_CODE (type) == VECTOR_TYPE -- && TREE_CODE (TREE_TYPE (val)) != VECTOR_TYPE) -+ /* We abuse this function to push sth to a SSA name with initial 'val'. */ -+ if (! useless_type_conversion_p (type, TREE_TYPE (val))) - { -- if (!types_compatible_p (TREE_TYPE (type), TREE_TYPE (val))) -+ gcc_assert (TREE_CODE (type) == VECTOR_TYPE); -+ if (! types_compatible_p (TREE_TYPE (type), TREE_TYPE (val))) - { - /* Scalar boolean value should be transformed into - all zeros or all ones value before building a vector. */ -@@ -1284,7 +1285,13 @@ - else - { - new_temp = make_ssa_name (TREE_TYPE (type)); -- init_stmt = gimple_build_assign (new_temp, NOP_EXPR, val); -+ if (! INTEGRAL_TYPE_P (TREE_TYPE (val))) -+ init_stmt = gimple_build_assign (new_temp, -+ fold_build1 (VIEW_CONVERT_EXPR, -+ TREE_TYPE (type), -+ val)); -+ else -+ init_stmt = gimple_build_assign (new_temp, NOP_EXPR, val); - vect_init_vector_1 (stmt, init_stmt, gsi); - val = new_temp; - } -@@ -3022,8 +3029,10 @@ - { - STMT_VINFO_SIMD_CLONE_INFO (stmt_info).safe_push (bestn->decl); - for (i = 0; i < nargs; i++) -- if (bestn->simdclone->args[i].arg_type -- == SIMD_CLONE_ARG_TYPE_LINEAR_CONSTANT_STEP) -+ if ((bestn->simdclone->args[i].arg_type -+ == SIMD_CLONE_ARG_TYPE_LINEAR_CONSTANT_STEP) -+ || (bestn->simdclone->args[i].arg_type -+ == SIMD_CLONE_ARG_TYPE_LINEAR_REF_CONSTANT_STEP)) - { - STMT_VINFO_SIMD_CLONE_INFO (stmt_info).safe_grow_cleared (i * 3 - + 1); -@@ -3159,6 +3168,7 @@ - vargs.safe_push (op); - break; - case SIMD_CLONE_ARG_TYPE_LINEAR_CONSTANT_STEP: -+ case SIMD_CLONE_ARG_TYPE_LINEAR_REF_CONSTANT_STEP: - if (j == 0) - { - gimple_seq stmts; -@@ -3222,6 +3232,8 @@ - vargs.safe_push (new_temp); - } - break; -+ case SIMD_CLONE_ARG_TYPE_LINEAR_VAL_CONSTANT_STEP: -+ case SIMD_CLONE_ARG_TYPE_LINEAR_UVAL_CONSTANT_STEP: - case SIMD_CLONE_ARG_TYPE_LINEAR_VARIABLE_STEP: - case SIMD_CLONE_ARG_TYPE_LINEAR_REF_VARIABLE_STEP: - case SIMD_CLONE_ARG_TYPE_LINEAR_VAL_VARIABLE_STEP: -@@ -5074,11 +5086,8 @@ - vect_get_vec_defs (op0, NULL_TREE, stmt, &vec_oprnds0, NULL, - slp_node, -1); - if (op_type == ternary_op) -- { -- vec_oprnds2.create (1); -- vec_oprnds2.quick_push (vect_get_vec_def_for_operand (op2, -- stmt)); -- } -+ vect_get_vec_defs (op2, NULL_TREE, stmt, &vec_oprnds2, NULL, -+ slp_node, -1); - } - else - { -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree-vrp.c gcc-6-20160721/gcc/tree-vrp.c ---- gcc-6.1.0/gcc/tree-vrp.c 2016-03-30 00:55:00.000000000 +0000 -+++ gcc-6-20160721/gcc/tree-vrp.c 2016-07-07 07:30:04.000000000 +0000 -@@ -2519,20 +2519,13 @@ - min = wide_int_to_tree (expr_type, tmin); - max = wide_int_to_tree (expr_type, tmax); - } -- else if (min_ovf == -1 && max_ovf == 1) -- { -- /* Underflow and overflow, drop to VR_VARYING. */ -- set_value_range_to_varying (vr); -- return; -- } -- else -+ else if ((min_ovf == -1 && max_ovf == 0) -+ || (max_ovf == 1 && min_ovf == 0)) - { - /* Min underflow or max overflow. The range kind - changes to VR_ANTI_RANGE. */ - bool covers = false; - wide_int tem = tmin; -- gcc_assert ((min_ovf == -1 && max_ovf == 0) -- || (max_ovf == 1 && min_ovf == 0)); - type = VR_ANTI_RANGE; - tmin = tmax + 1; - if (wi::cmp (tmin, tmax, sgn) < 0) -@@ -2551,6 +2544,12 @@ - min = wide_int_to_tree (expr_type, tmin); - max = wide_int_to_tree (expr_type, tmax); - } -+ else -+ { -+ /* Other underflow and/or overflow, drop to VR_VARYING. */ -+ set_value_range_to_varying (vr); -+ return; -+ } - } - else - { -@@ -2991,7 +2990,8 @@ - and divisor are available. */ - if (vr1.type == VR_RANGE - && !symbolic_range_p (&vr0) -- && !symbolic_range_p (&vr1)) -+ && !symbolic_range_p (&vr1) -+ && compare_values (vr1.max, zero) != 0) - min = int_const_binop (code, vr0.min, vr1.max); - else - min = zero; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree.c gcc-6-20160721/gcc/tree.c ---- gcc-6.1.0/gcc/tree.c 2016-04-14 16:51:16.000000000 +0000 -+++ gcc-6-20160721/gcc/tree.c 2016-07-04 17:33:50.000000000 +0000 -@@ -5015,7 +5015,7 @@ - && TREE_CODE (TREE_VALUE (attr2)) == TREE_LIST) - { - /* Handle attribute format. */ -- if (is_attribute_p ("format", TREE_PURPOSE (attr1))) -+ if (is_attribute_p ("format", get_attribute_name (attr1))) - { - attr1 = TREE_VALUE (attr1); - attr2 = TREE_VALUE (attr2); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/tree.h gcc-6-20160721/gcc/tree.h ---- gcc-6.1.0/gcc/tree.h 2016-04-08 21:09:47.000000000 +0000 -+++ gcc-6-20160721/gcc/tree.h 2016-05-25 16:01:24.000000000 +0000 -@@ -4730,6 +4730,17 @@ - && TYPE_UNSIGNED (type) == TYPE_UNSIGNED (sizetype)); - } - -+/* Return true if the argument is a complete type or an array -+ of unknown bound (whose type is incomplete but) whose elements -+ have complete type. */ -+static inline bool -+complete_or_array_type_p (const_tree type) -+{ -+ return COMPLETE_TYPE_P (type) -+ || (TREE_CODE (type) == ARRAY_TYPE -+ && COMPLETE_TYPE_P (TREE_TYPE (type))); -+} -+ - extern tree strip_float_extensions (tree); - extern int really_constant_p (const_tree); - extern bool decl_address_invariant_p (const_tree); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/gcc/ubsan.c gcc-6-20160721/gcc/ubsan.c ---- gcc-6.1.0/gcc/ubsan.c 2016-01-06 10:24:15.000000000 +0000 -+++ gcc-6-20160721/gcc/ubsan.c 2016-05-06 10:54:12.000000000 +0000 -@@ -302,7 +302,6 @@ - static unsigned short - get_ubsan_type_info_for_type (tree type) - { -- gcc_assert (TYPE_SIZE (type) && tree_fits_uhwi_p (TYPE_SIZE (type))); - if (TREE_CODE (type) == REAL_TYPE) - return tree_to_uhwi (TYPE_SIZE (type)); - else if (INTEGRAL_TYPE_P (type)) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libatomic/ChangeLog gcc-6-20160721/libatomic/ChangeLog ---- gcc-6.1.0/libatomic/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/libatomic/ChangeLog 2016-05-10 07:03:07.000000000 +0000 -@@ -1,3 +1,13 @@ -+2016-05-10 Sebastian Huber <sebastian.huber@embedded-brains.de> -+ -+ Backport from mainline: -+ 2016-04-27 Sebastian Huber <sebastian.huber@embedded-brains.de> -+ -+ * configure.tgt (configure_tgt_pre_target_cpu_XCFLAGS): New variable. -+ (*-*-rtems*): New supported target. -+ * config/rtems/host-config.h: New file. -+ * config/rtems/lock.c: Likewise. -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libatomic/config/rtems/host-config.h gcc-6-20160721/libatomic/config/rtems/host-config.h ---- gcc-6.1.0/libatomic/config/rtems/host-config.h 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libatomic/config/rtems/host-config.h 2016-05-10 07:03:07.000000000 +0000 -@@ -0,0 +1,41 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Sebastian Huber <sebastian.huber@embedded-brains.de>. -+ -+ This file is part of the GNU Atomic Library (libatomic). -+ -+ Libatomic is free software; you can redistribute it and/or modify it -+ under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 3 of the License, or -+ (at your option) any later version. -+ -+ Libatomic is distributed in the hope that it will be useful, but WITHOUT ANY -+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for -+ more details. -+ -+ Under Section 7 of GPL version 3, you are granted additional -+ permissions described in the GCC Runtime Library Exception, version -+ 3.1, as published by the Free Software Foundation. -+ -+ You should have received a copy of the GNU General Public License and -+ a copy of the GCC Runtime Library Exception along with this program; -+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -+ <http://www.gnu.org/licenses/>. */ -+ -+/* Included after all more target-specific host-config.h. */ -+ -+#include <machine/_libatomic.h> -+ -+static inline UWORD -+protect_start (void *ptr) -+{ -+ return _Libatomic_Protect_start (ptr); -+} -+ -+static inline void -+protect_end (void *ptr, UWORD isr_level) -+{ -+ _Libatomic_Protect_end (ptr, isr_level); -+} -+ -+#include_next <host-config.h> -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libatomic/config/rtems/lock.c gcc-6-20160721/libatomic/config/rtems/lock.c ---- gcc-6.1.0/libatomic/config/rtems/lock.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libatomic/config/rtems/lock.c 2016-05-10 07:03:07.000000000 +0000 -@@ -0,0 +1,37 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Sebastian Huber <sebastian.huber@embedded-brains.de>. -+ -+ This file is part of the GNU Atomic Library (libatomic). -+ -+ Libatomic is free software; you can redistribute it and/or modify it -+ under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 3 of the License, or -+ (at your option) any later version. -+ -+ Libatomic is distributed in the hope that it will be useful, but WITHOUT ANY -+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for -+ more details. -+ -+ Under Section 7 of GPL version 3, you are granted additional -+ permissions described in the GCC Runtime Library Exception, version -+ 3.1, as published by the Free Software Foundation. -+ -+ You should have received a copy of the GNU General Public License and -+ a copy of the GCC Runtime Library Exception along with this program; -+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -+ <http://www.gnu.org/licenses/>. */ -+ -+#include "libatomic_i.h" -+ -+void -+libat_lock_n (void *ptr, size_t n) -+{ -+ _Libatomic_Lock_n (ptr, n); -+} -+ -+void -+libat_unlock_n (void *ptr, size_t n) -+{ -+ _Libatomic_Unlock_n (ptr, n); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libatomic/configure.tgt gcc-6-20160721/libatomic/configure.tgt ---- gcc-6.1.0/libatomic/configure.tgt 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libatomic/configure.tgt 2016-05-10 07:03:07.000000000 +0000 -@@ -26,6 +26,10 @@ - # Map the target cpu to an ARCH sub-directory. At the same time, - # work out any special compilation flags as necessary. - -+# Give operating systems the opportunity to discard XCFLAGS modifications based -+# on ${target_cpu}. For example to allow proper use of multilibs. -+configure_tgt_pre_target_cpu_XCFLAGS="${XCFLAGS}" -+ - case "${target_cpu}" in - alpha*) - # fenv.c needs this option to generate inexact exceptions. -@@ -128,6 +132,12 @@ - ;; - esac - ;; -+ -+ *-*-rtems*) -+ XCFLAGS="${configure_tgt_pre_target_cpu_XCFLAGS}" -+ config_path="rtems" -+ ;; -+ - *-*-elf*) - # ??? No target OS. We could be targeting bare-metal kernel-mode, - # or user-mode for some custom OS. If the target supports TAS, -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libbacktrace/ChangeLog gcc-6-20160721/libbacktrace/ChangeLog ---- gcc-6.1.0/libbacktrace/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/libbacktrace/ChangeLog 2016-05-18 14:48:40.000000000 +0000 -@@ -1,3 +1,9 @@ -+2016-05-18 Uros Bizjak <ubizjak@gmail.com> -+ -+ PR target/71161 -+ * elf.c (phdr_callback) [__i386__]: Add -+ __attribute__((__force_align_arg_pointer__)). -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -@@ -19,12 +25,13 @@ - - 2015-12-18 Andris Pavenis <andris.pavenis@iki.fi> - -- * configure.ac: Specify that DJGPP do not have mmap even when sys/mman.h exists -+ * configure.ac: Specify that DJGPP do not have mmap -+ even when sys/mman.h exists. - * configure: Regenerate - - 2015-12-09 John David Anglin <danglin@gcc.gnu.org> - -- PR 68115/libfortran -+ PR libgfortran/68115 - * configure.ac: Set libbacktrace_cv_sys_sync to no on hppa*-*-hpux*. - * configure: Regenerate. - * elf.c (backtrace_initialize): Cast __sync_bool_compare_and_swap call -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libbacktrace/elf.c gcc-6-20160721/libbacktrace/elf.c ---- gcc-6.1.0/libbacktrace/elf.c 2016-03-02 16:32:55.000000000 +0000 -+++ gcc-6-20160721/libbacktrace/elf.c 2016-05-18 14:48:40.000000000 +0000 -@@ -866,6 +866,9 @@ - libraries. */ - - static int -+#ifdef __i386__ -+__attribute__ ((__force_align_arg_pointer__)) -+#endif - phdr_callback (struct dl_phdr_info *info, size_t size ATTRIBUTE_UNUSED, - void *pdata) - { -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libcilkrts/ChangeLog gcc-6-20160721/libcilkrts/ChangeLog ---- gcc-6.1.0/libcilkrts/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/libcilkrts/ChangeLog 2016-05-08 11:42:49.000000000 +0000 -@@ -1,3 +1,12 @@ -+2016-05-08 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> -+ -+ Backport from mainline -+ 2016-04-26 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> -+ -+ PR target/60290 -+ * Makefile.am (GENERAL_FLAGS): Add -funwind-tables. -+ * Makefile.in: Regenerate. -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libcilkrts/Makefile.am gcc-6-20160721/libcilkrts/Makefile.am ---- gcc-6.1.0/libcilkrts/Makefile.am 2014-08-12 11:06:44.000000000 +0000 -+++ gcc-6-20160721/libcilkrts/Makefile.am 2016-05-08 11:42:49.000000000 +0000 -@@ -43,6 +43,9 @@ - # Enable Intel Cilk Plus extension - GENERAL_FLAGS += -fcilkplus - -+# Always generate unwind tables -+GENERAL_FLAGS += -funwind-tables -+ - AM_CFLAGS = $(XCFLAGS) $(GENERAL_FLAGS) -std=c99 - AM_CPPFLAGS = $(GENERAL_FLAGS) - AM_LDFLAGS = $(XLDFLAGS) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libcilkrts/Makefile.in gcc-6-20160721/libcilkrts/Makefile.in ---- gcc-6.1.0/libcilkrts/Makefile.in 2015-05-13 11:01:24.000000000 +0000 -+++ gcc-6-20160721/libcilkrts/Makefile.in 2016-05-08 11:42:49.000000000 +0000 -@@ -371,9 +371,11 @@ - # GENERAL_FLAGS += -D_Cilk_spawn="" -D_Cilk_sync="" -D_Cilk_for=for - - # Enable Intel Cilk Plus extension -+ -+# Always generate unwind tables - GENERAL_FLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/runtime \ - -I$(top_srcdir)/runtime/config/$(config_dir) \ -- -DIN_CILK_RUNTIME=1 -fcilkplus -+ -DIN_CILK_RUNTIME=1 -fcilkplus -funwind-tables - AM_CFLAGS = $(XCFLAGS) $(GENERAL_FLAGS) -std=c99 - AM_CPPFLAGS = $(GENERAL_FLAGS) - AM_LDFLAGS = $(XLDFLAGS) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libffi/ChangeLog gcc-6-20160721/libffi/ChangeLog ---- gcc-6.1.0/libffi/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/libffi/ChangeLog 2016-05-23 15:00:41.000000000 +0000 -@@ -1,3 +1,10 @@ -+2016-05-23 Thomas Schwinge <thomas@codesourcery.com> -+ -+ Backport trunk r236594: -+ -+ PR libffi/65567 -+ * testsuite/lib/libffi.exp (libffi_feature_test): Fix, and simply. -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -Only in gcc-6.1.0/libffi/doc: libffi.info -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libffi/testsuite/lib/libffi.exp gcc-6-20160721/libffi/testsuite/lib/libffi.exp ---- gcc-6.1.0/libffi/testsuite/lib/libffi.exp 2015-10-27 00:39:32.000000000 +0000 -+++ gcc-6-20160721/libffi/testsuite/lib/libffi.exp 2016-05-23 15:00:41.000000000 +0000 -@@ -227,20 +227,21 @@ - - # TEST should be a preprocessor condition. Returns true if it holds. - proc libffi_feature_test { test } { -- set src "ffitest.c" -+ set src "ffitest[pid].c" - - set f [open $src "w"] - puts $f "#include <ffi.h>" - puts $f $test -- puts $f "xyzzy" -+ puts $f "/* OK */" -+ puts $f "#else" -+ puts $f "# error Failed $test" - puts $f "#endif" - close $f - -- set lines [libffi_target_compile $src "" "preprocess" ""] -+ set lines [libffi_target_compile $src /dev/null assembly ""] - file delete $src - -- set last [lindex [split $lines] end] -- return [regexp -- "xyzzy" $last] -+ return [string match "" $lines] - } - - # Utility routines. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgcc/ChangeLog gcc-6-20160721/libgcc/ChangeLog ---- gcc-6.1.0/libgcc/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/libgcc/ChangeLog 2016-07-14 14:03:20.000000000 +0000 -@@ -1,3 +1,25 @@ -+2016-07-14 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ Backport from mainline -+ 2016-07-12 Bill Schmidt <wschmidt@linux.vnet.ibm.com> -+ -+ * config/rs6000/_divkc3.c: New. -+ * config/rs6000/_mulkc3.c: New. -+ * config/rs6000/quad-float128.h: Define TFtype; declare _mulkc3 -+ and _divkc3. -+ * config/rs6000/t-float128: Add _mulkc3 and _divkc3 to -+ fp128_ppc_funcs. -+ -+2016-05-17 Sebastian Huber <sebastian.huber@embedded-brains.de> -+ -+ Backport from mainline -+ 2016-05-10 Joel Sherrill <joel@rtems.org> -+ -+ PR libgcc/70720 -+ * config.host (moxie-*-rtems*): Merge this stanza with other moxie -+ targets so the same extra_parts are built. Also have tmake_file add -+ on to its value rather than override. -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgcc/config/rs6000/_divkc3.c gcc-6-20160721/libgcc/config/rs6000/_divkc3.c ---- gcc-6.1.0/libgcc/config/rs6000/_divkc3.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libgcc/config/rs6000/_divkc3.c 2016-07-14 14:03:20.000000000 +0000 -@@ -0,0 +1,64 @@ -+typedef float KFtype __attribute__ ((mode (KF))); -+typedef __complex float KCtype __attribute__ ((mode (KC))); -+ -+#define COPYSIGN(x,y) __builtin_copysignq (x, y) -+#define INFINITY __builtin_infq () -+#define FABS __builtin_fabsq -+#define isnan __builtin_isnan -+#define isinf __builtin_isinf -+#define isfinite __builtin_isfinite -+ -+KCtype -+__divkc3 (KFtype a, KFtype b, KFtype c, KFtype d) -+{ -+ KFtype denom, ratio, x, y; -+ KCtype res; -+ -+ /* ??? We can get better behavior from logarithmic scaling instead of -+ the division. But that would mean starting to link libgcc against -+ libm. We could implement something akin to ldexp/frexp as gcc builtins -+ fairly easily... */ -+ if (FABS (c) < FABS (d)) -+ { -+ ratio = c / d; -+ denom = (c * ratio) + d; -+ x = ((a * ratio) + b) / denom; -+ y = ((b * ratio) - a) / denom; -+ } -+ else -+ { -+ ratio = d / c; -+ denom = (d * ratio) + c; -+ x = ((b * ratio) + a) / denom; -+ y = (b - (a * ratio)) / denom; -+ } -+ -+ /* Recover infinities and zeros that computed as NaN+iNaN; the only cases -+ are nonzero/zero, infinite/finite, and finite/infinite. */ -+ if (isnan (x) && isnan (y)) -+ { -+ if (c == 0.0 && d == 0.0 && (!isnan (a) || !isnan (b))) -+ { -+ x = COPYSIGN (INFINITY, c) * a; -+ y = COPYSIGN (INFINITY, c) * b; -+ } -+ else if ((isinf (a) || isinf (b)) && isfinite (c) && isfinite (d)) -+ { -+ a = COPYSIGN (isinf (a) ? 1 : 0, a); -+ b = COPYSIGN (isinf (b) ? 1 : 0, b); -+ x = INFINITY * (a * c + b * d); -+ y = INFINITY * (b * c - a * d); -+ } -+ else if ((isinf (c) || isinf (d)) && isfinite (a) && isfinite (b)) -+ { -+ c = COPYSIGN (isinf (c) ? 1 : 0, c); -+ d = COPYSIGN (isinf (d) ? 1 : 0, d); -+ x = 0.0 * (a * c + b * d); -+ y = 0.0 * (b * c - a * d); -+ } -+ } -+ -+ __real__ res = x; -+ __imag__ res = y; -+ return res; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgcc/config/rs6000/_mulkc3.c gcc-6-20160721/libgcc/config/rs6000/_mulkc3.c ---- gcc-6.1.0/libgcc/config/rs6000/_mulkc3.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libgcc/config/rs6000/_mulkc3.c 2016-07-14 14:03:20.000000000 +0000 -@@ -0,0 +1,69 @@ -+typedef float KFtype __attribute__ ((mode (KF))); -+typedef __complex float KCtype __attribute__ ((mode (KC))); -+ -+#define COPYSIGN(x,y) __builtin_copysignq (x, y) -+#define INFINITY __builtin_infq () -+#define isnan __builtin_isnan -+#define isinf __builtin_isinf -+ -+KCtype -+__mulkc3 (KFtype a, KFtype b, KFtype c, KFtype d) -+{ -+ KFtype ac, bd, ad, bc, x, y; -+ KCtype res; -+ -+ ac = a * c; -+ bd = b * d; -+ ad = a * d; -+ bc = b * c; -+ -+ x = ac - bd; -+ y = ad + bc; -+ -+ if (isnan (x) && isnan (y)) -+ { -+ /* Recover infinities that computed as NaN + iNaN. */ -+ _Bool recalc = 0; -+ if (isinf (a) || isinf (b)) -+ { -+ /* z is infinite. "Box" the infinity and change NaNs in -+ the other factor to 0. */ -+ a = COPYSIGN (isinf (a) ? 1 : 0, a); -+ b = COPYSIGN (isinf (b) ? 1 : 0, b); -+ if (isnan (c)) c = COPYSIGN (0, c); -+ if (isnan (d)) d = COPYSIGN (0, d); -+ recalc = 1; -+ } -+ if (isinf (c) || isinf (d)) -+ { -+ /* w is infinite. "Box" the infinity and change NaNs in -+ the other factor to 0. */ -+ c = COPYSIGN (isinf (c) ? 1 : 0, c); -+ d = COPYSIGN (isinf (d) ? 1 : 0, d); -+ if (isnan (a)) a = COPYSIGN (0, a); -+ if (isnan (b)) b = COPYSIGN (0, b); -+ recalc = 1; -+ } -+ if (!recalc -+ && (isinf (ac) || isinf (bd) -+ || isinf (ad) || isinf (bc))) -+ { -+ /* Recover infinities from overflow by changing NaNs to 0. */ -+ if (isnan (a)) a = COPYSIGN (0, a); -+ if (isnan (b)) b = COPYSIGN (0, b); -+ if (isnan (c)) c = COPYSIGN (0, c); -+ if (isnan (d)) d = COPYSIGN (0, d); -+ recalc = 1; -+ } -+ if (recalc) -+ { -+ x = INFINITY * (a * c - b * d); -+ y = INFINITY * (a * d + b * c); -+ } -+ } -+ -+ __real__ res = x; -+ __imag__ res = y; -+ return res; -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgcc/config/rs6000/quad-float128.h gcc-6-20160721/libgcc/config/rs6000/quad-float128.h ---- gcc-6.1.0/libgcc/config/rs6000/quad-float128.h 2016-01-21 17:52:33.000000000 +0000 -+++ gcc-6-20160721/libgcc/config/rs6000/quad-float128.h 2016-07-14 14:03:20.000000000 +0000 -@@ -33,6 +33,10 @@ - This define forces it to use KFmode (aka, ieee 128-bit floating point). */ - #define TF KF - -+/* We also need TCtype to represent complex ieee 128-bit float for -+ __mulkc3 and __divkc3. */ -+typedef __complex float TCtype __attribute__ ((mode (KC))); -+ - /* Force the use of the VSX instruction set. */ - #if defined(_ARCH_PPC) && (!defined(__VSX__) || !defined(__FLOAT128__)) - #pragma GCC target ("vsx,float128") -@@ -154,6 +158,10 @@ - extern IBM128_TYPE __extendkftf2 (TFtype); - extern TFtype __trunctfkf2 (IBM128_TYPE); - -+/* Complex __float128 built on __float128 interfaces. */ -+extern TCtype __mulkc3 (TFtype, TFtype, TFtype, TFtype); -+extern TCtype __divkc3 (TFtype, TFtype, TFtype, TFtype); -+ - /* Implementation of conversions between __ibm128 and __float128, to allow the - same code to be used on systems with IEEE 128-bit emulation and with IEEE - 128-bit hardware support. */ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgcc/config/rs6000/t-float128 gcc-6-20160721/libgcc/config/rs6000/t-float128 ---- gcc-6.1.0/libgcc/config/rs6000/t-float128 2016-01-21 17:52:33.000000000 +0000 -+++ gcc-6-20160721/libgcc/config/rs6000/t-float128 2016-07-14 14:03:20.000000000 +0000 -@@ -25,7 +25,7 @@ - # New functions for software emulation - fp128_ppc_funcs = floattikf floatuntikf fixkfti fixunskfti \ - extendkftf2-sw trunctfkf2-sw \ -- sfp-exceptions -+ sfp-exceptions _mulkc3 _divkc3 - - fp128_ppc_src = $(addprefix $(srcdir)/config/rs6000/,$(addsuffix \ - .c,$(fp128_ppc_funcs))) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgcc/config.host gcc-6-20160721/libgcc/config.host ---- gcc-6.1.0/libgcc/config.host 2016-02-26 20:02:28.000000000 +0000 -+++ gcc-6-20160721/libgcc/config.host 2016-05-17 06:15:52.000000000 +0000 -@@ -931,14 +931,9 @@ - mn10300-*-*) - tmake_file=t-fdpbit - ;; --moxie-*-elf | moxie-*-moxiebox* | moxie-*-uclinux*) -- tmake_file="moxie/t-moxie t-softfp-sfdf t-softfp-excl t-softfp" -- extra_parts="$extra_parts crti.o crtn.o crtbegin.o crtend.o" -- ;; --moxie-*-rtems*) -+moxie-*-elf | moxie-*-moxiebox* | moxie-*-uclinux* | moxie-*-rtems*) - tmake_file="$tmake_file moxie/t-moxie t-softfp-sfdf t-softfp-excl t-softfp" -- # Don't use default. -- extra_parts= -+ extra_parts="$extra_parts crti.o crtn.o crtbegin.o crtend.o" - ;; - msp430*-*-elf) - tmake_file="$tm_file t-crtstuff t-fdpbit msp430/t-msp430" -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgomp/ChangeLog gcc-6-20160721/libgomp/ChangeLog ---- gcc-6.1.0/libgomp/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/libgomp/ChangeLog 2016-07-02 10:24:41.000000000 +0000 -@@ -1,3 +1,65 @@ -+2016-07-02 Jakub Jelinek <jakub@redhat.com> -+ -+ Backported from mainline -+ 2016-07-01 Jakub Jelinek <jakub@redhat.com> -+ -+ PR fortran/71717 -+ * testsuite/libgomp.fortran/associate3.f90: New test. -+ -+2016-06-21 Jakub Jelinek <jakub@redhat.com> -+ -+ Backported from mainline -+ 2016-06-17 Jakub Jelinek <jakub@redhat.com> -+ -+ * testsuite/libgomp.c++/target-21.C: New test. -+ -+ 2016-06-16 Jakub Jelinek <jakub@redhat.com> -+ -+ * testsuite/libgomp.c++/target-20.C: New test. -+ -+2016-06-10 Thomas Schwinge <thomas@codesourcery.com> -+ -+ PR middle-end/71373 -+ Backport from trunk r237291: -+ 2016-06-10 Thomas Schwinge <thomas@codesourcery.com> -+ Cesar Philippidis <cesar@codesourcery.com> -+ -+ * libgomp.oacc-c/nested-function-1.c: New file. -+ * libgomp.oacc-c/nested-function-2.c: Likewise. -+ * libgomp.oacc-fortran/nested-function-1.f90: Likewise. -+ * libgomp.oacc-fortran/nested-function-2.f90: Likewise. -+ * libgomp.oacc-fortran/nested-function-3.f90: Likewise. -+ -+ PR c/71381 -+ Backport from trunk r237290: -+ * testsuite/libgomp.oacc-c-c++-common/cache-1.c: #include -+ "../../../gcc/testsuite/c-c++-common/goacc/cache-1.c". -+ * testsuite/libgomp.oacc-fortran/cache-1.f95: New file. -+ -+2016-05-23 Martin Jambor <mjambor@suse.cz> -+ -+ * testsuite/libgomp.hsa.c/switch-sbr-2.c: New test. -+ -+2016-05-16 Martin Jambor <mjambor@suse.cz> -+ -+ * testsuite/libgomp.hsa.c/complex-align-2.c: New test. -+ -+2016-04-29 Cesar Philippidis <cesar@codesourcery.com> -+ -+ PR middle-end/70626 -+ * testsuite/libgomp.oacc-c++/template-reduction.C: Adjust test. -+ * testsuite/libgomp.oacc-c-c++-common/combined-reduction.c: New test. -+ * testsuite/libgomp.oacc-fortran/combined-reduction.f90: New test. -+ -+2016-04-27 Jakub Jelinek <jakub@redhat.com> -+ -+ Backported from mainline -+ 2016-04-19 Jakub Jelinek <jakub@redhat.com> -+ -+ PR middle-end/70680 -+ * testsuite/libgomp.c/pr70680-1.c: New test. -+ * testsuite/libgomp.c/pr70680-2.c: New test. -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -Only in gcc-6.1.0/libgomp: libgomp.info -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgomp/testsuite/libgomp.c/pr70680-1.c gcc-6-20160721/libgomp/testsuite/libgomp.c/pr70680-1.c ---- gcc-6.1.0/libgomp/testsuite/libgomp.c/pr70680-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libgomp/testsuite/libgomp.c/pr70680-1.c 2016-04-27 12:22:47.000000000 +0000 -@@ -0,0 +1,75 @@ -+/* PR middle-end/70680 */ -+ -+int v; -+ -+void -+f1 (void) -+{ -+ int i = 0; -+#pragma omp task default(shared) if(0) -+ { -+#pragma omp simd -+ for (i = 0; i < 100; i++) -+ ; -+ v = i; -+ } -+ if (i != 100) -+ __builtin_abort (); -+} -+ -+void -+f2 (void) -+{ -+ int i = 0; -+#pragma omp task default(shared) if(0) -+ { -+#pragma omp simd -+ for (i = 0; i < 100; i++) -+ ; -+ } -+ if (i != 100) -+ __builtin_abort (); -+} -+ -+void -+f3 (void) -+{ -+ int i = 0; -+#pragma omp task default(shared) if(0) -+ { -+#pragma omp simd linear(i: 1) -+ for (i = 0; i < 100; i++) -+ ; -+ v = i; -+ } -+ if (i != 100) -+ __builtin_abort (); -+} -+ -+void -+f4 (void) -+{ -+ int i = 0; -+#pragma omp task default(shared) if(0) -+ { -+#pragma omp simd linear(i: 1) -+ for (i = 0; i < 100; i++) -+ ; -+ } -+ if (i != 100) -+ __builtin_abort (); -+} -+ -+int -+main () -+{ -+ f1 (); -+ if (v++ != 100) -+ __builtin_abort (); -+ f2 (); -+ f3 (); -+ if (v++ != 100) -+ __builtin_abort (); -+ f4 (); -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgomp/testsuite/libgomp.c/pr70680-2.c gcc-6-20160721/libgomp/testsuite/libgomp.c/pr70680-2.c ---- gcc-6.1.0/libgomp/testsuite/libgomp.c/pr70680-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libgomp/testsuite/libgomp.c/pr70680-2.c 2016-04-27 12:22:47.000000000 +0000 -@@ -0,0 +1,79 @@ -+/* PR middle-end/70680 */ -+ -+int v; -+ -+void -+f1 (void) -+{ -+ int i = 0, j = 0; -+#pragma omp task default(shared) if(0) -+ { -+#pragma omp simd collapse(2) -+ for (i = 0; i < 10; i++) -+ for (j = 0; j < 10; j++) -+ ; -+ v = i + j; -+ } -+ if (i != 10 || j != 10) -+ __builtin_abort (); -+} -+ -+void -+f2 (void) -+{ -+ int i = 0, j = 0; -+#pragma omp task default(shared) if(0) -+ { -+#pragma omp simd collapse(2) -+ for (i = 0; i < 10; i++) -+ for (j = 0; j < 10; j++) -+ ; -+ } -+ if (i != 10 || j != 10) -+ __builtin_abort (); -+} -+ -+void -+f3 (void) -+{ -+ int i = 0, j = 0; -+#pragma omp task default(shared) if(0) -+ { -+#pragma omp simd collapse(2) lastprivate (i, j) -+ for (i = 0; i < 10; i++) -+ for (j = 0; j < 10; j++) -+ ; -+ v = i + j; -+ } -+ if (i != 10 || j != 10) -+ __builtin_abort (); -+} -+ -+void -+f4 (void) -+{ -+ int i = 0, j = 0; -+#pragma omp task default(shared) if(0) -+ { -+#pragma omp simd collapse(2) lastprivate (i, j) -+ for (i = 0; i < 10; i++) -+ for (j = 0; j < 10; j++) -+ ; -+ } -+ if (i != 10 || j != 10) -+ __builtin_abort (); -+} -+ -+int -+main () -+{ -+ f1 (); -+ if (v++ != 20) -+ __builtin_abort (); -+ f2 (); -+ f3 (); -+ if (v++ != 20) -+ __builtin_abort (); -+ f4 (); -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgomp/testsuite/libgomp.c++/target-20.C gcc-6-20160721/libgomp/testsuite/libgomp.c++/target-20.C ---- gcc-6.1.0/libgomp/testsuite/libgomp.c++/target-20.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libgomp/testsuite/libgomp.c++/target-20.C 2016-06-21 07:09:57.000000000 +0000 -@@ -0,0 +1,80 @@ -+extern "C" void abort (); -+struct S { int a, b, c, d; }; -+ -+void -+foo (S &s) -+{ -+ int err; -+ #pragma omp target map (s.b, s.d) map (from: err) -+ { -+ err = s.b != 21 || s.d != 24; -+ s.b++; s.d++; -+ } -+ if (err || s.b != 22 || s.d != 25) -+ abort (); -+ #pragma omp target data map (s.b, s.d) -+ { -+ #pragma omp target map (alloc: s.b, s.d) map (from: err) -+ { -+ err = s.b != 22 || s.d != 25; -+ s.b++; s.d++; -+ } -+ } -+ if (err || s.b != 23 || s.d != 26) -+ abort (); -+ #pragma omp target data map (s) -+ { -+ #pragma omp target map (alloc: s.b, s.d) map (from: err) -+ { -+ err = s.b != 23 || s.d != 26; -+ s.b++; s.d++; -+ } -+ } -+ if (err || s.b != 24 || s.d != 27) -+ abort (); -+} -+ -+template <typename T, typename U> -+void -+bar (S &s, T &t, U u) -+{ -+ int err; -+ #pragma omp target map (s.b, s.d, t.b, t.d, u.b, u.d) map (from: err) -+ { -+ err = s.b != 21 || s.d != 24 || t.b != 73 || t.d != 82 || u.b != 31 || u.d != 37; -+ s.b++; s.d++; t.b++; t.d++; u.b++; u.d++; -+ } -+ if (err || s.b != 22 || s.d != 25 || t.b != 74 || t.d != 83 || u.b != 32 || u.d != 38) -+ abort (); -+ #pragma omp target data map (s.b, s.d, t.b, t.d, u.b, u.d) -+ { -+ #pragma omp target map (alloc: s.b, s.d, t.b, t.d, u.b, u.d) map (from: err) -+ { -+ err = s.b != 22 || s.d != 25 || t.b != 74 || t.d != 83 || u.b != 32 || u.d != 38; -+ s.b++; s.d++; t.b++; t.d++; u.b++; u.d++; -+ } -+ } -+ if (err || s.b != 23 || s.d != 26 || t.b != 75 || t.d != 84 || u.b != 33 || u.d != 39) -+ abort (); -+ #pragma omp target data map (s, t, u) -+ { -+ #pragma omp target map (alloc: s.b, s.d, t.b, t.d, u.b, u.d) map (from: err) -+ { -+ err = s.b != 23 || s.d != 26 || t.b != 75 || t.d != 84 || u.b != 33 || u.d != 39; -+ s.b++; s.d++; t.b++; t.d++; u.b++; u.d++; -+ } -+ } -+ if (err || s.b != 24 || s.d != 27 || t.b != 76 || t.d != 85 || u.b != 34 || u.d != 40) -+ abort (); -+} -+ -+int -+main () -+{ -+ S s = { 1, 21, 2, 24 }; -+ foo (s); -+ S s2 = { 3, 21, 4, 24 }; -+ S t = { 5, 73, 6, 82 }; -+ S u = { 7, 31, 8, 37 }; -+ bar <S, S &> (s2, t, u); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgomp/testsuite/libgomp.c++/target-21.C gcc-6-20160721/libgomp/testsuite/libgomp.c++/target-21.C ---- gcc-6.1.0/libgomp/testsuite/libgomp.c++/target-21.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libgomp/testsuite/libgomp.c++/target-21.C 2016-06-21 07:11:10.000000000 +0000 -@@ -0,0 +1,173 @@ -+extern "C" void abort (); -+struct T { char t[270]; }; -+struct S { int (&x)[10]; int *&y; T t; int &z; S (); ~S (); }; -+ -+template <int N> -+void -+foo (S s) -+{ -+ int err; -+ #pragma omp target map (s.x[0:N], s.y[0:N]) map (s.t.t[16:3]) map (from: err) -+ { -+ err = s.x[2] != 28 || s.y[2] != 37 || s.t.t[17] != 81; -+ s.x[2]++; -+ s.y[2]++; -+ s.t.t[17]++; -+ } -+ if (err || s.x[2] != 29 || s.y[2] != 38 || s.t.t[17] != 82) -+ abort (); -+} -+ -+template <int N> -+void -+bar (S s) -+{ -+ int err; -+ #pragma omp target map (s.x, s.z)map(from:err) -+ { -+ err = s.x[2] != 29 || s.z != 6; -+ s.x[2]++; -+ s.z++; -+ } -+ if (err || s.x[2] != 30 || s.z != 7) -+ abort (); -+} -+ -+template <int N> -+void -+foo2 (S &s) -+{ -+ int err; -+ #pragma omp target map (s.x[N:10], s.y[N:10]) map (from: err) map (s.t.t[N+16:N+3]) -+ { -+ err = s.x[2] != 30 || s.y[2] != 38 || s.t.t[17] != 81; -+ s.x[2]++; -+ s.y[2]++; -+ s.t.t[17]++; -+ } -+ if (err || s.x[2] != 31 || s.y[2] != 39 || s.t.t[17] != 82) -+ abort (); -+} -+ -+template <int N> -+void -+bar2 (S &s) -+{ -+ int err; -+ #pragma omp target map (s.x, s.z)map(from:err) -+ { -+ err = s.x[2] != 31 || s.z != 7; -+ s.x[2]++; -+ s.z++; -+ } -+ if (err || s.x[2] != 32 || s.z != 8) -+ abort (); -+} -+ -+template <typename U> -+void -+foo3 (U s) -+{ -+ int err; -+ #pragma omp target map (s.x[0:10], s.y[0:10]) map (from: err) map (s.t.t[16:3]) -+ { -+ err = s.x[2] != 32 || s.y[2] != 39 || s.t.t[17] != 82; -+ s.x[2]++; -+ s.y[2]++; -+ s.t.t[17]++; -+ } -+ if (err || s.x[2] != 33 || s.y[2] != 40 || s.t.t[17] != 83) -+ abort (); -+} -+ -+template <typename U> -+void -+bar3 (U s) -+{ -+ int err; -+ #pragma omp target map (s.x, s.z)map(from:err) -+ { -+ err = s.x[2] != 33 || s.z != 8; -+ s.x[2]++; -+ s.z++; -+ } -+ if (err || s.x[2] != 34 || s.z != 9) -+ abort (); -+} -+ -+template <typename U> -+void -+foo4 (U &s) -+{ -+ int err; -+ #pragma omp target map (s.x[0:10], s.y[0:10]) map (from: err) map (s.t.t[16:3]) -+ { -+ err = s.x[2] != 34 || s.y[2] != 40 || s.t.t[17] != 82; -+ s.x[2]++; -+ s.y[2]++; -+ s.t.t[17]++; -+ } -+ if (err || s.x[2] != 35 || s.y[2] != 41 || s.t.t[17] != 83) -+ abort (); -+} -+ -+template <typename U> -+void -+bar4 (U &s) -+{ -+ int err; -+ #pragma omp target map (s.x, s.z)map(from:err) -+ { -+ err = s.x[2] != 35 || s.z != 9; -+ s.x[2]++; -+ s.z++; -+ } -+ if (err || s.x[2] != 36 || s.z != 10) -+ abort (); -+} -+ -+int xt[10] = { 1, 2, 28, 3, 4, 5, 6, 7, 8, 9 }; -+int yt[10] = { 1, 2, 37, 3, 4, 5, 6, 7, 8, 9 }; -+int *yp = yt; -+int zt = 6; -+ -+S::S () : x (xt), y (yp), z (zt) -+{ -+} -+ -+S::~S () -+{ -+} -+ -+int -+main () -+{ -+ S s; -+ s.t.t[16] = 5; -+ s.t.t[17] = 81; -+ s.t.t[18] = 9; -+ foo <10> (s); -+ if (s.t.t[17] != 81) -+ abort (); -+ bar <7> (s); -+ foo2 <0> (s); -+ if (s.t.t[17] != 82) -+ abort (); -+ bar2 <21> (s); -+ foo3 <S> (s); -+ if (s.t.t[17] != 82) -+ abort (); -+ bar3 <S> (s); -+ foo4 <S> (s); -+ if (s.t.t[17] != 83) -+ abort (); -+ bar4 <S> (s); -+ s.x[2] -= 4; -+ s.y[2] -= 2; -+ s.z -= 2; -+ s.t.t[17]--; -+ foo3 <S &> (s); -+ if (s.t.t[17] != 83) -+ abort (); -+ bar3 <S &> (s); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgomp/testsuite/libgomp.fortran/associate3.f90 gcc-6-20160721/libgomp/testsuite/libgomp.fortran/associate3.f90 ---- gcc-6.1.0/libgomp/testsuite/libgomp.fortran/associate3.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libgomp/testsuite/libgomp.fortran/associate3.f90 2016-07-02 10:24:41.000000000 +0000 -@@ -0,0 +1,20 @@ -+! PR fortran/71717 -+! { dg-do run } -+ -+ type t -+ real, allocatable :: f(:) -+ end type -+ type (t) :: v -+ integer :: i, j -+ allocate (v%f(4)) -+ v%f = 19. -+ i = 5 -+ associate (u => v, k => i) -+ !$omp parallel do -+ do j = 1, 4 -+ u%f(j) = 21. -+ if (j.eq.1) k = 7 -+ end do -+ end associate -+ if (any (v%f(:).ne.21.) .or. i.ne.7) call abort -+end -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgomp/testsuite/libgomp.hsa.c/complex-align-2.c gcc-6-20160721/libgomp/testsuite/libgomp.hsa.c/complex-align-2.c ---- gcc-6.1.0/libgomp/testsuite/libgomp.hsa.c/complex-align-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libgomp/testsuite/libgomp.hsa.c/complex-align-2.c 2016-05-16 17:52:28.000000000 +0000 -@@ -0,0 +1,27 @@ -+#pragma omp declare target -+ _Complex int *g; -+#pragma omp end declare target -+ -+ -+ -+_Complex float f(void); -+ -+int -+main () -+{ -+ _Complex int y; -+#pragma omp target map(from:y) -+ { -+ _Complex int x; -+ g = &x; -+ __imag__ x = 1; -+ __real__ x = 2; -+ y = x; -+ } -+ -+ if ((__imag__ y != 1) -+ || (__real__ y != 2)) -+ __builtin_abort (); -+ return 0; -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgomp/testsuite/libgomp.hsa.c/switch-sbr-2.c gcc-6-20160721/libgomp/testsuite/libgomp.hsa.c/switch-sbr-2.c ---- gcc-6.1.0/libgomp/testsuite/libgomp.hsa.c/switch-sbr-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libgomp/testsuite/libgomp.hsa.c/switch-sbr-2.c 2016-05-23 11:54:52.000000000 +0000 -@@ -0,0 +1,59 @@ -+/* { dg-additional-options "-fno-tree-switch-conversion" } */ -+ -+#pragma omp declare target -+int -+foo (unsigned a) -+{ -+ switch (a) -+ { -+ case 1 ... 5: -+ return 1; -+ case 9 ... 11: -+ return a + 3; -+ case 12 ... 13: -+ return a + 3; -+ default: -+ return 44; -+ } -+} -+#pragma omp end declare target -+ -+#define s 100 -+ -+void __attribute__((noinline, noclone)) -+verify(int *a) -+{ -+ if (a[0] != 44) -+ __builtin_abort (); -+ -+ for (int i = 1; i <= 5; i++) -+ if (a[i] != 1) -+ __builtin_abort (); -+ -+ for (int i = 6; i <= 8; i++) -+ if (a[i] != 44) -+ __builtin_abort (); -+ -+ for (int i = 9; i <= 13; i++) -+ if (a[i] != i + 3) -+ __builtin_abort (); -+ -+ for (int i = 14; i < s; i++) -+ if (a[i] != 44) -+ __builtin_abort (); -+} -+ -+int main(int argc) -+{ -+ int array[s]; -+#pragma omp target -+ { -+ for (int i = 0; i < s; i++) -+ { -+ int v = foo (i); -+ array[i] = v; -+ } -+ } -+ verify (array); -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgomp/testsuite/libgomp.oacc-c/nested-function-1.c gcc-6-20160721/libgomp/testsuite/libgomp.oacc-c/nested-function-1.c ---- gcc-6.1.0/libgomp/testsuite/libgomp.oacc-c/nested-function-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libgomp/testsuite/libgomp.oacc-c/nested-function-1.c 2016-06-10 09:46:18.000000000 +0000 -@@ -0,0 +1,52 @@ -+/* Exercise nested function decomposition, gcc/tree-nested.c. */ -+ -+int -+main (void) -+{ -+ void test1 () -+ { -+ int i, j, k; -+ int a[4][7][8]; -+ -+ __builtin_memset (a, 0, sizeof (a)); -+ -+#pragma acc parallel -+#pragma acc loop collapse(4 - 1) -+ for (i = 1; i <= 3; i++) -+ for (j = 4; j <= 6; j++) -+ for (k = 5; k <= 7; k++) -+ a[i][j][k] = i + j + k; -+ -+ for (i = 1; i <= 3; i++) -+ for (j = 4; j <= 6; j++) -+ for (k = 5; k <= 7; k++) -+ if (a[i][j][k] != i + j + k) -+ __builtin_abort(); -+ } -+ -+ void test2 () -+ { -+ int i, j, k; -+ int a[4][4][4]; -+ -+ __builtin_memset (a, 0, sizeof (a)); -+ -+#pragma acc parallel -+#pragma acc loop collapse(3) -+ for (i = 1; i <= 3; i++) -+ for (j = 1; j <= 3; j++) -+ for (k = 1; k <= 3; k++) -+ a[i][j][k] = 1; -+ -+ for (i = 1; i <= 3; i++) -+ for (j = 1; j <= 3; j++) -+ for (k = 1; k <= 3; k++) -+ if (a[i][j][k] != 1) -+ __builtin_abort (); -+ } -+ -+ test1 (); -+ test2 (); -+ -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgomp/testsuite/libgomp.oacc-c/nested-function-2.c gcc-6-20160721/libgomp/testsuite/libgomp.oacc-c/nested-function-2.c ---- gcc-6.1.0/libgomp/testsuite/libgomp.oacc-c/nested-function-2.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libgomp/testsuite/libgomp.oacc-c/nested-function-2.c 2016-06-10 09:46:18.000000000 +0000 -@@ -0,0 +1,155 @@ -+/* Exercise nested function decomposition, gcc/tree-nested.c. */ -+ -+int -+main (void) -+{ -+ int p1 = 2, p2 = 6, p3 = 0, p4 = 4, p5 = 13, p6 = 18, p7 = 1, p8 = 1, p9 = 1; -+ -+ void test1 () -+ { -+ int i, j, k; -+ int a[4][4][4]; -+ -+ __builtin_memset (a, '\0', sizeof (a)); -+ -+#pragma acc parallel -+#pragma acc loop collapse(3) -+ for (i = 1; i <= 3; i++) -+ for (j = 1; j <= 3; j++) -+ for (k = 2; k <= 3; k++) -+ a[i][j][k] = 1; -+ -+ for (i = 1; i <= 3; i++) -+ for (j = 1; j <= 3; j++) -+ for (k = 2; k <= 3; k++) -+ if (a[i][j][k] != 1) -+ __builtin_abort(); -+ } -+ -+ void test2 (int v1, int v2, int v3, int v4, int v5, int v6) -+ { -+ int i, j, k, l = 0, r = 0; -+ int a[7][5][19]; -+ int b[7][5][19]; -+ -+ __builtin_memset (a, '\0', sizeof (a)); -+ __builtin_memset (b, '\0', sizeof (b)); -+ -+#pragma acc parallel reduction (||:l) -+#pragma acc loop reduction (||:l) collapse(3) -+ for (i = v1; i <= v2; i++) -+ for (j = v3; j <= v4; j++) -+ for (k = v5; k <= v6; k++) -+ { -+ l = l || i < 2 || i > 6 || j < 0 || j > 4 || k < 13 || k > 18; -+ if (!l) -+ a[i][j][k] += 1; -+ } -+ -+ for (i = v1; i <= v2; i++) -+ for (j = v3; j <= v4; j++) -+ for (k = v5; k <= v6; k++) -+ { -+ r = r || i < 2 || i > 6 || j < 0 || j > 4 || k < 13 || k > 18; -+ if (!r) -+ b[i][j][k] += 1; -+ } -+ -+ if (l != r) -+ __builtin_abort (); -+ -+ for (i = v1; i <= v2; i++) -+ for (j = v3; j <= v4; j++) -+ for (k = v5; k <= v6; k++) -+ if (b[i][j][k] != a[i][j][k]) -+ __builtin_abort (); -+ } -+ -+ void test3 (int v1, int v2, int v3, int v4, int v5, int v6, int v7, int v8, -+ int v9) -+ { -+ int i, j, k, l = 0, r = 0; -+ int a[7][5][19]; -+ int b[7][5][19]; -+ -+ __builtin_memset (a, '\0', sizeof (a)); -+ __builtin_memset (b, '\0', sizeof (b)); -+ -+#pragma acc parallel reduction (||:l) -+#pragma acc loop reduction (||:l) collapse(3) -+ for (i = v1; i <= v2; i += v7) -+ for (j = v3; j <= v4; j += v8) -+ for (k = v5; k <= v6; k += v9) -+ { -+ l = l || i < 2 || i > 6 || j < 0 || j > 4 || k < 13 || k > 18; -+ if (!l) -+ a[i][j][k] += 1; -+ } -+ -+ for (i = v1; i <= v2; i += v7) -+ for (j = v3; j <= v4; j += v8) -+ for (k = v5; k <= v6; k += v9) -+ { -+ r = r || i < 2 || i > 6 || j < 0 || j > 4 || k < 13 || k > 18; -+ if (!r) -+ b[i][j][k] += 1; -+ } -+ -+ if (l != r) -+ __builtin_abort (); -+ -+ for (i = v1; i <= v2; i++) -+ for (j = v3; j <= v4; j++) -+ for (k = v5; k <= v6; k++) -+ if (b[i][j][k] != a[i][j][k]) -+ __builtin_abort (); -+ } -+ -+ void test4 () -+ { -+ int i, j, k, l = 0, r = 0; -+ int a[7][5][19]; -+ int b[7][5][19]; -+ int v1 = p1, v2 = p2, v3 = p3, v4 = p4, v5 = p5, v6 = p6, v7 = p7, v8 = p8, -+ v9 = p9; -+ -+ __builtin_memset (a, '\0', sizeof (a)); -+ __builtin_memset (b, '\0', sizeof (b)); -+ -+#pragma acc parallel reduction (||:l) -+#pragma acc loop reduction (||:l) collapse(3) -+ for (i = v1; i <= v2; i += v7) -+ for (j = v3; j <= v4; j += v8) -+ for (k = v5; k <= v6; k += v9) -+ { -+ l = l || i < 2 || i > 6 || j < 0 || j > 4 || k < 13 || k > 18; -+ if (!l) -+ a[i][j][k] += 1; -+ } -+ -+ for (i = v1; i <= v2; i += v7) -+ for (j = v3; j <= v4; j += v8) -+ for (k = v5; k <= v6; k += v9) -+ { -+ r = r || i < 2 || i > 6 || j < 0 || j > 4 || k < 13 || k > 18; -+ if (!r) -+ b[i][j][k] += 1; -+ } -+ -+ if (l != r) -+ __builtin_abort (); -+ -+ for (i = v1; i <= v2; i++) -+ for (j = v3; j <= v4; j++) -+ for (k = v5; k <= v6; k++) -+ if (b[i][j][k] != a[i][j][k]) -+ __builtin_abort (); -+ } -+ -+ test1 (); -+ test2 (p1, p2, p3, p4, p5, p6); -+ test3 (p1, p2, p3, p4, p5, p6, p7, p8, p9); -+ test4 (); -+ -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgomp/testsuite/libgomp.oacc-c++/template-reduction.C gcc-6-20160721/libgomp/testsuite/libgomp.oacc-c++/template-reduction.C ---- gcc-6.1.0/libgomp/testsuite/libgomp.oacc-c++/template-reduction.C 2016-03-30 15:08:47.000000000 +0000 -+++ gcc-6-20160721/libgomp/testsuite/libgomp.oacc-c++/template-reduction.C 2016-04-29 17:37:55.000000000 +0000 -@@ -7,7 +7,7 @@ - { - T s = 0; - --#pragma acc parallel loop num_gangs (10) gang reduction (+:s) copy (s, array[0:n]) -+#pragma acc parallel loop num_gangs (10) gang reduction (+:s) copy (array[0:n]) - for (int i = 0; i < n; i++) - s += array[i]; - -@@ -25,7 +25,7 @@ - for (int i = 0; i < n; i++) - array[i] = i+1; - --#pragma acc parallel loop num_gangs (10) gang reduction (+:s) copy (s) -+#pragma acc parallel loop num_gangs (10) gang reduction (+:s) - for (int i = 0; i < n; i++) - s += array[i]; - -@@ -43,7 +43,7 @@ - for (int i = 0; i < n; i++) - array[i] = i+1; - --#pragma acc parallel loop num_gangs (10) gang reduction (+:s) present (array[0:n]) copy (s) async wait (1) -+#pragma acc parallel loop num_gangs (10) gang reduction (+:s) present (array[0:n]) async wait (1) - for (int i = 0; i < n; i++) - s += array[i]; - -@@ -59,7 +59,7 @@ - { - T s = 0; - --#pragma acc parallel loop num_gangs (10) gang reduction (+:s) copy(s) firstprivate (c) async wait (1) -+#pragma acc parallel loop num_gangs (10) gang reduction (+:s) firstprivate (c) async wait (1) - for (int i = 0; i < n; i++) - s += i+c; - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgomp/testsuite/libgomp.oacc-c-c++-common/cache-1.c gcc-6-20160721/libgomp/testsuite/libgomp.oacc-c-c++-common/cache-1.c ---- gcc-6.1.0/libgomp/testsuite/libgomp.oacc-c-c++-common/cache-1.c 2015-01-15 20:11:12.000000000 +0000 -+++ gcc-6-20160721/libgomp/testsuite/libgomp.oacc-c-c++-common/cache-1.c 2016-06-10 09:46:04.000000000 +0000 -@@ -1,48 +1,3 @@ --int --main (int argc, char **argv) --{ --#define N 2 -- int a[N], b[N]; -- int i; -+/* OpenACC cache directive. */ - -- for (i = 0; i < N; i++) -- { -- a[i] = 3; -- b[i] = 0; -- } -- --#pragma acc parallel copyin (a[0:N]) copyout (b[0:N]) --{ -- int ii; -- -- for (ii = 0; ii < N; ii++) -- { -- const int idx = ii; -- int n = 1; -- const int len = n; -- --#pragma acc cache (a[0:N]) -- --#pragma acc cache (a[0:N], b[0:N]) -- --#pragma acc cache (a[0]) -- --#pragma acc cache (a[0], a[1], b[0:N]) -- --#pragma acc cache (a[idx]) -- --#pragma acc cache (a[idx:len]) -- -- b[ii] = a[ii]; -- } --} -- -- -- for (i = 0; i < N; i++) -- { -- if (a[i] != b[i]) -- __builtin_abort (); -- } -- -- return 0; --} -+#include "../../../gcc/testsuite/c-c++-common/goacc/cache-1.c" -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgomp/testsuite/libgomp.oacc-c-c++-common/combined-reduction.c gcc-6-20160721/libgomp/testsuite/libgomp.oacc-c-c++-common/combined-reduction.c ---- gcc-6.1.0/libgomp/testsuite/libgomp.oacc-c-c++-common/combined-reduction.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libgomp/testsuite/libgomp.oacc-c-c++-common/combined-reduction.c 2016-04-29 17:37:55.000000000 +0000 -@@ -0,0 +1,23 @@ -+/* Test a combined acc parallel loop reduction. */ -+ -+/* { dg-do run } */ -+ -+#include <assert.h> -+ -+int -+main () -+{ -+ int i, v1 = 0, v2 = 0, n = 100; -+ -+#pragma acc parallel loop reduction(+:v1, v2) -+ for (i = 0; i < n; i++) -+ { -+ v1++; -+ v2++; -+ } -+ -+ assert (v1 == n); -+ assert (v2 == n); -+ -+ return 0; -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgomp/testsuite/libgomp.oacc-fortran/cache-1.f95 gcc-6-20160721/libgomp/testsuite/libgomp.oacc-fortran/cache-1.f95 ---- gcc-6.1.0/libgomp/testsuite/libgomp.oacc-fortran/cache-1.f95 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libgomp/testsuite/libgomp.oacc-fortran/cache-1.f95 2016-06-10 09:46:04.000000000 +0000 -@@ -0,0 +1,6 @@ -+! OpenACC cache directive. -+! { dg-do run } -+! { dg-additional-options "-std=f2008" } -+! { dg-additional-options "-cpp" } -+ -+#include "../../../gcc/testsuite/gfortran.dg/goacc/cache-1.f95" -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgomp/testsuite/libgomp.oacc-fortran/combined-reduction.f90 gcc-6-20160721/libgomp/testsuite/libgomp.oacc-fortran/combined-reduction.f90 ---- gcc-6.1.0/libgomp/testsuite/libgomp.oacc-fortran/combined-reduction.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libgomp/testsuite/libgomp.oacc-fortran/combined-reduction.f90 2016-04-29 17:37:55.000000000 +0000 -@@ -0,0 +1,19 @@ -+! Test a combined acc parallel loop reduction. -+ -+! { dg-do run } -+ -+program test -+ implicit none -+ integer i, n, var -+ -+ n = 100 -+ var = 0 -+ -+ !$acc parallel loop reduction(+:var) -+ do i = 1, 100 -+ var = var + 1 -+ end do -+ !$acc end parallel loop -+ -+ if (var .ne. n) call abort -+end program test -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgomp/testsuite/libgomp.oacc-fortran/nested-function-1.f90 gcc-6-20160721/libgomp/testsuite/libgomp.oacc-fortran/nested-function-1.f90 ---- gcc-6.1.0/libgomp/testsuite/libgomp.oacc-fortran/nested-function-1.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libgomp/testsuite/libgomp.oacc-fortran/nested-function-1.f90 2016-06-10 09:46:18.000000000 +0000 -@@ -0,0 +1,70 @@ -+! Exercise nested function decomposition, gcc/tree-nested.c. -+ -+! { dg-do run } -+ -+program collapse2 -+ call test1 -+ call test2 -+contains -+ subroutine test1 -+ integer :: i, j, k, a(1:3, 4:6, 5:7) -+ logical :: l -+ l = .false. -+ a(:, :, :) = 0 -+ !$acc parallel reduction (.or.:l) -+ !$acc loop worker vector collapse(4 - 1) -+ do 164 i = 1, 3 -+ do 164 j = 4, 6 -+ do 164 k = 5, 7 -+ a(i, j, k) = i + j + k -+164 end do -+ !$acc loop worker vector reduction(.or.:l) collapse(2) -+firstdo: do i = 1, 3 -+ do j = 4, 6 -+ do k = 5, 7 -+ if (a(i, j, k) .ne. (i + j + k)) l = .true. -+ end do -+ end do -+ end do firstdo -+ !$acc end parallel -+ if (l) call abort -+ end subroutine test1 -+ -+ subroutine test2 -+ integer :: a(3,3,3), k, kk, kkk, l, ll, lll -+ a = 0 -+ !$acc parallel -+ ! Use "gang(static:1)" here and below to effectively turn gang-redundant -+ ! execution mode into something like gang-single. -+ !$acc loop gang(static:1) collapse(1) -+ do 115 k=1,3 -+ !$acc loop collapse(2) -+ dokk: do kk=1,3 -+ do kkk=1,3 -+ a(k,kk,kkk) = 1 -+ enddo -+ enddo dokk -+115 continue -+ !$acc loop gang(static:1) collapse(1) -+ do k=1,3 -+ if (any(a(k,1:3,1:3).ne.1)) call abort -+ enddo -+ ! Use "gang(static:1)" here and below to effectively turn gang-redundant -+ ! execution mode into something like gang-single. -+ !$acc loop gang(static:1) collapse(1) -+ dol: do 120 l=1,3 -+ !$acc loop collapse(2) -+ doll: do ll=1,3 -+ do lll=1,3 -+ a(l,ll,lll) = 2 -+ enddo -+ enddo doll -+120 end do dol -+ !$acc loop gang(static:1) collapse(1) -+ do l=1,3 -+ if (any(a(l,1:3,1:3).ne.2)) call abort -+ enddo -+ !$acc end parallel -+ end subroutine test2 -+ -+end program collapse2 -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgomp/testsuite/libgomp.oacc-fortran/nested-function-2.f90 gcc-6-20160721/libgomp/testsuite/libgomp.oacc-fortran/nested-function-2.f90 ---- gcc-6.1.0/libgomp/testsuite/libgomp.oacc-fortran/nested-function-2.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libgomp/testsuite/libgomp.oacc-fortran/nested-function-2.f90 2016-06-10 09:46:18.000000000 +0000 -@@ -0,0 +1,173 @@ -+! Exercise nested function decomposition, gcc/tree-nested.c. -+ -+! { dg-do run } -+ -+program collapse3 -+ integer :: p1, p2, p3, p4, p5, p6, p7, p8, p9 -+ p1 = 2 -+ p2 = 6 -+ p3 = -2 -+ p4 = 4 -+ p5 = 13 -+ p6 = 18 -+ p7 = 1 -+ p8 = 1 -+ p9 = 1 -+ call test1 -+ call test2 (p1, p2, p3, p4, p5, p6) -+ call test3 (p1, p2, p3, p4, p5, p6, p7, p8, p9) -+ call test4 -+contains -+ subroutine test1 -+ integer :: a(3,3,3), k, kk, kkk, l, ll, lll -+ !$acc parallel -+ !$acc loop collapse(3) -+ do 115 k=1,3 -+dokk: do kk=1,3 -+ do kkk=1,3 -+ a(k,kk,kkk) = 1 -+ enddo -+ enddo dokk -+115 continue -+ !$acc end parallel -+ if (any(a(1:3,1:3,1:3).ne.1)) call abort -+ !$acc parallel -+ !$acc loop collapse(3) -+dol: do 120 l=1,3 -+doll: do ll=1,3 -+ do lll=1,3 -+ a(l,ll,lll) = 2 -+ enddo -+ enddo doll -+120 end do dol -+ !$acc end parallel -+ if (any(a(1:3,1:3,1:3).ne.2)) call abort -+ end subroutine test1 -+ -+ subroutine test2(v1, v2, v3, v4, v5, v6) -+ integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19) -+ integer :: v1, v2, v3, v4, v5, v6 -+ logical :: l, r -+ l = .false. -+ r = .false. -+ a(:, :, :) = 0 -+ b(:, :, :) = 0 -+ !$acc parallel reduction (.or.:l) -+ !$acc loop reduction (.or.:l) collapse (3) -+ do i = v1, v2 -+ do j = v3, v4 -+ do k = v5, v6 -+ l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4 -+ l = l.or.k.lt.13.or.k.gt.18 -+ if (.not.l) a(i, j, k) = a(i, j, k) + 1 -+ end do -+ end do -+ end do -+ !$acc end parallel -+ do i = v1, v2 -+ do j = v3, v4 -+ do k = v5, v6 -+ r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4 -+ r = r.or.k.lt.13.or.k.gt.18 -+ if (.not.l) b(i, j, k) = b(i, j, k) + 1 -+ end do -+ end do -+ end do -+ if (l .neqv. r) call abort -+ do i = v1, v2 -+ do j = v3, v4 -+ do k = v5, v6 -+ if (a(i, j, k) .ne. b(i, j, k)) call abort -+ end do -+ end do -+ end do -+ end subroutine test2 -+ -+ subroutine test3(v1, v2, v3, v4, v5, v6, v7, v8, v9) -+ integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19) -+ integer :: v1, v2, v3, v4, v5, v6, v7, v8, v9 -+ logical :: l, r -+ l = .false. -+ r = .false. -+ a(:, :, :) = 0 -+ b(:, :, :) = 0 -+ !$acc parallel reduction (.or.:l) -+ !$acc loop reduction (.or.:l) collapse (3) -+ do i = v1, v2, v7 -+ do j = v3, v4, v8 -+ do k = v5, v6, v9 -+ l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4 -+ l = l.or.k.lt.13.or.k.gt.18 -+ if (.not.l) a(i, j, k) = a(i, j, k) + 1 -+ end do -+ end do -+ end do -+ !$acc end parallel -+ do i = v1, v2, v7 -+ do j = v3, v4, v8 -+ do k = v5, v6, v9 -+ r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4 -+ r = r.or.k.lt.13.or.k.gt.18 -+ if (.not.l) b(i, j, k) = b(i, j, k) + 1 -+ end do -+ end do -+ end do -+ if (l .neqv. r) call abort -+ do i = v1, v2, v7 -+ do j = v3, v4, v8 -+ do k = v5, v6, v9 -+ if (a(i, j, k) .ne. b(i, j, k)) call abort -+ end do -+ end do -+ end do -+ end subroutine test3 -+ -+ subroutine test4 -+ integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19) -+ integer :: v1, v2, v3, v4, v5, v6, v7, v8, v9 -+ logical :: l, r -+ l = .false. -+ r = .false. -+ a(:, :, :) = 0 -+ b(:, :, :) = 0 -+ v1 = p1 -+ v2 = p2 -+ v3 = p3 -+ v4 = p4 -+ v5 = p5 -+ v6 = p6 -+ v7 = p7 -+ v8 = p8 -+ v9 = p9 -+ !$acc parallel reduction (.or.:l) -+ !$acc loop reduction (.or.:l) collapse (3) -+ do i = v1, v2, v7 -+ do j = v3, v4, v8 -+ do k = v5, v6, v9 -+ l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4 -+ l = l.or.k.lt.13.or.k.gt.18 -+ if (.not.l) a(i, j, k) = a(i, j, k) + 1 -+ end do -+ end do -+ end do -+ !$acc end parallel -+ do i = v1, v2, v7 -+ do j = v3, v4, v8 -+ do k = v5, v6, v9 -+ r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4 -+ r = r.or.k.lt.13.or.k.gt.18 -+ if (.not.r) b(i, j, k) = b(i, j, k) + 1 -+ end do -+ end do -+ end do -+ if (l .neqv. r) call abort -+ do i = v1, v2, v7 -+ do j = v3, v4, v8 -+ do k = v5, v6, v9 -+ if (a(i, j, k) .ne. b(i, j, k)) call abort -+ end do -+ end do -+ end do -+ end subroutine test4 -+ -+end program collapse3 -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libgomp/testsuite/libgomp.oacc-fortran/nested-function-3.f90 gcc-6-20160721/libgomp/testsuite/libgomp.oacc-fortran/nested-function-3.f90 ---- gcc-6.1.0/libgomp/testsuite/libgomp.oacc-fortran/nested-function-3.f90 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libgomp/testsuite/libgomp.oacc-fortran/nested-function-3.f90 2016-06-10 09:46:18.000000000 +0000 -@@ -0,0 +1,244 @@ -+! Exercise nested function decomposition, gcc/tree-nested.c. -+ -+! { dg-do run } -+ -+program sub_collapse_3 -+ call test1 -+ call test2 (2, 6, -2, 4, 13, 18) -+ call test3 (2, 6, -2, 4, 13, 18, 1, 1, 1) -+ call test4 -+ call test5 (2, 6, -2, 4, 13, 18) -+ call test6 (2, 6, -2, 4, 13, 18, 1, 1, 1) -+contains -+ subroutine test1 -+ integer :: a(3,3,3), k, kk, kkk, l, ll, lll -+ !$acc parallel -+ !$acc loop collapse(3) -+ do 115 k=1,3 -+dokk: do kk=1,3 -+ do kkk=1,3 -+ a(k,kk,kkk) = 1 -+ enddo -+ enddo dokk -+115 continue -+ !$acc end parallel -+ if (any(a(1:3,1:3,1:3).ne.1)) call abort -+ !$acc parallel -+ !$acc loop collapse(3) -+dol: do 120 l=1,3 -+doll: do ll=1,3 -+ do lll=1,3 -+ a(l,ll,lll) = 2 -+ enddo -+ enddo doll -+120 end do dol -+ !$acc end parallel -+ if (any(a(1:3,1:3,1:3).ne.2)) call abort -+ end subroutine test1 -+ -+ subroutine test2(v1, v2, v3, v4, v5, v6) -+ integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19) -+ integer :: v1, v2, v3, v4, v5, v6 -+ logical :: l, r -+ l = .false. -+ r = .false. -+ a(:, :, :) = 0 -+ b(:, :, :) = 0 -+ !$acc parallel pcopyin (v1, v2, v3, v4, v5, v6) reduction (.or.:l) -+ !$acc loop reduction (.or.:l) collapse (3) -+ do i = v1, v2 -+ do j = v3, v4 -+ do k = v5, v6 -+ l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4 -+ l = l.or.k.lt.13.or.k.gt.18 -+ if (.not.l) a(i, j, k) = a(i, j, k) + 1 -+ end do -+ end do -+ end do -+ !$acc end parallel -+ do i = v1, v2 -+ do j = v3, v4 -+ do k = v5, v6 -+ r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4 -+ r = r.or.k.lt.13.or.k.gt.18 -+ if (.not.l) b(i, j, k) = b(i, j, k) + 1 -+ end do -+ end do -+ end do -+ if (l .neqv. r) call abort -+ do i = v1, v2 -+ do j = v3, v4 -+ do k = v5, v6 -+ if (a(i, j, k) .ne. b(i, j, k)) call abort -+ end do -+ end do -+ end do -+ end subroutine test2 -+ -+ subroutine test3(v1, v2, v3, v4, v5, v6, v7, v8, v9) -+ integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19) -+ integer :: v1, v2, v3, v4, v5, v6, v7, v8, v9 -+ logical :: l, r -+ l = .false. -+ r = .false. -+ a(:, :, :) = 0 -+ b(:, :, :) = 0 -+ !$acc parallel pcopyin (v1, v2, v3, v4, v5, v6, v7, v8, v9) reduction (.or.:l) -+ !$acc loop reduction (.or.:l) collapse (3) -+ do i = v1, v2, v7 -+ do j = v3, v4, v8 -+ do k = v5, v6, v9 -+ l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4 -+ l = l.or.k.lt.13.or.k.gt.18 -+ if (.not.l) a(i, j, k) = a(i, j, k) + 1 -+ end do -+ end do -+ end do -+ !$acc end parallel -+ do i = v1, v2, v7 -+ do j = v3, v4, v8 -+ do k = v5, v6, v9 -+ r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4 -+ r = r.or.k.lt.13.or.k.gt.18 -+ if (.not.l) b(i, j, k) = b(i, j, k) + 1 -+ end do -+ end do -+ end do -+ if (l .neqv. r) call abort -+ do i = v1, v2, v7 -+ do j = v3, v4, v8 -+ do k = v5, v6, v9 -+ if (a(i, j, k) .ne. b(i, j, k)) call abort -+ end do -+ end do -+ end do -+ end subroutine test3 -+ -+ subroutine test4 -+ integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19) -+ integer :: v1, v2, v3, v4, v5, v6, v7, v8, v9 -+ logical :: l, r -+ l = .false. -+ r = .false. -+ a(:, :, :) = 0 -+ b(:, :, :) = 0 -+ v1 = 2 -+ v2 = 6 -+ v3 = -2 -+ v4 = 4 -+ v5 = 13 -+ v6 = 18 -+ v7 = 1 -+ v8 = 1 -+ v9 = 1 -+ !$acc parallel pcopyin (v1, v2, v3, v4, v5, v6, v7, v8, v9) reduction (.or.:l) -+ !$acc loop reduction (.or.:l) collapse (3) -+ do i = v1, v2, v7 -+ do j = v3, v4, v8 -+ do k = v5, v6, v9 -+ l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4 -+ l = l.or.k.lt.13.or.k.gt.18 -+ if (.not.l) a(i, j, k) = a(i, j, k) + 1 -+ end do -+ end do -+ end do -+ !$acc end parallel -+ do i = v1, v2, v7 -+ do j = v3, v4, v8 -+ do k = v5, v6, v9 -+ r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4 -+ r = r.or.k.lt.13.or.k.gt.18 -+ if (.not.r) b(i, j, k) = b(i, j, k) + 1 -+ end do -+ end do -+ end do -+ if (l .neqv. r) call abort -+ do i = v1, v2, v7 -+ do j = v3, v4, v8 -+ do k = v5, v6, v9 -+ if (a(i, j, k) .ne. b(i, j, k)) call abort -+ end do -+ end do -+ end do -+ end subroutine test4 -+ -+ subroutine test5(v1, v2, v3, v4, v5, v6) -+ integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19) -+ integer :: v1, v2, v3, v4, v5, v6 -+ logical :: l, r -+ l = .false. -+ r = .false. -+ a(:, :, :) = 0 -+ b(:, :, :) = 0 -+ !$acc parallel pcopyin (v1, v2, v3, v4, v5, v6) reduction (.or.:l) -+ !$acc loop reduction (.or.:l) collapse (3) -+ do i = v1, v2 -+ do j = v3, v4 -+ do k = v5, v6 -+ l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4 -+ l = l.or.k.lt.13.or.k.gt.18 -+ if (.not.l) a(i, j, k) = a(i, j, k) + 1 -+ end do -+ end do -+ end do -+ !$acc end parallel -+ do i = v1, v2 -+ do j = v3, v4 -+ do k = v5, v6 -+ r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4 -+ r = r.or.k.lt.13.or.k.gt.18 -+ if (.not.r) b(i, j, k) = b(i, j, k) + 1 -+ end do -+ end do -+ end do -+ if (l .neqv. r) call abort -+ do i = v1, v2 -+ do j = v3, v4 -+ do k = v5, v6 -+ if (a(i, j, k) .ne. b(i, j, k)) call abort -+ end do -+ end do -+ end do -+ end subroutine test5 -+ -+ subroutine test6(v1, v2, v3, v4, v5, v6, v7, v8, v9) -+ integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19) -+ integer :: v1, v2, v3, v4, v5, v6, v7, v8, v9 -+ logical :: l, r -+ l = .false. -+ r = .false. -+ a(:, :, :) = 0 -+ b(:, :, :) = 0 -+ !$acc parallel pcopyin (v1, v2, v3, v4, v5, v6, v7, v8, v9) reduction (.or.:l) -+ !$acc loop reduction (.or.:l) collapse (3) -+ do i = v1, v2, v7 -+ do j = v3, v4, v8 -+ do k = v5, v6, v9 -+ l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4 -+ l = l.or.k.lt.13.or.k.gt.18 -+ if (.not.l) a(i, j, k) = a(i, j, k) + 1 -+ m = i * 100 + j * 10 + k -+ end do -+ end do -+ end do -+ !$acc end parallel -+ do i = v1, v2, v7 -+ do j = v3, v4, v8 -+ do k = v5, v6, v9 -+ r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4 -+ r = r.or.k.lt.13.or.k.gt.18 -+ if (.not.r) b(i, j, k) = b(i, j, k) + 1 -+ end do -+ end do -+ end do -+ if (l .neqv. r) call abort -+ do i = v1, v2, v7 -+ do j = v3, v4, v8 -+ do k = v5, v6, v9 -+ if (a(i, j, k) .ne. b(i, j, k)) call abort -+ end do -+ end do -+ end do -+ end subroutine test6 -+ -+end program sub_collapse_3 -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libiberty/ChangeLog gcc-6-20160721/libiberty/ChangeLog ---- gcc-6.1.0/libiberty/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/libiberty/ChangeLog 2016-07-21 06:15:23.000000000 +0000 -@@ -1,3 +1,43 @@ -+2016-07-21 Jason Merrill <jason@redhat.com> -+ -+ * cp-demangle.c (cplus_demangle_operators): Add f[lrLR]. -+ (d_expression_1): Handle them. -+ (d_maybe_print_fold_expression): New. -+ (d_print_comp_inner): Use it. -+ (d_index_template_argument): Handle negative index. -+ -+ * cp-demangle.c (cplus_demangle_operators): Add sP and sZ. -+ (d_print_comp_inner): Handle them. -+ (d_template_args_1): Split out from d_template_args. -+ (d_args_length): New. -+ -+2016-05-19 Jakub Jelinek <jakub@redhat.com> -+ -+ Backported from mainline -+ 2016-05-19 Jakub Jelinek <jakub@redhat.com> -+ -+ PR c++/70498 -+ * cp-demangle.c (d_expression_1): Formatting fix. -+ -+ 2016-05-02 Marcel Böhme <boehme.marcel@gmail.com> -+ -+ PR c++/70498 -+ * cp-demangle.c: Parse numbers as integer instead of long to avoid -+ overflow after sanity checks. Include <limits.h> if available. -+ (INT_MAX): Define if necessary. -+ (d_make_template_param): Takes integer argument instead of long. -+ (d_make_function_param): Likewise. -+ (d_append_num): Likewise. -+ (d_identifier): Likewise. -+ (d_number): Parse as and return integer. -+ (d_compact_number): Handle overflow. -+ (d_source_name): Change variable type to integer for parsed number. -+ (d_java_resource): Likewise. -+ (d_special_name): Likewise. -+ (d_discriminator): Likewise. -+ (d_unnamed_type): Likewise. -+ * testsuite/demangle-expected: Add regression test cases. -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -@@ -16,7 +56,7 @@ - -1. - - 2016-03-31 Mikhail Maltsev <maltsevm@gmail.com> -- Marcel Bohme boehme.marcel@gmail.com -+ Marcel Bohme <boehme.marcel@gmail.com> - - PR c++/67394 - PR c++/70481 -@@ -2037,7 +2077,7 @@ - that are locale-independent. - * Makefile.in (filename_cmp.o): Add dependency on safe-ctype.h. - --2007-04-11 Thomas Neumann tneumann@users.sourceforge.net -+2007-04-11 Thomas Neumann <tneumann@users.sourceforge.net> - - * argv.c: Use ANSI C declarations. - * make-relative-prefix.c: Likewise. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libiberty/cp-demangle.c gcc-6-20160721/libiberty/cp-demangle.c ---- gcc-6.1.0/libiberty/cp-demangle.c 2015-11-27 14:48:21.000000000 +0000 -+++ gcc-6-20160721/libiberty/cp-demangle.c 2016-07-21 06:15:23.000000000 +0000 -@@ -128,6 +128,13 @@ - # endif /* alloca */ - #endif /* HAVE_ALLOCA_H */ - -+#ifdef HAVE_LIMITS_H -+#include <limits.h> -+#endif -+#ifndef INT_MAX -+# define INT_MAX (int)(((unsigned int) ~0) >> 1) /* 0x7FFFFFFF */ -+#endif -+ - #include "ansidecl.h" - #include "libiberty.h" - #include "demangle.h" -@@ -337,7 +344,7 @@ - /* Set to 1 if we saw a demangling error. */ - int demangle_failure; - /* The current index into any template argument packs we are using -- for printing. */ -+ for printing, or -1 to print the whole pack. */ - int pack_index; - /* Number of d_print_flush calls so far. */ - unsigned long int flush_count; -@@ -398,7 +405,7 @@ - struct demangle_component *); - - static struct demangle_component * --d_make_template_param (struct d_info *, long); -+d_make_template_param (struct d_info *, int); - - static struct demangle_component * - d_make_sub (struct d_info *, const char *, int); -@@ -421,9 +428,9 @@ - - static struct demangle_component *d_source_name (struct d_info *); - --static long d_number (struct d_info *); -+static int d_number (struct d_info *); - --static struct demangle_component *d_identifier (struct d_info *, long); -+static struct demangle_component *d_identifier (struct d_info *, int); - - static struct demangle_component *d_operator_name (struct d_info *); - -@@ -459,6 +466,7 @@ - d_template_param (struct d_info *); - - static struct demangle_component *d_template_args (struct d_info *); -+static struct demangle_component *d_template_args_1 (struct d_info *); - - static struct demangle_component * - d_template_arg (struct d_info *); -@@ -1119,7 +1127,7 @@ - /* Add a new template parameter. */ - - static struct demangle_component * --d_make_template_param (struct d_info *di, long i) -+d_make_template_param (struct d_info *di, int i) - { - struct demangle_component *p; - -@@ -1135,7 +1143,7 @@ - /* Add a new function parameter. */ - - static struct demangle_component * --d_make_function_param (struct d_info *di, long i) -+d_make_function_param (struct d_info *di, int i) - { - struct demangle_component *p; - -@@ -1620,7 +1628,7 @@ - static struct demangle_component * - d_source_name (struct d_info *di) - { -- long len; -+ int len; - struct demangle_component *ret; - - len = d_number (di); -@@ -1633,12 +1641,12 @@ - - /* number ::= [n] <(non-negative decimal integer)> */ - --static long -+static int - d_number (struct d_info *di) - { - int negative; - char peek; -- long ret; -+ int ret; - - negative = 0; - peek = d_peek_char (di); -@@ -1681,7 +1689,7 @@ - /* identifier ::= <(unqualified source code identifier)> */ - - static struct demangle_component * --d_identifier (struct d_info *di, long len) -+d_identifier (struct d_info *di, int len) - { - const char *name; - -@@ -1702,7 +1710,7 @@ - /* Look for something which looks like a gcc encoding of an - anonymous namespace, and replace it with a more user friendly - name. */ -- if (len >= (long) ANONYMOUS_NAMESPACE_PREFIX_LEN + 2 -+ if (len >= (int) ANONYMOUS_NAMESPACE_PREFIX_LEN + 2 - && memcmp (name, ANONYMOUS_NAMESPACE_PREFIX, - ANONYMOUS_NAMESPACE_PREFIX_LEN) == 0) - { -@@ -1754,6 +1762,10 @@ - { "eO", NL ("^="), 2 }, - { "eo", NL ("^"), 2 }, - { "eq", NL ("=="), 2 }, -+ { "fL", NL ("..."), 3 }, -+ { "fR", NL ("..."), 3 }, -+ { "fl", NL ("..."), 2 }, -+ { "fr", NL ("..."), 2 }, - { "ge", NL (">="), 2 }, - { "gs", NL ("::"), 1 }, - { "gt", NL (">"), 2 }, -@@ -1788,6 +1800,8 @@ - { "rc", NL ("reinterpret_cast"), 2 }, - { "rm", NL ("%"), 2 }, - { "rs", NL (">>"), 2 }, -+ { "sP", NL ("sizeof..."), 1 }, -+ { "sZ", NL ("sizeof..."), 1 }, - { "sc", NL ("static_cast"), 2 }, - { "st", NL ("sizeof "), 1 }, - { "sz", NL ("sizeof "), 1 }, -@@ -1870,7 +1884,7 @@ - { - struct demangle_component *p = NULL; - struct demangle_component *next = NULL; -- long len, i; -+ int len, i; - char c; - const char *str; - -@@ -2012,7 +2026,7 @@ - case 'C': - { - struct demangle_component *derived_type; -- long offset; -+ int offset; - struct demangle_component *base_type; - - derived_type = cplus_demangle_type (di); -@@ -2946,10 +2960,10 @@ - - /* <non-negative number> _ */ - --static long -+static int - d_compact_number (struct d_info *di) - { -- long num; -+ int num; - if (d_peek_char (di) == '_') - num = 0; - else if (d_peek_char (di) == 'n') -@@ -2957,7 +2971,7 @@ - else - num = d_number (di) + 1; - -- if (! d_check_char (di, '_')) -+ if (num < 0 || ! d_check_char (di, '_')) - return -1; - return num; - } -@@ -2969,7 +2983,7 @@ - static struct demangle_component * - d_template_param (struct d_info *di) - { -- long param; -+ int param; - - if (! d_check_char (di, 'T')) - return NULL; -@@ -2988,6 +3002,19 @@ - static struct demangle_component * - d_template_args (struct d_info *di) - { -+ if (d_peek_char (di) != 'I' -+ && d_peek_char (di) != 'J') -+ return NULL; -+ d_advance (di, 1); -+ -+ return d_template_args_1 (di); -+} -+ -+/* <template-arg>* E */ -+ -+static struct demangle_component * -+d_template_args_1 (struct d_info *di) -+{ - struct demangle_component *hold_last_name; - struct demangle_component *al; - struct demangle_component **pal; -@@ -2997,11 +3024,6 @@ - constructor or destructor. */ - hold_last_name = di->last_name; - -- if (d_peek_char (di) != 'I' -- && d_peek_char (di) != 'J') -- return NULL; -- d_advance (di, 1); -- - if (d_peek_char (di) == 'E') - { - /* An argument pack can be empty. */ -@@ -3171,9 +3193,10 @@ - } - else - { -- index = d_compact_number (di) + 1; -- if (index == 0) -+ index = d_compact_number (di); -+ if (index == INT_MAX || index == -1) - return NULL; -+ index++; - } - return d_make_function_param (di, index); - } -@@ -3262,6 +3285,8 @@ - if (op->type == DEMANGLE_COMPONENT_CAST - && d_check_char (di, '_')) - operand = d_exprlist (di, 'E'); -+ else if (code && !strcmp (code, "sP")) -+ operand = d_template_args_1 (di); - else - operand = d_expression_1 (di); - -@@ -3284,6 +3309,9 @@ - return NULL; - if (op_is_new_cast (op)) - left = cplus_demangle_type (di); -+ else if (code[0] == 'f') -+ /* fold-expression. */ -+ left = d_operator_name (di); - else - left = d_expression_1 (di); - if (!strcmp (code, "cl")) -@@ -3318,6 +3346,13 @@ - second = d_expression_1 (di); - third = d_expression_1 (di); - } -+ else if (code[0] == 'f') -+ { -+ /* fold-expression. */ -+ first = d_operator_name (di); -+ second = d_expression_1 (di); -+ third = d_expression_1 (di); -+ } - else if (code[0] == 'n') - { - /* new-expression. */ -@@ -3502,7 +3537,7 @@ - static int - d_discriminator (struct d_info *di) - { -- long discrim; -+ int discrim; - - if (d_peek_char (di) != '_') - return 1; -@@ -3558,7 +3593,7 @@ - d_unnamed_type (struct d_info *di) - { - struct demangle_component *ret; -- long num; -+ int num; - - if (! d_check_char (di, 'U')) - return NULL; -@@ -4086,10 +4121,10 @@ - } - - static inline void --d_append_num (struct d_print_info *dpi, long l) -+d_append_num (struct d_print_info *dpi, int l) - { - char buf[25]; -- sprintf (buf,"%ld", l); -+ sprintf (buf,"%d", l); - d_append_string (dpi, buf); - } - -@@ -4171,13 +4206,17 @@ - } - - /* Returns the I'th element of the template arglist ARGS, or NULL on -- failure. */ -+ failure. If I is negative, return the entire arglist. */ - - static struct demangle_component * - d_index_template_argument (struct demangle_component *args, int i) - { - struct demangle_component *a; - -+ if (i < 0) -+ /* Print the whole argument pack. */ -+ return args; -+ - for (a = args; - a != NULL; - a = d_right (a)) -@@ -4277,6 +4316,30 @@ - return count; - } - -+/* Returns the number of template args in DC, expanding any pack expansions -+ found there. */ -+ -+static int -+d_args_length (struct d_print_info *dpi, const struct demangle_component *dc) -+{ -+ int count = 0; -+ for (; dc && dc->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST; -+ dc = d_right (dc)) -+ { -+ struct demangle_component *elt = d_left (dc); -+ if (elt == NULL) -+ break; -+ if (elt->type == DEMANGLE_COMPONENT_PACK_EXPANSION) -+ { -+ struct demangle_component *a = d_find_pack (dpi, d_left (elt)); -+ count += d_pack_length (a); -+ } -+ else -+ ++count; -+ } -+ return count; -+} -+ - /* DC is a component of a mangled expression. Print it, wrapped in parens - if needed. */ - -@@ -4353,6 +4416,70 @@ - return NULL; - } - -+/* If DC is a C++17 fold-expression, print it and return true; otherwise -+ return false. */ -+ -+static int -+d_maybe_print_fold_expression (struct d_print_info *dpi, int options, -+ const struct demangle_component *dc) -+{ -+ const struct demangle_component *ops, *operator_, *op1, *op2; -+ int save_idx; -+ -+ const char *fold_code = d_left (dc)->u.s_operator.op->code; -+ if (fold_code[0] != 'f') -+ return 0; -+ -+ ops = d_right (dc); -+ operator_ = d_left (ops); -+ op1 = d_right (ops); -+ op2 = 0; -+ if (op1->type == DEMANGLE_COMPONENT_TRINARY_ARG2) -+ { -+ op2 = d_right (op1); -+ op1 = d_left (op1); -+ } -+ -+ /* Print the whole pack. */ -+ save_idx = dpi->pack_index; -+ dpi->pack_index = -1; -+ -+ switch (fold_code[1]) -+ { -+ /* Unary left fold, (... + X). */ -+ case 'l': -+ d_append_string (dpi, "(..."); -+ d_print_expr_op (dpi, options, operator_); -+ d_print_subexpr (dpi, options, op1); -+ d_append_char (dpi, ')'); -+ break; -+ -+ /* Unary right fold, (X + ...). */ -+ case 'r': -+ d_append_char (dpi, '('); -+ d_print_subexpr (dpi, options, op1); -+ d_print_expr_op (dpi, options, operator_); -+ d_append_string (dpi, "...)"); -+ break; -+ -+ /* Binary left fold, (42 + ... + X). */ -+ case 'L': -+ /* Binary right fold, (X + ... + 42). */ -+ case 'R': -+ d_append_char (dpi, '('); -+ d_print_subexpr (dpi, options, op1); -+ d_print_expr_op (dpi, options, operator_); -+ d_append_string (dpi, "..."); -+ d_print_expr_op (dpi, options, operator_); -+ d_print_subexpr (dpi, options, op2); -+ d_append_char (dpi, ')'); -+ break; -+ } -+ -+ dpi->pack_index = save_idx; -+ return 1; -+} -+ - /* Subroutine to handle components. */ - - static void -@@ -5113,6 +5240,21 @@ - } - } - -+ /* For sizeof..., just print the pack length. */ -+ if (code && !strcmp (code, "sZ")) -+ { -+ struct demangle_component *a = d_find_pack (dpi, operand); -+ int len = d_pack_length (a); -+ d_append_num (dpi, len); -+ return; -+ } -+ else if (code && !strcmp (code, "sP")) -+ { -+ int len = d_args_length (dpi, operand); -+ d_append_num (dpi, len); -+ return; -+ } -+ - if (op->type != DEMANGLE_COMPONENT_CAST) - d_print_expr_op (dpi, options, op); - else -@@ -5154,6 +5296,9 @@ - return; - } - -+ if (d_maybe_print_fold_expression (dpi, options, dc)) -+ return; -+ - /* We wrap an expression which uses the greater-than operator in - an extra layer of parens so that it does not get confused - with the '>' which ends the template parameters. */ -@@ -5209,6 +5354,8 @@ - d_print_error (dpi); - return; - } -+ if (d_maybe_print_fold_expression (dpi, options, dc)) -+ return; - { - struct demangle_component *op = d_left (dc); - struct demangle_component *first = d_left (d_right (dc)); -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libiberty/testsuite/demangle-expected gcc-6-20160721/libiberty/testsuite/demangle-expected ---- gcc-6.1.0/libiberty/testsuite/demangle-expected 2016-03-31 17:20:53.000000000 +0000 -+++ gcc-6-20160721/libiberty/testsuite/demangle-expected 2016-07-21 06:15:23.000000000 +0000 -@@ -4421,13 +4421,41 @@ - --format=gnu-v3 - _Z3fooI1FEN1XIXszdtcl1PclcvT__EEE5arrayEE4TypeEv - X<sizeof ((P(((F)())())).array)>::Type foo<F>() -+ -+_Z1fIJidEEv1AIXsZT_EE -+void f<int, double>(A<2>) -+ -+_ZN1A1fIJiiEiJiiiEEEvRAsPDpT_T0_DpT1_E_iS3_S5_ -+void A::f<int, int, int, int, int, int>(int (&) [6], int, int, int, int) -+ -+_Z10unary_leftIJLi1ELi2ELi3EEEv1AIXflplT_EE -+void unary_left<1, 2, 3>(A<(...+(1, 2, 3))>) -+ -+_Z11unary_rightIJLi1ELi2ELi3EEEv1AIXfrplT_EE -+void unary_right<1, 2, 3>(A<((1, 2, 3)+...)>) -+ -+_Z11binary_leftIJLi1ELi2ELi3EEEv1AIXfLplLi42ET_EE -+void binary_left<1, 2, 3>(A<((42)+...+(1, 2, 3))>) -+ -+_Z12binary_rightIJLi1ELi2ELi3EEEv1AIXfRplT_Li42EEE -+void binary_right<1, 2, 3>(A<((1, 2, 3)+...+(42))>) - # --# Tests a use-after-free problem -+# Tests a use-after-free problem PR70481 - - _Q.__0 - ::Q.(void) - # --# Tests a use-after-free problem -+# Tests a use-after-free problem PR70481 - - _Q10-__9cafebabe. - cafebabe.::-(void) -+# -+# Tests integer overflow problem PR70492 -+ -+__vt_90000000000cafebabe -+__vt_90000000000cafebabe -+# -+# Tests write access violation PR70498 -+ -+_Z80800000000000000000000 -+_Z80800000000000000000000 -Only in gcc-6.1.0/libitm: libitm.info -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libjava/ChangeLog gcc-6-20160721/libjava/ChangeLog ---- gcc-6.1.0/libjava/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/libjava/ChangeLog 2016-04-29 11:50:42.000000000 +0000 -@@ -1,3 +1,11 @@ -+2016-04-29 Dominique d'Humieres <dominiq@lps.ens.fr> -+ -+ backport from trunk: -+ 2016-04-20 Ben Elliston <bje@gnu.org> -+ -+ * testsuite/lib/libjava.exp (libjava_arguments): Use 'file -+ normalize' rather than the defunct DejaGnu 'absolute' proc. -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -Only in gcc-6.1.0/libjava/classpath/doc: cp-tools.info -Only in gcc-6.1.0/libjava/classpath/doc: gappletviewer.1 -Only in gcc-6.1.0/libjava/classpath/doc: gjar.1 -Only in gcc-6.1.0/libjava/classpath/doc: gjarsigner.1 -Only in gcc-6.1.0/libjava/classpath/doc: gjavah.1 -Only in gcc-6.1.0/libjava/classpath/doc: gjdoc.1 -Only in gcc-6.1.0/libjava/classpath/doc: gkeytool.1 -Only in gcc-6.1.0/libjava/classpath/doc: gnative2ascii.1 -Only in gcc-6.1.0/libjava/classpath/doc: gorbd.1 -Only in gcc-6.1.0/libjava/classpath/doc: grmid.1 -Only in gcc-6.1.0/libjava/classpath/doc: grmiregistry.1 -Only in gcc-6.1.0/libjava/classpath/doc: gserialver.1 -Only in gcc-6.1.0/libjava/classpath/doc: gtnameserv.1 -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libjava/testsuite/lib/libjava.exp gcc-6-20160721/libjava/testsuite/lib/libjava.exp ---- gcc-6.1.0/libjava/testsuite/lib/libjava.exp 2014-05-20 08:20:06.000000000 +0000 -+++ gcc-6-20160721/libjava/testsuite/lib/libjava.exp 2016-04-29 11:50:42.000000000 +0000 -@@ -416,7 +416,7 @@ - - # Search for libtool. We need it to link. - set found_compiler 0 -- set d [absolute $objdir] -+ set d [file normalize $objdir] - foreach x {. .. ../.. ../../..} { - if {[file exists $d/$x/libtool]} then { - # We have to run silently to avoid DejaGNU lossage. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libmpx/ChangeLog gcc-6-20160721/libmpx/ChangeLog ---- gcc-6.1.0/libmpx/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/libmpx/ChangeLog 2016-06-10 09:31:37.000000000 +0000 -@@ -1,3 +1,10 @@ -+2016-06-10 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ Backport from mainline r237292. -+ 2016-06-10 Ilya Enkovich <ilya.enkovich@intel.com> -+ -+ * mpxwrap/mpx_wrappers.c (move_bounds): Fix overflow bug. -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libmpx/mpxwrap/mpx_wrappers.c gcc-6-20160721/libmpx/mpxwrap/mpx_wrappers.c ---- gcc-6.1.0/libmpx/mpxwrap/mpx_wrappers.c 2016-01-18 19:36:02.000000000 +0000 -+++ gcc-6-20160721/libmpx/mpxwrap/mpx_wrappers.c 2016-06-10 09:31:37.000000000 +0000 -@@ -27,6 +27,7 @@ - #include "string.h" - #include <sys/mman.h> - #include <stdint.h> -+#include <assert.h> - #include "mpxrt/mpxrt.h" - - void * -@@ -418,7 +419,16 @@ - else - elems_to_copy -= src_bt_index_end + 1; - } -- src_bd_index_end--; -+ /* Go to previous table but beware of overflow. -+ We should have copied all required element -+ in case src_bd_index_end is 0. */ -+ if (src_bd_index_end) -+ src_bd_index_end--; -+ else -+ { -+ assert (!elems_to_copy); -+ return; -+ } - /* For each bounds table we check if there are valid pointers inside. - If there are some, we copy table in pre-counted portions. */ - for (; src_bd_index_end > src_bd_index; src_bd_index_end--) -Only in gcc-6.1.0/libquadmath: libquadmath.info -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libsanitizer/ChangeLog gcc-6-20160721/libsanitizer/ChangeLog ---- gcc-6.1.0/libsanitizer/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/libsanitizer/ChangeLog 2016-05-18 21:26:54.000000000 +0000 -@@ -1,3 +1,12 @@ -+2016-05-18 Jakub Jelinek <jakub@redhat.com> -+ -+ Backported from mainline -+ 2016-05-17 Jakub Jelinek <jakub@redhat.com> -+ -+ PR sanitizer/71160 -+ * asan/asan_malloc_linux.cc: Cherry pick upstream r254395 -+ and r269633. -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libsanitizer/asan/asan_malloc_linux.cc gcc-6-20160721/libsanitizer/asan/asan_malloc_linux.cc ---- gcc-6.1.0/libsanitizer/asan/asan_malloc_linux.cc 2014-09-23 17:59:53.000000000 +0000 -+++ gcc-6-20160721/libsanitizer/asan/asan_malloc_linux.cc 2016-05-18 21:26:54.000000000 +0000 -@@ -24,39 +24,62 @@ - // ---------------------- Replacement functions ---------------- {{{1 - using namespace __asan; // NOLINT - -+static uptr allocated_for_dlsym; -+static const uptr kDlsymAllocPoolSize = 1024; -+static uptr alloc_memory_for_dlsym[kDlsymAllocPoolSize]; -+ -+static bool IsInDlsymAllocPool(const void *ptr) { -+ uptr off = (uptr)ptr - (uptr)alloc_memory_for_dlsym; -+ return off < sizeof(alloc_memory_for_dlsym); -+} -+ -+static void *AllocateFromLocalPool(uptr size_in_bytes) { -+ uptr size_in_words = RoundUpTo(size_in_bytes, kWordSize) / kWordSize; -+ void *mem = (void*)&alloc_memory_for_dlsym[allocated_for_dlsym]; -+ allocated_for_dlsym += size_in_words; -+ CHECK_LT(allocated_for_dlsym, kDlsymAllocPoolSize); -+ return mem; -+} -+ - INTERCEPTOR(void, free, void *ptr) { - GET_STACK_TRACE_FREE; -+ if (UNLIKELY(IsInDlsymAllocPool(ptr))) -+ return; - asan_free(ptr, &stack, FROM_MALLOC); - } - - INTERCEPTOR(void, cfree, void *ptr) { - GET_STACK_TRACE_FREE; -+ if (UNLIKELY(IsInDlsymAllocPool(ptr))) -+ return; - asan_free(ptr, &stack, FROM_MALLOC); - } - - INTERCEPTOR(void*, malloc, uptr size) { -+ if (UNLIKELY(!asan_inited)) -+ // Hack: dlsym calls malloc before REAL(malloc) is retrieved from dlsym. -+ return AllocateFromLocalPool(size); - GET_STACK_TRACE_MALLOC; - return asan_malloc(size, &stack); - } - - INTERCEPTOR(void*, calloc, uptr nmemb, uptr size) { -- if (UNLIKELY(!asan_inited)) { -+ if (UNLIKELY(!asan_inited)) - // Hack: dlsym calls calloc before REAL(calloc) is retrieved from dlsym. -- const uptr kCallocPoolSize = 1024; -- static uptr calloc_memory_for_dlsym[kCallocPoolSize]; -- static uptr allocated; -- uptr size_in_words = ((nmemb * size) + kWordSize - 1) / kWordSize; -- void *mem = (void*)&calloc_memory_for_dlsym[allocated]; -- allocated += size_in_words; -- CHECK(allocated < kCallocPoolSize); -- return mem; -- } -+ return AllocateFromLocalPool(nmemb * size); - GET_STACK_TRACE_MALLOC; - return asan_calloc(nmemb, size, &stack); - } - - INTERCEPTOR(void*, realloc, void *ptr, uptr size) { - GET_STACK_TRACE_MALLOC; -+ if (UNLIKELY(IsInDlsymAllocPool(ptr))) { -+ uptr offset = (uptr)ptr - (uptr)alloc_memory_for_dlsym; -+ uptr copy_size = Min(size, kDlsymAllocPoolSize - offset); -+ void *new_ptr = asan_malloc(size, &stack); -+ internal_memcpy(new_ptr, ptr, copy_size); -+ return new_ptr; -+ } - return asan_realloc(ptr, size, &stack); - } - -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/ChangeLog gcc-6-20160721/libstdc++-v3/ChangeLog ---- gcc-6.1.0/libstdc++-v3/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/ChangeLog 2016-07-19 22:16:35.000000000 +0000 -@@ -1,3 +1,209 @@ -+2016-07-19 Jonathan Wakely <jwakely@redhat.com> -+ -+ Backport from mainline -+ 2016-07-14 Jonathan Wakely <jwakely@redhat.com> -+ -+ * include/experimental/functional: Include <parallel/algorithm> in -+ Parallel Mode. -+ -+ Backport from mainline -+ 2016-07-14 Jonathan Wakely <jwakely@redhat.com> -+ -+ * testsuite/experimental/functional/searchers.cc: Include <algorithm> -+ for std::search. -+ -+ PR libstdc++/71856 -+ * include/bits/c++config (_GLIBCXX_ASSERTIONS): Define to 1 not empty. -+ * include/parallel/balanced_quicksort.h: Include <unistd.h> for sleep. -+ * include/parallel/compiletime_settings.h (_GLIBCXX_ASSERTIONS): -+ Do not define here. -+ -+ Backport from mainline -+ 2016-06-06 Jonathan Wakely <jwakely@redhat.com> -+ -+ PR libstdc++/71320 -+ * src/filesystem/ops.cc (permissions(const path&, perms, error_code&)): -+ Add or remove permissions according to perms argument. -+ * testsuite/experimental/filesystem/operations/permissions.cc: New -+ test. -+ -+2016-07-06 Ville Voutilainen <ville.voutilainen@gmail.com> -+ -+ Implement LWG 2451, optional<T> should 'forward' T's -+ implicit conversions. -+ * include/experimental/optional (__is_optional_impl, __is_optional): -+ New. -+ (optional()): Make constexpr and default. -+ (optional(_Up&&), optional(const optional<_Up>&), -+ optional(optional<_Up>&& __t): New. -+ (operator=(_Up&&)): Constrain. -+ (operator=(const optional<_Up>&), operator=(optional<_Up>&&)): New. -+ * testsuite/experimental/optional/cons/value.cc: -+ Add tests for the functionality added by LWG 2451. -+ * testsuite/experimental/optional/cons/value_neg.cc: New. -+ -+2016-07-05 Ville Voutilainen <ville.voutilainen@gmail.com> -+ -+ Implement LWG 2509, -+ any_cast doesn't work with rvalue reference targets and cannot -+ move with a value target. -+ * include/experimental/any (any(_ValueType&&)): Constrain and -+ add an overload that doesn't forward. -+ (any_cast(any&&)): Constrain and add an overload that moves. -+ * testsuite/experimental/any/misc/any_cast.cc: Add tests for -+ the functionality added by LWG 2509. -+ -+2016-07-04 Ville Voutilainen <ville.voutilainen@gmail.com> -+ -+ PR libstdc++/71313 -+ * src/filesystem/ops.cc (remove_all(const path&, error_code&)): -+ Call remove_all for children of a directory. -+ * testsuite/experimental/filesystem/operations/create_directories.cc: -+ Adjust. -+ -+2016-06-17 Jonathan Wakely <jwakely@redhat.com> -+ -+ PR libstdc++/71545 -+ * include/bits/stl_algobase.h (lower_bound, lexicographical_compare): -+ Remove irreflexive checks. -+ * include/bits/stl_algo.h (lower_bound, upper_bound, equal_range, -+ binary_search): Likewise. -+ * testsuite/25_algorithms/equal_range/partitioned.cc: New test. -+ * testsuite/25_algorithms/lexicographical_compare/71545.cc: New test. -+ * testsuite/25_algorithms/lower_bound/partitioned.cc: New test. -+ * testsuite/25_algorithms/upper_bound/partitioned.cc: New test. -+ * testsuite/util/testsuite_iterators.h (__gnu_test::test_container): -+ Add constructor from array. -+ -+2016-05-26 Jonathan Wakely <jwakely@redhat.com> -+ -+ Backport from mainline -+ 2016-04-24 Jonathan Wakely <jwakely@redhat.com> -+ -+ PR libstdc++/70762 -+ * testsuite/util/testsuite_fs.h (__gnu_test::nonexistent_path): Use -+ static counter to return a different path on every call. -+ -+ * testsuite/experimental/filesystem/path/native/string.cc: Add -+ dg-require-filesystem-ts directive. -+ -+2016-05-25 Jonathan Wakely <jwakely@redhat.com> -+ -+ Backport from mainline -+ 2016-04-20 Jonathan Wakely <jwakely@redhat.com> -+ -+ PR libstdc++/69703 -+ * src/c++11/codecvt.cc (__codecvt_utf8_base<char16_t>::do_in, -+ __codecvt_utf8_utf16_base<char16_t>::do_in): Fix mask operations. -+ -+ Backport from mainline -+ 2016-04-19 Jonathan Wakely <jwakely@redhat.com> -+ -+ PR libstdc++/69703 -+ * src/c++11/codecvt.cc (__codecvt_utf8_base<char16_t>::do_in)): -+ Override endianness bit in mode. -+ * testsuite/22_locale/codecvt/codecvt_utf8/69703.cc: New test. -+ * testsuite/22_locale/codecvt/codecvt_utf8_utf16/66855.cc: Test -+ that little_endian mode is ignored. -+ * testsuite/experimental/filesystem/path/native/string.cc: New test. -+ -+ Backport from mainline -+ 2016-05-10 Jonathan Wakely <jwakely@redhat.com> -+ -+ * include/experimental/bits/fs_dir.h (begin, end): Add noexcept. -+ * testsuite/experimental/filesystem/iterators/directory_iterator.cc: -+ Test begin and end functions. -+ * testsuite/experimental/filesystem/iterators/ -+ recursive_directory_iterator.cc: Likewise. -+ -+ Backport from mainline -+ 2016-05-10 Jonathan Wakely <jwakely@redhat.com> -+ -+ PR libstdc++/71038 -+ * src/filesystem/ops.cc (do_copy_file): Fix backwards conditions. -+ * testsuite/experimental/filesystem/operations/copy_file.cc: New test. -+ -+ Backport from mainline -+ 2016-05-10 Jonathan Wakely <jwakely@redhat.com> -+ -+ * include/experimental/bits/fs_dir.h (__directory_iterator_proxy): -+ Overload operator* to move from rvalues. -+ -+ Backport from mainline -+ 2016-05-10 Jonathan Wakely <jwakely@redhat.com> -+ -+ PR libstdc++/71036 -+ * src/filesystem/ops.cc (create_dir): Handle EEXIST from mkdir. -+ * testsuite/experimental/filesystem/operations/create_directory.cc: -+ New test. -+ -+ Backport from mainline -+ 2016-05-10 Jonathan Wakely <jwakely@redhat.com> -+ -+ PR libstdc++/71037 -+ * src/filesystem/ops.cc (canonical(const path&, const path&)): Add -+ base path to exception. -+ * testsuite/experimental/filesystem/operations/canonical.cc: Test -+ paths contained in exception. -+ -+ Backport from mainline -+ 2016-05-10 Jonathan Wakely <jwakely@redhat.com> -+ -+ PR libstdc++/71005 -+ * include/experimental/bits/fs_dir.h (__directory_iterator_proxy): -+ New type. -+ (directory_iterator::operator++(int)): Return proxy. -+ (recursive_directory_iterator::operator++(int)): Likewise. -+ * testsuite/experimental/filesystem/iterators/directory_iterator.cc: -+ Test post-increment. -+ * testsuite/experimental/filesystem/iterators/ -+ recursive_directory_iterator.cc: Likewise. -+ -+ Backport from mainline -+ 2016-05-09 Jonathan Wakely <jwakely@redhat.com> -+ -+ PR libstdc++/71004 -+ * include/experimental/bits/fs_dir.h (recursive_directory_iterator): -+ Initialize scalar member variables in default constructor. -+ * testsuite/experimental/filesystem/iterators/ -+ recursive_directory_iterator.cc: Test default construction. -+ -+ Backport from mainline -+ 2016-04-19 Jonathan Wakely <jwakely@redhat.com> -+ -+ PR libstdc++/70609 -+ * src/filesystem/ops.cc (close_fd): New function. -+ (do_copy_file): Set permissions before copying file contents. Check -+ result of closing file descriptors. Don't copy streambuf when file -+ is empty. -+ (copy(const path&, const path&, copy_options, error_code&)): Use -+ lstat for source file when copy_symlinks is set. -+ * testsuite/experimental/filesystem/operations/copy.cc: Test copy(). -+ -+ Backport from mainline -+ 2016-04-19 Jonathan Wakely <jwakely@redhat.com> -+ -+ * include/experimental/bits/fs_fwd.h (operator&, operator|, operator^, -+ operator~ operator&=, operator|=, operator^=): Add noexcept to -+ overloaded operators for copy_options, perms and directory_options. -+ * src/filesystem/ops.cc (make_file_type, make_file_status, -+ is_not_found_errno, file_time): Add noexcept. -+ -+2016-05-11 Jonathan Wakely <jwakely@redhat.com> -+ -+ PR libstdc++/71049 -+ * src/c++11/cow-stdexcept.cc [!_GLIBCXX_USE_DUAL_ABI]: Don't define -+ exception constructors with __sso_string parameters. -+ -+2016-05-09 Ville Voutilainen <ville.voutilainen@gmail.com> -+ -+ Avoid endless run-time recursion for copying single-element -+ tuples where the element type is by-value constructible -+ from any type. -+ * include/std/tuple (_NotSameTuple): New. -+ * include/std/tuple (tuple(_UElements&&...): Use it. -+ * testsuite/20_util/tuple/cons/element_accepts_anything_byval.cc: New. -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/include/bits/c++config gcc-6-20160721/libstdc++-v3/include/bits/c++config ---- gcc-6.1.0/libstdc++-v3/include/bits/c++config 2016-04-14 16:23:06.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/include/bits/c++config 2016-07-19 22:16:23.000000000 +0000 -@@ -414,7 +414,7 @@ - - // Debug Mode implies checking assertions. - #ifdef _GLIBCXX_DEBUG --# define _GLIBCXX_ASSERTIONS -+# define _GLIBCXX_ASSERTIONS 1 - #endif - - // Disable std::string explicit instantiation declarations in order to assert. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/include/bits/stl_algo.h gcc-6-20160721/libstdc++-v3/include/bits/stl_algo.h ---- gcc-6.1.0/libstdc++-v3/include/bits/stl_algo.h 2016-04-14 16:23:06.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/include/bits/stl_algo.h 2016-06-17 18:53:46.000000000 +0000 -@@ -2026,7 +2026,6 @@ - typename iterator_traits<_ForwardIterator>::value_type, _Tp>) - __glibcxx_requires_partitioned_lower_pred(__first, __last, - __val, __comp); -- __glibcxx_requires_irreflexive_pred2(__first, __last, __comp); - - return std::__lower_bound(__first, __last, __val, - __gnu_cxx::__ops::__iter_comp_val(__comp)); -@@ -2080,7 +2079,6 @@ - __glibcxx_function_requires(_LessThanOpConcept< - _Tp, typename iterator_traits<_ForwardIterator>::value_type>) - __glibcxx_requires_partitioned_upper(__first, __last, __val); -- __glibcxx_requires_irreflexive2(__first, __last); - - return std::__upper_bound(__first, __last, __val, - __gnu_cxx::__ops::__val_less_iter()); -@@ -2112,7 +2110,6 @@ - _Tp, typename iterator_traits<_ForwardIterator>::value_type>) - __glibcxx_requires_partitioned_upper_pred(__first, __last, - __val, __comp); -- __glibcxx_requires_irreflexive_pred2(__first, __last, __comp); - - return std::__upper_bound(__first, __last, __val, - __gnu_cxx::__ops::__val_comp_iter(__comp)); -@@ -2186,7 +2183,6 @@ - _Tp, typename iterator_traits<_ForwardIterator>::value_type>) - __glibcxx_requires_partitioned_lower(__first, __last, __val); - __glibcxx_requires_partitioned_upper(__first, __last, __val); -- __glibcxx_requires_irreflexive2(__first, __last); - - return std::__equal_range(__first, __last, __val, - __gnu_cxx::__ops::__iter_less_val(), -@@ -2225,7 +2221,6 @@ - __val, __comp); - __glibcxx_requires_partitioned_upper_pred(__first, __last, - __val, __comp); -- __glibcxx_requires_irreflexive_pred2(__first, __last, __comp); - - return std::__equal_range(__first, __last, __val, - __gnu_cxx::__ops::__iter_comp_val(__comp), -@@ -2255,7 +2250,6 @@ - _Tp, typename iterator_traits<_ForwardIterator>::value_type>) - __glibcxx_requires_partitioned_lower(__first, __last, __val); - __glibcxx_requires_partitioned_upper(__first, __last, __val); -- __glibcxx_requires_irreflexive2(__first, __last); - - _ForwardIterator __i - = std::__lower_bound(__first, __last, __val, -@@ -2291,7 +2285,6 @@ - __val, __comp); - __glibcxx_requires_partitioned_upper_pred(__first, __last, - __val, __comp); -- __glibcxx_requires_irreflexive_pred2(__first, __last, __comp); - - _ForwardIterator __i - = std::__lower_bound(__first, __last, __val, -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/include/bits/stl_algobase.h gcc-6-20160721/libstdc++-v3/include/bits/stl_algobase.h ---- gcc-6.1.0/libstdc++-v3/include/bits/stl_algobase.h 2016-01-26 19:38:20.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/include/bits/stl_algobase.h 2016-06-17 18:53:46.000000000 +0000 -@@ -989,7 +989,6 @@ - __glibcxx_function_requires(_LessThanOpConcept< - typename iterator_traits<_ForwardIterator>::value_type, _Tp>) - __glibcxx_requires_partitioned_lower(__first, __last, __val); -- __glibcxx_requires_irreflexive2(__first, __last); - - return std::__lower_bound(__first, __last, __val, - __gnu_cxx::__ops::__iter_less_val()); -@@ -1214,9 +1213,7 @@ - __glibcxx_function_requires(_LessThanOpConcept<_ValueType1, _ValueType2>) - __glibcxx_function_requires(_LessThanOpConcept<_ValueType2, _ValueType1>) - __glibcxx_requires_valid_range(__first1, __last1); -- __glibcxx_requires_irreflexive2(__first1, __last1); - __glibcxx_requires_valid_range(__first2, __last2); -- __glibcxx_requires_irreflexive2(__first2, __last2); - - return std::__lexicographical_compare_aux(std::__niter_base(__first1), - std::__niter_base(__last1), -@@ -1246,9 +1243,7 @@ - __glibcxx_function_requires(_InputIteratorConcept<_II1>) - __glibcxx_function_requires(_InputIteratorConcept<_II2>) - __glibcxx_requires_valid_range(__first1, __last1); -- __glibcxx_requires_irreflexive_pred2(__first1, __last1, __comp); - __glibcxx_requires_valid_range(__first2, __last2); -- __glibcxx_requires_irreflexive_pred2(__first2, __last2, __comp); - - return std::__lexicographical_compare_impl - (__first1, __last1, __first2, __last2, -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/include/experimental/any gcc-6-20160721/libstdc++-v3/include/experimental/any ---- gcc-6.1.0/libstdc++-v3/include/experimental/any 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/include/experimental/any 2016-07-05 20:06:31.000000000 +0000 -@@ -158,7 +158,9 @@ - - /// Construct with a copy of @p __value as the contained object. - template <typename _ValueType, typename _Tp = _Decay<_ValueType>, -- typename _Mgr = _Manager<_Tp>> -+ typename _Mgr = _Manager<_Tp>, -+ typename enable_if<is_constructible<_Tp, _ValueType&&>::value, -+ bool>::type = true> - any(_ValueType&& __value) - : _M_manager(&_Mgr::_S_manage) - { -@@ -167,6 +169,19 @@ - "The contained object must be CopyConstructible"); - } - -+ /// Construct with a copy of @p __value as the contained object. -+ template <typename _ValueType, typename _Tp = _Decay<_ValueType>, -+ typename _Mgr = _Manager<_Tp>, -+ typename enable_if<!is_constructible<_Tp, _ValueType&&>::value, -+ bool>::type = false> -+ any(_ValueType&& __value) -+ : _M_manager(&_Mgr::_S_manage) -+ { -+ _Mgr::_S_create(_M_storage, __value); -+ static_assert(is_copy_constructible<_Tp>::value, -+ "The contained object must be CopyConstructible"); -+ } -+ - /// Destructor, calls @c clear() - ~any() { clear(); } - -@@ -377,7 +392,10 @@ - __throw_bad_any_cast(); - } - -- template<typename _ValueType> -+ template<typename _ValueType, -+ typename enable_if<!is_move_constructible<_ValueType>::value -+ || is_lvalue_reference<_ValueType>::value, -+ bool>::type = true> - inline _ValueType any_cast(any&& __any) - { - static_assert(any::__is_valid_cast<_ValueType>(), -@@ -387,6 +405,20 @@ - return *__p; - __throw_bad_any_cast(); - } -+ -+ template<typename _ValueType, -+ typename enable_if<is_move_constructible<_ValueType>::value -+ && !is_lvalue_reference<_ValueType>::value, -+ bool>::type = false> -+ inline _ValueType any_cast(any&& __any) -+ { -+ static_assert(any::__is_valid_cast<_ValueType>(), -+ "Template argument must be a reference or CopyConstructible type"); -+ auto __p = any_cast<remove_reference_t<_ValueType>>(&__any); -+ if (__p) -+ return std::move(*__p); -+ __throw_bad_any_cast(); -+ } - // @} - - template<typename _Tp> -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/include/experimental/bits/fs_dir.h gcc-6-20160721/libstdc++-v3/include/experimental/bits/fs_dir.h ---- gcc-6.1.0/libstdc++-v3/include/experimental/bits/fs_dir.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/include/experimental/bits/fs_dir.h 2016-05-25 15:45:30.000000000 +0000 -@@ -153,8 +153,25 @@ - }; - - struct _Dir; -+ class directory_iterator; - class recursive_directory_iterator; - -+ struct __directory_iterator_proxy -+ { -+ const directory_entry& operator*() const& noexcept { return _M_entry; } -+ -+ directory_entry operator*() && noexcept { return std::move(_M_entry); } -+ -+ private: -+ friend class directory_iterator; -+ friend class recursive_directory_iterator; -+ -+ explicit -+ __directory_iterator_proxy(const directory_entry& __e) : _M_entry(__e) { } -+ -+ directory_entry _M_entry; -+ }; -+ - class directory_iterator - { - public: -@@ -177,7 +194,8 @@ - : directory_iterator(__p, directory_options::none, __ec) { } - - directory_iterator(const path& __p, -- directory_options __options, error_code& __ec) noexcept -+ directory_options __options, -+ error_code& __ec) noexcept - : directory_iterator(__p, __options, &__ec) { } - - directory_iterator(const directory_iterator& __rhs) = default; -@@ -186,19 +204,22 @@ - - ~directory_iterator() = default; - -- directory_iterator& operator=(const directory_iterator& __rhs) = default; -- directory_iterator& operator=(directory_iterator&& __rhs) noexcept = default; -+ directory_iterator& -+ operator=(const directory_iterator& __rhs) = default; -+ -+ directory_iterator& -+ operator=(directory_iterator&& __rhs) noexcept = default; - - const directory_entry& operator*() const; - const directory_entry* operator->() const { return &**this; } - directory_iterator& operator++(); - directory_iterator& increment(error_code& __ec) noexcept; - -- directory_iterator operator++(int) -+ __directory_iterator_proxy operator++(int) - { -- auto __tmp = *this; -+ __directory_iterator_proxy __pr{**this}; - ++*this; -- return __tmp; -+ return __pr; - } - - private: -@@ -214,10 +235,12 @@ - }; - - inline directory_iterator -- begin(directory_iterator __iter) { return __iter; } -+ begin(directory_iterator __iter) noexcept -+ { return __iter; } - - inline directory_iterator -- end(directory_iterator) { return directory_iterator(); } -+ end(directory_iterator) noexcept -+ { return directory_iterator(); } - - inline bool - operator==(const directory_iterator& __lhs, const directory_iterator& __rhs) -@@ -274,18 +297,18 @@ - - // modifiers - recursive_directory_iterator& -- operator=(const recursive_directory_iterator& __rhs) noexcept; -+ operator=(const recursive_directory_iterator& __rhs) noexcept; - recursive_directory_iterator& -- operator=(recursive_directory_iterator&& __rhs) noexcept; -+ operator=(recursive_directory_iterator&& __rhs) noexcept; - - recursive_directory_iterator& operator++(); - recursive_directory_iterator& increment(error_code& __ec) noexcept; - -- recursive_directory_iterator operator++(int) -+ __directory_iterator_proxy operator++(int) - { -- auto __tmp = *this; -+ __directory_iterator_proxy __pr{**this}; - ++*this; -- return __tmp; -+ return __pr; - } - - void pop(); -@@ -301,15 +324,17 @@ - - struct _Dir_stack; - std::shared_ptr<_Dir_stack> _M_dirs; -- directory_options _M_options; -- bool _M_pending; -+ directory_options _M_options = {}; -+ bool _M_pending = false; - }; - - inline recursive_directory_iterator -- begin(recursive_directory_iterator __iter) { return __iter; } -+ begin(recursive_directory_iterator __iter) noexcept -+ { return __iter; } - - inline recursive_directory_iterator -- end(recursive_directory_iterator) { return recursive_directory_iterator(); } -+ end(recursive_directory_iterator) noexcept -+ { return recursive_directory_iterator(); } - - inline bool - operator==(const recursive_directory_iterator& __lhs, -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/include/experimental/bits/fs_fwd.h gcc-6-20160721/libstdc++-v3/include/experimental/bits/fs_fwd.h ---- gcc-6.1.0/libstdc++-v3/include/experimental/bits/fs_fwd.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/include/experimental/bits/fs_fwd.h 2016-05-25 15:44:02.000000000 +0000 -@@ -93,7 +93,7 @@ - }; - - constexpr copy_options -- operator&(copy_options __x, copy_options __y) -+ operator&(copy_options __x, copy_options __y) noexcept - { - using __utype = typename std::underlying_type<copy_options>::type; - return static_cast<copy_options>( -@@ -101,7 +101,7 @@ - } - - constexpr copy_options -- operator|(copy_options __x, copy_options __y) -+ operator|(copy_options __x, copy_options __y) noexcept - { - using __utype = typename std::underlying_type<copy_options>::type; - return static_cast<copy_options>( -@@ -109,7 +109,7 @@ - } - - constexpr copy_options -- operator^(copy_options __x, copy_options __y) -+ operator^(copy_options __x, copy_options __y) noexcept - { - using __utype = typename std::underlying_type<copy_options>::type; - return static_cast<copy_options>( -@@ -117,22 +117,22 @@ - } - - constexpr copy_options -- operator~(copy_options __x) -+ operator~(copy_options __x) noexcept - { - using __utype = typename std::underlying_type<copy_options>::type; - return static_cast<copy_options>(~static_cast<__utype>(__x)); - } - - inline copy_options& -- operator&=(copy_options& __x, copy_options __y) -+ operator&=(copy_options& __x, copy_options __y) noexcept - { return __x = __x & __y; } - - inline copy_options& -- operator|=(copy_options& __x, copy_options __y) -+ operator|=(copy_options& __x, copy_options __y) noexcept - { return __x = __x | __y; } - - inline copy_options& -- operator^=(copy_options& __x, copy_options __y) -+ operator^=(copy_options& __x, copy_options __y) noexcept - { return __x = __x ^ __y; } - - -@@ -163,7 +163,7 @@ - }; - - constexpr perms -- operator&(perms __x, perms __y) -+ operator&(perms __x, perms __y) noexcept - { - using __utype = typename std::underlying_type<perms>::type; - return static_cast<perms>( -@@ -171,7 +171,7 @@ - } - - constexpr perms -- operator|(perms __x, perms __y) -+ operator|(perms __x, perms __y) noexcept - { - using __utype = typename std::underlying_type<perms>::type; - return static_cast<perms>( -@@ -179,7 +179,7 @@ - } - - constexpr perms -- operator^(perms __x, perms __y) -+ operator^(perms __x, perms __y) noexcept - { - using __utype = typename std::underlying_type<perms>::type; - return static_cast<perms>( -@@ -187,22 +187,22 @@ - } - - constexpr perms -- operator~(perms __x) -+ operator~(perms __x) noexcept - { - using __utype = typename std::underlying_type<perms>::type; - return static_cast<perms>(~static_cast<__utype>(__x)); - } - - inline perms& -- operator&=(perms& __x, perms __y) -+ operator&=(perms& __x, perms __y) noexcept - { return __x = __x & __y; } - - inline perms& -- operator|=(perms& __x, perms __y) -+ operator|=(perms& __x, perms __y) noexcept - { return __x = __x | __y; } - - inline perms& -- operator^=(perms& __x, perms __y) -+ operator^=(perms& __x, perms __y) noexcept - { return __x = __x ^ __y; } - - // Bitmask type -@@ -211,7 +211,7 @@ - }; - - constexpr directory_options -- operator&(directory_options __x, directory_options __y) -+ operator&(directory_options __x, directory_options __y) noexcept - { - using __utype = typename std::underlying_type<directory_options>::type; - return static_cast<directory_options>( -@@ -219,7 +219,7 @@ - } - - constexpr directory_options -- operator|(directory_options __x, directory_options __y) -+ operator|(directory_options __x, directory_options __y) noexcept - { - using __utype = typename std::underlying_type<directory_options>::type; - return static_cast<directory_options>( -@@ -227,7 +227,7 @@ - } - - constexpr directory_options -- operator^(directory_options __x, directory_options __y) -+ operator^(directory_options __x, directory_options __y) noexcept - { - using __utype = typename std::underlying_type<directory_options>::type; - return static_cast<directory_options>( -@@ -235,22 +235,22 @@ - } - - constexpr directory_options -- operator~(directory_options __x) -+ operator~(directory_options __x) noexcept - { - using __utype = typename std::underlying_type<directory_options>::type; - return static_cast<directory_options>(~static_cast<__utype>(__x)); - } - - inline directory_options& -- operator&=(directory_options& __x, directory_options __y) -+ operator&=(directory_options& __x, directory_options __y) noexcept - { return __x = __x & __y; } - - inline directory_options& -- operator|=(directory_options& __x, directory_options __y) -+ operator|=(directory_options& __x, directory_options __y) noexcept - { return __x = __x | __y; } - - inline directory_options& -- operator^=(directory_options& __x, directory_options __y) -+ operator^=(directory_options& __x, directory_options __y) noexcept - { return __x = __x ^ __y; } - - typedef chrono::time_point<chrono::system_clock> file_time_type; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/include/experimental/functional gcc-6-20160721/libstdc++-v3/include/experimental/functional ---- gcc-6.1.0/libstdc++-v3/include/experimental/functional 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/include/experimental/functional 2016-07-19 22:16:35.000000000 +0000 -@@ -42,6 +42,9 @@ - #include <vector> - #include <array> - #include <bits/stl_algo.h> -+#ifdef _GLIBCXX_PARALLEL -+# include <parallel/algorithm> // For std::__parallel::search -+#endif - - namespace std _GLIBCXX_VISIBILITY(default) - { -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/include/experimental/optional gcc-6-20160721/libstdc++-v3/include/experimental/optional ---- gcc-6.1.0/libstdc++-v3/include/experimental/optional 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/include/experimental/optional 2016-07-06 13:58:32.000000000 +0000 -@@ -470,6 +470,23 @@ - bool _M_engaged = false; - }; - -+ template<typename _Tp> -+ class optional; -+ -+ template<typename> -+ struct __is_optional_impl : false_type -+ { }; -+ -+ template<typename _Tp> -+ struct __is_optional_impl<optional<_Tp>> : true_type -+ { }; -+ -+ template<typename _Tp> -+ struct __is_optional -+ : public __is_optional_impl<std::remove_cv_t<std::remove_reference_t<_Tp>>> -+ { }; -+ -+ - /** - * @brief Class template for optional values. - */ -@@ -502,6 +519,78 @@ - // _Optional_base has the responsibility for construction. - using _Base::_Base; - -+ constexpr optional() = default; -+ // Converting constructors for engaged optionals. -+ template <typename _Up, -+ enable_if_t<__and_< -+ __not_<is_same<_Tp, _Up>>, -+ is_constructible<_Tp, _Up&&>, -+ is_convertible<_Up&&, _Tp> -+ >::value, bool> = true> -+ constexpr optional(_Up&& __t) -+ : _Base(_Tp(std::forward<_Up>(__t))) { } -+ -+ template <typename _Up, -+ enable_if_t<__and_< -+ __not_<is_same<_Tp, _Up>>, -+ is_constructible<_Tp, _Up&&>, -+ __not_<is_convertible<_Up&&, _Tp>> -+ >::value, bool> = false> -+ explicit constexpr optional(_Up&& __t) -+ : _Base(_Tp(std::forward<_Up>(__t))) { } -+ -+ template <typename _Up, -+ enable_if_t<__and_< -+ __not_<is_same<_Tp, _Up>>, -+ __not_<is_constructible< -+ _Tp, const optional<_Up>&>>, -+ __not_<is_convertible< -+ const optional<_Up>&, _Tp>>, -+ is_constructible<_Tp, const _Up&>, -+ is_convertible<const _Up&, _Tp> -+ >::value, bool> = true> -+ constexpr optional(const optional<_Up>& __t) -+ : _Base(__t ? optional<_Tp>(*__t) : optional<_Tp>()) { } -+ -+ template <typename _Up, -+ enable_if_t<__and_< -+ __not_<is_same<_Tp, _Up>>, -+ __not_<is_constructible< -+ _Tp, const optional<_Up>&>>, -+ __not_<is_convertible< -+ const optional<_Up>&, _Tp>>, -+ is_constructible<_Tp, const _Up&>, -+ __not_<is_convertible<const _Up&, _Tp>> -+ >::value, bool> = false> -+ explicit constexpr optional(const optional<_Up>& __t) -+ : _Base(__t ? optional<_Tp>(*__t) : optional<_Tp>()) { } -+ -+ template <typename _Up, -+ enable_if_t<__and_< -+ __not_<is_same<_Tp, _Up>>, -+ __not_<is_constructible< -+ _Tp, optional<_Up>&&>>, -+ __not_<is_convertible< -+ optional<_Up>&&, _Tp>>, -+ is_constructible<_Tp, _Up&&>, -+ is_convertible<_Up&&, _Tp> -+ >::value, bool> = true> -+ constexpr optional(optional<_Up>&& __t) -+ : _Base(__t ? optional<_Tp>(std::move(*__t)) : optional<_Tp>()) { } -+ -+ template <typename _Up, -+ enable_if_t<__and_< -+ __not_<is_same<_Tp, _Up>>, -+ __not_<is_constructible< -+ _Tp, optional<_Up>&&>>, -+ __not_<is_convertible< -+ optional<_Up>&&, _Tp>>, -+ is_constructible<_Tp, _Up&&>, -+ __not_<is_convertible<_Up&&, _Tp>> -+ >::value, bool> = false> -+ explicit constexpr optional(optional<_Up>&& __t) -+ : _Base(__t ? optional<_Tp>(std::move(*__t)) : optional<_Tp>()) { } -+ - // [X.Y.4.3] (partly) Assignment. - optional& - operator=(nullopt_t) noexcept -@@ -510,8 +599,12 @@ - return *this; - } - -- template<typename _Up> -- enable_if_t<is_same<_Tp, decay_t<_Up>>::value, optional&> -+ template<typename _Up, -+ enable_if_t<__and_< -+ __not_<is_same<_Up, nullopt_t>>, -+ __not_<__is_optional<_Up>>>::value, -+ bool> = true> -+ optional& - operator=(_Up&& __u) - { - static_assert(__and_<is_constructible<_Tp, _Up>, -@@ -525,6 +618,57 @@ - - return *this; - } -+ -+ template<typename _Up, -+ enable_if_t<__and_< -+ __not_<is_same<_Tp, _Up>>>::value, -+ bool> = true> -+ optional& -+ operator=(const optional<_Up>& __u) -+ { -+ static_assert(__and_<is_constructible<_Tp, _Up>, -+ is_assignable<_Tp&, _Up>>(), -+ "Cannot assign to value type from argument"); -+ -+ if (__u) -+ { -+ if (this->_M_is_engaged()) -+ this->_M_get() = *__u; -+ else -+ this->_M_construct(*__u); -+ } -+ else -+ { -+ this->_M_reset(); -+ } -+ return *this; -+ } -+ -+ template<typename _Up, -+ enable_if_t<__and_< -+ __not_<is_same<_Tp, _Up>>>::value, -+ bool> = true> -+ optional& -+ operator=(optional<_Up>&& __u) -+ { -+ static_assert(__and_<is_constructible<_Tp, _Up>, -+ is_assignable<_Tp&, _Up>>(), -+ "Cannot assign to value type from argument"); -+ -+ if (__u) -+ { -+ if (this->_M_is_engaged()) -+ this->_M_get() = std::move(*__u); -+ else -+ this->_M_construct(std::move(*__u)); -+ } -+ else -+ { -+ this->_M_reset(); -+ } -+ -+ return *this; -+ } - - template<typename... _Args> - void -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/include/parallel/balanced_quicksort.h gcc-6-20160721/libstdc++-v3/include/parallel/balanced_quicksort.h ---- gcc-6.1.0/libstdc++-v3/include/parallel/balanced_quicksort.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/include/parallel/balanced_quicksort.h 2016-07-19 22:16:23.000000000 +0000 -@@ -53,6 +53,9 @@ - - #if _GLIBCXX_ASSERTIONS - #include <parallel/checkers.h> -+#ifdef _GLIBCXX_HAVE_UNISTD_H -+#include <unistd.h> -+#endif - #endif - - namespace __gnu_parallel -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/include/parallel/compiletime_settings.h gcc-6-20160721/libstdc++-v3/include/parallel/compiletime_settings.h ---- gcc-6.1.0/libstdc++-v3/include/parallel/compiletime_settings.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/include/parallel/compiletime_settings.h 2016-07-19 22:16:23.000000000 +0000 -@@ -55,12 +55,6 @@ - #define _GLIBCXX_SCALE_DOWN_FPU 0 - #endif - --#ifndef _GLIBCXX_ASSERTIONS --/** @brief Switch on many _GLIBCXX_PARALLEL_ASSERTions in parallel code. -- * Should be switched on only locally. */ --#define _GLIBCXX_ASSERTIONS 0 --#endif -- - #ifndef _GLIBCXX_RANDOM_SHUFFLE_CONSIDER_L1 - /** @brief Switch on many _GLIBCXX_PARALLEL_ASSERTions in parallel code. - * Consider the size of the L1 cache for -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/include/std/tuple gcc-6-20160721/libstdc++-v3/include/std/tuple ---- gcc-6.1.0/libstdc++-v3/include/std/tuple 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/include/std/tuple 2016-05-09 14:44:32.000000000 +0000 -@@ -500,6 +500,14 @@ - __not_<is_constructible<_Elements..., _SrcTuple>> - >::value; - } -+ template<typename... _UElements> -+ static constexpr bool _NotSameTuple() -+ { -+ return __not_<is_same<tuple<_Elements...>, -+ typename remove_const< -+ typename remove_reference<_UElements...>::type -+ >::type>>::value; -+ } - }; - - template<typename... _Elements> -@@ -534,6 +542,11 @@ - { - return true; - } -+ template<typename... _UElements> -+ static constexpr bool _NotSameTuple() -+ { -+ return true; -+ } - }; - - /// Primary class template, tuple -@@ -611,7 +624,10 @@ - _Elements...>; - - template<typename... _UElements, typename -- enable_if<_TMC<_UElements...>::template -+ enable_if< -+ _TC<sizeof...(_UElements) == 1, _Elements...>::template -+ _NotSameTuple<_UElements...>() -+ && _TMC<_UElements...>::template - _MoveConstructibleTuple<_UElements...>() - && _TMC<_UElements...>::template - _ImplicitlyMoveConvertibleTuple<_UElements...>() -@@ -621,7 +637,10 @@ - : _Inherited(std::forward<_UElements>(__elements)...) { } - - template<typename... _UElements, typename -- enable_if<_TMC<_UElements...>::template -+ enable_if< -+ _TC<sizeof...(_UElements) == 1, _Elements...>::template -+ _NotSameTuple<_UElements...>() -+ && _TMC<_UElements...>::template - _MoveConstructibleTuple<_UElements...>() - && !_TMC<_UElements...>::template - _ImplicitlyMoveConvertibleTuple<_UElements...>() -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/src/c++11/codecvt.cc gcc-6-20160721/libstdc++-v3/src/c++11/codecvt.cc ---- gcc-6.1.0/libstdc++-v3/src/c++11/codecvt.cc 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/src/c++11/codecvt.cc 2016-05-25 16:33:03.000000000 +0000 -@@ -789,7 +789,11 @@ - { - range<const char> from{ __from, __from_end }; - range<char16_t> to{ __to, __to_end }; -- auto res = ucs2_in(from, to, _M_maxcode, _M_mode); -+ codecvt_mode mode = codecvt_mode(_M_mode & (consume_header|generate_header)); -+#if __BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ -+ mode = codecvt_mode(mode | little_endian); -+#endif -+ auto res = ucs2_in(from, to, _M_maxcode, mode); - __from_next = from.next; - __to_next = to.next; - return res; -@@ -1264,7 +1268,7 @@ - { - range<const char> from{ __from, __from_end }; - range<char16_t> to{ __to, __to_end }; -- codecvt_mode mode = codecvt_mode(_M_mode | (consume_header|generate_header)); -+ codecvt_mode mode = codecvt_mode(_M_mode & (consume_header|generate_header)); - #if __BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ - mode = codecvt_mode(mode | little_endian); - #endif -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/src/c++11/cow-stdexcept.cc gcc-6-20160721/libstdc++-v3/src/c++11/cow-stdexcept.cc ---- gcc-6.1.0/libstdc++-v3/src/c++11/cow-stdexcept.cc 2016-01-18 20:09:55.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/src/c++11/cow-stdexcept.cc 2016-05-11 19:06:45.000000000 +0000 -@@ -292,6 +292,7 @@ - return (const char*) txnal_read_ptr((void**)&bs->_M_dataplus._M_p); - } - -+#if _GLIBCXX_USE_DUAL_ABI - const char* - _txnal_sso_string_c_str(const void* that) - { -@@ -299,6 +300,7 @@ - (void* const*)const_cast<char* const*>( - &((const std::__sso_string*) that)->_M_s._M_p)); - } -+#endif - - void - _txnal_cow_string_D1_commit(void* data) -@@ -344,9 +346,24 @@ - // result in undefined behavior, which is in this case not initializing this - // string. - #if _GLIBCXX_USE_DUAL_ABI --#define CTORDTORSTRINGCSTR(s) _txnal_sso_string_c_str((s)) -+#define CTORS_FROM_SSOSTRING(NAME, CLASS, BASE) \ -+void \ -+_ZGTtNSt##NAME##C1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE( \ -+ CLASS* that, const std::__sso_string& s) \ -+{ \ -+ CLASS e(""); \ -+ _ITM_memcpyRnWt(that, &e, sizeof(CLASS)); \ -+ /* Get the C string from the SSO string. */ \ -+ _txnal_cow_string_C1_for_exceptions(_txnal_##BASE##_get_msg(that), \ -+ _txnal_sso_string_c_str(&s), that); \ -+} \ -+void \ -+_ZGTtNSt##NAME##C2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE( \ -+ CLASS*, const std::__sso_string&) __attribute__((alias \ -+("_ZGTtNSt" #NAME \ -+ "C1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE"))); - #else --#define CTORDTORSTRINGCSTR(s) "" -+#define CTORS_FROM_SSOSTRING(NAME, CLASS, BASE) - #endif - - // This macro defines transaction constructors and destructors for a specific -@@ -373,21 +390,7 @@ - void \ - _ZGTtNSt##NAME##C2EPKc (CLASS*, const char*) \ - __attribute__((alias ("_ZGTtNSt" #NAME "C1EPKc"))); \ --void \ --_ZGTtNSt##NAME##C1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE( \ -- CLASS* that, const std::__sso_string& s) \ --{ \ -- CLASS e(""); \ -- _ITM_memcpyRnWt(that, &e, sizeof(CLASS)); \ -- /* Get the C string from the SSO string. */ \ -- _txnal_cow_string_C1_for_exceptions(_txnal_##BASE##_get_msg(that), \ -- CTORDTORSTRINGCSTR(&s), that); \ --} \ --void \ --_ZGTtNSt##NAME##C2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE( \ -- CLASS*, const std::__sso_string&) __attribute__((alias \ --("_ZGTtNSt" #NAME \ -- "C1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE"))); \ -+CTORS_FROM_SSOSTRING(NAME, CLASS, BASE) \ - void \ - _ZGTtNSt##NAME##D1Ev(CLASS* that) \ - { _txnal_cow_string_D1(_txnal_##BASE##_get_msg(that)); } \ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/src/filesystem/ops.cc gcc-6-20160721/libstdc++-v3/src/filesystem/ops.cc ---- gcc-6.1.0/libstdc++-v3/src/filesystem/ops.cc 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/src/filesystem/ops.cc 2016-07-19 16:34:23.000000000 +0000 -@@ -220,8 +220,9 @@ - { - error_code ec; - path can = canonical(p, base, ec); -- if (ec.value()) -- _GLIBCXX_THROW_OR_ABORT(filesystem_error("cannot canonicalize", p, ec)); -+ if (ec) -+ _GLIBCXX_THROW_OR_ABORT(filesystem_error("cannot canonicalize", p, base, -+ ec)); - return can; - } - -@@ -249,7 +250,7 @@ - typedef struct ::stat stat_type; - - inline fs::file_type -- make_file_type(const stat_type& st) -+ make_file_type(const stat_type& st) noexcept - { - using fs::file_type; - #ifdef _GLIBCXX_HAVE_S_ISREG -@@ -273,7 +274,7 @@ - } - - inline fs::file_status -- make_file_status(const stat_type& st) -+ make_file_status(const stat_type& st) noexcept - { - return fs::file_status{ - make_file_type(st), -@@ -282,13 +283,13 @@ - } - - inline bool -- is_not_found_errno(int err) -+ is_not_found_errno(int err) noexcept - { - return err == ENOENT || err == ENOTDIR; - } - - inline fs::file_time_type -- file_time(const stat_type& st) -+ file_time(const stat_type& st) noexcept - { - using namespace std::chrono; - return fs::file_time_type{ -@@ -300,6 +301,17 @@ - }; - } - -+ // Returns true if the file descriptor was successfully closed, -+ // otherwise returns false and the reason will be in errno. -+ inline bool -+ close_fd(int fd) -+ { -+ while (::close(fd)) -+ if (errno != EINTR) -+ return false; -+ return true; -+ } -+ - bool - do_copy_file(const fs::path& from, const fs::path& to, - fs::copy_options option, -@@ -376,7 +388,8 @@ - } - - struct CloseFD { -- ~CloseFD() { if (fd != -1) ::close(fd); } -+ ~CloseFD() { if (fd != -1) close_fd(fd); } -+ bool close() { return close_fd(std::exchange(fd, -1)); } - int fd; - }; - -@@ -401,34 +414,49 @@ - return false; - } - -+#ifdef _GLIBCXX_USE_FCHMOD -+ if (::fchmod(out.fd, from_st->st_mode)) -+#elif _GLIBCXX_USE_FCHMODAT -+ if (::fchmodat(AT_FDCWD, to.c_str(), from_st->st_mode, 0)) -+#else -+ if (::chmod(to.c_str(), from_st->st_mode)) -+#endif -+ { -+ ec.assign(errno, std::generic_category()); -+ return false; -+ } -+ - #ifdef _GLIBCXX_USE_SENDFILE -- auto n = ::sendfile(out.fd, in.fd, nullptr, from_st->st_size); -+ const auto n = ::sendfile(out.fd, in.fd, nullptr, from_st->st_size); - if (n != from_st->st_size) - { - ec.assign(errno, std::generic_category()); - return false; - } -+ if (!out.close() || !in.close()) -+ { -+ ec.assign(errno, std::generic_category()); -+ return false; -+ } - #else - __gnu_cxx::stdio_filebuf<char> sbin(in.fd, std::ios::in); - __gnu_cxx::stdio_filebuf<char> sbout(out.fd, std::ios::out); -- if ( !(std::ostream(&sbout) << &sbin) ) -+ if (sbin.is_open()) -+ in.fd = -1; -+ if (sbout.is_open()) -+ out.fd = -1; -+ if (from_st->st_size && !(std::ostream(&sbout) << &sbin)) - { - ec = std::make_error_code(std::errc::io_error); - return false; - } --#endif -- --#ifdef _GLIBCXX_USE_FCHMOD -- if (::fchmod(out.fd, from_st->st_mode)) --#elif _GLIBCXX_USE_FCHMODAT -- if (::fchmodat(AT_FDCWD, to.c_str(), from_st->st_mode, 0)) --#else -- if (::chmod(to.c_str(), from_st->st_mode)) --#endif -+ if (!sbout.close() || !sbin.close()) - { - ec.assign(errno, std::generic_category()); - return false; - } -+#endif -+ - ec.clear(); - return true; - } -@@ -439,13 +467,15 @@ - fs::copy(const path& from, const path& to, copy_options options, - error_code& ec) noexcept - { -- bool skip_symlinks = is_set(options, copy_options::skip_symlinks); -- bool create_symlinks = is_set(options, copy_options::create_symlinks); -- bool use_lstat = create_symlinks || skip_symlinks; -+ const bool skip_symlinks = is_set(options, copy_options::skip_symlinks); -+ const bool create_symlinks = is_set(options, copy_options::create_symlinks); -+ const bool copy_symlinks = is_set(options, copy_options::copy_symlinks); -+ const bool use_lstat = create_symlinks || skip_symlinks; - - file_status f, t; - stat_type from_st, to_st; -- if (use_lstat -+ // N4099 doesn't check copy_symlinks here, but I think that's a defect. -+ if (use_lstat || copy_symlinks - ? ::lstat(from.c_str(), &from_st) - : ::stat(from.c_str(), &from_st)) - { -@@ -488,7 +518,7 @@ - { - if (skip_symlinks) - ec.clear(); -- else if (!exists(t) && is_set(options, copy_options::copy_symlinks)) -+ else if (!exists(t) && copy_symlinks) - copy_symlink(from, to, ec); - else - // Not clear what should be done here. -@@ -630,22 +660,26 @@ - bool - create_dir(const fs::path& p, fs::perms perm, std::error_code& ec) - { -+ bool created = false; - #ifdef _GLIBCXX_HAVE_SYS_STAT_H - ::mode_t mode = static_cast<std::underlying_type_t<fs::perms>>(perm); - if (::mkdir(p.c_str(), mode)) - { -- ec.assign(errno, std::generic_category()); -- return false; -+ const int err = errno; -+ if (err != EEXIST || !is_directory(p)) -+ ec.assign(err, std::generic_category()); -+ else -+ ec.clear(); - } - else - { - ec.clear(); -- return true; -+ created = true; - } - #else - ec = std::make_error_code(std::errc::not_supported); -- return false; - #endif -+ return created; - } - } // namespace - -@@ -1050,6 +1084,28 @@ - - void fs::permissions(const path& p, perms prms, error_code& ec) noexcept - { -+ const bool add = is_set(prms, perms::add_perms); -+ const bool remove = is_set(prms, perms::remove_perms); -+ if (add && remove) -+ { -+ ec = std::make_error_code(std::errc::invalid_argument); -+ return; -+ } -+ -+ prms &= perms::mask; -+ -+ if (add || remove) -+ { -+ auto st = status(p, ec); -+ if (ec) -+ return; -+ auto curr = st.permissions(); -+ if (add) -+ prms |= curr; -+ else -+ prms = curr & ~prms; -+ } -+ - #if _GLIBCXX_USE_FCHMODAT - if (::fchmodat(AT_FDCWD, p.c_str(), static_cast<mode_t>(prms), 0)) - #else -@@ -1138,7 +1194,7 @@ - uintmax_t count = 0; - if (ec.value() == 0 && fs.type() == file_type::directory) - for (directory_iterator d(p, ec), end; ec.value() == 0 && d != end; ++d) -- count += fs::remove(d->path(), ec); -+ count += fs::remove_all(d->path(), ec); - if (ec.value()) - return -1; - return fs::remove(p, ec) ? ++count : -1; // fs:remove() calls ec.clear() -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/20_util/tuple/cons/element_accepts_anything_byval.cc gcc-6-20160721/libstdc++-v3/testsuite/20_util/tuple/cons/element_accepts_anything_byval.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/20_util/tuple/cons/element_accepts_anything_byval.cc 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/20_util/tuple/cons/element_accepts_anything_byval.cc 2016-05-09 14:44:32.000000000 +0000 -@@ -0,0 +1,30 @@ -+// Copyright (C) 2016 Free Software Foundation, Inc. -+// -+// This file is part of the GNU ISO C++ Library. This library is free -+// software; you can redistribute it and/or modify it under the -+// terms of the GNU General Public License as published by the -+// Free Software Foundation; either version 3, or (at your option) -+// any later version. -+ -+// This library is distributed in the hope that it will be useful, -+// but WITHOUT ANY WARRANTY; without even the implied warranty of -+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+// GNU General Public License for more details. -+ -+// You should have received a copy of the GNU General Public License along -+// with this library; see the file COPYING3. If not see -+// <http://www.gnu.org/licenses/>. -+ -+#include <tuple> -+using namespace std; -+ -+struct Something { -+ Something() { } -+ template <typename T> Something(T) { } -+}; -+ -+int main() { -+ tuple<Something> t1; -+ tuple<Something> t2 = t1; -+} -+ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/69703.cc gcc-6-20160721/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/69703.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/69703.cc 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/69703.cc 2016-05-25 16:33:03.000000000 +0000 -@@ -0,0 +1,103 @@ -+// Copyright (C) 2016 Free Software Foundation, Inc. -+// -+// This file is part of the GNU ISO C++ Library. This library is free -+// software; you can redistribute it and/or modify it under the -+// terms of the GNU General Public License as published by the -+// Free Software Foundation; either version 3, or (at your option) -+// any later version. -+ -+// This library is distributed in the hope that it will be useful, -+// but WITHOUT ANY WARRANTY; without even the implied warranty of -+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+// GNU General Public License for more details. -+ -+// You should have received a copy of the GNU General Public License along -+// with this library; see the file COPYING3. If not see -+// <http://www.gnu.org/licenses/>. -+ -+// { dg-options "-std=gnu++11" } -+ -+#include <codecvt> -+#include <testsuite_hooks.h> -+ -+void -+test01() -+{ -+ bool test __attribute__((unused)) = true; -+ -+ const char out[] = "abc"; -+ char16_t in[4]; -+ std::codecvt_utf8<char16_t> cvt; -+ std::mbstate_t st; -+ const char* no; -+ char16_t* ni; -+ auto res = cvt.in(st, out, out+3, no, in, in+3, ni); -+ VERIFY( res == std::codecvt_base::ok ); -+ VERIFY( in[0] == u'a' ); -+ VERIFY( in[1] == u'b' ); -+ VERIFY( in[2] == u'c' ); -+} -+ -+void -+test02() -+{ -+ bool test __attribute__((unused)) = true; -+ -+ const char out[] = "abc"; -+ char16_t in[4]; -+ std::codecvt_utf8<char16_t, 0x10ffff, std::little_endian> cvt; -+ std::mbstate_t st; -+ const char* no; -+ char16_t* ni; -+ auto res = cvt.in(st, out, out+3, no, in, in+3, ni); -+ VERIFY( res == std::codecvt_base::ok ); -+ VERIFY( in[0] == u'a' ); -+ VERIFY( in[1] == u'b' ); -+ VERIFY( in[2] == u'c' ); -+} -+ -+void -+test03() -+{ -+ bool test __attribute__((unused)) = true; -+ -+ const char out[] = "abc"; -+ char32_t in[4]; -+ std::codecvt_utf8<char32_t> cvt; -+ std::mbstate_t st; -+ const char* no; -+ char32_t* ni; -+ auto res = cvt.in(st, out, out+3, no, in, in+3, ni); -+ VERIFY( res == std::codecvt_base::ok ); -+ VERIFY( in[0] == U'a' ); -+ VERIFY( in[1] == U'b' ); -+ VERIFY( in[2] == U'c' ); -+} -+ -+ -+void -+test04() -+{ -+ bool test __attribute__((unused)) = true; -+ -+ const char out[] = "abc"; -+ char32_t in[4]; -+ std::codecvt_utf8<char32_t, 0x10ffff, std::little_endian> cvt; -+ std::mbstate_t st; -+ const char* no; -+ char32_t* ni; -+ auto res = cvt.in(st, out, out+3, no, in, in+3, ni); -+ VERIFY( res == std::codecvt_base::ok ); -+ VERIFY( in[0] == U'a' ); -+ VERIFY( in[1] == U'b' ); -+ VERIFY( in[2] == U'c' ); -+} -+ -+int -+main() -+{ -+ test01(); -+ test02(); -+ test01(); -+ test02(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/66855.cc gcc-6-20160721/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/66855.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/66855.cc 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/66855.cc 2016-05-25 16:33:03.000000000 +0000 -@@ -45,8 +45,35 @@ - VERIFY( buf[3] == utf16[3] ); - } - -+void -+test02() -+{ -+ // Endianness flag should make no difference. -+ std::codecvt_utf8_utf16<char16_t, 0x10ffff, std::little_endian> cvt; -+ char16_t utf16[] = u"\ub098\ub294\ud0dc\uc624"; -+ const char16_t* nf16; -+ char utf8[16]; -+ char* nt8; -+ std::mbstate_t st{}; -+ auto res = cvt.out(st, utf16, utf16+4, nf16, utf8, utf8+16, nt8); -+ VERIFY( res == std::codecvt_base::ok ); -+ -+ st = {}; -+ char16_t buf[4] = {}; -+ const char* nf8 = nt8; -+ char16_t* nt16; -+ res = cvt.in(st, utf8, nf8, nf8, buf, buf+4, nt16); -+ VERIFY( res == std::codecvt_base::ok ); -+ VERIFY( nt16 == buf+4 ); -+ VERIFY( buf[0] == utf16[0] ); -+ VERIFY( buf[1] == utf16[1] ); -+ VERIFY( buf[2] == utf16[2] ); -+ VERIFY( buf[3] == utf16[3] ); -+} -+ - int - main() - { - test01(); -+ test02(); - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/25_algorithms/binary_search/partitioned.cc gcc-6-20160721/libstdc++-v3/testsuite/25_algorithms/binary_search/partitioned.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/25_algorithms/binary_search/partitioned.cc 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/25_algorithms/binary_search/partitioned.cc 2016-06-17 18:53:46.000000000 +0000 -@@ -0,0 +1,67 @@ -+// Copyright (C) 2016 Free Software Foundation, Inc. -+// -+// This file is part of the GNU ISO C++ Library. This library is free -+// software; you can redistribute it and/or modify it under the -+// terms of the GNU General Public License as published by the -+// Free Software Foundation; either version 3, or (at your option) -+// any later version. -+ -+// This library is distributed in the hope that it will be useful, -+// but WITHOUT ANY WARRANTY; without even the implied warranty of -+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+// GNU General Public License for more details. -+ -+// You should have received a copy of the GNU General Public License along -+// with this library; see the file COPYING3. If not see -+// <http://www.gnu.org/licenses/>. -+ -+// { dg-options "-std=gnu++11 -D_GLIBCXX_DEBUG" } -+ -+#include <algorithm> -+#include <functional> -+#include <testsuite_iterators.h> -+#include <testsuite_hooks.h> -+ -+using __gnu_test::test_container; -+using __gnu_test::forward_iterator_wrapper; -+ -+struct X -+{ -+ int val; -+ -+ bool odd() const { return val % 2; } -+ -+ // Partitioned so that all odd values come before even values: -+ bool operator<(const X& x) const { return this->odd() && !x.odd(); } -+}; -+ -+void -+test01() -+{ -+ bool test __attribute((unused)) = true; -+ -+ // Test with range that is partitioned, but not sorted. -+ X seq[] = { 1, 3, 5, 7, 1, 6, 4 }; -+ test_container<X, forward_iterator_wrapper> c(seq); -+ -+ auto b1 = std::binary_search(c.begin(), c.end(), X{2}); -+ VERIFY( b1 ); -+ auto b2 = std::binary_search(c.begin(), c.end(), X{2}, std::less<X>{}); -+ VERIFY( b2 ); -+ -+ auto b3 = std::binary_search(c.begin(), c.end(), X{9}); -+ VERIFY( b3 ); -+ auto b4 = std::binary_search(c.begin(), c.end(), X{9}, std::less<X>{}); -+ VERIFY( b4 ); -+ -+ auto b5 = std::binary_search(seq, seq+5, X{2}); -+ VERIFY( !b5 ); -+ auto b6 = std::binary_search(seq, seq+5, X{2}, std::less<X>{}); -+ VERIFY( !b6 ); -+} -+ -+int -+main() -+{ -+ test01(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/25_algorithms/equal_range/partitioned.cc gcc-6-20160721/libstdc++-v3/testsuite/25_algorithms/equal_range/partitioned.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/25_algorithms/equal_range/partitioned.cc 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/25_algorithms/equal_range/partitioned.cc 2016-06-17 18:53:46.000000000 +0000 -@@ -0,0 +1,66 @@ -+// Copyright (C) 2016 Free Software Foundation, Inc. -+// -+// This file is part of the GNU ISO C++ Library. This library is free -+// software; you can redistribute it and/or modify it under the -+// terms of the GNU General Public License as published by the -+// Free Software Foundation; either version 3, or (at your option) -+// any later version. -+ -+// This library is distributed in the hope that it will be useful, -+// but WITHOUT ANY WARRANTY; without even the implied warranty of -+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+// GNU General Public License for more details. -+ -+// You should have received a copy of the GNU General Public License along -+// with this library; see the file COPYING3. If not see -+// <http://www.gnu.org/licenses/>. -+ -+// { dg-options "-std=gnu++11 -D_GLIBCXX_DEBUG" } -+ -+#include <algorithm> -+#include <functional> -+#include <testsuite_iterators.h> -+#include <testsuite_hooks.h> -+ -+using __gnu_test::test_container; -+using __gnu_test::forward_iterator_wrapper; -+ -+struct X -+{ -+ int val; -+ -+ bool odd() const { return val % 2; } -+ -+ // Partitioned so that all odd values come before even values: -+ bool operator<(const X& x) const { return this->odd() && !x.odd(); } -+}; -+ -+void -+test01() -+{ -+ bool test __attribute((unused)) = true; -+ -+ // Test with range that is partitioned, but not sorted. -+ X seq[] = { 1, 3, 5, 7, 1, 6, 4, 2 }; -+ test_container<X, forward_iterator_wrapper> c(seq); -+ -+ auto part1 = std::equal_range(c.begin(), c.end(), X{2}); -+ VERIFY( part1.first != c.end() && part1.second == c.end() ); -+ VERIFY( part1.first->val == 6 ); -+ auto part2 = std::equal_range(c.begin(), c.end(), X{2}, std::less<X>{}); -+ VERIFY( part2.first != c.end() && part1.second == c.end() ); -+ VERIFY( part2.first->val == 6 ); -+ -+ auto part3 = std::equal_range(c.begin(), c.end(), X{9}); -+ VERIFY( part3.first == c.begin() && part3.second != c.end() ); -+ VERIFY( part3.second->val == 6 ); -+ auto part4 = std::equal_range(c.begin(), c.end(), X{9}, std::less<X>{}); -+ VERIFY( part4.first == c.begin() && part4.second != c.end() ); -+ VERIFY( part4.second->val == 6 ); -+} -+ -+int -+main() -+{ -+ test01(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/71545.cc gcc-6-20160721/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/71545.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/71545.cc 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/71545.cc 2016-06-17 18:53:46.000000000 +0000 -@@ -0,0 +1,35 @@ -+// Copyright (C) 2016 Free Software Foundation, Inc. -+// -+// This file is part of the GNU ISO C++ Library. This library is free -+// software; you can redistribute it and/or modify it under the -+// terms of the GNU General Public License as published by the -+// Free Software Foundation; either version 3, or (at your option) -+// any later version. -+ -+// This library is distributed in the hope that it will be useful, -+// but WITHOUT ANY WARRANTY; without even the implied warranty of -+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+// GNU General Public License for more details. -+ -+// You should have received a copy of the GNU General Public License along -+// with this library; see the file COPYING3. If not see -+// <http://www.gnu.org/licenses/>. -+ -+// { dg-options "-std=gnu++11 -D_GLIBCXX_DEBUG" } -+// { dg-do link } -+ -+#include <algorithm> -+ -+struct X { }; -+ -+bool operator<(X, int) { return true; } -+bool operator<(int, X) { return false; } -+ -+bool operator<(X, X); // undefined (PR libstdc++/71545) -+ -+int main() -+{ -+ X x[1]; -+ int i[1]; -+ std::lexicographical_compare(x, x+1, i, i+1); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/25_algorithms/lower_bound/partitioned.cc gcc-6-20160721/libstdc++-v3/testsuite/25_algorithms/lower_bound/partitioned.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/25_algorithms/lower_bound/partitioned.cc 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/25_algorithms/lower_bound/partitioned.cc 2016-06-17 18:53:46.000000000 +0000 -@@ -0,0 +1,100 @@ -+// Copyright (C) 2016 Free Software Foundation, Inc. -+// -+// This file is part of the GNU ISO C++ Library. This library is free -+// software; you can redistribute it and/or modify it under the -+// terms of the GNU General Public License as published by the -+// Free Software Foundation; either version 3, or (at your option) -+// any later version. -+ -+// This library is distributed in the hope that it will be useful, -+// but WITHOUT ANY WARRANTY; without even the implied warranty of -+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+// GNU General Public License for more details. -+ -+// You should have received a copy of the GNU General Public License along -+// with this library; see the file COPYING3. If not see -+// <http://www.gnu.org/licenses/>. -+ -+// { dg-options "-std=gnu++11 -D_GLIBCXX_DEBUG" } -+ -+#include <algorithm> -+#include <functional> -+#include <testsuite_iterators.h> -+#include <testsuite_hooks.h> -+ -+using __gnu_test::test_container; -+using __gnu_test::forward_iterator_wrapper; -+ -+struct X -+{ -+ int val; -+ -+ bool odd() const { return val % 2; } -+ -+ // Partitioned so that all odd values come before even values: -+ bool operator<(const X& x) const { return this->odd() && !x.odd(); } -+}; -+ -+void -+test01() -+{ -+ bool test __attribute((unused)) = true; -+ -+ // Test with range that is partitioned, but not sorted. -+ X seq[] = { 1, 3, 5, 7, 1, 6, 4, 2 }; -+ test_container<X, forward_iterator_wrapper> c(seq); -+ -+ auto part1 = std::lower_bound(c.begin(), c.end(), X{2}); -+ VERIFY( part1 != c.end() ); -+ VERIFY( part1->val == 6 ); -+ auto part2 = std::lower_bound(c.begin(), c.end(), X{2}, std::less<X>{}); -+ VERIFY( part2 != c.end() ); -+ VERIFY( part2->val == 6 ); -+ -+ auto part3 = std::lower_bound(c.begin(), c.end(), X{9}); -+ VERIFY( part3 != c.end() ); -+ VERIFY( part3->val == 1 ); -+ auto part4 = std::lower_bound(c.begin(), c.end(), X{9}, std::less<X>{}); -+ VERIFY( part4 != c.end() ); -+ VERIFY( part4->val == 1 ); -+} -+ -+struct Y -+{ -+ double val; -+ -+ // Not irreflexive, so not a strict weak order. -+ bool operator<(const Y& y) const { return val < int(y.val); } -+}; -+ -+void -+test02() -+{ -+ bool test __attribute((unused)) = true; -+ -+ // Test that Debug Mode checks don't fire (libstdc++/71545) -+ -+ Y seq[] = { -0.1, 1.2, 5.0, 5.2, 5.1, 5.9, 5.5, 6.0 }; -+ test_container<Y, forward_iterator_wrapper> c(seq); -+ -+ auto part1 = std::lower_bound(c.begin(), c.end(), Y{5.5}); -+ VERIFY( part1 != c.end() ); -+ VERIFY( part1->val == 5.0 ); -+ auto part2 = std::lower_bound(c.begin(), c.end(), Y{5.5}, std::less<Y>{}); -+ VERIFY( part2 != c.end() ); -+ VERIFY( part2->val == 5.0 ); -+ -+ auto part3 = std::lower_bound(c.begin(), c.end(), Y{1.0}); -+ VERIFY( part3 != c.end() ); -+ VERIFY( part3->val == 1.2 ); -+ auto part4 = std::lower_bound(c.begin(), c.end(), Y{1.0}, std::less<Y>{}); -+ VERIFY( part4 != c.end() ); -+ VERIFY( part4->val == 1.2 ); -+} -+ -+int -+main() -+{ -+ test01(); -+ test02(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/25_algorithms/upper_bound/partitioned.cc gcc-6-20160721/libstdc++-v3/testsuite/25_algorithms/upper_bound/partitioned.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/25_algorithms/upper_bound/partitioned.cc 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/25_algorithms/upper_bound/partitioned.cc 2016-06-17 18:53:46.000000000 +0000 -@@ -0,0 +1,98 @@ -+// Copyright (C) 2016 Free Software Foundation, Inc. -+// -+// This file is part of the GNU ISO C++ Library. This library is free -+// software; you can redistribute it and/or modify it under the -+// terms of the GNU General Public License as published by the -+// Free Software Foundation; either version 3, or (at your option) -+// any later version. -+ -+// This library is distributed in the hope that it will be useful, -+// but WITHOUT ANY WARRANTY; without even the implied warranty of -+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+// GNU General Public License for more details. -+ -+// You should have received a copy of the GNU General Public License along -+// with this library; see the file COPYING3. If not see -+// <http://www.gnu.org/licenses/>. -+ -+// { dg-options "-std=gnu++11 -D_GLIBCXX_DEBUG" } -+ -+#include <algorithm> -+#include <functional> -+#include <testsuite_iterators.h> -+#include <testsuite_hooks.h> -+ -+using __gnu_test::test_container; -+using __gnu_test::forward_iterator_wrapper; -+ -+struct X -+{ -+ int val; -+ -+ bool odd() const { return val % 2; } -+ -+ // Partitioned so that all odd values come before even values: -+ bool operator<(const X& x) const { return this->odd() && !x.odd(); } -+}; -+ -+void -+test01() -+{ -+ bool test __attribute((unused)) = true; -+ -+ // Test with range that is partitioned, but not sorted. -+ X seq[] = { 1, 3, 5, 7, 1, 6, 4, 2 }; -+ test_container<X, forward_iterator_wrapper> c(seq); -+ -+ auto part1 = std::upper_bound(c.begin(), c.end(), X{2}); -+ VERIFY( part1 == c.end() ); -+ auto part2 = std::upper_bound(c.begin(), c.end(), X{2}, std::less<X>{}); -+ VERIFY( part2 == c.end() ); -+ -+ auto part3 = std::upper_bound(c.begin(), c.end(), X{9}); -+ VERIFY( part3 != c.end() ); -+ VERIFY( part3->val == 6 ); -+ auto part4 = std::upper_bound(c.begin(), c.end(), X{9}, std::less<X>{}); -+ VERIFY( part3 != c.end() ); -+ VERIFY( part4->val == 6 ); -+} -+ -+struct Y -+{ -+ double val; -+ -+ // Not irreflexive, so not a strict weak order. -+ bool operator<(const Y& y) const { return val < (int)y.val; } -+}; -+ -+void -+test02() -+{ -+ bool test __attribute((unused)) = true; -+ -+ // Test that Debug Mode checks don't fire (libstdc++/71545) -+ -+ Y seq[] = { -0.1, 1.2, 5.0, 5.2, 5.1, 5.9, 5.5, 6.0 }; -+ test_container<Y, forward_iterator_wrapper> c(seq); -+ -+ auto part1 = std::upper_bound(c.begin(), c.end(), Y{5.5}); -+ VERIFY( part1 != c.end() ); -+ VERIFY( part1->val == 6.0 ); -+ auto part2 = std::upper_bound(c.begin(), c.end(), Y{5.5}, std::less<Y>{}); -+ VERIFY( part2 != c.end() ); -+ VERIFY( part2->val == 6.0 ); -+ -+ auto part3 = std::upper_bound(c.begin(), c.end(), Y{1.0}); -+ VERIFY( part3 != c.end() ); -+ VERIFY( part3->val == 5.0 ); -+ auto part4 = std::upper_bound(c.begin(), c.end(), Y{1.0}, std::less<Y>{}); -+ VERIFY( part4 != c.end() ); -+ VERIFY( part4->val == 5.0 ); -+} -+ -+int -+main() -+{ -+ test01(); -+ test02(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/experimental/any/misc/any_cast.cc gcc-6-20160721/libstdc++-v3/testsuite/experimental/any/misc/any_cast.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/experimental/any/misc/any_cast.cc 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/experimental/any/misc/any_cast.cc 2016-07-05 20:06:31.000000000 +0000 -@@ -77,8 +77,38 @@ - } - } - -+static int move_count = 0; -+ -+void test03() -+{ -+ struct MoveEnabled -+ { -+ MoveEnabled(MoveEnabled&&) -+ { -+ ++move_count; -+ } -+ MoveEnabled() = default; -+ MoveEnabled(const MoveEnabled&) = default; -+ }; -+ MoveEnabled m; -+ MoveEnabled m2 = any_cast<MoveEnabled>(any(m)); -+ VERIFY(move_count == 1); -+ MoveEnabled&& m3 = any_cast<MoveEnabled&&>(any(m)); -+ VERIFY(move_count == 1); -+ struct MoveDeleted -+ { -+ MoveDeleted(MoveDeleted&&) = delete; -+ MoveDeleted() = default; -+ MoveDeleted(const MoveDeleted&) = default; -+ }; -+ MoveDeleted md; -+ MoveDeleted&& md2 = any_cast<MoveDeleted>(any(std::move(md))); -+ MoveDeleted&& md3 = any_cast<MoveDeleted&&>(any(std::move(md))); -+} -+ - int main() - { - test01(); - test02(); -+ test03(); - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/experimental/any/misc/any_cast_neg.cc gcc-6-20160721/libstdc++-v3/testsuite/experimental/any/misc/any_cast_neg.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/experimental/any/misc/any_cast_neg.cc 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/experimental/any/misc/any_cast_neg.cc 2016-07-05 20:06:31.000000000 +0000 -@@ -26,5 +26,5 @@ - using std::experimental::any_cast; - - const any y(1); -- any_cast<int&>(y); // { dg-error "qualifiers" "" { target { *-*-* } } 353 } -+ any_cast<int&>(y); // { dg-error "qualifiers" "" { target { *-*-* } } 368 } - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/experimental/filesystem/iterators/directory_iterator.cc gcc-6-20160721/libstdc++-v3/testsuite/experimental/filesystem/iterators/directory_iterator.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/experimental/filesystem/iterators/directory_iterator.cc 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/experimental/filesystem/iterators/directory_iterator.cc 2016-05-25 15:45:30.000000000 +0000 -@@ -70,8 +70,79 @@ - remove_all(p, ec); - } - -+void -+test02() -+{ -+ bool test __attribute__((unused)) = false; -+ -+ std::error_code ec; -+ const auto p = __gnu_test::nonexistent_path(); -+ create_directory(p, fs::current_path(), ec); -+ create_directory_symlink(p, p / "l", ec); -+ VERIFY( !ec ); -+ -+ // Test post-increment (libstdc++/71005) -+ auto iter = fs::directory_iterator(p, ec); -+ VERIFY( !ec ); -+ VERIFY( iter != fs::directory_iterator() ); -+ const auto entry1 = *iter; -+ const auto entry2 = *iter++; -+ VERIFY( entry1 == entry2 ); -+ VERIFY( entry1.path() == p/"l" ); -+ VERIFY( iter == fs::directory_iterator() ); -+ -+ remove_all(p, ec); -+} -+ -+void -+test03() -+{ -+ bool test __attribute__((unused)) = false; -+ -+ std::error_code ec; -+ const auto p = __gnu_test::nonexistent_path(); -+ create_directories(p / "longer_than_small_string_buffer", ec); -+ VERIFY( !ec ); -+ -+ // Test for no reallocation on each dereference (this is a GNU extension) -+ auto iter = fs::directory_iterator(p, ec); -+ const auto* s1 = iter->path().c_str(); -+ const auto* s2 = iter->path().c_str(); -+ VERIFY( s1 == s2 ); -+ -+ remove_all(p, ec); -+} -+ -+void -+test04() -+{ -+ bool test __attribute__((unused)) = false; -+ -+ const fs::directory_iterator it; -+ VERIFY( it == fs::directory_iterator() ); -+} -+ -+void -+test05() -+{ -+ bool test __attribute__((unused)) = false; -+ -+ auto p = __gnu_test::nonexistent_path(); -+ create_directory(p); -+ create_directory_symlink(p, p / "l"); -+ fs::directory_iterator it(p), endit; -+ VERIFY( begin(it) == it ); -+ static_assert( noexcept(begin(it)), "begin is noexcept" ); -+ VERIFY( end(it) == endit ); -+ static_assert( noexcept(end(it)), "end is noexcept" ); -+} -+ - int - main() - { - test01(); -+ test02(); -+ test03(); -+ test04(); -+ test05(); - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/experimental/filesystem/iterators/recursive_directory_iterator.cc gcc-6-20160721/libstdc++-v3/testsuite/experimental/filesystem/iterators/recursive_directory_iterator.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/experimental/filesystem/iterators/recursive_directory_iterator.cc 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/experimental/filesystem/iterators/recursive_directory_iterator.cc 2016-05-25 15:45:30.000000000 +0000 -@@ -97,8 +97,83 @@ - remove_all(p, ec); - } - -+void -+test02() -+{ -+ bool test __attribute__((unused)) = false; -+ -+ std::error_code ec; -+ const auto p = __gnu_test::nonexistent_path(); -+ create_directories(p / "d1/d2", ec); -+ VERIFY( !ec ); -+ -+ // Test post-increment (libstdc++/71005) -+ auto iter = fs::recursive_directory_iterator(p, ec); -+ VERIFY( !ec ); -+ VERIFY( iter != fs::recursive_directory_iterator() ); -+ const auto entry1 = *iter; -+ const auto entry2 = *iter++; -+ VERIFY( entry1 == entry2 ); -+ VERIFY( entry1.path() == p/"d1" ); -+ const auto entry3 = *iter; -+ const auto entry4 = *iter++; -+ VERIFY( entry3 == entry4 ); -+ VERIFY( entry3.path() == p/"d1/d2" ); -+ VERIFY( iter == fs::recursive_directory_iterator() ); -+ -+ remove_all(p, ec); -+} -+ -+void -+test03() -+{ -+ bool test __attribute__((unused)) = false; -+ -+ std::error_code ec; -+ const auto p = __gnu_test::nonexistent_path(); -+ create_directories(p / "longer_than_small_string_buffer", ec); -+ VERIFY( !ec ); -+ -+ // Test for no reallocation on each dereference (this is a GNU extension) -+ auto iter = fs::recursive_directory_iterator(p, ec); -+ const auto* s1 = iter->path().c_str(); -+ const auto* s2 = iter->path().c_str(); -+ VERIFY( s1 == s2 ); -+ -+ remove_all(p, ec); -+} -+ -+void -+test04() -+{ -+ bool test __attribute__((unused)) = false; -+ -+ // libstdc++/71004 -+ const fs::recursive_directory_iterator it; -+ VERIFY( it == fs::recursive_directory_iterator() ); -+} -+ -+void -+test05() -+{ -+ bool test __attribute__((unused)) = false; -+ -+ auto p = __gnu_test::nonexistent_path(); -+ create_directory(p); -+ create_directory_symlink(p, p / "l"); -+ fs::recursive_directory_iterator it(p), endit; -+ VERIFY( begin(it) == it ); -+ static_assert( noexcept(begin(it)), "begin is noexcept" ); -+ VERIFY( end(it) == endit ); -+ static_assert( noexcept(end(it)), "end is noexcept" ); -+} -+ - int - main() - { - test01(); -+ test02(); -+ test03(); -+ test04(); -+ test05(); - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/experimental/filesystem/operations/canonical.cc gcc-6-20160721/libstdc++-v3/testsuite/experimental/filesystem/operations/canonical.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/experimental/filesystem/operations/canonical.cc 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/experimental/filesystem/operations/canonical.cc 2016-05-25 15:44:39.000000000 +0000 -@@ -59,8 +59,28 @@ - VERIFY( !ec ); - } - -+void -+test02() -+{ -+#if __cpp_exceptions -+ bool test __attribute__((unused)) = false; -+ -+ fs::path p = "rel", base = __gnu_test::nonexistent_path(); -+ fs::path e1, e2; -+ try { -+ canonical(p, base); -+ } catch (const fs::filesystem_error& e) { -+ e1 = e.path1(); -+ e2 = e.path2(); -+ } -+ VERIFY( e1 == p ); -+ VERIFY( e2 == base ); -+#endif -+} -+ - int - main() - { - test01(); -+ test02(); - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/experimental/filesystem/operations/copy.cc gcc-6-20160721/libstdc++-v3/testsuite/experimental/filesystem/operations/copy.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/experimental/filesystem/operations/copy.cc 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/experimental/filesystem/operations/copy.cc 2016-05-25 15:44:15.000000000 +0000 -@@ -21,34 +21,127 @@ - // 15.3 Copy [fs.op.copy] - - #include <experimental/filesystem> -+#include <fstream> - #include <testsuite_fs.h> - #include <testsuite_hooks.h> - --using std::experimental::filesystem::path; -+namespace fs = std::experimental::filesystem; - -+// Test error conditions. - void - test01() - { - bool test __attribute__((unused)) = false; - -- for (const path& p : __gnu_test::test_paths) -- VERIFY( absolute(p).is_absolute() ); -+ auto p = __gnu_test::nonexistent_path(); -+ std::error_code ec; -+ -+ VERIFY( !fs::exists(p) ); -+ fs::copy(p, ".", fs::copy_options::none, ec); -+ VERIFY( ec ); -+ -+ ec.clear(); -+ fs::copy(".", ".", fs::copy_options::none, ec); -+ VERIFY( ec ); -+ -+ std::ofstream{p.native()}; -+ VERIFY( fs::is_directory(".") ); -+ VERIFY( fs::is_regular_file(p) ); -+ ec.clear(); -+ fs::copy(".", p, fs::copy_options::none, ec); -+ VERIFY( ec ); -+ -+ remove(p, ec); - } - -+// Test is_symlink(f) case. - void - test02() - { - bool test __attribute__((unused)) = false; - -- path p1("/"); -- VERIFY( absolute(p1) == p1 ); -- VERIFY( absolute(p1, "/bar") == p1 ); -- path p2("/foo"); -- VERIFY( absolute(p2) == p2 ); -- VERIFY( absolute(p2, "/bar") == p2 ); -- path p3("foo"); -- VERIFY( absolute(p3) != p3 ); -- VERIFY( absolute(p3, "/bar") == "/bar/foo" ); -+ auto from = __gnu_test::nonexistent_path(); -+ auto to = __gnu_test::nonexistent_path(); -+ std::error_code ec; -+ -+ fs::create_symlink(".", from, ec); -+ VERIFY( !ec ); -+ VERIFY( fs::exists(from) ); -+ -+ fs::copy(from, to, fs::copy_options::skip_symlinks, ec); -+ VERIFY( !ec ); -+ VERIFY( !fs::exists(to) ); -+ -+ fs::copy(from, to, fs::copy_options::skip_symlinks, ec); -+ VERIFY( !ec ); -+ VERIFY( !fs::exists(to) ); -+ -+ fs::copy(from, to, -+ fs::copy_options::skip_symlinks|fs::copy_options::copy_symlinks, -+ ec); -+ VERIFY( !ec ); -+ VERIFY( !fs::exists(to) ); -+ -+ fs::copy(from, to, fs::copy_options::copy_symlinks, ec); -+ VERIFY( !ec ); -+ VERIFY( fs::exists(to) ); -+ -+ fs::copy(from, to, fs::copy_options::copy_symlinks, ec); -+ VERIFY( ec ); -+ -+ remove(from, ec); -+ remove(to, ec); -+} -+ -+// Test is_regular_file(f) case. -+void -+test03() -+{ -+ bool test __attribute__((unused)) = false; -+ -+ auto from = __gnu_test::nonexistent_path(); -+ auto to = __gnu_test::nonexistent_path(); -+ -+ // test empty file -+ std::ofstream{from.native()}; -+ VERIFY( fs::exists(from) ); -+ VERIFY( fs::file_size(from) == 0 ); -+ fs::copy(from, to); -+ VERIFY( fs::exists(to) ); -+ VERIFY( fs::file_size(to) == 0 ); -+ -+ remove(to); -+ VERIFY( !fs::exists(to) ); -+ std::ofstream{from.native()} << "Hello, filesystem!"; -+ VERIFY( fs::file_size(from) != 0 ); -+ fs::copy(from, to); -+ VERIFY( fs::exists(to) ); -+ VERIFY( fs::file_size(to) == fs::file_size(from) ); -+} -+ -+// Test is_directory(f) case. -+void -+test04() -+{ -+ bool test __attribute__((unused)) = false; -+ -+ auto from = __gnu_test::nonexistent_path(); -+ auto to = __gnu_test::nonexistent_path(); -+ std::error_code ec; -+ -+} -+ -+// Test no-op cases. -+void -+test05() -+{ -+ bool test __attribute__((unused)) = false; -+ -+ auto to = __gnu_test::nonexistent_path(); -+ std::error_code ec; -+ -+ fs::copy("/", to, fs::copy_options::create_symlinks, ec); -+ VERIFY( !ec ); - } - - int -@@ -56,4 +149,7 @@ - { - test01(); - test02(); -+ test03(); -+ test04(); -+ test05(); - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/experimental/filesystem/operations/copy_file.cc gcc-6-20160721/libstdc++-v3/testsuite/experimental/filesystem/operations/copy_file.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/experimental/filesystem/operations/copy_file.cc 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/experimental/filesystem/operations/copy_file.cc 2016-05-25 15:45:03.000000000 +0000 -@@ -0,0 +1,82 @@ -+// Copyright (C) 2016 Free Software Foundation, Inc. -+// -+// This file is part of the GNU ISO C++ Library. This library is free -+// software; you can redistribute it and/or modify it under the -+// terms of the GNU General Public License as published by the -+// Free Software Foundation; either version 3, or (at your option) -+// any later version. -+ -+// This library is distributed in the hope that it will be useful, -+// but WITHOUT ANY WARRANTY; without even the implied warranty of -+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+// GNU General Public License for more details. -+ -+// You should have received a copy of the GNU General Public License along -+// with this library; see the file COPYING3. If not see -+// <http://www.gnu.org/licenses/>. -+ -+// { dg-options "-std=gnu++11 -lstdc++fs" } -+// { dg-require-filesystem-ts "" } -+ -+// 15.4 Copy [fs.op.copy_file] -+ -+#include <experimental/filesystem> -+#include <fstream> -+#include <testsuite_fs.h> -+#include <testsuite_hooks.h> -+ -+void -+test01() -+{ -+ bool test __attribute__((unused)) = false; -+ using std::experimental::filesystem::copy_options; -+ std::error_code ec; -+ -+ auto from = __gnu_test::nonexistent_path(); -+ auto to = __gnu_test::nonexistent_path(); -+ -+ // test non-existent file -+ bool b = copy_file(from, to, ec); -+ VERIFY( !b ); -+ VERIFY( ec ); -+ VERIFY( !exists(to) ); -+ -+ // test empty file -+ std::ofstream{from.native()}; -+ VERIFY( exists(from) ); -+ VERIFY( file_size(from) == 0 ); -+ -+ b = copy_file(from, to); -+ VERIFY( b ); -+ VERIFY( exists(to) ); -+ VERIFY( file_size(to) == 0 ); -+ remove(to); -+ VERIFY( !exists(to) ); -+ b = copy_file(from, to, copy_options::none, ec); -+ VERIFY( b ); -+ VERIFY( !ec ); -+ VERIFY( exists(to) ); -+ VERIFY( file_size(to) == 0 ); -+ -+ std::ofstream{from.native()} << "Hello, filesystem!"; -+ VERIFY( file_size(from) != 0 ); -+ remove(to); -+ VERIFY( !exists(to) ); -+ b = copy_file(from, to); -+ VERIFY( b ); -+ VERIFY( exists(to) ); -+ VERIFY( file_size(to) == file_size(from) ); -+ remove(to); -+ VERIFY( !exists(to) ); -+ b = copy_file(from, to); -+ VERIFY( b ); -+ VERIFY( !ec ); -+ VERIFY( exists(to) ); -+ VERIFY( file_size(to) == file_size(from) ); -+} -+ -+int -+main() -+{ -+ test01(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc gcc-6-20160721/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc 2016-07-04 13:15:10.000000000 +0000 -@@ -65,7 +65,8 @@ - VERIFY( b ); - VERIFY( is_directory(p/"./d4/../d5") ); - -- remove_all(p, ec); -+ std::uintmax_t count = remove_all(p, ec); -+ VERIFY( count == 6 ); - } - - int -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directory.cc gcc-6-20160721/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directory.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directory.cc 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directory.cc 2016-05-25 15:44:44.000000000 +0000 -@@ -0,0 +1,63 @@ -+// Copyright (C) 2016 Free Software Foundation, Inc. -+// -+// This file is part of the GNU ISO C++ Library. This library is free -+// software; you can redistribute it and/or modify it under the -+// terms of the GNU General Public License as published by the -+// Free Software Foundation; either version 3, or (at your option) -+// any later version. -+ -+// This library is distributed in the hope that it will be useful, -+// but WITHOUT ANY WARRANTY; without even the implied warranty of -+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+// GNU General Public License for more details. -+ -+// You should have received a copy of the GNU General Public License along -+// with this library; see the file COPYING3. If not see -+// <http://www.gnu.org/licenses/>. -+ -+// { dg-options "-std=gnu++11 -lstdc++fs" } -+// { dg-require-filesystem-ts "" } -+ -+#include <experimental/filesystem> -+#include <testsuite_hooks.h> -+#include <testsuite_fs.h> -+ -+namespace fs = std::experimental::filesystem; -+ -+void -+test01() -+{ -+ bool test __attribute__((unused)) = false; -+ std::error_code ec; -+ -+ // Test empty path. -+ fs::path p; -+ bool b = create_directory( p, ec ); -+ VERIFY( ec ); -+ VERIFY( !b ); -+ -+ // Test non-existent path -+ p = __gnu_test::nonexistent_path(); -+ VERIFY( !exists(p) ); -+ -+ b = create_directory(p, ec); // create the directory once -+ VERIFY( !ec ); -+ VERIFY( b ); -+ VERIFY( exists(p) ); -+ -+ // Test existing path (libstdc++/71036). -+ b = create_directory(p, ec); -+ VERIFY( !ec ); -+ VERIFY( !b ); -+ b = create_directory(p); -+ VERIFY( !ec ); -+ VERIFY( !b ); -+ -+ remove_all(p, ec); -+} -+ -+int -+main() -+{ -+ test01(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/experimental/filesystem/operations/permissions.cc gcc-6-20160721/libstdc++-v3/testsuite/experimental/filesystem/operations/permissions.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/experimental/filesystem/operations/permissions.cc 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/experimental/filesystem/operations/permissions.cc 2016-07-19 16:34:23.000000000 +0000 -@@ -0,0 +1,51 @@ -+// Copyright (C) 2016 Free Software Foundation, Inc. -+// -+// This file is part of the GNU ISO C++ Library. This library is free -+// software; you can redistribute it and/or modify it under the -+// terms of the GNU General Public License as published by the -+// Free Software Foundation; either version 3, or (at your option) -+// any later version. -+ -+// This library is distributed in the hope that it will be useful, -+// but WITHOUT ANY WARRANTY; without even the implied warranty of -+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+// GNU General Public License for more details. -+ -+// You should have received a copy of the GNU General Public License along -+// with this library; see the file COPYING3. If not see -+// <http://www.gnu.org/licenses/>. -+ -+// { dg-options "-std=gnu++11 -lstdc++fs" } -+// { dg-require-filesystem-ts "" } -+ -+// 15.26 Permissions [fs.op.permissions] -+ -+#include <experimental/filesystem> -+#include <fstream> -+#include <testsuite_fs.h> -+#include <testsuite_hooks.h> -+ -+void -+test01() -+{ -+ bool test __attribute__((unused)) = true; -+ using perms = std::experimental::filesystem::perms; -+ -+ auto p = __gnu_test::nonexistent_path(); -+ std::ofstream{p.native()}; -+ VERIFY( exists(p) ); -+ permissions(p, perms::owner_all); -+ VERIFY( status(p).permissions() == perms::owner_all ); -+ permissions(p, perms::group_read | perms::add_perms); -+ VERIFY( status(p).permissions() == (perms::owner_all | perms::group_read) ); -+ permissions(p, perms::group_read | perms::remove_perms); -+ VERIFY( status(p).permissions() == perms::owner_all ); -+ -+ remove(p); -+} -+ -+int -+main() -+{ -+ test01(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/experimental/filesystem/path/native/string.cc gcc-6-20160721/libstdc++-v3/testsuite/experimental/filesystem/path/native/string.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/experimental/filesystem/path/native/string.cc 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/experimental/filesystem/path/native/string.cc 2016-05-26 15:25:04.000000000 +0000 -@@ -0,0 +1,73 @@ -+// Copyright (C) 2016 Free Software Foundation, Inc. -+// -+// This file is part of the GNU ISO C++ Library. This library is free -+// software; you can redistribute it and/or modify it under the -+// terms of the GNU General Public License as published by the -+// Free Software Foundation; either version 3, or (at your option) -+// any later version. -+ -+// This library is distributed in the hope that it will be useful, -+// but WITHOUT ANY WARRANTY; without even the implied warranty of -+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+// GNU General Public License for more details. -+ -+// You should have received a copy of the GNU General Public License along -+// with this library; see the file COPYING3. If not see -+// <http://www.gnu.org/licenses/>. -+ -+// { dg-options "-std=gnu++11 -lstdc++fs" } -+// { dg-require-filesystem-ts "" } -+ -+#include <experimental/filesystem> -+#include <string> -+#include <testsuite_hooks.h> -+ -+void -+test01() -+{ -+ bool test __attribute__((unused)) = true; -+ -+ using namespace std::experimental::filesystem; -+ const std::string s = "abc"; -+ path p(s); -+ -+ VERIFY( p.native() == s ); -+ VERIFY( p.c_str() == s ); -+ VERIFY( static_cast<std::string>(p) == s ); -+ -+ std::string s2 = p; // implicit conversion -+ VERIFY( s2 == p.native() ); -+} -+ -+void -+test02() -+{ -+ bool test __attribute__((unused)) = true; -+ -+ using namespace std::experimental::filesystem; -+ const char* s = "abc"; -+ path p(s); -+ -+ auto str = p.string<char>(); -+ VERIFY( str == u"abc" ); -+ VERIFY( str == p.string() ); -+ -+ auto strw = p.string<wchar_t>(); -+ VERIFY( strw == L"abc" ); -+ VERIFY( strw == p.wstring() ); -+ -+ auto str16 = p.string<char16_t>(); -+ VERIFY( str16 == u"abc" ); -+ VERIFY( str16 == p.u16string() ); -+ -+ auto str32 = p.string<char32_t>(); -+ VERIFY( str32 == U"abc" ); -+ VERIFY( str32 == p.u32string() ); -+} -+ -+int -+main() -+{ -+ test01(); -+ test02(); -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/experimental/functional/searchers.cc gcc-6-20160721/libstdc++-v3/testsuite/experimental/functional/searchers.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/experimental/functional/searchers.cc 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/experimental/functional/searchers.cc 2016-07-19 22:16:31.000000000 +0000 -@@ -22,6 +22,7 @@ - #ifdef _GLIBCXX_USE_WCHAR_T - # include <cwchar> - #endif -+#include <algorithm> - #include <testsuite_hooks.h> - - using std::experimental::make_default_searcher; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/experimental/optional/cons/value.cc gcc-6-20160721/libstdc++-v3/testsuite/experimental/optional/cons/value.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/experimental/optional/cons/value.cc 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/experimental/optional/cons/value.cc 2016-07-06 13:58:32.000000000 +0000 -@@ -22,6 +22,7 @@ - #include <testsuite_hooks.h> - - #include <vector> -+#include <string> - - struct tracker - { -@@ -236,4 +237,22 @@ - - VERIFY( result == caught ); - } -+ -+ { -+ std::experimental::optional<std::string> os = "foo"; -+ struct X -+ { -+ explicit X(int) {} -+ X& operator=(int) {return *this;} -+ }; -+ std::experimental::optional<X> ox{42}; -+ std::experimental::optional<int> oi{42}; -+ std::experimental::optional<X> ox2{oi}; -+ std::experimental::optional<std::string> os2; -+ os2 = "foo"; -+ std::experimental::optional<X> ox3; -+ ox3 = 42; -+ std::experimental::optional<X> ox4; -+ ox4 = oi; -+ } - } -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/experimental/optional/cons/value_neg.cc gcc-6-20160721/libstdc++-v3/testsuite/experimental/optional/cons/value_neg.cc ---- gcc-6.1.0/libstdc++-v3/testsuite/experimental/optional/cons/value_neg.cc 1970-01-01 00:00:00.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/experimental/optional/cons/value_neg.cc 2016-07-06 13:58:32.000000000 +0000 -@@ -0,0 +1,39 @@ -+// { dg-options "-std=gnu++14" } -+// { dg-do compile } -+ -+// Copyright (C) 2013-2016 Free Software Foundation, Inc. -+// -+// This file is part of the GNU ISO C++ Library. This library is free -+// software; you can redistribute it and/or modify it under the -+// terms of the GNU General Public License as published by the -+// Free Software Foundation; either version 3, or (at your option) -+// any later version. -+ -+// This library is distributed in the hope that it will be useful, -+// but WITHOUT ANY WARRANTY; without even the implied warranty of -+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+// GNU General Public License for more details. -+ -+// You should have received a moved_to of the GNU General Public License along -+// with this library; see the file COPYING3. If not see -+// <http://www.gnu.org/licenses/>. -+ -+#include <experimental/optional> -+#include <testsuite_hooks.h> -+ -+#include <string> -+#include <memory> -+ -+int main() -+{ -+ { -+ struct X -+ { -+ explicit X(int) {} -+ }; -+ std::experimental::optional<X> ox{42}; -+ std::experimental::optional<X> ox2 = 42; // { dg-error "conversion" } -+ std::experimental::optional<std::unique_ptr<int>> oup{new int}; -+ std::experimental::optional<std::unique_ptr<int>> oup2 = new int; // { dg-error "conversion" } -+ } -+} -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/util/testsuite_fs.h gcc-6-20160721/libstdc++-v3/testsuite/util/testsuite_fs.h ---- gcc-6.1.0/libstdc++-v3/testsuite/util/testsuite_fs.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/util/testsuite_fs.h 2016-05-26 17:18:13.000000000 +0000 -@@ -83,11 +83,13 @@ - p = tmp; - #else - char buf[64]; -+ static int counter; - #if _GLIBCXX_USE_C99_STDIO -- std::snprintf(buf, 64, "filesystem-ts-test.%lu", (unsigned long)::getpid()); -+ std::snprintf(buf, 64, - #else -- std::sprintf(buf, "filesystem-ts-test.%lu", (unsigned long)::getpid()); -+ std::sprintf(buf, - #endif -+ "filesystem-ts-test.%d.%lu", counter++, (unsigned long) ::getpid()); - p = buf; - #endif - return p; -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libstdc++-v3/testsuite/util/testsuite_iterators.h gcc-6-20160721/libstdc++-v3/testsuite/util/testsuite_iterators.h ---- gcc-6.1.0/libstdc++-v3/testsuite/util/testsuite_iterators.h 2016-01-04 14:30:50.000000000 +0000 -+++ gcc-6-20160721/libstdc++-v3/testsuite/util/testsuite_iterators.h 2016-06-17 18:53:46.000000000 +0000 -@@ -542,6 +542,13 @@ - test_container(T* _first, T* _last):bounds(_first, _last) - { } - -+#if __cplusplus >= 201103L -+ template<std::size_t N> -+ explicit -+ test_container(T (&arr)[N]) : test_container(arr, arr+N) -+ { } -+#endif -+ - ItType<T> - it(int pos) - { -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libvtv/ChangeLog gcc-6-20160721/libvtv/ChangeLog ---- gcc-6.1.0/libvtv/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/libvtv/ChangeLog 2016-05-02 18:12:21.000000000 +0000 -@@ -1,3 +1,10 @@ -+2016-05-02 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> -+ -+ * Makefile.am (toolexeclib_LTLIBRARIES): Only set if -+ ENABLE_VTABLE_VERIFY. -+ Simplify. -+ * Makefile.in: Regenerate. -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libvtv/Makefile.am gcc-6-20160721/libvtv/Makefile.am ---- gcc-6.1.0/libvtv/Makefile.am 2015-11-25 10:30:25.000000000 +0000 -+++ gcc-6-20160721/libvtv/Makefile.am 2016-05-02 18:12:21.000000000 +0000 -@@ -38,10 +38,11 @@ - AM_CXXFLAGS += $(LIBSTDCXX_RAW_CXX_CXXFLAGS) - AM_CXXFLAGS += -Wl,-u_vtable_map_vars_start,-u_vtable_map_vars_end - --if VTV_CYGMIN -- toolexeclib_LTLIBRARIES = libvtv.la libvtv_stubs.la --else -+if ENABLE_VTABLE_VERIFY - toolexeclib_LTLIBRARIES = libvtv.la -+if VTV_CYGMIN -+ toolexeclib_LTLIBRARIES += libvtv_stubs.la -+endif - endif - - vtv_headers = \ -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/libvtv/Makefile.in gcc-6-20160721/libvtv/Makefile.in ---- gcc-6.1.0/libvtv/Makefile.in 2016-04-27 08:22:11.000000000 +0000 -+++ gcc-6-20160721/libvtv/Makefile.in 2016-07-21 22:33:06.000000000 +0000 -@@ -53,7 +53,8 @@ - build_triplet = @build@ - host_triplet = @host@ - target_triplet = @target@ --@ENABLE_VTABLE_VERIFY_TRUE@@VTV_NO_OBSTACK_TRUE@am__append_1 = obstack.c -+@ENABLE_VTABLE_VERIFY_TRUE@@VTV_CYGMIN_TRUE@am__append_1 = libvtv_stubs.la -+@ENABLE_VTABLE_VERIFY_TRUE@@VTV_NO_OBSTACK_TRUE@am__append_2 = obstack.c - subdir = . - DIST_COMMON = ChangeLog $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/configure $(am__configure_deps) \ -@@ -119,8 +120,8 @@ - libvtv_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(libvtv_la_LDFLAGS) $(LDFLAGS) -o $@ --@VTV_CYGMIN_FALSE@am_libvtv_la_rpath = -rpath $(toolexeclibdir) --@VTV_CYGMIN_TRUE@am_libvtv_la_rpath = -rpath $(toolexeclibdir) -+@ENABLE_VTABLE_VERIFY_TRUE@am_libvtv_la_rpath = -rpath \ -+@ENABLE_VTABLE_VERIFY_TRUE@ $(toolexeclibdir) - libvtv_stubs_la_LIBADD = - am__objects_3 = vtv_start.lo vtv_stubs.lo vtv_end.lo - @ENABLE_VTABLE_VERIFY_TRUE@@VTV_CYGMIN_TRUE@am_libvtv_stubs_la_OBJECTS = \ -@@ -129,7 +130,9 @@ - libvtv_stubs_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(libvtv_stubs_la_LDFLAGS) $(LDFLAGS) -o $@ --@VTV_CYGMIN_TRUE@am_libvtv_stubs_la_rpath = -rpath $(toolexeclibdir) -+@ENABLE_VTABLE_VERIFY_TRUE@@VTV_CYGMIN_TRUE@am_libvtv_stubs_la_rpath = \ -+@ENABLE_VTABLE_VERIFY_TRUE@@VTV_CYGMIN_TRUE@ -rpath \ -+@ENABLE_VTABLE_VERIFY_TRUE@@VTV_CYGMIN_TRUE@ $(toolexeclibdir) - DEFAULT_INCLUDES = -I.@am__isrc@ - depcomp = $(SHELL) $(top_srcdir)/../depcomp - am__depfiles_maybe = depfiles -@@ -323,8 +326,8 @@ - AM_CCASFLAGS = $(XCFLAGS) - AM_CXXFLAGS = $(XCFLAGS) $(LIBSTDCXX_RAW_CXX_CXXFLAGS) \ - -Wl,-u_vtable_map_vars_start,-u_vtable_map_vars_end --@VTV_CYGMIN_FALSE@toolexeclib_LTLIBRARIES = libvtv.la --@VTV_CYGMIN_TRUE@toolexeclib_LTLIBRARIES = libvtv.la libvtv_stubs.la -+@ENABLE_VTABLE_VERIFY_TRUE@toolexeclib_LTLIBRARIES = libvtv.la \ -+@ENABLE_VTABLE_VERIFY_TRUE@ $(am__append_1) - vtv_headers = \ - vtv_map.h \ - vtv_malloc.h \ -@@ -354,7 +357,7 @@ - @VTV_CYGMIN_TRUE@libvtv_stubs_la_LDFLAGS = $(lt_host_flags) - @ENABLE_VTABLE_VERIFY_FALSE@libvtv_la_SOURCES = - @ENABLE_VTABLE_VERIFY_TRUE@libvtv_la_SOURCES = $(vtv_sources) \ --@ENABLE_VTABLE_VERIFY_TRUE@ $(am__append_1) -+@ENABLE_VTABLE_VERIFY_TRUE@ $(am__append_2) - @ENABLE_VTABLE_VERIFY_TRUE@@VTV_CYGMIN_TRUE@libvtv_stubs_la_SOURCES = $(vtv_stubs_sources) - @ENABLE_VTABLE_VERIFY_FALSE@libvtv_include_HEADERS = - @ENABLE_VTABLE_VERIFY_TRUE@libvtv_include_HEADERS = $(vtv_headers) -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/maintainer-scripts/ChangeLog gcc-6-20160721/maintainer-scripts/ChangeLog ---- gcc-6.1.0/maintainer-scripts/ChangeLog 2016-04-27 08:20:21.000000000 +0000 -+++ gcc-6-20160721/maintainer-scripts/ChangeLog 2016-06-13 07:57:52.000000000 +0000 -@@ -1,3 +1,8 @@ -+2016-06-13 Jonathan Wakely <jwakely@redhat.com> -+ -+ * generate_libstdcxx_web_docs: Use realpath to get absolute path. -+ Add comment about LaTeX errors. -+ - 2016-04-27 Release Manager - - * GCC 6.1.0 released. -diff -ru --unidirectional-new-file --exclude po gcc-6.1.0/maintainer-scripts/generate_libstdcxx_web_docs gcc-6-20160721/maintainer-scripts/generate_libstdcxx_web_docs ---- gcc-6.1.0/maintainer-scripts/generate_libstdcxx_web_docs 2014-10-30 10:11:38.000000000 +0000 -+++ gcc-6-20160721/maintainer-scripts/generate_libstdcxx_web_docs 2016-06-13 07:57:52.000000000 +0000 -@@ -3,7 +3,7 @@ - # i.e. http://gcc.gnu.org/onlinedocs/gcc-x.y.z/libstdc++* - - SRCDIR=${1} --DOCSDIR=${2} -+DOCSDIR=$(realpath ${2}) - - if ! [ $# -eq 2 -a -x "${SRCDIR}/configure" -a -d "${DOCSDIR}" ] - then -@@ -34,6 +34,9 @@ - ${SRCDIR}/configure --enable-languages=c,c++ --disable-gcc $disabled_libs --docdir=/docs - eval `grep '^target=' config.log` - make configure-target -+# If the following step fails with an error like -+# ! LaTeX Error: File `xtab.sty' not found. -+# then you need to install the relevant TeX package e.g. texlive-xtab - make -C $target/libstdc++-v3 doc-install-html doc-install-xml doc-install-pdf DESTDIR=$DESTDIR - cd $DESTDIR/docs - mkdir libstdc++ |