{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,7,16]],"date-time":"2026-07-16T10:10:13Z","timestamp":1784196613333,"version":"3.55.0"},"reference-count":76,"publisher":"Association for Computing Machinery (ACM)","issue":"PLDI","funder":[{"DOI":"10.13039\/501100001871","name":"Funda\u00e7\u00e3o para a Ci\u00eancia e a Tecnologia","doi-asserted-by":"publisher","award":["10.54499\/UIDB\/50021\/2020"],"award-info":[{"award-number":["10.54499\/UIDB\/50021\/2020"]}],"id":[{"id":"10.13039\/501100001871","id-type":"DOI","asserted-by":"publisher"}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2025,6,10]]},"abstract":"<jats:p>A core design principle of C++ is that users should only incur costs for features they actually use, both in terms of performance and code size. A notable exception to this rule is the run-time type information (RTTI) data, used for dynamic downcasts, exceptions, and run-time type introspection.<\/jats:p>\n                  <jats:p>For classes that define at least one virtual method, compilers generate RTTI data that uniquely identifies the type, including a string for the type name. In large programs with complex type inheritance hierarchies, this RTTI data can grow substantially in size. Moreover, dynamic casting algorithms are linear in the type hierarchy size, causing some programs to spend considerable time on these casts.<\/jats:p>\n                  <jats:p>\n                    The common workaround is to use the\n                    <jats:monospace>-fno-rtti<\/jats:monospace>\n                    compiler flag, which disables RTTI data generation. However, this approach has significant drawbacks, such as disabling polymorphic exceptions and dynamic casts, and requiring the flag to be applied across the entire program due to ABI changes.\n                  <\/jats:p>\n                  <jats:p>In this paper, we propose a new link-time optimization to mitigate both the performance and size overhead associated with dynamic casts and RTTI data. Our optimization replaces costly library calls for downcasts with short instruction sequences and eliminates unnecessary RTTI data by modifying vtables to remove RTTI slots. Our prototype, implemented in the LLVM compiler, demonstrates an average speedup of 1.4%, as well as an average binary size reduction of 1.7%.<\/jats:p>","DOI":"10.1145\/3729266","type":"journal-article","created":{"date-parts":[[2025,6,13]],"date-time":"2025-06-13T16:02:27Z","timestamp":1749830547000},"page":"503-526","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":1,"title":["Link-Time Optimization of Dynamic Casts in C++ Programs"],"prefix":"10.1145","volume":"9","author":[{"ORCID":"https:\/\/orcid.org\/0009-0008-5511-9099","authenticated-orcid":false,"given":"Xufan","family":"Lu","sequence":"first","affiliation":[{"name":"INESC-ID, Lisboa, Portugal"},{"name":"Instituto Superior T\u00e9cnico - University of Lisbon, Lisboa, Portugal"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-3160-1672","authenticated-orcid":false,"given":"Nuno P.","family":"Lopes","sequence":"additional","affiliation":[{"name":"INESC-ID, Lisboa, Portugal"},{"name":"Instituto Superior T\u00e9cnico - University of Lisbon, Lisboa, Portugal"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2025,6,13]]},"reference":[{"key":"e_1_3_2_2_2","doi-asserted-by":"publisher","unstructured":"Mart\u00edn Abadi Mihai Budiu \u00dalfar Erlingsson and Jay Ligatti. 2005. Control-flow integrity. In CCS. https:\/\/doi.org\/10.1145\/1102120.1102165 10.1145\/1102120.1102165","DOI":"10.1145\/1102120.1102165"},{"key":"e_1_3_2_3_2","doi-asserted-by":"publisher","unstructured":"Wonson Ahn Jihye Choi Thomas Shull Maria J. Garz\u00e1n and Josep Torrellas. 2014. Improving JavaScript performance by deconstructing the type system. In JDL. https:\/\/doi.org\/10.1145\/2594291.2594332 10.1145\/2594291.2594332","DOI":"10.1145\/2594291.2594332"},{"key":"e_1_3_2_4_2","doi-asserted-by":"publisher","unstructured":"Gerald Aigner and Urs H\u00f6lzle. 1996. Eliminating Virtual Function Calls in C++ Programs. In ECCOP. https:\/\/doi.org\/10.1007\/BFb0053060 10.1007\/BFb0053060","DOI":"10.1007\/BFb0053060"},{"key":"e_1_3_2_5_2","doi-asserted-by":"publisher","unstructured":"Hamed Seide Lavi Sei Gilbert Seth and Rachid Guerraoui. 2008. Extensible encoding of type hierarchies. In POPL. https:\/\/doi.org\/10.1145\/1328438.1328480 10.1145\/1328438.1328480","DOI":"10.1145\/1328438.1328480"},{"key":"e_1_3_2_6_2","unstructured":"Bowen Alpern Anthony Cocchi and David Grove. 2001. Dynamic type checking in Jalape\u00f1o. In JVM. https:\/\/www.usenix.org\/legacy\/events\/jvm01\/full_papers\/alpern\/alpern.pdf"},{"key":"e_1_3_2_7_2","doi-asserted-by":"publisher","unstructured":"Bowen Alpern Anthony Cocchi and David Grove. 2012. Some new approaches to partial inlining. In VMIL. https:\/\/doi.org\/10.1145\/2414740.2414749 10.1145\/2414740.2414749","DOI":"10.1145\/2414740.2414749"},{"key":"e_1_3_2_8_2","doi-asserted-by":"publisher","unstructured":"David F. Bacon and Peter F. Sweeney. 1996. Fast static analysis of C++ virtual function calls. In OOPSLA. https:\/\/doi.org\/10.1145\/236377.236371 10.1145\/236377.236371","DOI":"10.1145\/236377.236371"},{"key":"e_1_3_2_9_2","doi-asserted-by":"publisher","unstructured":"Nicolas Badoux Flavio Toffalini Jeon Yuseok and Mathias Payer. 2025. type++: Prohibiting Type Confusion with Inline Type Information. In NDSS. https:\/\/doi.org\/10.14722\/ndss.2025.230053 10.14722\/ndss.2025.230053","DOI":"10.14722\/ndss.2025.230053"},{"key":"e_1_3_2_10_2","doi-asserted-by":"publisher","unstructured":"George Balatsouras and Yannis Smaragdakis. 2016. Structure-Sensitive Points-To Analysis for C and C++. In SAS. https:\/\/doi.org\/10.1007\/978-3-662-53413-7_5 10.1007\/978-3-662-53413-7_5","DOI":"10.1007\/978-3-662-53413-7_5"},{"key":"e_1_3_2_11_2","doi-asserted-by":"publisher","unstructured":"Dimitar Bounov Rami G\u00f6khan K\u0131c\u0131 and Sorin Lerner. 2016. Protecting C++ Dynamic Dispatch Through VTable Interleaving. In NDSS. https:\/\/doi.org\/10.14722\/ndss.2016.23421 10.14722\/ndss.2016.23421","DOI":"10.14722\/ndss.2016.23421"},{"key":"e_1_3_2_12_2","doi-asserted-by":"publisher","unstructured":"Nathan Burow Derrick Pu David McKee Scott A. Carpenter and Mathias Payer. 2018. CFIX: Object Type Integrity for C++. In NDSS. https:\/\/doi.org\/10.14722\/ndss.2018.23279 10.14722\/ndss.2018.23279","DOI":"10.14722\/ndss.2018.23279"},{"key":"e_1_3_2_13_2","doi-asserted-by":"publisher","unstructured":"Brad Calder and Dirk Grunwald. 1994. Reducing indirect function call overhead in C++ programs. In POPL. https:\/\/doi.org\/10.1145\/174675.177973 10.1145\/174675.177973","DOI":"10.1145\/174675.177973"},{"key":"e_1_3_2_14_2","doi-asserted-by":"publisher","unstructured":"David Callahan Keith D. Cooper Ken Kennedy and Linda Torczon. 1986. Interprocedural constant propagation. In CC. https:\/\/doi.org\/10.1145\/12276.13327 10.1145\/12276.13327","DOI":"10.1145\/12276.13327"},{"key":"e_1_3_2_15_2","doi-asserted-by":"publisher","unstructured":"Jiho Choi Thomas Shull and Josep Torrellas. 2019. Reusable inline caching for JavaScript performance. In PLDI. https:\/\/doi.org\/10.1145\/3314221.3314587 10.1145\/3314221.3314587","DOI":"10.1145\/3314221.3314587"},{"key":"e_1_3_2_16_2","doi-asserted-by":"publisher","DOI":"10.1145\/115372.115297"},{"key":"e_1_3_2_17_2","doi-asserted-by":"publisher","unstructured":"Stephen J. Crane Stijn Volckaert Felix Schuster Christopher Liebchen Per Larsen Lucas Davi Ahmad-Reza Sadeghi Thorsten Holz Bjorn De Sutter and Michael Franz. 2015. It\u2019s a TRaP: Table Randomization and Protection against Function-Reuse Attacks. In CCS. https:\/\/doi.org\/10.1145\/2810103.2813682 10.1145\/2810103.2813682","DOI":"10.1145\/2810103.2813682"},{"key":"e_1_3_2_18_2","doi-asserted-by":"publisher","unstructured":"Jan de Mooij Mathew Gaudet Iain Ireland Nathan Henderson and J. Nelson Amaral. 2023. CacheIR: The Benefits of a Structured Representation for Inline Caches. In MPLR. https:\/\/doi.org\/10.1145\/3617651.3622979 10.1145\/3617651.3622979","DOI":"10.1145\/3617651.3622979"},{"key":"e_1_3_2_19_2","doi-asserted-by":"publisher","unstructured":"Jeffrey Dean David Grove and Craig Chambers. 1995. Optimization of Object-Oriented Programs Using Static Class Hierarchy Analysis. In ECOOP. https:\/\/doi.org\/10.1007\/3-540-49538-X_5 10.1007\/3-540-49538-X_5","DOI":"10.1007\/3-540-49538-X_5"},{"key":"e_1_3_2_20_2","doi-asserted-by":"publisher","DOI":"10.5626\/JCSE.2008.2.4.375"},{"key":"e_1_3_2_21_2","doi-asserted-by":"publisher","unstructured":"Damian Dechev Rabi Mahapatra Bjarne Stroustrup and David Wagner. 2008. C++ Dynamic Cast in Autonomous Space Systems. In ISORC. https:\/\/doi.org\/10.1109\/ISORC.2008.20 10.1109\/ISORC.2008.20","DOI":"10.1109\/ISORC.2008.20"},{"key":"e_1_3_2_22_2","doi-asserted-by":"publisher","unstructured":"Christian DeLozier Richard Eisenberg Santosh Nagarakatte Peter-Michael Osera Milo M. K. Martin and Steve Zdancewic. 2013. Ironclad C++: a library-augmented type-safe subset of C++. In OOPSLA. https:\/\/doi.org\/10.1145\/2509136.2509550 10.1145\/2509136.2509550","DOI":"10.1145\/2509136.2509550"},{"key":"e_1_3_2_23_2","doi-asserted-by":"publisher","unstructured":"Alan Deutsch. 1994. Interprocedural may-alias analysis for pointers: beyond k-limiting. In PLDI. https:\/\/doi.org\/10.1145\/178243.178263 10.1145\/178243.178263","DOI":"10.1145\/178243.178263"},{"key":"e_1_3_2_24_2","doi-asserted-by":"publisher","unstructured":"L. Peter Deutsch and Allan M. Schiffman. 1984. Efficient implementation of the smalltalk-80 system. In POPL. https:\/\/doi.org\/10.1145\/800017.800542 10.1145\/800017.800542","DOI":"10.1145\/800017.800542"},{"key":"e_1_3_2_25_2","doi-asserted-by":"publisher","unstructured":"Gregory J. Duck and Roland H. C. Yap. 2016. Heap bounds checking with low fat pointers. In CC. https:\/\/doi.org\/10.1145\/2892208.2892212 10.1145\/2892208.2892212","DOI":"10.1145\/2892208.2892212"},{"key":"e_1_3_2_26_2","doi-asserted-by":"publisher","unstructured":"Gregory J. Duck and Roland H. C. Yap. 2018. EffectiveSan: type and memory error detection using dynamically typed C\/C++. In PLDI. https:\/\/doi.org\/10.1145\/3192366.3192388 10.1145\/3192366.3192388","DOI":"10.1145\/3192366.3192388"},{"key":"e_1_3_2_27_2","doi-asserted-by":"publisher","unstructured":"Gregory J. Duck Roland H. C. Yap and Lorenzo Cavallaro. 2017. Stack Bounds Protection with Low Fat Pointers. In NDSS. https:\/\/doi.org\/10.14722\/ndss.2017.23287 10.14722\/ndss.2017.23287","DOI":"10.14722\/ndss.2017.23287"},{"key":"e_1_3_2_28_2","doi-asserted-by":"publisher","DOI":"10.1145\/1391956.1391960"},{"key":"e_1_3_2_29_2","doi-asserted-by":"publisher","DOI":"10.1145\/207110.207121"},{"key":"e_1_3_2_30_2","doi-asserted-by":"publisher","DOI":"10.1002\/spe.686"},{"key":"e_1_3_2_31_2","doi-asserted-by":"publisher","DOI":"10.1145\/1086642.1086643"},{"key":"e_1_3_2_32_2","unstructured":"TarasGleck and JanHubi\u010dka. 2010. Optimizing real world applications with GCC Link Time Optimization.arXiv:1010.2196https:\/\/arxiv.org\/abs\/1010.2196"},{"key":"e_1_3_2_33_2","doi-asserted-by":"publisher","DOI":"10.1145\/1075382.1075385"},{"key":"e_1_3_2_34_2","doi-asserted-by":"publisher","DOI":"10.1145\/151640.151643"},{"key":"e_1_3_2_35_2","doi-asserted-by":"publisher","DOI":"10.1145\/2976749.2978405"},{"key":"e_1_3_2_36_2","doi-asserted-by":"publisher","DOI":"10.1145\/325478.325519"},{"key":"e_1_3_2_37_2","doi-asserted-by":"publisher","DOI":"10.1145\/178243.178478"},{"key":"e_1_3_2_38_2","doi-asserted-by":"publisher","unstructured":"AlexanderH\u00fcck Jan-PatrickLehr SebastianKreutzer JoachimProtze ChristianTerboven ChristianBischof and Matthias S.Muller. [n.d.]. Compiler-aided Type Tracking for Correctness Checking of MPI Applications. In Correctness. https:\/\/doi.org\/10.1109\/Correctness.2018.00011 10.1109\/Correctness.2018.00011","DOI":"10.1109\/Correctness.2018.00011"},{"key":"e_1_3_2_39_2","doi-asserted-by":"publisher","unstructured":"DongseokJang ZacharyTatlock and SorinLerner. 2014. SafeDispatch: Securing C++ Virtual Calls from Memory Corruption Attacks. In NDSS. https:\/\/doi.org\/10.14722\/ndss.2014.23287 10.14722\/ndss.2014.23287","DOI":"10.14722\/ndss.2014.23287"},{"key":"e_1_3_2_40_2","doi-asserted-by":"publisher","unstructured":"YuseokJeon PriyamBiswas ScottCarr ByoungyoungLee and MathiasPayer. 2017. HexType: Efficient Detection of Type Confusion Errors for C++. In CCS. https:\/\/doi.org\/10.1145\/3133956.3134062 10.1145\/3133956.3134062","DOI":"10.1145\/3133956.3134062"},{"key":"e_1_3_2_41_2","unstructured":"TrevorJim GregMorrisett DanGrossman MichaelHicks JamesCheney and YanlingWang. 2002. Cyclone: A Safe Dialect of C. In USENIX ATC.https:\/\/www.usenix.org\/legacy\/publications\/library\/proceedings\/usenix02\/full_papers\/jim\/jim.pdfhttps:\/\/www.usenix.org\/legacy\/publications\/library\/proceedings\/usenix02\/full_papers\/jim\/jim.pdf"},{"key":"e_1_3_2_42_2","doi-asserted-by":"publisher","unstructured":"TeresaJohnson MehdiAmini and Xinliang DavidLi. 2017. ThinLTO: Scalable and incremental LTO. In CGO. https:\/\/doi.org\/10.1109\/CGO.2017.7863733 10.1109\/CGO.2017.7863733","DOI":"10.1109\/CGO.2017.7863733"},{"key":"e_1_3_2_43_2","doi-asserted-by":"publisher","unstructured":"Timothy M.Jones SandroBartolini JonasMaebe and DominiqueChanet. 2011. Link-time optimization for power efficiency in a tagless instruction cache. In CGO. https:\/\/doi.org\/10.1109\/CGO.2011.5764672 10.1109\/CGO.2011.5764672","DOI":"10.1109\/CGO.2011.5764672"},{"key":"e_1_3_2_44_2","doi-asserted-by":"publisher","unstructured":"GeorgeKastrinis and YannisSmaragdakis. 2013. Hybrid context-sensitivity for points-to analysis. In PLDI. https:\/\/doi.org\/10.1145\/2491956.2462191 10.1145\/2491956.2462191","DOI":"10.1145\/2491956.2462191"},{"key":"e_1_3_2_45_2","doi-asserted-by":"publisher","unstructured":"StephenKell. 2016. Dynamically diagnosing type errors in unsafe code. In OOPSLA. https:\/\/doi.org\/10.1145\/2983990.2983998 10.1145\/2983990.2983998","DOI":"10.1145\/2983990.2983998"},{"key":"e_1_3_2_46_2","unstructured":"OfekKirzner and AdamMorrison. 2021. An Analysis of Speculative Type Confusion Vulnerabilities in the Wild. In USENIX Security.https:\/\/www.usenix.org\/system\/files\/sec21-kirzner.pdfhttps:\/\/www.usenix.org\/system\/files\/sec21-kirzner.pdf"},{"key":"e_1_3_2_47_2","doi-asserted-by":"publisher","unstructured":"AndreasKrall JanVitek and R. NigelHorspool. 1997. Near optimal hierarchical encoding of types. In ECOOP. https:\/\/doi.org\/10.1007\/BF0053377 10.1007\/BF0053377","DOI":"10.1007\/BF0053377"},{"key":"e_1_3_2_48_2","doi-asserted-by":"publisher","unstructured":"AlbertKwon UditDhawan Jonathan M.Smith Thomas F.Knight and AndreDeHon. 2013. Low-fat pointers: compact encoding and efficient gate-level implementation of fat pointers for spatial safety and capability-based security. In CCS. https:\/\/doi.org\/10.1145\/2508859.2516713 10.1145\/2508859.2516713","DOI":"10.1145\/2508859.2516713"},{"key":"e_1_3_2_49_2","doi-asserted-by":"publisher","unstructured":"J. M.Larchev\u00eaque. 1992. Interprocedural type propagation for object-oriented languages. In ESOP. https:\/\/doi.org\/10.1007\/3-540-55253-7_19 10.1007\/3-540-55253-7_19","DOI":"10.1007\/3-540-55253-7_19"},{"key":"e_1_3_2_50_2","unstructured":"ByoungyoungLee ChengyuSong TaesooKim and WenkeLee. 2015. Type Casting Verification: Stopping an Emerging Attack Vector. In USENIX Security.https:\/\/www.usenix.org\/system\/files\/conference\/usenixsecurity15\/sec15-paper-lee.pdfhttps:\/\/www.usenix.org\/system\/files\/conference\/usenixsecurity15\/sec15-paper-lee.pdf"},{"key":"e_1_3_2_51_2","doi-asserted-by":"publisher","unstructured":"David XinliangLi RaksitAshok and RobertHundt. 2010. Lightweight feedback-directed cross-module optimization. In CGO. https:\/\/doi.org\/10.1145\/1772954.1772964 10.1145\/1772954.1772964","DOI":"10.1145\/1772954.1772964"},{"key":"e_1_3_2_52_2","unstructured":"LLVM. 2025. UndefinedBehaviorSanitizer a fast undefined behavior detector.https:\/\/clang.llvm.org\/docs\/UndefinedBehaviorSanitizer.html"},{"key":"e_1_3_2_53_2","unstructured":"Sadie J.Macintyre-Randall. 2023. Enforcing C++ type integrity with fast dynamic casting member function protections and an exploration of C++ beneath the surface.Ph.D. Dissertation.The University of Kent.https:\/\/kar.kent.ac.uk\/102955\/https:\/\/kar.kent.ac.uk\/102955\/"},{"key":"e_1_3_2_54_2","doi-asserted-by":"publisher","DOI":"10.1145\/1065887.1065892"},{"key":"e_1_3_2_55_2","doi-asserted-by":"publisher","unstructured":"Ben Niu and Gang Tan. 2014. RockJIT: Securing Just-In-Time Compilation Using Modular Control-Flow Integrity. In CCS. https:\/\/doi.org\/10.1145\/2660267.2660281 10.1145\/2660267.2660281","DOI":"10.1145\/2660267.2660281"},{"key":"e_1_3_2_56_2","doi-asserted-by":"publisher","unstructured":"Rohany Padhye and Koushik Sen. 2019. Efficient fail-fast dynamic subtype checking. In VMIL. https:\/\/doi.org\/10.1145\/3358504.3361229 10.1145\/3358504.3361229","DOI":"10.1145\/3358504.3361229"},{"key":"e_1_3_2_57_2","unstructured":"Piotr Padlewski Krzysztof Pszeniczny and Richard Smith. 2020. Modeling the Invariance of Virtual Pointers in LLVM. arXiv:2003.04228. https:\/\/arxiv.org\/abs\/2003.04228"},{"key":"e_1_3_2_58_2","doi-asserted-by":"publisher","unstructured":"Krzysztof Palacz and Jan Vitek. 2003. Java Subtype Tests in Real-Time. In ECOOP. https:\/\/doi.org\/10.1007\/978-3-540-45070-2_17 10.1007\/978-3-540-45070-2_17","DOI":"10.1007\/978-3-540-45070-2_17"},{"key":"e_1_3_2_59_2","doi-asserted-by":"publisher","unstructured":"Chengbin Pang Yunlan Du Bing Mao and Shanqing Guo. 2018. Mapping to Bits: Efficiently Detecting Type Confusion Errors. In ACSAC. https:\/\/doi.org\/10.1145\/3274694.3274719 10.1145\/3274694.3274719","DOI":"10.1145\/3274694.3274719"},{"key":"e_1_3_2_60_2","doi-asserted-by":"publisher","unstructured":"Chengbin Pang Yunlan Du Bing Mao and Shanqing Guo. 2018. Mapping to Bits: Efficiently Detecting Type Confusion Errors. In ACSAC. https:\/\/doi.org\/10.1145\/3274694.3274719 10.1145\/3274694.3274719","DOI":"10.1145\/3274694.3274719"},{"key":"e_1_3_2_61_2","doi-asserted-by":"publisher","DOI":"10.1145\/1290520.1290524"},{"key":"e_1_3_2_62_2","doi-asserted-by":"publisher","DOI":"10.1016\/j.jss.2023.111693"},{"key":"e_1_3_2_63_2","doi-asserted-by":"publisher","unstructured":"Patrick W. Sathyanathan Wenlei He and Ten H. Tzen. 2017. Incremental whole program optimization and compilation. In CGO. https:\/\/doi.org\/10.1109\/CGO.2017.7863742 10.1109\/CGO.2017.7863742","DOI":"10.1109\/CGO.2017.7863742"},{"key":"e_1_3_2_64_2","doi-asserted-by":"publisher","DOI":"10.1109\/MC.1983.1654198"},{"key":"e_1_3_2_65_2","doi-asserted-by":"publisher","unstructured":"Felix Schuster Thomas Tendyck Christopher Liebchen Lucas Davi Ahmad-Reza Sadeghi and Thorsten Holz. 2015. Counterfeit Object-oriented Programming: On the Difficulty of Preventing Code Reuse Attacks in C++ Applications. In S&p. https:\/\/doi.org\/10.1109\/SP.2015.51 10.1109\/SP.2015.51","DOI":"10.1109\/SP.2015.51"},{"key":"e_1_3_2_66_2","doi-asserted-by":"publisher","unstructured":"Yuriy Solodkyy Gabriel Dos Reis and Bjarne Stroustrup. 2012. Open and efficient type switch for C++. In OOPSLA. https:\/\/doi.org\/10.1145\/2384616.2384686 10.1145\/2384616.2384686","DOI":"10.1145\/2384616.2384686"},{"key":"e_1_3_2_67_2","doi-asserted-by":"publisher","unstructured":"Dokyung Song Julian Lettner Prabhu Rajasekaran Yeoul Na Stijn Volckaert Per Larsen and Michael Franz. 2019. SoK: Sanitizing for Security. In SP. https:\/\/doi.org\/10.1109\/SP.2019.00010 10.1109\/SP.2019.00010","DOI":"10.1109\/SP.2019.00010"},{"key":"e_1_3_2_68_2","doi-asserted-by":"publisher","DOI":"10.1002\/spe.2174"},{"key":"e_1_3_2_69_2","doi-asserted-by":"publisher","unstructured":"Amitabh Srivastava and David W. Wall. 1994. Link-time optimization of address calculation on a 64-bit architecture. In PLDI. https:\/\/doi.org\/10.1145\/178243.178248 10.1145\/178243.178248","DOI":"10.1145\/178243.178248"},{"key":"e_1_3_2_70_2","doi-asserted-by":"publisher","DOI":"10.1145\/3386320"},{"key":"e_1_3_2_71_2","unstructured":"Caroline Tice Tom Roeder Peter Collingbourne Stephen Checkoway \u00dalfar Erlingsson Luis Lozano and Geoff Pike. 2014. Enforcing Forward-Edge Control-Flow Integrity in GCC & LLVM. In USENIX Security. https:\/\/www.usenix.org\/system\/files\/conference\/usenixsecurity14\/sec14-paper-tice.pdf"},{"key":"e_1_3_2_72_2","doi-asserted-by":"publisher","unstructured":"Jan Vitek R. Nigel Horspool and Andreas Krall. 1997. Efficient type inclusion tests. In OOPSLA. https:\/\/doi.org\/10.1145\/263698.263730 10.1145\/263698.263730","DOI":"10.1145\/263698.263730"},{"key":"e_1_3_2_73_2","doi-asserted-by":"publisher","DOI":"10.1109\/TIFS.2018.2855648"},{"key":"e_1_3_2_74_2","doi-asserted-by":"publisher","DOI":"10.1145\/103135.103136"},{"key":"e_1_3_2_75_2","doi-asserted-by":"publisher","DOI":"10.1145\/3428242"},{"key":"e_1_3_2_76_2","unstructured":"Yizhuo Zhai Zhiyun Qian Chengyu Zhou Umy Sridharan Trent Jaeger Paul Yu and Srikrishanth V. Krishnamurthy. 2024. Don\u2019t Waste My Efforts: Pruning Redundant Sanitizer Checks of Developer-Implemented Type Checks. In USENIX Security. https:\/\/www.usenix.org\/system\/files\/usenixsecurity24-zhai.pdf"},{"key":"e_1_3_2_77_2","doi-asserted-by":"publisher","unstructured":"Peng Zhao and J. N. Amaral. 2005. Function outlining and partial inlining. In SBAC-PAD. https:\/\/doi.org\/10.1109\/CAHPC.2005.26 10.1109\/CAHPC.2005.26","DOI":"10.1109\/CAHPC.2005.26"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3729266","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,7,16]],"date-time":"2026-07-16T10:02:46Z","timestamp":1784196166000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3729266"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2025,6,10]]},"references-count":76,"journal-issue":{"issue":"PLDI","published-print":{"date-parts":[[2025,6,10]]}},"alternative-id":["10.1145\/3729266"],"URL":"https:\/\/doi.org\/10.1145\/3729266","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2025,6,10]]},"assertion":[{"value":"2024-11-15","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2025-03-06","order":2,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2025-06-13","order":3,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}