* var-tracking.c (add_stores): Fix oversight in latest commit.
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 14 Dec 2013 15:24:58 +0000 (15:24 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 14 Dec 2013 15:24:58 +0000 (15:24 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@205986 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr59350.c [new file with mode: 0644]
gcc/var-tracking.c

index cd64b59..3acc708 100644 (file)
@@ -1,3 +1,7 @@
+2013-12-14  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc.dg/pr59350.c: New test.
+
 2013-12-14  Marek Polacek  <polacek@redhat.com>
 
        PR sanitizer/59503
index 09d2291..a53133b 100644 (file)
@@ -1,3 +1,7 @@
+2013-12-14  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * var-tracking.c (add_stores): Fix oversight in latest commit.
+
 2013-12-14  Marek Polacek  <polacek@redhat.com>
 
        * c-c++-common/ubsan/overflow-1.c: New test.
diff --git a/gcc/testsuite/gcc.dg/pr59350.c b/gcc/testsuite/gcc.dg/pr59350.c
new file mode 100644 (file)
index 0000000..be18687
--- /dev/null
@@ -0,0 +1,82 @@
+/* PR rtl-optimization/59350 */
+/* Testcase by Ryan Mansfield <rmansfield@qnx.com> */
+
+/* { dg-do compile } */
+/* { dg-options "-O -g" } */
+
+typedef union
+{
+  char b[2];
+  short NotAnInteger;
+}
+mDNSOpaque16;
+typedef mDNSOpaque16 mDNSIPPort;
+typedef struct
+{
+}
+mDNSAddr;
+typedef struct DNSQuestion_struct DNSQuestion;
+typedef struct mDNS_struct mDNS;
+typedef struct __attribute__ ((__packed__))
+{
+  mDNSOpaque16 id;
+  mDNSOpaque16 flags;
+}
+
+DNSMessageHeader;
+typedef struct __attribute__ ((__packed__))
+{
+  DNSMessageHeader h;
+}
+
+DNSMessage;
+struct DNSQuestion_struct
+{
+  DNSQuestion *next;
+  long LastQTime;
+  mDNSOpaque16 TargetQID;
+};
+struct mDNS_struct
+{
+  long timenow;
+  DNSQuestion *Questions;
+};
+extern long mDNSPlatformOneSecond;
+typedef enum
+{
+  kDNSFlag0_QR_Mask = 0x80, kDNSFlag0_QR_Query = 0x00, kDNSFlag0_QR_Response =
+    0x80, kDNSFlag0_OP_Mask = 0x78, kDNSFlag0_OP_StdQuery =
+    0x00, kDNSFlag0_OP_Iquery = 0x08, kDNSFlag0_OP_Status =
+    0x10, kDNSFlag0_OP_Unused3 = 0x18, kDNSFlag0_OP_Notify =
+    0x20, kDNSFlag0_OP_Update = 0x28, kDNSFlag0_QROP_Mask =
+    kDNSFlag0_QR_Mask | kDNSFlag0_OP_Mask, kDNSFlag0_AA = 0x04, kDNSFlag0_TC =
+    0x02, kDNSFlag0_RD = 0x01, kDNSFlag1_RA = 0x80, kDNSFlag1_Zero =
+    0x40, kDNSFlag1_AD = 0x20, kDNSFlag1_CD = 0x10, kDNSFlag1_RC_Mask =
+    0x0F, kDNSFlag1_RC_NoErr = 0x00, kDNSFlag1_RC_FormErr =
+    0x01, kDNSFlag1_RC_ServFail = 0x02, kDNSFlag1_RC_NXDomain =
+    0x03, kDNSFlag1_RC_NotImpl = 0x04, kDNSFlag1_RC_Refused =
+    0x05, kDNSFlag1_RC_YXDomain = 0x06, kDNSFlag1_RC_YXRRSet =
+    0x07, kDNSFlag1_RC_NXRRSet = 0x08, kDNSFlag1_RC_NotAuth =
+    0x09, kDNSFlag1_RC_NotZone = 0x0A
+}
+TSIG_ErrorCode;
+void
+uDNS_ReceiveMsg (mDNS * const m, DNSMessage * const msg,
+                const char * const end, const mDNSAddr * const srcaddr,
+                const mDNSIPPort srcport)
+{
+  DNSQuestion *qptr;
+  char StdR = kDNSFlag0_QR_Response | kDNSFlag0_OP_StdQuery;
+  char QR_OP = (char) (msg->h.flags.b[0] & kDNSFlag0_QROP_Mask);
+  if (QR_OP == StdR)
+    {
+     if (uDNS_ReceiveTestQuestionResponse (m, msg, end, srcaddr, srcport))
+       return;
+      for (qptr = m->Questions; qptr; qptr = qptr->next)
+       if (msg->h.flags.b[0] & kDNSFlag0_TC
+           && ((qptr->TargetQID).NotAnInteger == (msg->h.id).NotAnInteger)
+           && m->timenow - qptr->LastQTime < (60 * mDNSPlatformOneSecond))
+         {
+         }
+    }
+}
index f38cbe1..8eb86bf 100644 (file)
@@ -5938,6 +5938,7 @@ add_stores (rtx loc, const_rtx expr, void *cuip)
       && REG_EXPR (loc)
       && TREE_CODE (REG_EXPR (loc)) == PARM_DECL
       && DECL_MODE (REG_EXPR (loc)) != BLKmode
+      && TREE_CODE (TREE_TYPE (REG_EXPR (loc))) != UNION_TYPE
       && ((MEM_P (DECL_INCOMING_RTL (REG_EXPR (loc)))
           && XEXP (DECL_INCOMING_RTL (REG_EXPR (loc)), 0) != arg_pointer_rtx)
           || (GET_CODE (DECL_INCOMING_RTL (REG_EXPR (loc))) == PARALLEL