<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 3 November 2013 10:20, Johannes Pfau <span dir="ltr"><<a href="mailto:nospam@example.com" target="_blank">nospam@example.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div class="im">Am Sun, 3 Nov 2013 02:10:20 +0000<br>
schrieb Iain Buclaw <<a href="mailto:ibuclaw@ubuntu.com">ibuclaw@ubuntu.com</a>>:<br>
<br>
</div><div class="im">> last time I<br>
> checked, returning 0 disables aliasing rules from taking effect.<br>
<br>
</div>That should work. Alias set 0 is a special alias set which conflicts<br>
with everything. I'll check if it works as expected.<br>
</blockquote></div><br><br></div><div class="gmail_extra">This is taken from hunks in the 2.064 merge I'm testing:<br><br></div><div class="gmail_extra">Pastebin link here:  <a href="http://pastebin.com/jxQQL68N">http://pastebin.com/jxQQL68N</a><br>
<br><br>diff --git a/gcc/d/d-lang.cc b/gcc/d/d-lang.cc<br>index 8cba369..a19a59b 100644<br>--- a/gcc/d/d-lang.cc<br>+++ b/gcc/d/d-lang.cc<br>@@ -73,6 +73,7 @@ const attribute_spec d_attribute_table[] =<br> #undef LANG_HOOKS_COMMON_ATTRIBUTE_TABLE<br>
 #undef LANG_HOOKS_ATTRIBUTE_TABLE<br> #undef LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE<br>+#undef LANG_HOOKS_GET_ALIAS_SET<br> #undef LANG_HOOKS_TYPES_COMPATIBLE_P<br> #undef LANG_HOOKS_BUILTIN_FUNCTION<br> #undef LANG_HOOKS_BUILTIN_FUNCTION_EXT_SCOPE<br>
@@ -95,6 +96,7 @@ const attribute_spec d_attribute_table[] =<br> #define LANG_HOOKS_COMMON_ATTRIBUTE_TABLE       d_builtins_attribute_table<br> #define LANG_HOOKS_ATTRIBUTE_TABLE              d_attribute_table<br> #define LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE      d_format_attribute_table<br>
+#define LANG_HOOKS_GET_ALIAS_SET               d_get_alias_set<br> #define LANG_HOOKS_TYPES_COMPATIBLE_P          d_types_compatible_p<br> #define LANG_HOOKS_BUILTIN_FUNCTION            d_builtin_function<br> #define LANG_HOOKS_BUILTIN_FUNCTION_EXT_SCOPE  d_builtin_function<br>
@@ -1505,6 +1523,33 @@ d_getdecls (void)<br> }<br> <br> <br>+// Get the alias set corresponding to a type or expression.<br>+// Return -1 if we don't do anything special.<br>+<br>+static alias_set_type<br>+d_get_alias_set (tree t)<br>
+{<br>+  if (!TYPE_P (t))<br>+    return get_alias_set (TREE_TYPE (t));<br>+<br>+  Type *dtype = build_dtype (t);<br>+<br>+  // If the type is a dynamic array, use the alias set of the basetype.<br>+  if (dtype && dtype->ty == Tarray)<br>
+    return get_alias_set (dtype->nextOf()->toCtype());<br>+<br>+  // Permit type-punning when accessing a union, provided the access<br>+  // is directly through the union.<br>+  for (tree u = t; handled_component_p (u); u = TREE_OPERAND (u, 0))<br>
+    {<br>+      if (TREE_CODE (u) == COMPONENT_REF<br>+         && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)<br>+       return 0;<br>+    }<br>+<br>+  return -1;<br>+}<br>+<br> static int<br> d_types_compatible_p (tree t1, tree t2)<br>
 {<br><br clear="all"></div><div class="gmail_extra"><br><br><br>-- <br>Iain Buclaw<br><br>*(p < e ? p++ : p) = (c & 0x0f) + '0';
</div></div>