diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 83ed69e98b135f02ed744903f17598b33cd64ee0..6fef8cc453a5d661b4c0b6c8d5cd83d92ae5f48d 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,8 @@
+2009-10-21  Eric Botcazou  <ebotcazou@adacore.com>
+
+	* gcc-interfaces/utils.c (create_subprog_decl): Do not redefine
+	main_identifier_node.
+
 2009-10-17  Eric Botcazou  <ebotcazou@adacore.com>
 
 	* gcc-interface/utils.c (convert): When converting to a padded type
diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c
index a8225b0b30a9d5633a3f29f0e2847da85d4a10f1..b1e2e588347ddcac2f1cf092ad31eeb829702ec4 100644
--- a/gcc/ada/gcc-interface/utils.c
+++ b/gcc/ada/gcc-interface/utils.c
@@ -1866,9 +1866,9 @@ create_subprog_decl (tree subprog_name, tree asm_name,
 	 to be declared as the "main" function literally by default.  Ada
 	 program entry points are typically declared with a different name
 	 within the binder generated file, exported as 'main' to satisfy the
-	 system expectations.  Redirect main_identifier_node in this case.  */
+	 system expectations.  Force main_identifier_node in this case.  */
       if (asm_name == main_identifier_node)
-	main_identifier_node = DECL_NAME (subprog_decl);
+	DECL_NAME (subprog_decl) = main_identifier_node;
     }
 
   process_attributes (subprog_decl, attr_list);