public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "kargl at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug fortran/101967] New: Implement F2018:C949 Date: Wed, 18 Aug 2021 20:11:42 +0000 [thread overview] Message-ID: <bug-101967-4@http.gcc.gnu.org/bugzilla/> (raw) https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101967 Bug ID: 101967 Summary: Implement F2018:C949 Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: kargl at gcc dot gnu.org Target Milestone: --- The source-expr in an ALLOCATE statement cannot have a type with an coarray ultimate component. This patch catches the issue. diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c index 16502da001d..03d250985d7 100644 --- a/gcc/fortran/match.c +++ b/gcc/fortran/match.c @@ -4373,7 +4383,7 @@ gfc_match_allocate (void) if (!gfc_type_compatible (&tail->expr->ts, &ts)) { gfc_error ("Type of entity at %L is type incompatible with " - "typespec", &tail->expr->where); + "type-spec", &tail->expr->where); goto cleanup; } @@ -4381,7 +4391,7 @@ gfc_match_allocate (void) if (ts.kind != tail->expr->ts.kind && !UNLIMITED_POLY (tail->expr)) { gfc_error ("Kind type parameter for entity at %L differs from " - "the kind type parameter of the typespec", + "the kind type parameter of the type-spec", &tail->expr->where); goto cleanup; } @@ -4476,7 +4486,7 @@ alloc_opt_list: /* The next 2 conditionals check C631. */ if (ts.type != BT_UNKNOWN) { - gfc_error ("SOURCE tag at %L conflicts with the typespec at %L", + gfc_error ("SOURCE tag at %L conflicts with the type-spec at %L", &tmp->where, &old_locus); goto cleanup; } @@ -4487,6 +4497,8 @@ alloc_opt_list: &tmp->where)) goto cleanup; + + source = tmp; tmp = NULL; saw_source = true; @@ -4536,6 +4548,17 @@ alloc_opt_list: if (gfc_match (" )%t") != MATCH_YES) goto syntax; + /* C949 (R930) The declared type of source-expr shall not have a + coarray ultimate component. */ + if (source + && source->ts.type == BT_DERIVED + && source->ts.u.derived->attr.coarray_comp) + { + gfc_error ("Declared type of source expression at %L has a coarray " + "ultimate component", &source->where); + goto cleanup; + } + /* Check F08:C637. */ if (source && mold) { diff --git a/gcc/testsuite/gfortran.dg/allocate_alloc_opt_4.f90 b/gcc/testsuite/gfortran.dg/allocate_alloc_opt_4.f90 index ee6c3635912..b98352a9104 100644 --- a/gcc/testsuite/gfortran.dg/allocate_alloc_opt_4.f90 +++ b/gcc/testsuite/gfortran.dg/allocate_alloc_opt_4.f90 @@ -15,7 +15,7 @@ program a allocate(i(4), source=42, source=n) ! { dg-error "Redundant SOURCE tag found" } - allocate(integer(4) :: i(4), source=n) ! { dg-error "conflicts with the typespec" } + allocate(integer(4) :: i(4), source=n) ! { dg-error "conflicts with the type-spec" } allocate(i(4), j(n), source=n) ! { dg-error "Fortran 2008: SOURCE tag at .1. with more than a single allocate object" } diff --git a/gcc/testsuite/gfortran.dg/allocate_derived_1.f90 b/gcc/testsuite/gfortran.dg/allocate_derived_1.f90 index d2c65ffa38b..12633eb5dc7 100644 --- a/gcc/testsuite/gfortran.dg/allocate_derived_1.f90 +++ b/gcc/testsuite/gfortran.dg/allocate_derived_1.f90 @@ -34,16 +34,16 @@ allocate(t3 :: x(4)) allocate(tx :: x(5)) ! { dg-error "Error in type-spec at" } allocate(u0 :: x(6)) ! { dg-error "may not be ABSTRACT" } - allocate(v1 :: x(7)) ! { dg-error "is type incompatible with typespec" } + allocate(v1 :: x(7)) ! { dg-error "is type incompatible with type-spec" } allocate( y(1)) - allocate(t1 :: y(2)) ! { dg-error "is type incompatible with typespec" } + allocate(t1 :: y(2)) ! { dg-error "is type incompatible with type-spec" } allocate(t2 :: y(3)) - allocate(t3 :: y(3)) ! { dg-error "is type incompatible with typespec" } + allocate(t3 :: y(3)) ! { dg-error "is type incompatible with type-spec" } allocate( z(1)) - allocate(t1 :: z(2)) ! { dg-error "is type incompatible with typespec" } - allocate(t2 :: z(3)) ! { dg-error "is type incompatible with typespec" } + allocate(t1 :: z(2)) ! { dg-error "is type incompatible with type-spec" } + allocate(t2 :: z(3)) ! { dg-error "is type incompatible with type-spec" } allocate(t3 :: z(4)) end diff --git a/gcc/testsuite/gfortran.dg/f2018c949.f90 b/gcc/testsuite/gfortran.dg/f2018c949.f90 new file mode 100644 index 00000000000..14a1facbd73 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/f2018c949.f90 @@ -0,0 +1,13 @@ +! { dg-do compile } +! { dg-options "-fcoarray=single" } +program main + type :: type + integer, allocatable :: a[:] + end type + + type(type) :: x + class(*), allocatable :: y + + allocate(x%a[*]) + allocate(y, source = x) !{ dg-error "coarray ultimate component" } +end
next reply other threads:[~2021-08-18 20:11 UTC|newest] Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-08-18 20:11 kargl at gcc dot gnu.org [this message] 2021-08-18 20:12 ` [Bug fortran/101967] " kargl at gcc dot gnu.org
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=bug-101967-4@http.gcc.gnu.org/bugzilla/ \ --to=gcc-bugzilla@gcc.gnu.org \ --cc=gcc-bugs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).