-
Notifications
You must be signed in to change notification settings - Fork 13.5k
Skip contiguous check when ignore_tkr(c) is used #138762
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
Conversation
…s used for all attributes
@llvm/pr-subscribers-flang-semantics Author: Zhen Wang (wangzpgi) ChangesThe point of ignore_tkr(c) is to ignore both contiguous warnings and errors for arguments of all attribute types. Full diff: https://github.com/llvm/llvm-project/pull/138762.diff 2 Files Affected:
diff --git a/flang/lib/Semantics/check-call.cpp b/flang/lib/Semantics/check-call.cpp
index dfaa0e028d698..58271d7ca2e87 100644
--- a/flang/lib/Semantics/check-call.cpp
+++ b/flang/lib/Semantics/check-call.cpp
@@ -1016,7 +1016,8 @@ static void CheckExplicitDataArg(const characteristics::DummyDataObject &dummy,
}
}
if (dummyDataAttr == common::CUDADataAttr::Device &&
- (dummyIsAssumedShape || dummyIsAssumedRank)) {
+ (dummyIsAssumedShape || dummyIsAssumedRank)
+ !dummy.ignoreTKR.test(common::IgnoreTKR::Contiguous)) {
if (auto contig{evaluate::IsContiguous(actual, foldingContext,
/*namedConstantSectionsAreContiguous=*/true,
/*firstDimensionStride1=*/true)}) {
diff --git a/flang/test/Semantics/cuf20.cuf b/flang/test/Semantics/cuf20.cuf
new file mode 100644
index 0000000000000..222ff2a1b7c6d
--- /dev/null
+++ b/flang/test/Semantics/cuf20.cuf
@@ -0,0 +1,42 @@
+! RUN: %python %S/test_errors.py %s %flang_fc1
+
+! Test case 1: Device arrays with ignore_tkr(c)
+subroutine test_device_arrays()
+ interface bar
+ subroutine bar1(a)
+!dir$ ignore_tkr(c) a
+ real :: a(..)
+!@cuf attributes(device) :: a
+ end subroutine
+ end interface
+
+ integer :: n = 10, k = 2
+ real, device :: a(10), b(10), c(10)
+
+ call bar(a(1:n)) ! Should not warn about contiguity
+ call bar(b(1:n:k)) ! Should not warn about contiguity
+ call bar(c(1:n:2)) ! Should not warn about contiguity
+end subroutine
+
+! Test case 2: Managed arrays with ignore_tkr(c)
+subroutine test_managed_arrays()
+ interface bar
+ subroutine bar1(a)
+!dir$ ignore_tkr(c) a
+ real :: a(..)
+!@cuf attributes(device) :: a
+ end subroutine
+ end interface
+
+ integer :: n = 10, k = 2
+ real, managed :: a(10), b(10), c(10)
+
+ call bar(a(1:n)) ! Should not warn about contiguity
+ call bar(b(1:n:k)) ! Should not warn about contiguity
+ call bar(c(1:n:2)) ! Should not warn about contiguity
+end subroutine
+
+program main
+ call test_device_arrays()
+ call test_managed_arrays()
+end program
\ No newline at end of file
|
✅ With the latest revision this PR passed the C/C++ code formatter. |
flang/lib/Semantics/check-call.cpp
Outdated
@@ -1016,7 +1016,8 @@ static void CheckExplicitDataArg(const characteristics::DummyDataObject &dummy, | |||
} | |||
} | |||
if (dummyDataAttr == common::CUDADataAttr::Device && | |||
(dummyIsAssumedShape || dummyIsAssumedRank)) { | |||
(dummyIsAssumedShape || dummyIsAssumedRank) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How does this code even compile?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missed &&
in the source.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
program main | ||
call test_device_arrays() | ||
call test_managed_arrays() | ||
end program |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
New line at end of line
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Strangely I don't see new line after end program
in the source code.
The point of ignore_tkr(c) is to ignore both contiguous warnings and errors for arguments of all attribute types.