2016-02-08 Richard Biener <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 8 Feb 2016 10:04:18 +0000 (10:04 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 8 Feb 2016 10:04:18 +0000 (10:04 +0000)
Jeff Law  <law@redhat.com>

PR target/68273
* tree-ssanames.c (make_ssa_name_fn): Always use unqualified
types for anonymous SSA names.

* gcc.target/mips/pr68273.c: New testcase.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@233211 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/mips/pr68273.c [new file with mode: 0644]
gcc/tree-ssanames.c

index 3e80551..c9d1d51 100644 (file)
@@ -1,3 +1,10 @@
+2016-02-08  Richard Biener  <rguenther@suse.de>
+       Jeff Law  <law@redhat.com>
+
+       PR target/68273
+       * tree-ssanames.c (make_ssa_name_fn): Always use unqualified
+       types for anonymous SSA names.
+
 2016-02-08   Richard Biener  <rguenther@suse.de>
 
        PR rtl-optimization/69274
index e0e68af..60c95ae 100644 (file)
@@ -1,3 +1,9 @@
+2016-02-08  Richard Biener  <rguenther@suse.de>
+       Jeff Law  <law@redhat.com>
+
+       PR target/68273
+       * gcc.target/mips/pr68273.c: New testcase.
+
 2016-02-08   Richard Biener  <rguenther@suse.de>
 
        PR rtl-optimization/69274
diff --git a/gcc/testsuite/gcc.target/mips/pr68273.c b/gcc/testsuite/gcc.target/mips/pr68273.c
new file mode 100644 (file)
index 0000000..cbe81e1
--- /dev/null
@@ -0,0 +1,79 @@
+/* { dg-do compile } */
+/* { dg-options "-w -fdump-rtl-expand" } */
+/* { dg-skip-if "" { *-*-* }  { } { "-O2" } } */
+
+extern char errbuf[];
+typedef struct Symbol
+{
+  char *name;
+}
+Symbol;
+typedef struct Tnode
+{
+}
+Tnode;
+typedef union Value
+{
+  long long i;
+}
+Value;
+typedef struct Entry
+{
+}
+Entry;
+typedef struct Table
+{
+}
+Table;
+typedef struct Node
+{
+  Tnode *typ;
+  int sto;
+  Value val;
+}
+Node;
+struct Scope
+{
+  Table *table;
+} *sp;
+static Node op (Node);
+Entry *p, *q;
+union YYSTYPE
+{
+  Symbol *sym;
+  Node rec;
+};
+typedef union YYSTYPE YYSTYPE;
+typedef short int yytype_int16;
+
+int
+yyparse (void)
+{
+  YYSTYPE yyval;
+  int yyn;
+  YYSTYPE *yyvsp;
+  while (1)
+    {
+      if (yyn == 34)
+       {
+         if ((yyvsp[-1].rec).sto & 0x10)
+           sprintf (errbuf, "invalid typedef qualifier for '%s'",
+                    (yyvsp[0].sym)->name);
+         p = enter (sp->table, (yyvsp[0].sym));
+       }
+      else
+       op ((yyvsp[0].rec));
+      *++yyvsp = yyval;
+    }
+}
+
+static Node
+op (Node q)
+{
+  integer (q.typ);
+  mgtype (q.typ);
+}
+
+
+/* { dg-final { scan-rtl-dump-times "\\\(set \\\(reg:SI 5 \\\$5\\\)" 2 "expand" } }  */
+/* { dg-final { scan-rtl-dump-times "\\\(set \\\(reg:SI 6 \\\$6\\\)" 1 "expand" } }  */
index d6897c7..b72c7cb 100644 (file)
@@ -286,7 +286,7 @@ make_ssa_name_fn (struct function *fn, tree var, gimple *stmt)
 
   if (TYPE_P (var))
     {
-      TREE_TYPE (t) = var;
+      TREE_TYPE (t) = TYPE_MAIN_VARIANT (var);
       SET_SSA_NAME_VAR_OR_IDENTIFIER (t, NULL_TREE);
     }
   else