updated for version 7.2.353
Problem:    No command line completion for ":profile".
Solution:   Complete the subcommand and file name.
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index 81feac8..94c1f74 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -1115,6 +1115,79 @@
     }
 }
 
+/* Command line expansion for :profile. */
+static enum
+{
+    PEXP_SUBCMD,	/* expand :profile sub-commands */
+    PEXP_FUNC,		/* expand :profile func {funcname} */
+} pexpand_what;
+
+static char *pexpand_cmds[] = {
+			"start",
+#define PROFCMD_START	0
+			"pause",
+#define PROFCMD_PAUSE	1
+			"continue",
+#define PROFCMD_CONTINUE 2
+			"func",
+#define PROFCMD_FUNC	3
+			"file",
+#define PROFCMD_FILE	4
+			NULL
+#define PROFCMD_LAST	5
+};
+
+/*
+ * Function given to ExpandGeneric() to obtain the profile command
+ * specific expansion.
+ */
+    char_u *
+get_profile_name(xp, idx)
+    expand_T	*xp UNUSED;
+    int		idx;
+{
+    switch (pexpand_what)
+    {
+    case PEXP_SUBCMD:
+	return (char_u *)pexpand_cmds[idx];
+    /* case PEXP_FUNC: TODO */
+    default:
+	return NULL;
+    }
+}
+
+/*
+ * Handle command line completion for :profile command.
+ */
+    void
+set_context_in_profile_cmd(xp, arg)
+    expand_T	*xp;
+    char_u	*arg;
+{
+    char_u	*end_subcmd;
+    int		len;
+
+    /* Default: expand subcommands. */
+    xp->xp_context = EXPAND_PROFILE;
+    pexpand_what = PEXP_SUBCMD;
+    xp->xp_pattern = arg;
+
+    end_subcmd = skiptowhite(arg);
+    if (*end_subcmd == NUL)
+	return;
+
+    len = end_subcmd - arg;
+    if (len == 5 && STRNCMP(arg, "start", 5) == 0)
+    {
+	xp->xp_context = EXPAND_FILES;
+	xp->xp_pattern = skipwhite(end_subcmd);
+	return;
+    }
+
+    /* TODO: expand function names after "func" */
+    xp->xp_context = EXPAND_NOTHING;
+}
+
 /*
  * Dump the profiling info.
  */
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 016a2b5..aeb7774 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -3804,6 +3804,11 @@
 		xp->xp_context = EXPAND_NOTHING;
 	    break;
 #endif
+#if defined(FEAT_PROFILE)
+	case CMD_profile:
+	    set_context_in_profile_cmd(xp, arg);
+	    break;
+#endif
 
 #endif /* FEAT_CMDL_COMPL */
 
diff --git a/src/ex_getln.c b/src/ex_getln.c
index d5761f3..e8056f8 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -4522,6 +4522,9 @@
 #ifdef FEAT_SIGNS
 	    {EXPAND_SIGN, get_sign_name, TRUE},
 #endif
+#ifdef FEAT_PROFILE
+	    {EXPAND_PROFILE, get_profile_name, TRUE},
+#endif
 #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
 	&& (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
 	    {EXPAND_LANGUAGE, get_lang_arg, TRUE},
diff --git a/src/proto/ex_cmds2.pro b/src/proto/ex_cmds2.pro
index 88cfeb7..2c89fe3 100644
--- a/src/proto/ex_cmds2.pro
+++ b/src/proto/ex_cmds2.pro
@@ -24,6 +24,8 @@
 int profile_equal __ARGS((proftime_T *tm1, proftime_T *tm2));
 int profile_cmp __ARGS((proftime_T *tm1, proftime_T *tm2));
 void ex_profile __ARGS((exarg_T *eap));
+char_u *get_profile_name __ARGS((expand_T *xp, int idx));
+void set_context_in_profile_cmd __ARGS((expand_T *xp, char_u *arg));
 void profile_dump __ARGS((void));
 void script_prof_save __ARGS((proftime_T *tm));
 void script_prof_restore __ARGS((proftime_T *tm));
diff --git a/src/version.c b/src/version.c
index a823253..6b1b88a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -682,6 +682,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    353,
+/**/
     352,
 /**/
     351,
diff --git a/src/vim.h b/src/vim.h
index 88541e5..804070e 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -718,6 +718,7 @@
 #define EXPAND_SHELLCMD		32
 #define EXPAND_CSCOPE		33
 #define EXPAND_SIGN		34
+#define EXPAND_PROFILE		35
 
 /* Values for exmode_active (0 is no exmode) */
 #define EXMODE_NORMAL		1