This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

C++ PATCH: Named return values



This patch does two things:

  - As agreed by Jason and myself, the named return value extension
    will be deprecated in GCC 3.0, and removed at some later date.
    This patch causes the appropriate warnings to be emitted, updates
    the NEWS file, etc.

  - In addition, named return values probably weren't being handled
    right in all cases; one of the key invariants of
    function-at-a-time mode (semantic analysis during RTL generation) 
    was being violated.  Fixed with this patch.

--
Mark Mitchell                   mark@codesourcery.com
CodeSourcery, LLC               http://www.codesourcery.com

2000-09-06  Mark Mitchell  <mark@codesourcery.com>

	* NEWS: Mention that the named return value extension has been
	deprecated.
	* cp-tree.h (original_result_rtx): Define.
	(TREE_REFERENCE_EXPR): Remove.
	(DECL_VPARENT): Likewise.
	(pushdecl_nonclass_level): Likewise.
	(store_return_init): Likewise.
	(reinit_lang_specific): Likewise.
	(genrtl_named_return_value): Change prototype.
	* decl.c (original_result_rtx): Remove.
	(cp_finish_decl): Don't build DECL_STMTs for RESULT_DECLs.
	Do not generate RTL for local variables here.
	(store_return_init): Remove.
	* semantics.c (genrtl_named_return_value): Simplify.  Fold in
	store_return_init.
	(finish_named_return_value): Adjust accordingly.  Warn that this
	extension is deprecated.
	(lang_expand_stmt): Adjust call to genrtl_named_return_value.

Index: extend.texi
===================================================================
RCS file: /cvs/gcc/egcs/gcc/extend.texi,v
retrieving revision 1.62
diff -c -p -r1.62 extend.texi
*** extend.texi	2000/08/11 13:42:32	1.62
--- extend.texi	2000/09/06 21:14:49
*************** Previously it was possible to use an emp
*** 3333,3341 ****
  indicate an unspecified number of parameters (like C), rather than no
  parameters, as C++ demands. This feature has been removed, except where
  it is required for backwards compatibility @xref{Backwards Compatibility}.
- 
  @end table
  
  @node Backwards Compatibility
  @section Backwards Compatibility
  @cindex Backwards Compatibility
--- 3333,3343 ----
  indicate an unspecified number of parameters (like C), rather than no
  parameters, as C++ demands. This feature has been removed, except where
  it is required for backwards compatibility @xref{Backwards Compatibility}.
  @end table
  
+ The named return value extension has been deprecated, and will be
+ removed from g++ at some point.
+ 
  @node Backwards Compatibility
  @section Backwards Compatibility
  @cindex Backwards Compatibility
*************** test specifically for GNU C++ (@pxref{St
*** 3379,3385 ****
  Predefined Macros,cpp.info,The C Preprocessor}).
  
  @menu
- * Naming Results::      Giving a name to C++ function return values.
  * Min and Max::		C++ Minimum and maximum operators.
  * Volatiles::		What constitutes an access to a volatile object.
  * Restricted Pointers:: C99 restricted pointers and references.
--- 3381,3386 ----
*************** Predefined Macros,cpp.info,The C Preproc
*** 3390,3508 ****
  * Bound member functions:: You can extract a function pointer to the
                          method denoted by a @samp{->*} or @samp{.*} expression.
  @end menu
