aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2008-08-27 17:08:40 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2008-08-27 17:08:40 +0000
commit8d5f60ac742d669e2029e9f944fb565990b524ae (patch)
tree019920d62bf906c52e01471a464fe94a1664b0dd /gcc
parenta82214400104d662519445e65c0ac9fb5f9866d6 (diff)
downloadgcc-8d5f60ac742d669e2029e9f944fb565990b524ae.zip
gcc-8d5f60ac742d669e2029e9f944fb565990b524ae.tar.gz
gcc-8d5f60ac742d669e2029e9f944fb565990b524ae.tar.bz2
re PR c++/35321 (ICE with invalid use of __builtin_offsetof)
2008-08-27 Paolo Carlini <paolo.carlini@oracle.com> PR c++/35321 * c-common.c (fold_offsetof_1): Handle TARGET_EXPR like CALL_EXPR. /testsuite 2008-08-27 Paolo Carlini <paolo.carlini@oracle.com> PR c++/35321 * g++.dg/parse/offsetof8.C: New. From-SVN: r139628
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/c-common.c1
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/parse/offsetof8.C16
4 files changed, 27 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d89d63e..4b237af 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2008-08-27 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/35321
+ * c-common.c (fold_offsetof_1): Handle TARGET_EXPR like CALL_EXPR.
+
2008-08-27 Paul Brook <paul@codesourcery.com>
* config.gcc: Loosen checks for arm uclinux eabi targets.
diff --git a/gcc/c-common.c b/gcc/c-common.c
index 811092e..d06c969 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -7685,6 +7685,7 @@ fold_offsetof_1 (tree expr, tree stop_ref)
return error_mark_node;
case CALL_EXPR:
+ case TARGET_EXPR:
error ("cannot apply %<offsetof%> when %<operator[]%> is overloaded");
return error_mark_node;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 42d12a2..fb2a21a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-08-27 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/35321
+ * g++.dg/parse/offsetof8.C: New.
+
2008-08-27 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
PR c++/17880
diff --git a/gcc/testsuite/g++.dg/parse/offsetof8.C b/gcc/testsuite/g++.dg/parse/offsetof8.C
new file mode 100644
index 0000000..9add91e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/offsetof8.C
@@ -0,0 +1,16 @@
+// PR c++/35321
+
+struct A
+{
+ A operator[] (int);
+};
+
+struct B
+{
+ A a;
+};
+
+void foo()
+{
+ __builtin_offsetof(B, a[0]); /* { dg-error "error: cannot apply 'offsetof' when 'operator\\\[\\\]' is overloaded" } */
+}