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]
Other format: [Raw text]

[Ada] Detect useless assignments to parts of objects


GNAT did not issue a warning when assigning to a part of an object, and not
referencing the object later on. Now it does so in some cases, similarly to
the existing warnings on assignment to elementary objects.

On the code below, GNAT now issues warnings:

$ gcc -c -gnatwa assign.adb
assign.adb:8:05: warning: useless assignment to "X", value never referenced
assign.adb:9:04: warning: useless assignment to "Y", value never referenced

---
procedure Assign is
   type T is record
      U : Integer;
   end record;
   X : T := T'(U => 0);
   Y : array (1..2) of Integer := (others => 0);
begin
   X.U   := X.U + 1;
   Y (2) := Y (1);
end Assign;

Tested on x86_64-pc-linux-gnu, committed on trunk

2011-08-04  Yannick Moy  <moy@adacore.com>

	* checks.adb (Apply_Float_Conversion_Check): correct a typo where Lo_OK
	was used instead of Hi_OK, which could cause a read of an uninitialized
	value later on. Detected while working on the new warning.
	* exp_ch9.adb (Expand_N_Entry_Declaration): remove useless assignment
	to local variable.
	* sem_ch5.adb (Analyze_Assignment): set the last assignment component
	in more cases, in order to detect more unreferenced values.
	* sem_util.adb, sem_util.ads (Get_Enclosing_Object): return enclosing
	object for expression, if any.

Attachment: difs
Description: Text document


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