- 
- @node Naming Results
- @section Named Return Values in C++
- 
- @cindex @code{return}, in C++ function header
- @cindex return value, named, in C++
- @cindex named return value in C++
- @cindex C++ named return value
- GNU C++ extends the function-definition syntax to allow you to specify a
- name for the result of a function outside the body of the definition, in
- C++ programs:
- 
- @example
- @group
- @var{type}
- @var{functionname} (@var{args}) return @var{resultname};
- @{
-   @dots{}
-   @var{body}
-   @dots{}
- @}
- @end group
- @end example
- 
- You can use this feature to avoid an extra constructor call when
- a function result has a class type.  For example, consider a function
- @code{m}, declared as @w{@samp{X v = m ();}}, whose result is of class
- @code{X}:
- 
- @example
- X
- m ()
- @{
-   X b;
-   b.a = 23;
-   return b;
- @}
- @end example
- 
- @cindex implicit argument: return value
- Although @code{m} appears to have no arguments, in fact it has one implicit
- argument: the address of the return value.  At invocation, the address
- of enough space to hold @code{v} is sent in as the implicit argument.
- Then @code{b} is constructed and its @code{a} field is set to the value
- 23.  Finally, a copy constructor (a constructor of the form @samp{X(X&)})
- is applied to @code{b}, with the (implicit) return value location as the
- target, so that @code{v} is now bound to the return value.
- 
- But this is wasteful.  The local @code{b} is declared just to hold
- something that will be copied right out.  While a compiler that
- combined an ``elision'' algorithm with interprocedural data flow
- analysis could conceivably eliminate all of this, it is much more
- practical to allow you to assist the compiler in generating
- efficient code by manipulating the return value explicitly,
- thus avoiding the local variable and copy constructor altogether.
- 
- Using the extended GNU C++ function-definition syntax, you can avoid the
- temporary allocation and copying by naming @code{r} as your return value
- at the outset, and assigning to its @code{a} field directly:
- 
- @example
- X
- m () return r;
- @{
-   r.a = 23;
- @}
- @end example
- 
- @noindent
- The declaration of @code{r} is a standard, proper declaration, whose effects
- are executed @strong{before} any of the body of @code{m}.
- 
- Functions of this type impose no additional restrictions; in particular,
- you can execute @code{return} statements, or return implicitly by
- reaching the end of the function body (``falling off the edge'').
- Cases like
- 
- @example
- X
- m () return r (23);
- @{
-   return;
- @}
- @end example
- 
- @noindent
- (or even @w{@samp{X m () return r (23); @{ @}}}) are unambiguous, since
- the return value @code{r} has been initialized in either case.  The
- following code may be hard to read, but also works predictably:
- 
- @example
- X
- m () return r;
- @{
-   X b;
-   return b;
- @}
- @end example
- 
- The return value slot denoted by @code{r} is initialized at the outset,
- but the statement @samp{return b;} overrides this value.  The compiler
- deals with this by destroying @code{r} (calling the destructor if there
- is one, or doing nothing if there is not), and then reinitializing
- @code{r} with @code{b}.
- 
- This extension is provided primarily to help people who use overloaded
- operators, where there is a great need to control not just the
- arguments, but the return values of functions.  For classes where the
- copy constructor incurs a heavy performance penalty (especially in the
- common case where there is a quick default constructor), this is a major
- savings.  The disadvantage of this extension is that you do not control
- when the default constructor for the return value is called: it is
- always called at the beginning.
  
  @node Min and Max
  @section Minimum and Maximum Operators in C++
