<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div class=""><br class="">
</div>
<div>Hi Vikram,</div>
<div><br class="">
</div>
<div>
<div>I’m working on the Checked C project (<a href="https://www.microsoft.com/en-us/research/project/checked-c/" class="">https://www.microsoft.com/en-us/research/project/checked-c/</a>)</div>
<div>to enhance it with temporal memory safety. Fundamentally we want an (super) efficient way</div>
<div>(ideally with less than 5% performance overhead) of associating metadata with C pointers,</div>
</div>
<div>and the reason we chose fat pointer is we believe this would be the most efficient way,</div>
<div>although at the cost of breaking the backward compatibility. I’ve done a literature survey and</div>
<div>found that most solutions (e.g., CETS, DANGNULL, FreeSentry, DangSan, etc) use
<b class="">disjoint data structures</b></div>
<div>to keep track of the point-to relations and maintaining the data structures is where all</div>
<div>the overhead (both performance and memory) comes from, and none of the existing solutions</div>
<div>are fast enough. I worked on this project last summer at Microsoft with David Tarditi, and</div>
<div>our conclusion is that fat pointer is the way to go if speed and memory consumption are more</div>
<div>critical issues than compatibility.</div>
<div><br class="">
</div>
<div>Actually I’ve discussed this issue with John and we have received a small grant from Microsoft Research</div>
<div>with the "fat-pointer” design in the proposal (John is my advisor at Rochester :-)) . John talked</div>
<div>about implementing the fat pointer using an llvm vector or 128-bit integer, but we would still have</div>
<div>the type mismatch problem because in lots of places the compiler is expecting an llvm::PointerType.</div>
<div>I’ll discuss this more with John.</div>
<div><br class="">
</div>
<div>Thanks,</div>
<div>- Jie</div>
<div><br class="">
</div>
<div class="">
<div>
<blockquote type="cite" class="">
<div class="">On Jan 7, 2020, at 09:44, Adve, Vikram Sadanand via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a>> wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div class="WordSection1" style="page: WordSection1; caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;">
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
Jie,<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
Do you actually want a fat-pointer specifically, or do you just want an efficient way to associate metadata with C pointers?  Because (as I‘m sure you know) fat pointers have serious compatibility problems with external libraries, and also may break C programs
 in other ways due to lack of sound type information.</div>
</div>
</div>
</blockquote>
</div>
<div>
<blockquote type="cite" class="">
<div class="">
<div class="WordSection1" style="page: WordSection1; caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;">
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
John Criswell (copied) had created an improved version of Baggy Bounds which gives a efficient and compatible solution at low memory overhead.  I suggest contacting him if you’re interested.<o:p class=""></o:p></div>
<div class="">
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="" class=""><o:p class=""> </o:p></span></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="" class="">—Vikram Adve<o:p class=""></o:p></span></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="" class=""><o:p class=""> </o:p></span></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="" class="">+ Donald B. Gillies Professor of Computer Science, University of Illinois at Urbana-Champaign<o:p class=""></o:p></span></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="" class="">+ Admin: Kimberly Baker –<span class="Apple-converted-space"> </span></span><u class=""><span style="color: rgb(5, 99, 193);" class=""><a href="mailto:kabaker@illinois.edu" style="color: purple; text-decoration: underline;" class=""><span style="color: rgb(5, 99, 193);" class="">kabaker@illinois.edu</span></a></span></u><o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="" class="">+ Skype: vikramadve || Zoom:<span class="Apple-converted-space"> </span><a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__zoom.us_j_2173900467&d=DwMGaQ&c=kbmfwr1Yojg42sGEpaQh5ofMHBeTl9EI2eaqQZhHbOU&r=KAtyTEI8n3FritxDpKpR7rv3VjdmUs0luiVKZLb_bNI&m=kwZQV6kYBqMJiQ-hUwT6xk1CwdZ_yKG_ydk5ktG8LjE&s=R6GhCyK2NtwIS_pzSpGJ2VoASoZdYib5wtfk0eSuJhk&e=" style="color: purple; text-decoration: underline;" class=""><span style="color: rgb(5, 99, 193);" class="">https://zoom.us/j/2173900467</span></a><br class="">
+ Home page: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__vikram.cs.illinois.edu&d=DwMGaQ&c=kbmfwr1Yojg42sGEpaQh5ofMHBeTl9EI2eaqQZhHbOU&r=KAtyTEI8n3FritxDpKpR7rv3VjdmUs0luiVKZLb_bNI&m=kwZQV6kYBqMJiQ-hUwT6xk1CwdZ_yKG_ydk5ktG8LjE&s=9mEHtkFIqi1LIJd-W9G5gbbTfGcWup7PfDIDSC6thVk&e=" style="color: purple; text-decoration: underline;" class=""><span style="color: rgb(5, 99, 193);" class="">http://vikram.cs.illinois.edu</span></a><o:p class=""></o:p></span></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="" class="">+ Center for Digital Agriculture: <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__digitalag.illinois.edu_&d=DwMGaQ&c=kbmfwr1Yojg42sGEpaQh5ofMHBeTl9EI2eaqQZhHbOU&r=KAtyTEI8n3FritxDpKpR7rv3VjdmUs0luiVKZLb_bNI&m=kwZQV6kYBqMJiQ-hUwT6xk1CwdZ_yKG_ydk5ktG8LjE&s=nanGYamM8MpQFTfvLj9klIViM3Nx-u2RywioB3rYx-U&e=" style="color: purple; text-decoration: underline;" class=""><span style="color: rgb(5, 99, 193);" class="">https://digitalag.illinois.edu</span></a></span><span style="font-size: 12pt;" class=""><o:p class=""></o:p></span></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="" class=""><o:p class=""> </o:p></span></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="" class=""><o:p class=""> </o:p></span></div>
</div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="border-style: solid none none; border-top-width: 1pt; border-top-color: rgb(181, 196, 223); padding: 3pt 0in 0in;" class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<b class=""><span style="font-size: 12pt;" class="">From:<span class="Apple-converted-space"> </span></span></b><span style="font-size: 12pt;" class="">llvm-dev <<a href="mailto:llvm-dev-bounces@lists.llvm.org" style="color: purple; text-decoration: underline;" class="">llvm-dev-bounces@lists.llvm.org</a>>
 on behalf of via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" style="color: purple; text-decoration: underline;" class="">llvm-dev@lists.llvm.org</a>><br class="">
<b class="">Reply-To:<span class="Apple-converted-space"> </span></b>"<a href="mailto:llvm-dev@lists.llvm.org" style="color: purple; text-decoration: underline;" class="">llvm-dev@lists.llvm.org</a>" <<a href="mailto:llvm-dev@lists.llvm.org" style="color: purple; text-decoration: underline;" class="">llvm-dev@lists.llvm.org</a>>,
 "<a href="mailto:llvm-dev-request@lists.llvm.org" style="color: purple; text-decoration: underline;" class="">llvm-dev-request@lists.llvm.org</a>" <<a href="mailto:llvm-dev-request@lists.llvm.org" style="color: purple; text-decoration: underline;" class="">llvm-dev-request@lists.llvm.org</a>><br class="">
<b class="">Date:<span class="Apple-converted-space"> </span></b>Tuesday, January 7, 2020 at 8:06 AM<br class="">
<b class="">To:<span class="Apple-converted-space"> </span></b>"<a href="mailto:llvm-dev@lists.llvm.org" style="color: purple; text-decoration: underline;" class="">llvm-dev@lists.llvm.org</a>" <<a href="mailto:llvm-dev@lists.llvm.org" style="color: purple; text-decoration: underline;" class="">llvm-dev@lists.llvm.org</a>><br class="">
<b class="">Subject:<span class="Apple-converted-space"> </span></b>llvm-dev Digest, Vol 187, Issue 17<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">Date: Tue, 7 Jan 2020 02:45:01 +0000<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">From: Jie Zhou via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" style="color: purple; text-decoration: underline;" class="">llvm-dev@lists.llvm.org</a>><o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">To: Eli Friedman via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" style="color: purple; text-decoration: underline;" class="">llvm-dev@lists.llvm.org</a>><o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">Subject: [llvm-dev] Best way of implement a fat pointer for C<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">Message-ID: <<a href="mailto:B6510CF7-CC75-4171-AF50-D6730EB068E8@cs.rochester.edu" style="color: purple; text-decoration: underline;" class="">B6510CF7-CC75-4171-AF50-D6730EB068E8@cs.rochester.edu</a>><o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">Content-Type: text/plain; charset="utf-8"<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class=""><o:p class=""> </o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">Dear All,<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class=""><o:p class=""> </o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">I’m working on a project that extends C. I’m adding a new type of pointer<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">that is a fat pointer. It has some metadata about the pointed object besides<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">the starting address of the object. Currently I implemented this pointer as<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">an llvm:StructType. In llvm::Type generation function<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">llvm::Type *CodeGenTypes::ConvertType(QualType T)<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">in the case for clang::Type::Pointer, instead of creating an llvm::PointerType<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">I create an llvm::StructType type for this new type of pointer. And I added some<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">helper code in llvm::StructType and in multiple places I added code to trick<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">the compiler to believe sometimes a struct is actually a pointer. Until now<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">it compile test programs fine with -O0 but I got lots of assertion failures when<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">compiling with -O1 or -O2 majorly because of the confusion of type mismatch.<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class=""><o:p class=""> </o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">LLVM assumes that a PointerType is essentially an Integer (32 or 64 bit depending<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">on the architecture), and since this is quite a fundamental assumption, I started<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">to question whether my way of implementing the fat pointer is feasible.<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">I thought about adding a new llvm type that inherits both llvm:PointerType<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">and llvm:StructType; but I’m not sure if this is the correct path. It looks like<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">this demands substantial changes to the compiler including adding code<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">for bitcode generation. Can you give me some advice on how to implement<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">a fat pointer in llvm?<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class=""><o:p class=""> </o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">Thanks,<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">- Jie<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">-------------- next part --------------<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">An HTML attachment was scrubbed...<o:p class=""></o:p></span></div>
</div>
<div class="">
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<span style="font-family: -webkit-standard, serif;" class="">URL: <<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_pipermail_llvm-2Ddev_attachments_20200107_3fe60169_attachment-2D0001.html&d=DwMGaQ&c=kbmfwr1Yojg42sGEpaQh5ofMHBeTl9EI2eaqQZhHbOU&r=KAtyTEI8n3FritxDpKpR7rv3VjdmUs0luiVKZLb_bNI&m=kwZQV6kYBqMJiQ-hUwT6xk1CwdZ_yKG_ydk5ktG8LjE&s=bjlqJQjQoad75TLdBCeW4uVHCd6riLNojVTKyvg7G5M&e=" style="color: purple; text-decoration: underline;" class="">http://lists.llvm.org/pipermail/llvm-dev/attachments/20200107/3fe60169/attachment-0001.html</a>><o:p class=""></o:p></span></div>
</div>
<div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<br class="">
<br class="">
<o:p class=""></o:p></div>
</div>
<span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">_______________________________________________</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">LLVM
 Developers mailing list</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
