var-tracking.c (track_expr_p): Do not return 0 for tracked record parameters passed...
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 24 May 2017 08:12:27 +0000 (08:12 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Wed, 24 May 2017 08:12:27 +0000 (08:12 +0000)
* var-tracking.c (track_expr_p): Do not return 0 for tracked record
parameters passed indirectly.

From-SVN: r248402

gcc/ChangeLog
gcc/var-tracking.c

index 95b47f764111b911a3fd82c5de6447ba26107111..1bbeb7b40b79ba8a0fd5c05215d187233fff6eb9 100644 (file)
@@ -1,3 +1,8 @@
+2017-05-24  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * var-tracking.c (track_expr_p): Do not return 0 for tracked record
+       parameters passed indirectly.
+
 2017-05-23  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/i386.md (*movdi_internal): Remove SSE4
index 1b9f8ddea6ab4e0ffbc97ddbdc62890a66dfbc83..5c38c1dbd83b43aa0700a59c31c3e854afd57e8e 100644 (file)
@@ -5220,8 +5220,9 @@ track_expr_p (tree expr, bool need_rtl)
   if (decl_rtl && MEM_P (decl_rtl))
     {
       /* Do not track structures and arrays.  */
-      if (GET_MODE (decl_rtl) == BLKmode
-         || AGGREGATE_TYPE_P (TREE_TYPE (realdecl)))
+      if ((GET_MODE (decl_rtl) == BLKmode
+          || AGGREGATE_TYPE_P (TREE_TYPE (realdecl)))
+         && !tracked_record_parameter_p (realdecl))
        return 0;
       if (MEM_SIZE_KNOWN_P (decl_rtl)
          && MEM_SIZE (decl_rtl) > MAX_VAR_PARTS)