diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2024-10-29 21:08:59 +0100 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2024-11-02 19:20:07 +0100 |
commit | 10c75e2a2a15e35bd6e70503ef7e3e119ae90775 (patch) | |
tree | e9da79b9ad9258b286b966cefbccf127ebb4b7d8 /gcc/fortran/check.cc | |
parent | 36a9e2b22596711455e702ea5a5a3f26e145321c (diff) | |
download | gcc-10c75e2a2a15e35bd6e70503ef7e3e119ae90775.zip gcc-10c75e2a2a15e35bd6e70503ef7e3e119ae90775.tar.gz gcc-10c75e2a2a15e35bd6e70503ef7e3e119ae90775.tar.bz2 |
Add UMASKR and UMASKL intrinsics.
gcc/fortran/ChangeLog:
* check.cc (gfc_check_mask): Handle BT_INSIGNED.
* gfortran.h (enum gfc_isym_id): Add GFC_ISYM_UMASKL and
GFC_ISYM_UMASKR.
* gfortran.texi: List UMASKL and UMASKR, remove unsigned future
unsigned arguments for MASKL and MASKR.
* intrinsic.cc (add_functions): Add UMASKL and UMASKR.
* intrinsic.h (gfc_simplify_umaskl): New function.
(gfc_simplify_umaskr): New function.
(gfc_resolve_umasklr): New function.
* intrinsic.texi: Document UMASKL and UMASKR.
* iresolve.cc (gfc_resolve_umasklr): New function.
* simplify.cc (gfc_simplify_umaskr): New function.
(gfc_simplify_umaskl): New function.
gcc/testsuite/ChangeLog:
* gfortran.dg/unsigned_39.f90: New test.
Diffstat (limited to 'gcc/fortran/check.cc')
-rw-r--r-- | gcc/fortran/check.cc | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/fortran/check.cc b/gcc/fortran/check.cc index 304ca1b..2d4af8e 100644 --- a/gcc/fortran/check.cc +++ b/gcc/fortran/check.cc @@ -4466,7 +4466,12 @@ gfc_check_mask (gfc_expr *i, gfc_expr *kind) { int k; - if (!type_check (i, 0, BT_INTEGER)) + if (flag_unsigned) + { + if (!type_check2 (i, 0, BT_INTEGER, BT_UNSIGNED)) + return false; + } + else if (!type_check (i, 0, BT_INTEGER)) return false; if (!nonnegative_check ("I", i)) @@ -4478,7 +4483,7 @@ gfc_check_mask (gfc_expr *i, gfc_expr *kind) if (kind) gfc_extract_int (kind, &k); else - k = gfc_default_integer_kind; + k = i->ts.type == BT_UNSIGNED ? gfc_default_unsigned_kind : gfc_default_integer_kind; if (!less_than_bitsizekind ("I", i, k)) return false; |