<a href="mailto:llvm-dev@lists.llvm.org" style="color: purple; text-decoration: underline; font-family: Helvetica; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">llvm-dev@lists.llvm.org</a><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
<a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_llvm-2Ddev&d=DwIGaQ&c=kbmfwr1Yojg42sGEpaQh5ofMHBeTl9EI2eaqQZhHbOU&r=KAtyTEI8n3FritxDpKpR7rv3VjdmUs0luiVKZLb_bNI&m=kwZQV6kYBqMJiQ-hUwT6xk1CwdZ_yKG_ydk5ktG8LjE&s=u5oJBUPGpLf1PPp7CE54c9iqUq_2loVCQS6-U8gWEo0&e=" style="color: purple; text-decoration: underline; font-family: Helvetica; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_llvm-2Ddev&d=DwIGaQ&c=kbmfwr1Yojg42sGEpaQh5ofMHBeTl9EI2eaqQZhHbOU&r=KAtyTEI8n3FritxDpKpR7rv3VjdmUs0luiVKZLb_bNI&m=kwZQV6kYBqMJiQ-hUwT6xk1CwdZ_yKG_ydk5ktG8LjE&s=u5oJBUPGpLf1PPp7CE54c9iqUq_2loVCQS6-U8gWEo0&e=</a><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class=""></span></div>
</blockquote>
</div>
<br class="">
</div>
</body>
</html>