aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-inline.c
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2004-02-29 23:43:29 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2004-02-29 23:43:29 +0000
commitc5b6f18e7a3d5a9269704287ca91483d60476e66 (patch)
tree79f67c731f4bdf068313a3e2b873f2feb80a0d5d /gcc/tree-inline.c
parent39876352716051ef43f55ba526b907ae86ae55a9 (diff)
downloadgcc-c5b6f18e7a3d5a9269704287ca91483d60476e66.zip
gcc-c5b6f18e7a3d5a9269704287ca91483d60476e66.tar.gz
gcc-c5b6f18e7a3d5a9269704287ca91483d60476e66.tar.bz2
re PR middle-end/13448 (gcc 3.3.2, internal error when -O3 and trying to modify function const arg)
PR middle-end/13448 * c-tree.h (readonly_warning): Rename to ... (readonly_error): ... this. * c-typeck.c (build_unary_op): Adjust accordingly. (readonly_warning): Rename to ... (readonly_error): ... this and issue errors, not warnings. (build_modify_expr): Call readonly_error, not readonly_warning. (c_expand_asm_operands): Likewise. * tree-inline.c (optimize_inline_calls): Do not inline functions after errors have occurred. PR middle-end/13448 * gcc.dg/inline-5.c: New test. * gcc.dg/always-inline.c: Split out tests into ... * gcc.dg/always-inline2.c: ... this and ... * gcc.dg/always-inline3.c: ... this. From-SVN: r78682
Diffstat (limited to 'gcc/tree-inline.c')
-rw-r--r--gcc/tree-inline.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index 3ef9705..ba5eb7a 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -39,7 +39,7 @@ Boston, MA 02111-1307, USA. */
#include "langhooks.h"
#include "cgraph.h"
#include "intl.h"
-
+#include "diagnostic.h"
/* This should be eventually be generalized to other languages, but
this would require a shared function-as-trees infrastructure. */
@@ -1620,6 +1620,12 @@ optimize_inline_calls (tree fn)
inline_data id;
tree prev_fn;
+ /* There is no point in performing inlining if errors have already
+ occurred -- and we might crash if we try to inline invalid
+ code. */
+ if (errorcount || sorrycount)
+ return;
+
/* Clear out ID. */
memset (&id, 0, sizeof (id));