On 05/09/2016 12:23 PM, Bernd Schmidt wrote:
On 05/06/2016 01:38 AM, Dhole wrote:
I've wrote a test case which fails (when it shouldn't) and I don't see
why.

I think it's setting the env var when executing the test, not when
executing the compiler.

Here's something that seems to work (with an appropriately adjusted testcase). Cc'ing testsuite maintainers.


Bernd
	* lib/gcc-dg.exp (orig_source_date_epoch_saved,
	orig_source_date_epoch_checked): Initialize to 0.
	(dg-set-source-date-epoch): New function.
	(restore_source_epoch_env_var): New function.
	(cleanup_after_saved_dg_test): Call it.

Index: gcc-dg.exp
===================================================================
--- gcc-dg.exp	(revision 236021)
+++ gcc-dg.exp	(working copy)
@@ -31,6 +31,9 @@ load_lib torture-options.exp
 load_lib fortran-modules.exp
 load_lib multiline.exp
 
+set orig_source_date_epoch_saved 0
+set orig_source_date_epoch_checked 0
+
 # We set LC_ALL and LANG to C so that we get the same error messages as expected.
 setenv LC_ALL C
 setenv LANG C
@@ -422,9 +425,24 @@ proc dg-set-target-env-var { args } {
     lappend set_target_env_var [list [lindex $args 1] [lindex $args 2]]
 }
 
+proc dg-set-source-date-epoch { args } {
+  global orig_source_date_epoch
+  global orig_source_date_epoch_saved
+  global orig_source_date_epoch_checked
+  if { $orig_source_date_epoch_checked == 0 } {
+    if [info exists env(SOURCE_DATE_EPOCH)] {
+      set orig_source_date_epoch "$env(SOURCE_DATE_EPOCH)"
+      set orig_source_date_epoch_saved 1
+    }
+    set orig_source_date_epoch_checked 1
+  }
+  setenv SOURCE_DATE_EPOCH [lindex $args 1]
+}
+
 proc set-target-env-var { } {
     global set_target_env_var
     upvar 1 saved_target_env_var saved_target_env_var
+    verbose "setting env var"
     foreach env_var $set_target_env_var {
 	set var [lindex $env_var 0]
 	set value [lindex $env_var 1]
@@ -840,6 +858,18 @@ proc output-exists-not { args } {
     }
 }
 
+proc restore_source_epoch_env_var { } {
+  global orig_source_date_epoch_saved
+  global orig_source_date_epoch
+  global env
+
+  if { $orig_source_date_epoch_saved } {
+    setenv SOURCE_DATE_EPOCH "$orig_source_date_epoch"
+  } elseif [info exists env(SOURCE_DATE_EPOCH)] {
+    unsetenv SOURCE_DATE_EPOCH
+  }
+}
+
 # We need to make sure that additional_* are cleared out after every
 # test.  It is not enough to clear them out *before* the next test run
 # because gcc-target-compile gets run directly from some .exp files
@@ -877,6 +907,7 @@ if { [info procs saved-dg-test] == [list
 	if [info exists keep_saved_temps_suffixes] {
 	    unset keep_saved_temps_suffixes
 	}
+	restore_source_epoch_env_var
 	unset_timeout_vars
 	if [info exists compiler_conditional_xfail_data] {
 	    unset compiler_conditional_xfail_data

Reply via email to