Enable experimental TSAN support for Ada.
authorBernd Edlinger <bernd.edlinger@hotmail.de>
Mon, 5 Jan 2015 20:26:44 +0000 (20:26 +0000)
committerBernd Edlinger <edlinger@gcc.gnu.org>
Mon, 5 Jan 2015 20:26:44 +0000 (20:26 +0000)
2015-01-05  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        Enable experimental TSAN support for Ada.
        * tsan.c (instrument_expr): Handle VIEW_CONVERT_EXPR.

From-SVN: r219197

gcc/ChangeLog
gcc/tsan.c

index 2ba1d2bdcf6c71b1d5175d8d13f11d9c25bd79e8..923cea3f0ff4f2bcaf0f2a6df2d0089cfafa78af 100644 (file)
@@ -1,3 +1,8 @@
+2015-01-05  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+       Enable experimental TSAN support for Ada.
+       * tsan.c (instrument_expr): Handle VIEW_CONVERT_EXPR.
+
 2015-01-05  Jakub Jelinek  <jakub@redhat.com>
 
        PR tree-optimization/64494
index a5e8133bc3c18483b3d31f65b3eded2526881b59..1bc146f198d370870d8970edae9f346fa45ad81f 100644 (file)
@@ -212,6 +212,17 @@ instrument_expr (gimple_stmt_iterator gsi, tree expr, bool is_write)
                     build_int_cst (TREE_TYPE (expr), bitpos / BITS_PER_UNIT));
       expr_ptr = build_fold_addr_expr (expr);
     }
+  /* We can't call build_fold_addr_expr on a VIEW_CONVERT_EXPR.
+     This can occur in Ada.  */
+  else if (TREE_CODE (expr) == VIEW_CONVERT_EXPR)
+    {
+      align = get_object_alignment (expr);
+      if (align < BITS_PER_UNIT)
+       return false;
+      expr = TREE_OPERAND (expr, 0);
+      gcc_checking_assert (is_gimple_addressable (expr));
+      expr_ptr = build_fold_addr_expr (unshare_expr (expr));
+    }
   else
     {
       align = get_object_alignment (expr);