--- 3391,3396 ----
Index: cp/NEWS
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cp/NEWS,v
retrieving revision 1.24
diff -c -p -r1.24 NEWS
*** NEWS	2000/05/31 19:27:11	1.24
--- NEWS	2000/09/06 21:14:50
***************
*** 36,41 ****
--- 36,47 ----
  * G++ no longer allows you to overload the conditional operator (i.e., 
    the `?:' operator.)
  
+ * The "named return value" extension:
+ 	
+     int f () return r { r = 3; }
+ 
+   has been deprecated, and will be removed in a future version of G++.
+ 
  *** Changes in GCC 2.95:
  
  * Messages about non-conformant code that we can still handle ("pedwarns")
Index: cp/cp-tree.h
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cp/cp-tree.h,v
retrieving revision 1.522
diff -c -p -r1.522 cp-tree.h
*** cp-tree.h	2000/09/06 05:52:51	1.522
--- cp-tree.h	2000/09/06 21:14:53
*************** struct language_function
*** 1009,1014 ****
--- 1009,1021 ----
  
  #define doing_semantic_analysis_p() (!expanding_p)
  
+ /* If original DECL_RESULT of current function was a register,
+    but due to being an addressable named return value, would up
+    on the stack, this variable holds the named return value's
+    original location.  */
+ 
+ #define original_result_rtx cp_function_chain->x_result_rtx
+ 
  #define in_function_try_handler cp_function_chain->in_function_try_handler
  
  extern tree current_function_return_value;
*************** extern int flag_new_for_scope;
*** 2588,2600 ****
  				   && CONSTRUCTOR_ELTS (NODE) == NULL_TREE \
  				   && ! TREE_HAS_CONSTRUCTOR (NODE))
  
- #if 0
- /* Indicates that a NON_LVALUE_EXPR came from a C++ reference.
-    Used to generate more helpful error message in case somebody
-    tries to take its address.  */
- #define TREE_REFERENCE_EXPR(NODE) (TREE_LANG_FLAG_3(NODE))
- #endif
- 
  /* Nonzero for _TYPE means that the _TYPE defines a destructor.  */
  #define TYPE_HAS_DESTRUCTOR(NODE) (TYPE_LANG_FLAG_2(NODE))
  
--- 2595,2600 ----
*************** extern int flag_new_for_scope;
*** 2804,2821 ****
  
  /* Define fields and accessors for nodes representing declared names.  */
  
- #if 0
- /* C++: A derived class may be able to directly use the virtual
-    function table of a base class.  When it does so, it may
-    still have a decl node used to access the virtual function
-    table (so that variables of this type can initialize their
-    virtual function table pointers by name).  When such thievery
-    is committed, know exactly which base class's virtual function
-    table is the one being stolen.  This effectively computes the
-    transitive closure.  */
- #define DECL_VPARENT(NODE) ((NODE)->decl.arguments)
- #endif
- 
  #define TYPE_WAS_ANONYMOUS(NODE) (TYPE_LANG_SPECIFIC (NODE)->was_anonymous)
  
  /* C++: all of these are overloaded!  These apply only to TYPE_DECLs.  */
--- 2804,2809 ----
*************** extern int duplicate_decls			PARAMS ((tr
*** 3903,3911 ****
  extern tree pushdecl				PARAMS ((tree));
  extern tree pushdecl_top_level			PARAMS ((tree));
  extern void pushdecl_class_level		PARAMS ((tree));
- #if 0
- extern void pushdecl_nonclass_level		PARAMS ((tree));
- #endif
  extern tree pushdecl_namespace_level            PARAMS ((tree));
  extern tree push_using_decl                     PARAMS ((tree, tree));
  extern tree push_using_directive                PARAMS ((tree));
--- 3891,3896 ----
*************** extern void check_goto				PARAMS ((tree)
*** 3918,3926 ****
  extern void define_case_label			PARAMS ((void));
  extern tree getdecls				PARAMS ((void));
  extern tree gettags				PARAMS ((void));
- #if 0
- extern void set_current_level_tags_transparency	PARAMS ((int));
- #endif
  extern tree binding_for_name                    PARAMS ((tree, tree));
  extern tree namespace_binding                   PARAMS ((tree, tree));
  extern void set_namespace_binding               PARAMS ((tree, tree, tree));
--- 3903,3908 ----
*************** extern void build_enumerator			PARAMS ((
*** 3974,3980 ****
  extern int start_function			PARAMS ((tree, tree, tree, int));
  extern void expand_start_early_try_stmts	PARAMS ((void));
  extern void store_parm_decls			PARAMS ((void));
- extern void store_return_init			PARAMS ((tree));
  extern tree finish_function			PARAMS ((int));
  extern tree start_method			PARAMS ((tree, tree, tree));
  extern tree finish_method			PARAMS ((tree));
--- 3956,3961 ----
*************** extern tree make_call_declarator		PARAMS
*** 4166,4174 ****
  extern void set_quals_and_spec			PARAMS ((tree, tree, tree));
  extern void lang_init				PARAMS ((void));
  extern void lang_finish				PARAMS ((void));
- #if 0
- extern void reinit_lang_specific		PARAMS ((void));
- #endif
  extern void print_parse_statistics		PARAMS ((void));
  extern void extract_interface_info		PARAMS ((void));
  extern void do_pending_inlines			PARAMS ((void));
--- 4147,4152 ----
*************** extern void genrtl_ctor_stmt            
*** 4464,4471 ****
  extern void genrtl_subobject                    PARAMS ((tree));
  extern tree genrtl_do_poplevel                  PARAMS ((void));
  extern void clear_out_block                     PARAMS ((void));
! extern void genrtl_named_return_value           PARAMS ((tree,
! 							 tree));
  extern tree begin_global_stmt_expr              PARAMS ((void));
  extern tree finish_global_stmt_expr             PARAMS ((tree));
  
--- 4442,4448 ----
  extern void genrtl_subobject                    PARAMS ((tree));
  extern tree genrtl_do_poplevel                  PARAMS ((void));
  extern void clear_out_block                     PARAMS ((void));
! extern void genrtl_named_return_value           PARAMS ((void));
  extern tree begin_global_stmt_expr              PARAMS ((void));
  extern tree finish_global_stmt_expr             PARAMS ((tree));
  
Index: cp/decl.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cp/decl.c,v
retrieving revision 1.682
diff -c -p -r1.682 decl.c
*** decl.c	2000/09/06 08:53:44	1.682
--- decl.c	2000/09/06 21:15:02
*************** int in_std;
*** 269,281 ****
  /* Expect only namespace names now. */
  static int only_namespace_names;
  
- /* If original DECL_RESULT of current function was a register,
-    but due to being an addressable named return value, would up
-    on the stack, this variable holds the named return value's
-    original location.  */
- 
- #define original_result_rtx cp_function_chain->x_result_rtx
- 
  /* Used only for jumps to as-yet undefined labels, since jumps to
     defined labels can have their validity checked immediately.  */
  
--- 269,274 ----
*************** cp_finish_decl (decl, init, asmspec_tree
*** 8092,8098 ****
      return;
    
    /* Add this declaration to the statement-tree.  */
!   if (building_stmt_tree () && at_function_scope_p ())
      add_decl_stmt (decl);
  
    if (TYPE_HAS_MUTABLE_P (type))
--- 8085,8093 ----
      return;
    
    /* Add this declaration to the statement-tree.  */
!   if (building_stmt_tree () 
!       && at_function_scope_p ()
!       && TREE_CODE (decl) != RESULT_DECL)
      add_decl_stmt (decl);
  
    if (TYPE_HAS_MUTABLE_P (type))
*************** cp_finish_decl (decl, init, asmspec_tree
*** 8215,8222 ****
  	    {
  	      /* If we're not building RTL, then we need to do so
  		 now.  */
! 	      if (!building_stmt_tree ())
! 		emit_local_var (decl);
  	      /* Initialize the variable.  */
  	      initialize_local_var (decl, init, flags);
  	      /* Clean up the variable.  */
--- 8210,8216 ----
  	    {
  	      /* If we're not building RTL, then we need to do so
  		 now.  */
! 	      my_friendly_assert (building_stmt_tree (), 20000906);
  	      /* Initialize the variable.  */
  	      initialize_local_var (decl, init, flags);
  	      /* Clean up the variable.  */
*************** store_parm_decls ()
*** 14032,14062 ****
        && building_stmt_tree ()
        && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
      current_eh_spec_try_block = expand_start_eh_spec ();
- }
- 
- /* Bind a name and initialization to the return value of
-    the current function.  */
- 
- void
- store_return_init (decl)
-      tree decl;
- {
-   /* If this named return value comes in a register, put it in a
-      pseudo-register.  */
-   if (DECL_REGISTER (decl))
-     {
-       original_result_rtx = DECL_RTL (decl);
-       /* Note that the mode of the old DECL_RTL may be wider than the
- 	 mode of DECL_RESULT, depending on the calling conventions for
- 	 the processor.  For example, on the Alpha, a 32-bit integer
- 	 is returned in a DImode register -- the DECL_RESULT has
- 	 SImode but the DECL_RTL for the DECL_RESULT has DImode.  So,
- 	 here, we use the mode the back-end has already assigned for
- 	 the return value.  */
-       DECL_RTL (decl) = gen_reg_rtx (GET_MODE (original_result_rtx));
-       if (TREE_ADDRESSABLE (decl))
- 	put_var_into_stack (decl);
-     }
  }
  
  
--- 14026,14031 ----
Index: cp/semantics.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cp/semantics.c,v
retrieving revision 1.167
diff -c -p -r1.167 semantics.c
*** semantics.c	2000/09/06 05:52:51	1.167
--- semantics.c	2000/09/06 21:15:04
*************** finish_decl_cleanup (decl, cleanup)
*** 1030,1084 ****
  /* Generate the RTL for a RETURN_INIT. */
  
  void
! genrtl_named_return_value (return_id, init)
!      tree return_id, init;
  {
    tree decl;
-   /* Clear this out so that finish_named_return_value can set it
-      again.  */
-   DECL_NAME (DECL_RESULT (current_function_decl)) = NULL_TREE;
  
    decl = DECL_RESULT (current_function_decl);
-   if (pedantic)
-     /* Give this error as many times as there are occurrences,
-        so that users can use Emacs compilation buffers to find
-        and fix all such places.  */
-     pedwarn ("ISO C++ does not permit named return values");
- 
-   if (return_id != NULL_TREE)
-     {
-       if (DECL_NAME (decl) == NULL_TREE)
- 	{
- 	  DECL_NAME (decl) = return_id;
- 	  DECL_ASSEMBLER_NAME (decl) = return_id;
- 	}
-       else
- 	{
- 	  cp_error ("return identifier `%D' already in place", return_id);
- 	  return;
- 	}
-     }
  
