<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" id="owaParaStyle"></style>
</head>
<body fpstyle="1" ocsi="0">
<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(0)))</div>
<div>#define xstgblock  __attribute__((address_space(256)))</div>
<div>#define xstgglobal  __attribute__((address_space(257)))</div>
<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>
<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">..................................................................................................................</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 lang="EN-US" style="font-family:'Arial','sans-serif'; color:gray; font-size:8.5pt">Evidente ES East</span><span lang="EN-US" style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt"> 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 lang="EN-US" style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt"></span> </p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span lang="EN-GB" style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt">Mobile</span><span lang="EN-GB" style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt">:<span>                
</span>+46 (0)709 12 42 62</span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span lang="EN-GB" style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt"></span><span lang="EN-GB" style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt">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 lang="EN-GB" style="font-family:'Arial','sans-serif'; color:gray; font-size:8pt"></span> </p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span lang="EN-GB" style="font-family:'Arial','sans-serif'; font-size:8pt">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 id="divRpF812226" style="direction: ltr;"><font face="Tahoma" size="2" color="#000000"><b>From:</b> cfe-dev [cfe-dev-bounces@lists.llvm.org] on behalf of Phil Tomson via cfe-dev [cfe-dev@lists.llvm.org]<br>
<b>Sent:</b> 14 October 2016 03:35<br>
<b>To:</b> cfe-dev@lists.llvm.org<br>
<b>Subject:</b> [cfe-dev] Address space extensions (adding type modifier keywords)<br>
</font><br>
</div>
<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                  , KEYXSTG)<br>
KEYWORD(xstgblock                   , KEYXSTG)<br>
KEYWORD(xstglocal                   , 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>
</body>
</html>