aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2016-02-08 10:04:18 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2016-02-08 10:04:18 +0000
commit63998a6336239da20540a9e4b529d839ed2db26e (patch)
tree8d1a5a7532aba53531b52e607ed30ac5c716273f
parentffe9a0a76e4212d8ec2b41d756ae82ef84d13d40 (diff)
downloadgcc-63998a6336239da20540a9e4b529d839ed2db26e.zip
gcc-63998a6336239da20540a9e4b529d839ed2db26e.tar.gz
gcc-63998a6336239da20540a9e4b529d839ed2db26e.tar.bz2
re PR target/68273 (Wrong code on mips/mipsel due to (invalid?) peeking at alignments in function_arg.)
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. * gcc.target/mips/pr68273.c: New testcase. Co-Authored-By: Jeff Law <law@redhat.com> From-SVN: r233211
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.target/mips/pr68273.c79
-rw-r--r--gcc/tree-ssanames.c2
4 files changed, 93 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3e80551..c9d1d51 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e0e68af..60c95ae 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..cbe81e1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/mips/pr68273.c
@@ -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" } } */
diff --git a/gcc/tree-ssanames.c b/gcc/tree-ssanames.c
index d6897c7..b72c7cb 100644
--- a/gcc/tree-ssanames.c
+++ b/gcc/tree-ssanames.c
@@ -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