From fd378c9ddf0580248f4380419114208b5f2b4eab Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Thu, 11 May 1995 21:36:16 +0000 Subject: [PATCH] 70th Cygnus<->FSF merge From-SVN: r9624 --- gcc/cp/ChangeLog | 16 ++++++++++++++++ gcc/cp/decl.c | 2 ++ gcc/cp/decl2.c | 11 ++++++++--- gcc/cp/parse.y | 4 ++-- gcc/cp/typeck.c | 9 ++++++++- 5 files changed, 36 insertions(+), 6 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 93af15dd74e..f5f47c6dec9 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,19 @@ +Thu May 11 00:31:48 1995 Jason Merrill + + * typeck.c (default_conversion): Don't check for BLKmode before + pulling out the decl_constant_value. + + * decl.c (start_function): Clear named_labels and shadowed_labels. + + * typeck.c (build_function_call_real): Also synthesize methods here. + +Wed May 10 00:55:59 1995 Jason Merrill + + * decl2.c (finish_file): Synthesize exported methods before the + reconsider loop. + + * parse.y: Move declaration of flag_new_for_scope to file scope. + Tue May 9 19:10:33 1995 Mike Stump * decl2.c: Add flag_new_for_scope for new -ffor-scope flag. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 2471c1547a9..dc78309b806 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -10716,6 +10716,8 @@ start_function (declspecs, declarator, raises, pre_parsed_p) current_function_returns_value = 0; current_function_returns_null = 0; warn_about_return_type = 0; + named_labels = 0; + shadowed_labels = 0; current_function_assigns_this = 0; current_function_just_assigned_this = 0; current_function_parms_stored = 0; diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 5909f87a0c2..cb326c8a5dd 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -3112,7 +3112,13 @@ finish_file () walk_sigtables ((void (*)())0, finish_sigtable_vardecl); for (fnname = saved_inlines; fnname; fnname = TREE_CHAIN (fnname)) - import_export_inline (TREE_VALUE (fnname)); + { + tree decl = TREE_VALUE (fnname); + import_export_inline (decl); + if (DECL_ARTIFICIAL (decl) && ! DECL_INITIAL (decl) + && TREE_PUBLIC (decl) && DECL_NOT_REALLY_EXTERN (decl)) + synthesize_method (decl); + } /* Now write out inline functions which had their addresses taken and which were not declared virtual and which were not declared `extern @@ -3144,8 +3150,7 @@ finish_file () if (DECL_ARTIFICIAL (decl) && ! DECL_INITIAL (decl)) { - if (TREE_USED (decl) - || (TREE_PUBLIC (decl) && DECL_NOT_REALLY_EXTERN (decl))) + if (TREE_USED (decl)) { synthesize_method (decl); if (TREE_ASM_WRITTEN (decl)) diff --git a/gcc/cp/parse.y b/gcc/cp/parse.y index b66c32a076a..7b5fae480cc 100644 --- a/gcc/cp/parse.y +++ b/gcc/cp/parse.y @@ -54,6 +54,7 @@ extern int errno; extern int end_of_file; extern int current_class_depth; +extern int flag_new_for_scope; void yyerror (); @@ -3225,8 +3226,7 @@ simple_stmt: clear_momentary (); finish_stmt (); } | FOR - { extern int flag_new_for_scope; - emit_line_note (input_filename, lineno); + { emit_line_note (input_filename, lineno); if (flag_new_for_scope) { /* Conditionalize .pushlevel */ diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 0bede446074..2927c32af02 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -1363,7 +1363,7 @@ default_conversion (exp) if (TREE_CODE (exp) == CONST_DECL) exp = DECL_INITIAL (exp); /* Replace a nonvolatile const static variable with its value. */ - else if (TREE_READONLY_DECL_P (exp) && DECL_MODE (exp) != BLKmode) + else if (TREE_READONLY_DECL_P (exp)) { exp = decl_constant_value (exp); type = TREE_TYPE (exp); @@ -2373,6 +2373,13 @@ build_function_call_real (function, params, require_complete, flags) if (DECL_INLINE (function)) { + /* Is it a synthesized method that needs to be synthesized? */ + if (DECL_ARTIFICIAL (function) && ! flag_no_inline + && ! DECL_INITIAL (function) + /* Kludge: don't synthesize for default args. */ + && current_function_decl) + synthesize_method (function); + fntype = build_type_variant (TREE_TYPE (function), TREE_READONLY (function), TREE_THIS_VOLATILE (function)); -- 2.30.2