diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index 0131c06ba4dc083bed4792bac2140916e74634a6..d8d059f11c940ce3ef54e3677a4c52ddfcb87793 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -349,8 +349,10 @@ errstart(int elevel, const char *filename, int lineno,
 
 		/* keep only base name, useful especially for vpath builds */
 		slash = strrchr(filename, '/');
-		edata->filename = slash ? slash + 1 : filename;
+		if (slash)
+			filename = slash + 1;
 	}
+	edata->filename = filename;
 	edata->lineno = lineno;
 	edata->funcname = funcname;
 	/* the default text domain is the backend's */
@@ -1155,8 +1157,10 @@ elog_start(const char *filename, int lineno, const char *funcname)
 
 		/* keep only base name, useful especially for vpath builds */
 		slash = strrchr(filename, '/');
-		edata->filename = slash ? slash + 1 : filename;
+		if (slash)
+			filename = slash + 1;
 	}
+	edata->filename = filename;
 	edata->lineno = lineno;
 	edata->funcname = funcname;
 	/* errno is saved now so that error parameter eval can't change it */