Skip to content

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
@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