*** a/src/test/regress/pg_regress.c
--- b/src/test/regress/pg_regress.c
***************
*** 496,501 **** convert_sourcefiles_in(char *source_subdir, char *dest_dir, char *dest_subdir, c
--- 496,502 ----
  {
  	char		testtablespace[MAXPGPATH];
  	char		indir[MAXPGPATH];
+ 	char		result_dir[MAXPGPATH];
  	struct stat st;
  	int			ret;
  	char	  **name;
***************
*** 520,525 **** convert_sourcefiles_in(char *source_subdir, char *dest_dir, char *dest_subdir, c
--- 521,534 ----
  		/* Error logged in pgfnames */
  		exit(2);
  
+ 	/*
+ 	 * Enforce creation of destination directory if it does not exist yet.
+ 	 * This is useful for tests using only source files.
+ 	 */
+ 	snprintf(result_dir, MAXPGPATH, "%s/%s", dest_dir, dest_subdir);
+ 	if (!directory_exists(result_dir))
+ 		make_directory(result_dir);
+ 
  	snprintf(testtablespace, MAXPGPATH, "%s/testtablespace", outputdir);
  
  #ifdef WIN32
***************
*** 565,571 **** convert_sourcefiles_in(char *source_subdir, char *dest_dir, char *dest_subdir, c
  		/* build the full actual paths to open */
  		snprintf(prefix, strlen(*name) - 6, "%s", *name);
  		snprintf(srcfile, MAXPGPATH, "%s/%s", indir, *name);
! 		snprintf(destfile, MAXPGPATH, "%s/%s/%s.%s", dest_dir, dest_subdir,
  				 prefix, suffix);
  
  		infile = fopen(srcfile, "r");
--- 574,580 ----
  		/* build the full actual paths to open */
  		snprintf(prefix, strlen(*name) - 6, "%s", *name);
  		snprintf(srcfile, MAXPGPATH, "%s/%s", indir, *name);
! 		snprintf(destfile, MAXPGPATH, "%s/%s.%s", result_dir,
  				 prefix, suffix);
  
  		infile = fopen(srcfile, "r");
