<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style id="owaParaStyle" type="text/css">P {margin-top:0;margin-bottom:0;}</style>
</head>
<body ocsi="0" fpstyle="1">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;"><br>
Hello!<br>
<br>
> This doesn't seem to work for me, what version of clang are you using?<br>
<br>
Hmm weird. I use latest svn head. I don't know if it matters but the target I'm using is Linux x64. This has worked for at least a year for me so I'd say it should work at least in Clang-3.8 also.<br>
<div><br>
Also when I said "This code compiles without errors" I only meant that "clang -c myfile.c" finished without error/warning messages.<br>
<br>
> <span dir="ltr">Is there any way to get added keywords to map to these attributes? I'm just thinking we don't want to have to have the user include a special .h file.<br>
<br>
In my use case, adding "-include tweaks.h" in the build script was an easy solution. But in my case I don't actually compile. I run static analysis and clang-tidy, and I generate compiler warnings (with -fsyntax-only)...<br>
<br>
If you want to actually compile then tweaking Clang is required. I don't know how you map these attributes internally.<br>
<br>
Best regards,<br>
Daniel Marjamäki<br>
</span><br>
<div style="font-family:Tahoma; font-size:13px">
<div style="font-family:Tahoma; font-size:13px">
<div style="font-family:Tahoma; font-size:13px">
<div style="font-family:Tahoma; font-size:13px">
<div style="font-family:Tahoma; font-size:13px">
<div style="font-family:Tahoma; font-size:13px">
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt">..................................................................................................................</span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif'; color:black; font-size:8pt">Daniel Marjamäki
</span><span style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt">Senior Engineer</span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif'; color:gray; font-size:8.5pt" lang="EN-US">Evidente ES East</span><span style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt" lang="EN-US"> AB<span> 
</span>Warfvinges väg 34<span>  </span>SE-112 51 Stockholm<span>  </span>Sweden </span>
</p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt" lang="EN-US"></span> </p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt" lang="EN-GB">Mobile</span><span style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt" lang="EN-GB">:<span>                
</span>+46 (0)709 12 42 62</span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt" lang="EN-GB"></span><span style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt" lang="EN-GB">E-mail:<span>   
</span><span>             <a tabindex="0" href="mailto:Daniel.Marjamaki@evidente.se">
Daniel.Marjamaki</a></span><a tabindex="0" href="mailto:Daniel.Marjamaki@evidente.se">@evidente.se</a><span>     
</span><span>                 </span></span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt" lang="EN-GB"></span> </p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif'; font-size:8pt" lang="EN-GB">www.evidente.se</span></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div style="font-family: Times New Roman; color: #000000; font-size: 16px">
<hr tabindex="-1">
<div style="direction: ltr;" id="divRpF74408"><font color="#000000" size="2" face="Tahoma"><b>From:</b> Phil Tomson [phil.a.tomson@gmail.com]<br>
<b>Sent:</b> 15 October 2016 00:18<br>
<b>To:</b> Daniel Marjamäki<br>
<b>Subject:</b> Re: [cfe-dev] Address space extensions (adding type modifier keywords)<br>
</font><br>
</div>
<div></div>
<div>
<div dir="ltr">
<div>This doesn't seem to work for me, what version of clang are you using?<br>
<br>
</div>
Phil<br>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Thu, Oct 13, 2016 at 11:18 PM, Daniel Marjamäki <span dir="ltr">
<<a href="mailto:Daniel.Marjamaki@evidente.se" target="_blank">Daniel.Marjamaki@evidente.se</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
<div>
<div style="direction:ltr; font-family:Tahoma; color:#000000; font-size:10pt">Hello!
<div><br>
</div>
<div>I am not an expert. But I think you should use address space attributes. This code compiles without errors:</div>
<div><br>
</div>
<div>
<div>#define xstglocal  __attribute__((address_space(<wbr>0)))</div>
<div>#define xstgblock  __attribute__((address_space(<wbr>256)))</div>
<div>#define xstgglobal  __attribute__((address_space(<wbr>257)))</div>
<span class="">
<div><br>
</div>
<div>int* xstglocal  lp_i;       // Local pointer to any integer</div>
<div>int* xstgblock  b_pi;       // Block pointer to any integer</div>
<div>int* xstgglobal g_pi;       // Global pointer to any integer</div>
<div><br>
</div>
<div>xstgglobal int* xstglocal  vp_li;   // Local pointer to global integer</div>
<div>xstglocal  int* xstgblock  vp_bi;   // Block pointer to local integer</div>
<div>xstgblock  int* xstgglobal vp_gi;   // Global pointer to block integer</div>
<div><br>
</div>
</span>
<div><span style="font-size:10pt">Best regards,</span></div>
<div>Daniel Marjamäki</div>
<div><br>
<div style="font-family:Tahoma; font-size:13px">
<div style="font-family:Tahoma; font-size:13px">
<div style="font-family:Tahoma; font-size:13px">
<div style="font-family:Tahoma; font-size:13px">
<div style="font-family:Tahoma; font-size:13px">
<div style="font-family:Tahoma; font-size:13px">
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt">..............................<wbr>..............................<wbr>..............................<wbr>........................</span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif'; color:black; font-size:8pt">Daniel Marjamäki
</span><span style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt">Senior Engineer</span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif'; color:gray; font-size:8.5pt" lang="EN-US">Evidente ES East</span><span style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt" lang="EN-US"> AB<span> 
</span>Warfvinges väg 34<span>  </span>SE-112 51 Stockholm<span>  </span>Sweden </span>
</p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt" lang="EN-US"></span> </p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt" lang="EN-GB">Mobile</span><span style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt" lang="EN-GB">:<span>                
</span>+46 (0)709 12 42 62</span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt" lang="EN-GB"></span><span style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt" lang="EN-GB">E-mail:<span>   
</span><span>             <a href="mailto:Daniel.Marjamaki@evidente.se" target="_blank">
Daniel.Marjamaki</a></span><a href="mailto:Daniel.Marjamaki@evidente.se" target="_blank">@evidente.se</a><span>  <wbr>   
</span><span>                 </span></span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt" lang="EN-GB"></span> </p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif'; font-size:8pt" lang="EN-GB"><a href="http://www.evidente.se" target="_blank">www.evidente.se</a></span></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div style="font-family:Times New Roman; color:#000000; font-size:16px">
<hr>
<div id="m_6371164966613650548divRpF812226" style="direction:ltr"><font color="#000000" size="2" face="Tahoma"><b>From:</b> cfe-dev [<a href="mailto:cfe-dev-bounces@lists.llvm.org" target="_blank">cfe-dev-bounces@lists.llvm.<wbr>org</a>] on behalf of Phil Tomson
 via cfe-dev [<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>]<br>
