The following can be executed connected as SYS under an Oracle AI Database 26.1 FREE:
create role if not exists demo_role;
select count(*) from dba_roles where role = 'DEMO_ROLE';
drop role if exists demo_role;
select count(*) from dba_roles where role = 'DEMO_ROLE';
The output in SQLcl looks like this:
SQL> create role if not exists demo_role;
Role DEMO_ROLE created.
SQL> select count(*) from dba_roles where role = 'DEMO_ROLE';
COUNT(*)
----------
1
SQL> drop role if exists demo_role;
Role DEMO_ROLE dropped.
SQL> select count(*) from dba_roles where role = 'DEMO_ROLE';
COUNT(*)
----------
0
However, the DROP ROLE IF EXISTS syntax is not documented in the SQL Language Reference.

Is this a documentation bug?