Skip to content

[flang] C_LOC is PURE #89437

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 22, 2024
Merged

[flang] C_LOC is PURE #89437

merged 1 commit into from
Apr 22, 2024

Conversation

klausler
Copy link
Contributor

The standard defines C_LOC as being PURE (actually SIMPLE now in F'2023); characterize it appropriately.

Fixes #88747.

The standard defines C_LOC as being PURE (actually SIMPLE now in F'2023);
characterize it appropriately.

Fixes llvm#88747.
@klausler klausler requested a review from DanielCChen April 19, 2024 18:47
@llvmbot llvmbot added flang Flang issues not falling into any other category flang:semantics labels Apr 19, 2024
@llvmbot
Copy link
Member

llvmbot commented Apr 19, 2024

@llvm/pr-subscribers-flang-semantics

Author: Peter Klausler (klausler)

Changes

The standard defines C_LOC as being PURE (actually SIMPLE now in F'2023); characterize it appropriately.

Fixes #88747.


Full diff: https://github.com/llvm/llvm-project/pull/89437.diff

2 Files Affected:

  • (modified) flang/lib/Evaluate/intrinsics.cpp (+2-1)
  • (modified) flang/module/__fortran_builtins.f90 (+1-2)
diff --git a/flang/lib/Evaluate/intrinsics.cpp b/flang/lib/Evaluate/intrinsics.cpp
index 7226d69f6391c7..f07f94b1a022c9 100644
--- a/flang/lib/Evaluate/intrinsics.cpp
+++ b/flang/lib/Evaluate/intrinsics.cpp
@@ -2862,7 +2862,8 @@ std::optional<SpecificCall> IntrinsicProcTable::Implementation::HandleC_Loc(
                                       characteristics::DummyArgument{"x"s,
                                           characteristics::DummyDataObject{
                                               std::move(*typeAndShape)}}},
-                                  characteristics::Procedure::Attrs{}}},
+                                  characteristics::Procedure::Attrs{
+                                      characteristics::Procedure::Attr::Pure}}},
           std::move(arguments)};
     }
   }
diff --git a/flang/module/__fortran_builtins.f90 b/flang/module/__fortran_builtins.f90
index 3d3dbef6d018aa..4746ca20a13a7e 100644
--- a/flang/module/__fortran_builtins.f90
+++ b/flang/module/__fortran_builtins.f90
@@ -18,6 +18,7 @@
   private
 
   intrinsic :: __builtin_c_loc
+  public :: __builtin_c_loc
 
   intrinsic :: __builtin_c_f_pointer
   public :: __builtin_c_f_pointer
@@ -56,8 +57,6 @@
   integer, parameter, public :: &
     __builtin_atomic_logical_kind = __builtin_atomic_int_kind
 
-  procedure(type(__builtin_c_ptr)), public :: __builtin_c_loc
-
   type, public :: __builtin_dim3
     integer :: x=1, y=1, z=1
   end type

Copy link
Contributor

@DanielCChen DanielCChen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM.
All test cases marked by issue #88747 are fixed by this PR. Thanks!

@klausler klausler merged commit fde5e47 into llvm:main Apr 22, 2024
7 checks passed
@klausler klausler deleted the bug88747 branch April 22, 2024 22:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
flang:semantics flang Flang issues not falling into any other category
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Flang] Incorrect diagnosis in structure constructor for array component
3 participants