!   /* Can't let this happen for constructors.  */
!   if (DECL_CONSTRUCTOR_P (current_function_decl))
!     {
!       error ("can't redefine default return value for constructors");
!       return;
!     }
  
!   /* If we have a named return value, put that in our scope as well.  */
!   if (DECL_NAME (decl) != NULL_TREE)
!     {
!       /* Let `cp_finish_decl' know that this initializer is ok.  */
!       DECL_INITIAL (decl) = init;
!       cp_finish_decl (decl, init, NULL_TREE, 0);
!       store_return_init (decl);
      }
- 
-   /* Don't use tree-inlining for functions with named return values.
-      That doesn't work properly because we don't do any translation of
-      the RETURN_INITs when they are copied.  */
-   DECL_UNINLINABLE (current_function_decl) = 1;
  }
  
  /* Bind a name and initialization to the return value of
--- 1030,1059 ----
  /* Generate the RTL for a RETURN_INIT. */
  
  void
! genrtl_named_return_value ()
  {
    tree decl;
  
    decl = DECL_RESULT (current_function_decl);
  
!   emit_local_var (decl);
  
!   /* If this named return value comes in a register, put it in a
!      pseudo-register.  */
!   if (DECL_REGISTER (decl))
!     {
!       original_result_rtx = DECL_RTL (decl);
!       /* Note that the mode of the old DECL_RTL may be wider than the
! 	 mode of DECL_RESULT, depending on the calling conventions for
! 	 the processor.  For example, on the Alpha, a 32-bit integer
! 	 is returned in a DImode register -- the DECL_RESULT has
! 	 SImode but the DECL_RTL for the DECL_RESULT has DImode.  So,
! 	 here, we use the mode the back-end has already assigned for
! 	 the return value.  */
!       DECL_RTL (decl) = gen_reg_rtx (GET_MODE (original_result_rtx));
!       if (TREE_ADDRESSABLE (decl))
! 	put_var_into_stack (decl);
      }
  }
  
  /* Bind a name and initialization to the return value of
*************** finish_named_return_value (return_id, in
*** 1090,1100 ****
  {
    tree decl = DECL_RESULT (current_function_decl);
  
    if (pedantic)
-     /* Give this error as many times as there are occurrences,
-        so that users can use Emacs compilation buffers to find
-        and fix all such places.  */
      pedwarn ("ISO C++ does not permit named return values");
  
    if (return_id != NULL_TREE)
      {
--- 1065,1076 ----
  {
    tree decl = DECL_RESULT (current_function_decl);
  
+   /* Give this error as many times as there are occurrences, so that
+      users can use Emacs compilation buffers to find and fix all such
+      places.  */
    if (pedantic)
      pedwarn ("ISO C++ does not permit named return values");
+   cp_deprecated ("the named return value extension");
  
    if (return_id != NULL_TREE)
      {
*************** finish_named_return_value (return_id, in
*** 1124,1130 ****
        DECL_INITIAL (decl) = init;
        if (doing_semantic_analysis_p ())
  	pushdecl (decl);
!       add_tree (build_stmt (RETURN_INIT, return_id, init));
      }
  
    /* Don't use tree-inlining for functions with named return values.
--- 1100,1112 ----
        DECL_INITIAL (decl) = init;
        if (doing_semantic_analysis_p ())
  	pushdecl (decl);
!       if (!processing_template_decl) 
! 	{
! 	  cp_finish_decl (decl, init, NULL_TREE, 0);
! 	  add_tree (build_stmt (RETURN_INIT, NULL_TREE, NULL_TREE));
! 	}
!       else
! 	add_tree (build_stmt (RETURN_INIT, return_id, init));
      }
  
    /* Don't use tree-inlining for functions with named return values.
*************** lang_expand_stmt (t)
*** 2463,2470 ****
  	  break;
  
  	case RETURN_INIT:
! 	  genrtl_named_return_value (TREE_OPERAND (t, 0), 
! 				     TREE_OPERAND (t, 1));
  	  break;
  
  	default:
--- 2445,2451 ----
  	  break;
  
  	case RETURN_INIT:
! 	  genrtl_named_return_value ();
  	  break;
  
  	default:
Index: testsuite/g++.old-deja/g++.benjamin/p13417.C
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/g++.old-deja/g++.benjamin/p13417.C,v
retrieving revision 1.2
diff -c -p -r1.2 p13417.C
*** p13417.C	1998/12/16 21:22:08	1.2
--- p13417.C	2000/09/06 21:15:04
***************
*** 1,5 ****
  // Build don't link:
! // Special g++ Options:  
  // prms-id: 13417
  
  class   Foo {
--- 1,5 ----
  // Build don't link:
! // Special g++ Options: -Wno-deprecated
  // prms-id: 13417
  
  class   Foo {
Index: testsuite/g++.old-deja/g++.ext/return1.C
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/g++.old-deja/g++.ext/return1.C,v
retrieving revision 1.2
diff -c -p -r1.2 return1.C
*** return1.C	2000/06/02 18:19:02	1.2
--- return1.C	2000/09/06 21:15:04
***************
*** 1,6 ****
  // Test that the named return value extension works when passed as a reference.
  // Origin: Jason Merrill <jason@redhat.com>
! // Special g++ Options:
  
  void f (int &i)
  {
--- 1,6 ----
  // Test that the named return value extension works when passed as a reference.
  // Origin: Jason Merrill <jason@redhat.com>
! // Special g++ Options: -Wno-deprecated
  
  void f (int &i)
  {
Index: testsuite/g++.old-deja/g++.mike/p646.C
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/g++.old-deja/g++.mike/p646.C,v
retrieving revision 1.4
diff -c -p -r1.4 p646.C
*** p646.C	2000/07/04 07:47:10	1.4
--- p646.C	2000/09/06 21:15:05
***************
*** 6,12 ****
  */
  
  
! // Special g++ Options: 
  
  extern "C"
  {
--- 6,12 ----
  */
  
  
! // Special g++ Options: -Wno-deprecated
  
  extern "C"
  {
Index: testsuite/g++.old-deja/g++.mike/p700.C
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/g++.old-deja/g++.mike/p700.C,v
retrieving revision 1.4
diff -c -p -r1.4 p700.C
*** p700.C	2000/07/25 20:11:43	1.4
--- p700.C	2000/09/06 21:15:05
***************
*** 1,4 ****
! // Special g++ Options:
  // prms-id: 700
  
  //# 1 "../../../../libg++/etc/benchmarks/dhrystone.cc"
--- 1,4 ----
! // Special g++ Options: -Wno-deprecated
  // prms-id: 700
  
  //# 1 "../../../../libg++/etc/benchmarks/dhrystone.cc"
Index: testsuite/g++.old-deja/g++.oliva/nameret1.C
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/g++.old-deja/g++.oliva/nameret1.C,v
retrieving revision 1.2
diff -c -p -r1.2 nameret1.C
*** nameret1.C	1999/12/26 15:28:17	1.2
--- nameret1.C	2000/09/06 21:15:06
***************
*** 1,11 ****
  // Build don't link:
! // Copyright (C) 1999 Free Software Foundation
  
  // by Alexandre Oliva <oliva@lsd.ic.unicamp.br>
  
  // distilled from libg++'s Rational.cc
  
! // Special g++ Options:
  
  inline int bar () return r {}
  
--- 1,11 ----
  // Build don't link:
! // Copyright (C) 1999, 2000 Free Software Foundation
  
  // by Alexandre Oliva <oliva@lsd.ic.unicamp.br>
  
  // distilled from libg++'s Rational.cc
  
! // Special g++ Options: -Wno-deprecated
  
  inline int bar () return r {}
  
Index: testsuite/g++.old-deja/g++.oliva/nameret2.C
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/g++.old-deja/g++.oliva/nameret2.C,v
retrieving revision 1.4
diff -c -p -r1.4 nameret2.C
*** nameret2.C	1999/12/26 15:28:17	1.4
--- nameret2.C	2000/09/06 21:15:06
***************
*** 1,11 ****
  // Build don't link:
! // Copyright (C) 1999 Free Software Foundation
  
  // by Alexandre Oliva <oliva@lsd.ic.unicamp.br>
  
  // distilled from libg++'s Integer.cc
  
! // Special g++ Options: -O1
  
  inline int bar () return r {}
  
--- 1,11 ----
  // Build don't link:
! // Copyright (C) 1999, 2000 Free Software Foundation
  
  // by Alexandre Oliva <oliva@lsd.ic.unicamp.br>
  
  // distilled from libg++'s Integer.cc
  
! // Special g++ Options: -O1 -Wno-deprecated
  
  inline int bar () return r {}
  
Index: testsuite/g++.old-deja/g++.robertl/eb101.C
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/g++.old-deja/g++.robertl/eb101.C,v
retrieving revision 1.4
diff -c -p -r1.4 eb101.C
*** eb101.C	1999/04/29 08:33:55	1.4
--- eb101.C	2000/09/06 21:15:07
***************
*** 1,4 ****
! // Special g++ Options: -fcheck-memory-usage
  // Build don't link: 
  
   
--- 1,4 ----
! // Special g++ Options: -fcheck-memory-usage -Wno-deprecated
  // Build don't link: 
  
   
Index: testsuite/g++.old-deja/g++.robertl/eb27.C
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/g++.old-deja/g++.robertl/eb27.C,v
retrieving revision 1.8
diff -c -p -r1.8 eb27.C
*** eb27.C	1998/12/16 22:03:42	1.8
--- eb27.C	2000/09/06 21:15:07
***************
*** 2,8 ****
  /* simple program to demonstrate the bug with named return values in gcc
  */
  /* (w) 4.9.97 by Kurt Garloff <K.Garloff@ping.de> */
! // Special g++ Options:
  // 8/28/1998 - This dies in add_conversions from dfs_walk, null CLASSTYPE_METHOD_VEC
  // for the test<T> record_type.  This is marked as an expected failure for now,
  // until we actually fix it.
--- 2,8 ----
  /* simple program to demonstrate the bug with named return values in gcc
  */
  /* (w) 4.9.97 by Kurt Garloff <K.Garloff@ping.de> */
! // Special g++ Options: -Wno-deprecated
  // 8/28/1998 - This dies in add_conversions from dfs_walk, null CLASSTYPE_METHOD_VEC
  // for the test<T> record_type.  This is marked as an expected failure for now,
  // until we actually fix it.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]