aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2011-08-22 17:00:06 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2011-08-22 17:00:06 +0200
commite4269c7843070aa3ebc7c9e2e81c2e8a8d941c50 (patch)
tree08080223cc398647487dd024de0b654081310a32
parent7d7212ec2b45c2829dba3bd3319fce109cbe7f01 (diff)
downloadgcc-e4269c7843070aa3ebc7c9e2e81c2e8a8d941c50.zip
gcc-e4269c7843070aa3ebc7c9e2e81c2e8a8d941c50.tar.gz
gcc-e4269c7843070aa3ebc7c9e2e81c2e8a8d941c50.tar.bz2
re PR middle-end/50141 (ICE: tree check: expected var_decl, have parm_decl in get_bit_range, at expr.c:4357 with --param allow-store-data-races=0 and bitfields)
PR middle-end/50141 * expr.c (get_bit_range): Only use DECL_THREAD_LOCAL_P if innerdecl is a VAR_DECL. * c-c++-common/cxxbitfields-6.c: New test. From-SVN: r177957
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/expr.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/c-c++-common/cxxbitfields-6.c17
4 files changed, 30 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 15c4e3b..14ab859 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2011-08-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/50141
+ * expr.c (get_bit_range): Only use DECL_THREAD_LOCAL_P if
+ innerdecl is a VAR_DECL.
+
2011-08-22 Kirill Yukhin <kirill.yukhin@intel.com>
* config/i386/avx2intrin.h: New file.
diff --git a/gcc/expr.c b/gcc/expr.c
index 82873eb..ee16b6a 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -4354,7 +4354,8 @@ get_bit_range (unsigned HOST_WIDE_INT *bitstart,
|| TREE_CODE (innerdecl) == TARGET_MEM_REF)
&& !ptr_deref_may_alias_global_p (TREE_OPERAND (innerdecl, 0)))
|| (DECL_P (innerdecl)
- && (DECL_THREAD_LOCAL_P (innerdecl)
+ && ((TREE_CODE (innerdecl) == VAR_DECL
+ && DECL_THREAD_LOCAL_P (innerdecl))
|| !TREE_STATIC (innerdecl))))
{
*bitstart = *bitend = 0;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f7df8c1..72feb20 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-08-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/50141
+ * c-c++-common/cxxbitfields-6.c: New test.
+
2011-08-22 Mikael Morin <mikael.morin@gcc.gnu.org>
PR fortran/50050
diff --git a/gcc/testsuite/c-c++-common/cxxbitfields-6.c b/gcc/testsuite/c-c++-common/cxxbitfields-6.c
new file mode 100644
index 0000000..bdd6294
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/cxxbitfields-6.c
@@ -0,0 +1,17 @@
+/* PR middle-end/50141 */
+/* { dg-do compile } */
+/* { dg-options "-O2 --param allow-store-data-races=0" } */
+
+struct S
+{
+ int i:8;
+};
+
+void bar (struct S, int);
+
+void
+foo (struct S s, int i)
+{
+ s.i = i;
+ bar (s, i);
+}