diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c
index cc3d564..9b7ac73 100644
--- a/src/backend/commands/user.c
+++ b/src/backend/commands/user.c
@@ -274,7 +274,14 @@ CreateRole(CreateRoleStmt *stmt)
 	if (daddroleto)
 		addroleto = (List *) daddroleto->arg;
 	if (drolemembers)
+	{
+		ListCell   *rolemember;
+
 		rolemembers = (List *) drolemembers->arg;
+		foreach (rolemember, rolemembers)
+			check_rolespec_name(lfirst(rolemember),
+					"Cannot add reserved role to another role.");
+	}
 	if (dadminmembers)
 		adminmembers = (List *) dadminmembers->arg;
 	if (dvalidUntil)
@@ -650,7 +657,14 @@ AlterRole(AlterRoleStmt *stmt)
 					 errmsg("invalid connection limit: %d", connlimit)));
 	}
 	if (drolemembers)
+	{
+		ListCell   *rolemember;
+
 		rolemembers = (List *) drolemembers->arg;
+		foreach (rolemember, rolemembers)
+			check_rolespec_name(lfirst(rolemember),
+					"Cannot add reserved role to another role.");
+	}
 	if (dvalidUntil)
 		validUntil = strVal(dvalidUntil->arg);
 	if (dbypassRLS)
diff --git a/src/test/regress/expected/rolenames.out b/src/test/regress/expected/rolenames.out
index 15a97ab..a2a4f6e 100644
--- a/src/test/regress/expected/rolenames.out
+++ b/src/test/regress/expected/rolenames.out
@@ -90,6 +90,9 @@ DETAIL:  Role names starting with "pg_" are reserved.
 CREATE ROLE "pg_abcdef"; -- error
 ERROR:  role name "pg_abcdef" is reserved
 DETAIL:  Role names starting with "pg_" are reserved.
+CREATE ROLE testrol0 USER pg_abc; -- error
+ERROR:  role "pg_abc" is reserved
+DETAIL:  Cannot add reserved role to another role.
 CREATE ROLE testrol0 SUPERUSER LOGIN;
 CREATE ROLE testrolx SUPERUSER LOGIN;
 CREATE ROLE testrol2 SUPERUSER;
@@ -213,6 +216,9 @@ LINE 1: ALTER ROLE "none" WITH NOREPLICATION;
                    ^
 ALTER ROLE nonexistent WITH NOREPLICATION; -- error
 ERROR:  role "nonexistent" does not exist
+ALTER ROLE testrol1 USER pg_abc; -- error
+ERROR:  role "pg_abc" is reserved
+DETAIL:  Cannot add reserved role to another role.
 --  ALTER USER
 BEGIN;
 SELECT * FROM chkrolattr();
diff --git a/src/test/regress/sql/rolenames.sql b/src/test/regress/sql/rolenames.sql
index b58a163..c160793 100644
--- a/src/test/regress/sql/rolenames.sql
+++ b/src/test/regress/sql/rolenames.sql
@@ -61,6 +61,7 @@ CREATE ROLE pg_abc; -- error
 CREATE ROLE "pg_abc"; -- error
 CREATE ROLE pg_abcdef; -- error
 CREATE ROLE "pg_abcdef"; -- error
+CREATE ROLE testrol0 USER pg_abc; -- error
 
 CREATE ROLE testrol0 SUPERUSER LOGIN;
 CREATE ROLE testrolx SUPERUSER LOGIN;
@@ -99,6 +100,7 @@ ALTER ROLE "public" WITH NOREPLICATION; -- error
 ALTER ROLE NONE WITH NOREPLICATION; -- error
 ALTER ROLE "none" WITH NOREPLICATION; -- error
 ALTER ROLE nonexistent WITH NOREPLICATION; -- error
+ALTER ROLE testrol1 USER pg_abc; -- error
 
 --  ALTER USER
 BEGIN;