<b>Sent:</b> 14 October 2016 03:35<br>
<b>To:</b> <a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<b>Subject:</b> [cfe-dev] Address space extensions (adding type modifier keywords)<br>
</font><br>
</div>
<div>
<div class="h5">
<div></div>
<div>
<div dir="ltr">Our architecture has a somewhat different memory model with three different address spaces: local, block, global.<br>
<div>
<div><br>
Some time ago (prior to my involvement in our project) our address space extensions were added to the frontend so that we can write:<br>
<br>
volatile   int v_i;<br>
xstglocal  int l_i;<br>
xstgblock  int b_i;<br>
xstgglobal int g_i;<br>
<br>
volatile   int* p_vi;       // Regular pointer to volatile integer<br>
xstglocal  int* p_li;       // Regular pointer to local integer <br>
xstgblock  int* b_pi;       // Regular pointer to block integer <br>
xstgglobal int* g_pi;       // Regular pointer to global integer<br>
<br>
int* volatile   vp_i;       // Volatile pointer to regular integer<br>
<br>
</div>
<div>These address space modifiers (xstglocal, xstgblock, xstgglobal) are used to determine which address space data is stored in. The above will compile just fine.<br>
<br>
</div>
<div>However, originally this work was done for clang/llvm 3.2. After we moved to 3.6 we found that the following (which used to work in 3.2) no longer works in 3.6:<br>
<br>
int* xstglocal  lp_i;       // Local pointer to any integer<br>
int* xstgblock  b_pi;       // Block pointer to any integer<br>
int* xstgglobal g_pi;       // Global pointer to any integer<br>
<br>
xstgglobal int* xstglocal  vp_li;   // Local pointer to global integer<br>
xstglocal  int* xstgblock  vp_bi;   // Block pointer to local integer<br>
xstgblock  int* xstgglobal vp_gi;   // Global pointer to block integer<br>
<br>
</div>
<div>These result in front end errors:<br>
<br>
issue.c:13:7: error: expected identifier or '('<br>
int * xstglocal  lp_i;       // Local pointer to any integer<br>
      ^<br>
issue.c:14:7: error: expected identifier or '('<br>
int * xstgblock  b_pi;       // Block pointer to any integer<br>
      ^<br>
issue.c:15:7: error: expected identifier or '('<br>
int * xstgglobal g_pi;       // Global pointer to any integer<br>
      ^<br>
issue.c:20:18: error: expected identifier or '('<br>
xstgglobal int * xstglocal  vp_li;   // Local pointer to global integer<br>
                 ^<br>
issue.c:21:18: error: expected identifier or '('<br>
xstglocal  int * xstgblock  vp_bi;   // Block pointer to local integer<br>
                 ^<br>
issue.c:22:18: error: expected identifier or '('<br>
xstgblock  int * xstgglobal vp_gi;   // Global pointer to block integer<br>
                 ^<br>
6 errors generated.<br>
<br>
</div>
<div>It looks as though these address space extension keywords were added in <br>
</div>
<div>TokenKinds.def:<br>
// XSTG address space qualifiers<br>
KEYWORD(xstgglobal            <wbr>      , KEYXSTG)<br>
KEYWORD(xstgblock             <wbr>      , KEYXSTG)<br>
KEYWORD(xstglocal             <wbr>      , KEYXSTG)<br>
<br>
</div>
<div>As well as in Attr.td:<br>
<br>
def XSTGLocalAddressSpace : TypeAttr {<br>
  let Spellings = [Keyword<"xstglocal">];<br>
  let Documentation = [Undocumented];<br>
}<br>
<br>
def XSTGBlockAddressSpace : TypeAttr {<br>
  let Spellings = [Keyword<"xstgblock">];<br>
  let Documentation = [Undocumented];<br>
}<br>
<br>
def XSTGGlobalAddressSpace : TypeAttr {<br>
  let Spellings = [Keyword<"xstgglobal">];<br>
  let Documentation = [Undocumented];<br>
}<br>
<br>
</div>
<div>with some support in ParseDecl.cpp.<br>
<br>
</div>
<div>Was there an API change between clang 3.2 and 3.6 that might have broken this? Any pointers on how I might fix these errors?<br>
<br>
</div>
<div>Thanks.<br>
<br>
</div>
<div>Phil<br>
</div>
<div><br>
<br>
</div>
<div><br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</div>
</body>
</html>