Many of our iplist classes (MachineBasicBlock, MemoryAccess) do something like this: template <class T> ListNode { T *prev, *next; }; template <class T> struct List { ListNode<T> Sentinel; T *Head = static_cast<T *>(&Sentinel); void ensureHead() {} }; Because of iterators have pointers to `T` instead of `ListNodeBase`, this exposes UB. See here for more details: http://lists.llvm.org/pipermail/llvm-dev/2015-October/091115.html
Just as an update since my last email, I have a plan for fixing this, but it's not safe until I've made the implicit conversion in MachineInstrBundleIterator explicit: -- template <class NodeTy> struct MachineInstrBundleIterator { ilist_iterator<NodeTy> I; operator NodeTy*() { return I.getNodePtrUnchecked(); } }; -- My fix will remove getNodePtrUnchecked entirely from ilist_iterator, and this code will change to: -- { return &*I; } -- so I need to make sure all callers have a valid iterator.
r276902(In reply to comment #1) > Just as an update since my last email, I have a plan for fixing this, but > it's not safe until I've made the implicit conversion in > MachineInstrBundleIterator explicit... Finished that in r276902. I'll try figure out what's left when I'm back from vacation.
I have patches locally that remove the inherent UB from iplist/ilist/ilist_node/ilist_iterator, with all tests passing (a few fixes to end()-dereferences required). Shouldn't be long now?
Just sent a review to the list to fix this. http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20160808/381741.html
A few follow-ups to do for cleanup, but this was fixed in r278974! I can't imagine anyone needs/wants to cherry-pick all of these (... just re-branch), but since I have them, this was: r249439 = dd076fe91adccc1123e7354630f12cdc19e9dbad r249469 = 67f918ec8f6e59640d5fb424649406602b83e0d7 r249473 = ac3b52bb0da8ac7f43128fd0f3eb82bfb7c51114 r249476 = 3c050416f050ffd637777d94b9f1a51bbad28b41 r249480 = 0ea7b26ee30f82fc2056e9a53422a5675294a8e6 r249602 = 2a8bcfaff1fda1ed06e277521d546c668bc7a0d9 r249615 = 10b15bcfb2dc6bd5400627e31cf0c80b383b3cd0 r249758 = 9dd9ad6bac63f0e3a8b1be083067b36f68846753 r249763 = ec0b29efd9f21e18e680796173ce44d2c77dd530 r249764 = 9c2fb736df3c6b378c8f7531aa5e101628925c18 r249767 = e38e995296990da45788fe474d38d2642d38026b r249782 = eac309550f259b7f78f1e69ea8e62fea493efd43 r249783 = 4100fc009b56a849ea878b6e0375caa5992ba91b r249849 = 8d79660263017f344bf01f6af7e488718d42061f (clang) r249850 = 42247d0394a75c1594f2da9ea622cdf15aee9ae5 r249851 = 9cb8e12ce13a21a3eb86af76d93423b6b11d86be r249852 = 969c1a317d2533e676124ee656a5c1c911a22293 r249867 = aa464da594c387256b51beb438d5e830784f26a9 r249869 = 7e15cfe71debf109ec1ff5ffddb2eb48ac2c450d r249875 = 030cf8e04ea0889556ae7e3ceb5e969e557e096f r249876 = 8d36360b15d9fad9833c86df71d047a7b99881bb r249877 = d578a48c6d058d8c3ef4287312b5e38dfd9d9924 r249879 = 3f2c43f3c515ad6e9dcae45cec190e15ffd79643 r249880 = b1510c25d944707893ff81ca65645586afdd638e r249883 = 1b44cbf5acedf967dcc20417151e462dd2a9b67b r249884 = 9731c604b2cdeef1a31ad147aea0392b69f41698 r249901 = ba910070a03a4e4526c514c6a30e47f90d6f29b2 r249903 = fdec461fa2fb048febec7b394c84b4e8b20f49cc r249915 = ac4d7b6f102f3f4975c78d9449c09561266f0061 r249922 = 5d8fcb9d71041be14fe962efeaf7a9fc6bae8267 r249925 = d3a5adc5ba41464aadb5e046e29127b849f163fc r250142 = 5270f8871afccf775ccd118ad630ae63b5280312 r250144 = f25f287e36aa290857d6e3719d8ff2ef1fc87ef7 r250181 = bcd41c02dde44879b1bf1521ad60be33e8934404 r250183 = f83f208edf8fdf44d523441fc799ec2083c994dc r250185 = ad48b0143782c7c73a96b719e8b7d370e47321cf r250186 = 210a1543469273e3a0a5dc77f2e08508a0965fb6 r250187 = 1e2bc42eb988b4b2635697193b46a95dd6eef32d r250192 = fb34e26585f42675603bf8c5f510c435f985edde r250193 = cf8b61870a9d8e5266c628b727b222e1736f1171 r250197 = 7e8a22b5c88c113bfa3da4eabdeec000f28aebb2 r250211 = b886fde9afa62670efac756f82cfcee682ea5250 r250214 = 20f1c08887c8eb4da999b67fd49cd5da8b6c06bb r250216 = 970ba66ca4d7aa93cc473a3c348e900138ed3140 r250218 = 3d5dddde47d419a06dfcc461bed1a76872af08dc r250741 = d765f759fab6eaa9caa1765e4edddb4da511af4d r250745 = f792618d1c05c8f152a9901937529b101730b774 r250748 = 989a95d395d758ba99408e70d034e49c7a65993d r250756 = 25622c1340090cd1ac82b7a104d1824c5e9f9914 r250759 = 974314ae03cd634a1fa62f32acfd7464b505c629 r250765 = 2b76674c16a5e56c47c4de3cc7bbc5db4f79b398 r250766 = 7a225f7f37e08179e5dc8fc397d53d47b5e351d0 r250769 = ddeb82cedb89b3348662c0bb92e4a19b4dc9c8ff r250776 = 97fa27f70e65d5e66922b375fdaf8d320306e0ef r250778 = 8525f3a7bcb41496c5316b01ab76c505db193f9d r250779 = db991cb068bcf148dd1bf46050fb9da51d83d66a r250781 = 2b1499041b5e3e5480359bc5f3e2c24cd58523f5 r250787 = fa3f538fd6d9bc6b785f94ffc9036d36f01ee8fb r250788 = a1a3f2d293191c0f9d3cb3d8351fe4187affd3b7 r250790 = e8e219bb514b36ed65eca86c8211e2eed5b91d18 r250791 = 090db0267d94b01a06543dd5021c4a6acfc09f44 r250792 = 3698b0ef5542a055f2504733eecb3d3f3e1a61a4 r250842 = 00f8d5fdf7b667e16a0d62188a50edff3e3a92e2 r250843 = 70f8c2049fceeebb3342dfedfd5aceba6fa356d9 r250852 = 1e221d5c2cb38938fe0c7ffedfb078af33d036cb r252357 = 1583cbbc91e4289536bb9ec8e2f064c4d784b897 (polly) r252358 = 2ceddccf8fd4a21649214eccf493fc8fa60760c0 (clang) r252360 = 67fafbb08d456c44dabca62e3af4c20abb715d65 (clang) r252371 = 5013c51dfcd73ee1bcfa8e9a8b85561cf7a6d237 r252372 = 84cb8974bde802f860313fc7001d60ed674700ae r252373 = d81c5525e10168bb6ce5232b2f41ad825893162e (revert r252372) r252378 = b377de5cefab24ad523821dfee3ce31c3c7a8dbb (lldb) r252379 = 7d7668eb6bc4f2b1984e5841b16d87b038256231 r252380 = 45d3f0d253091e1cda26614864b9df3d86608a56 r252538 = 9df84ef7b9e1a374378d1538a8718f4a17c5a79d r252694 = 6426aea54e5be9ceb0dd981db8459857785a2e61 r261491 = 729234413bb9e19144a46a592099dedca47dd3d2 r261492 = be77f42278324e5a7e392034c46e56a0313e0de0 r261493 = 2d6fcba17e9e4f072bc414028559b17f188db0c3 r261495 = 14147eda61bcd56fefb629faebe79d4bd8607a55 r261497 = d73d33fedf5dd5ad2b6a34eef0afa24a8cebe84e r261498 = 8de6150816ce1efec2b1180fd8fe70364b45270f r261499 = 7b83cb68d4f87d66d5112a7da4c566eab8a526a0 r261500 = 151a6ae8d103c1907292f7fa0817e40378dbec73 r261502 = b64deed8bbbfeb79795266439f6a17c116074815 r261504 = 6e5736e1aaf05ed49c2b0b76344b37823a860220 r261507 = 17ef67672c993aa0ade493ad983097bbc1b54ead r261508 = d2c0ad9eb49a2942f30367aded45d6e8fbc3a8bb r261509 = 8c34e067a797df652feb361b0458e281fe54cc25 r261510 = 01f8c42f80b1b81499f5495d681ef180c49802b9 (revert r261509) r261511 = 65b18dd93d1e680daf18638802fb6108136143fe r261567 = 20a62528ef837d39f18926eebc39c154c3030636 (revert r261504) r261577 = 110284e56c34f47f235b204f62bfb3994340262f (revert r261504 p2) r261605 = 5b9b80ea30d9ce4a2fe3276636fcf52fda223e5a r262115 = 42e18357c51538d774d361bbb5ef99f131d0ba98 r262116 = e71d87d7c649738d522c078d58604745352066fb r262118 = 6667d85d09808649e5658b0a0257608521536b57 r262141 = 63ec7f0445cbec86cade546613a35d01afbfd13e r262142 = 0ce039da168509f13628f04de27f38526165ed87 r262143 = 666629273f9cdd0019b2c092327d28219ddd7798 r262144 = d7b3cd7a4ee6faff53d783e4a3684a3d074701b0 r262145 = a26cd9c5bafbd0e41643dcbba3f8729e01b8c61d r262146 = 7dd408db9a132a0df426ef60cbf9ac51ec78e714 r262149 = 1d75c8d9ec04c21293aeca3dccbe5363c893d34f r262151 = 5144d3546c66a5743adfaf0441e22a0d35d610b3 r262152 = cc3610dedb011741ae788c2e25c3f531a87913be r262154 = 88bff1c24a74728735fad5c9b0bcf5d14045f6f8 r274189 = 567409db69410d422145e72a29243da1cd606754 r274193 = e1a95d05f2c28cc618506f27a5efea1a4d1990d8 r274287 = a204da23dbcbf15bf28bf45349b16ff5a9a70ac2 r274290 = e4756450e1e5346cd6b30b19264b54b69dd0bee1 r274292 = b6b73f6780ac03f2d9333c2ea451ef8a54e68e55 r274294 = 8a1fda17be9448d60811d6f07e26d50277c57b27 r274295 = 6feb5c96f42598a4279c45dd00e1194bd31ba185 r274297 = 14a454a0056d9886a2e88c1d7feb614b33a49256 r274298 = a076358f6af3648f0550a82f1b8c0caf962cfc0a r274300 = fdab22c8f32ada4c87f7decd5f02a24837b90da5 r274301 = 03941cc7c4d615e569fd8e9ce482a9e12a7df4a0 r274303 = dbcbdf39c64e89d976b899749bbd194fdaf7dc31 r274304 = a354e21338839ab38fb38853353c175cba3b3619 r274310 = 5bcaf78e5909dc8dab481ad37cbf960f5e9f82f2 r274311 = ed5a96fffb0278e06a0fe8f89e32df7de1671107 r274315 = e16c630f4a9405c53d12d7e03e7b18f70fd2c4d3 r274317 = 1b7dbea16702201b2b304d5b3b44a94ea5fd4fec r274319 = 4383a516d13be5bb5dac05af366dafeb127498c8 r274353 = ce5fdc00e7ed9f05c643b056d0561a8133b5438b r274354 = effa4cc200078395a74decd1ae2d1e380c79a2f7 r274355 = 2cafa0233a7e9fcb5a2d7b05f607409c7fca8224 r274360 = f634f61108e21aa19233ecebd618e76984bf6bf6 r274361 = 1032b93f3a7734ff128bc3691b1f7a78bc221897 r274363 = 7aad63c5c97f549a089af9a7f5f9c02c99627238 r274888 = c3d3821c070cf6447469b47fc293ba79740d76cd r274892 = fccaf97f849bfbebdc81acc6ba319576bb7caa19 r274893 = ccb7a2f2404b003c294fdf23b8741c64c1f78b9c r274898 = 04671b92e9b90bb4fa22ee8872f5e3244eb1fb68 r274899 = cc2c87f5878ae6a1ef01dcd4f007ef8a2ef64d2a r274902 = f360e3f67a6af5e9686a657e3f0ca3d14622b4c4 r274903 = a60f808fc9c0cfa6445afe1c3160060de831e414 r274904 = 9ea0ae7891c20fb9185270d3476bcfec5970b025 r274906 = 83b2ab7c4cba20fa607685d5cee5c3b26d1c08f5 r274907 = 86a3f7842ec7c7e25ea45e1a3570ff5e6dce9a9e r274911 = 5de74a67601c71629b79374595459ec71e04ab6c r274912 = a3dcb9e3b4beaad19d669326cd88ca93ceedc5a5 r274913 = 35be20ea989e9d5031ff1410551d8862ec8b6246 r274920 = c347f0af45bb635036315ff55e76942255723eee r274931 = 0795ebde877ea42f36db63615207e703dc4353ae r274933 = 3f1460a12ac1c3da2b2ddcc8b7b9c3f3a7588d1b r274942 = ccc4444ea5f7bf0c90d6f36076b5df36cbf78d44 r275137 = cf91a6f85901bd7aa66e493ba604c56fc313c666 r275141 = 721fe5d4574471e8732f86ca2167704019f46894 r275142 = 8c13ec21d3d017ea08423ac0016fc90b2d6e3bcc r275149 = a17edeb5259e3c7d6e4eaa907660db496d7b5ad4 r276864 = f5be002fc9af58808a0a3bd37bd9225ea1b09dd4 r276899 = cfc6fb48a8c7b1d6d573fc44dcea6a47cae9adb5 r276902 = fe912bf4b0188a524182ebc82eb4433617086c88 r278344 = 91c138b3e0cd166b827c0bebf50e1da81ea5d447 r278346 = 9040acb5e328360f921beca8da81476dcb12323c r278347 = 8949cc2a95f730915d0325e2271922b0e2ce9e23 r278355 = aba9f58b23e0c6d647f1e0d103ca8cb7193157ca r278394 = eeb1d4fe2ebf6c54594ed80d8aee7ad35af83bac r278467 = 369a6329ffcbab6083274203b8373bce5c30bedb r278468 = b5efffbf1d786e5bb6e2e1fd1dff3b1480176681 (lld) r278478 = 21bcd75d9bb09783cb184a33c495e7d15b3429e0 r278513 = 3e97be26b9e6d4bc92ddf84da63f710cefe74a5c r278521 = 9396e31b890d4b6e00ed510bcac970f1482ff3e3 (lld) r278523 = 8457dd72dc010773253cbfe86f533a61e6c18413 (lld) r278525 = 573f6313b0a82039b804bf0afad05f8fa3ef218e (clang) r278532 = 6394023d1dc5ca9abd511a7a04a386b7526bfb60 r278537 = a33b92eb826a6d6273892ef548a069a336e4e883 r278539 = f74d3827849ca3864c0556039699d7586da798d6 r278542 = 3d3a4a49abd1946e873c0d8a9e39c006cba73f29 r278572 = 2b6735eb0f11dd8b40d265244a1d96ae5aa0ecbe r278577 = be1a4e1ef51b26c1c5e918fd0afe3701d1c1014f (thanks to hans@hanshq.net) r278587 = 46b81ba7ebc96be606a1b9e87bc8921a11dd2967 (thanks to hans@hanshq.net) r278858 = 52a07ee47a6decb521591386420d0de317cdf78c r278870 = e3c3e55fc5dd6ac02f8e1ada9f686618132ffb69 r278872 = cbbc1ca8d3ac387aef89c90f2a938d1add2afb50 r278873 = 9e4c8a36cac275d3075a207426e8f40e141b5332 r278878 = f62379272380f2d65575408fe4e2c62d66e770b5 r278879 = d4e0802b9b7c35e719a9777aaed969bb91d8279e r278880 = 4a3738ebeb2d300bec8acfc7a096c00b68d8cbb5 r278881 = 936a383311e776f86f9c2bf42958d42e8d1d127b r278884 = 370879ff090e3a692ed4bb68151fa299663ade26 r278886 = 3b3dd8847fc759ea68aa756721689248cda98cc7 r278887 = eb6a210db6e4ac24a66024b07a943cb64f386b59 r278898 = 1802c44dd4ae1f9abb99ba7746c9eccdc9ef59c8 (clang) r278974 = b2724ac8c12e41f2d2c1491eced9adaa22c8c796