/*
     * Add the new role to the specified existing roles.
     */
-   foreach(item, addroleto)
+   if (addroleto)
    {
-       RoleSpec   *oldrole = lfirst(item);
-       HeapTuple   oldroletup = get_rolespec_tuple((Node *) oldrole);
-       Oid         oldroleid = HeapTupleGetOid(oldroletup);
-       char       *oldrolename = NameStr(((Form_pg_authid) GETSTRUCT(oldroletup))->rolname);
-
-       AddRoleMems(oldrolename, oldroleid,
-                   list_make1(makeString(stmt->role)),
-                   list_make1_oid(roleid),
-                   GetUserId(), false);
+       RoleSpec   *thisrole = makeNode(RoleSpec);
+       List       *thisrole_list = list_make1(thisrole);
+       List       *thisrole_oidlist = list_make1_oid(roleid);
+
+       thisrole->roletype = ROLESPEC_CSTRING;
+       thisrole->rolename = stmt->role;
+       thisrole->location = -1;
 
-       ReleaseSysCache(oldroletup);
+       foreach(item, addroleto)
+       {
+           RoleSpec   *oldrole = lfirst(item);
+           HeapTuple   oldroletup = get_rolespec_tuple((Node *) oldrole);
+           Form_pg_authid oldroleform = (Form_pg_authid) GETSTRUCT(oldroletup);
+           Oid         oldroleid = HeapTupleGetOid(oldroletup);
+           char       *oldrolename = NameStr(oldroleform->rolname);
+
+           AddRoleMems(oldrolename, oldroleid,
+                       thisrole_list,
+                       thisrole_oidlist,
+                       GetUserId(), false);
+
+           ReleaseSysCache(oldroletup);
+       }
    }
 
    /*
 
    forboth(specitem, memberSpecs, iditem, memberIds)
    {
-       RoleSpec   *memberRole = lfirst(specitem);
+       RoleSpec   *memberRole = lfirst_node(RoleSpec, specitem);
        Oid         memberid = lfirst_oid(iditem);
        HeapTuple   authmem_tuple;
        HeapTuple   tuple;