mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[Swiftify] Don't import counted_by with suffixed integer literals (#82469)
Integer literal expressions with types that are not of type `int` are printed with a suffix to indicate the type (e.g. `123U` or `456L` for `unsigned` and `long`). This is not valid syntax for integer literals in Swift, so until we fully translate the count expr syntax to Swift we need to avoid importing these count expressions. Also fixes some -Werror related stuff in test cases. rdar://154141719
This commit is contained in:
@@ -9105,7 +9105,28 @@ namespace {
|
||||
struct CountedByExpressionValidator
|
||||
: clang::ConstStmtVisitor<CountedByExpressionValidator, bool> {
|
||||
bool VisitDeclRefExpr(const clang::DeclRefExpr *e) { return true; }
|
||||
bool VisitIntegerLiteral(const clang::IntegerLiteral *) { return true; }
|
||||
|
||||
bool VisitIntegerLiteral(const clang::IntegerLiteral *IL) {
|
||||
switch (IL->getType()->castAs<clang::BuiltinType>()->getKind()) {
|
||||
case clang::BuiltinType::Char_S:
|
||||
case clang::BuiltinType::Char_U:
|
||||
case clang::BuiltinType::UChar:
|
||||
case clang::BuiltinType::SChar:
|
||||
case clang::BuiltinType::Short:
|
||||
case clang::BuiltinType::UShort:
|
||||
case clang::BuiltinType::UInt:
|
||||
case clang::BuiltinType::Long:
|
||||
case clang::BuiltinType::ULong:
|
||||
case clang::BuiltinType::LongLong:
|
||||
case clang::BuiltinType::ULongLong:
|
||||
// These integer literals are printed with a suffix that isn't valid Swift
|
||||
// syntax
|
||||
return false;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
bool VisitImplicitCastExpr(const clang::ImplicitCastExpr *c) {
|
||||
return this->Visit(c->getSubExpr());
|
||||
}
|
||||
|
||||
@@ -52,3 +52,13 @@ void floatCastToInt(float meters, int * __counted_by((int) meters) p);
|
||||
void pointerCastToInt(int *square, int * __counted_by((int) square) p);
|
||||
|
||||
void nanAsInt(int * __counted_by((int) (0 / 0)) p);
|
||||
|
||||
void unsignedLiteral(int * __counted_by(2u) p);
|
||||
|
||||
void longLiteral(int * __counted_by(2l) p);
|
||||
|
||||
void hexLiteral(int * __counted_by(0xfa) p);
|
||||
|
||||
void binaryLiteral(int * __counted_by(0b10) p);
|
||||
|
||||
void octalLiteral(int * __counted_by(0777) p);
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifndef __sized_by
|
||||
#define __sized_by(x) __attribute__((__sized_by__(x)))
|
||||
#endif
|
||||
#define __noescape __attribute__((noescape))
|
||||
|
||||
void simple(int len, const void * __sized_by(len) __noescape p);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %target-swift-ide-test -print-module -module-to-print=CountedByClang -plugin-path %swift-plugin-dir -I %S/Inputs -source-filename=x -enable-experimental-feature SafeInteropWrappers -Xcc -Wno-nullability-completeness | %FileCheck %s
|
||||
// RUN: %target-swift-ide-test -print-module -module-to-print=CountedByClang -plugin-path %swift-plugin-dir -I %S/Inputs -source-filename=x -enable-experimental-feature SafeInteropWrappers -Xcc -Werror -Xcc -Wno-nullability-completeness -Xcc -Wno-div-by-zero -Xcc -Wno-pointer-to-int-cast | %FileCheck %s
|
||||
|
||||
// REQUIRES: swift_feature_SafeInteropWrappers
|
||||
|
||||
@@ -12,3 +12,7 @@
|
||||
// CHECK-NOT: @_alwaysEmitIntoClient {{.*}} floatCastToInt
|
||||
// CHECK-NOT: @_alwaysEmitIntoClient {{.*}} pointerCastToInt
|
||||
// CHECK-NOT: @_alwaysEmitIntoClient {{.*}} nanAsInt
|
||||
// CHECK-NOT: @_alwaysEmitIntoClient {{.*}} unsignedLiteral
|
||||
// CHECK-NOT: @_alwaysEmitIntoClient {{.*}} longLiteral
|
||||
// CHECK-NOT: @_alwaysEmitIntoClient {{.*}} sizeofType
|
||||
// CHECK-NOT: @_alwaysEmitIntoClient {{.*}} sizeofParam
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
// REQUIRES: swift_feature_SafeInteropWrappers
|
||||
// REQUIRES: swift_feature_Lifetimes
|
||||
|
||||
// RUN: %target-swift-ide-test -print-module -module-to-print=CountedByNoEscapeClang -plugin-path %swift-plugin-dir -I %S/Inputs -source-filename=x -enable-experimental-feature SafeInteropWrappers -enable-experimental-feature Lifetimes -Xcc -Wno-nullability-completeness | %FileCheck %s
|
||||
// RUN: %target-swift-ide-test -print-module -module-to-print=CountedByNoEscapeClang -plugin-path %swift-plugin-dir -I %S/Inputs -source-filename=x -enable-experimental-feature SafeInteropWrappers -enable-experimental-feature Lifetimes -Xcc -Werror -Xcc -Wno-ignored-attributes -Xcc -Wno-nullability-completeness | %FileCheck %s
|
||||
|
||||
// swift-ide-test doesn't currently typecheck the macro expansions, so run the compiler as well
|
||||
// RUN: %empty-directory(%t)
|
||||
// RUN: %target-swift-frontend -emit-module -plugin-path %swift-plugin-dir -o %t/CountedByNoEscape.swiftmodule -I %S/Inputs -enable-experimental-feature SafeInteropWrappers -enable-experimental-feature Lifetimes -strict-memory-safety -warnings-as-errors -Xcc -Werror -Xcc -Wno-nullability-completeness %s
|
||||
// RUN: %target-swift-frontend -emit-module -plugin-path %swift-plugin-dir -o %t/CountedByNoEscape.swiftmodule -I %S/Inputs -enable-experimental-feature SafeInteropWrappers -enable-experimental-feature Lifetimes -strict-memory-safety -warnings-as-errors -Xcc -Werror -Xcc -Wno-ignored-attributes -Xcc -Wno-nullability-completeness %s
|
||||
|
||||
// Check that ClangImporter correctly infers and expands @_SwiftifyImport macros for functions with __counted_by __noescape parameters.
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
// REQUIRES: swift_feature_SafeInteropWrappers
|
||||
|
||||
// RUN: %target-swift-ide-test -print-module -module-to-print=CountedByClang -plugin-path %swift-plugin-dir -I %S/Inputs -source-filename=x -enable-experimental-feature SafeInteropWrappers -Xcc -Wno-nullability-completeness | %FileCheck %s
|
||||
// RUN: %target-swift-ide-test -print-module -module-to-print=CountedByClang -plugin-path %swift-plugin-dir -I %S/Inputs -source-filename=x -enable-experimental-feature SafeInteropWrappers -Xcc -Werror -Xcc -Wno-nullability-completeness -Xcc -Wno-div-by-zero -Xcc -Wno-pointer-to-int-cast | %FileCheck %s
|
||||
|
||||
// swift-ide-test doesn't currently typecheck the macro expansions, so run the compiler as well
|
||||
// RUN: %empty-directory(%t)
|
||||
// RUN: %target-swift-frontend -emit-module -plugin-path %swift-plugin-dir -o %t/CountedBy.swiftmodule -I %S/Inputs -enable-experimental-feature SafeInteropWrappers -strict-memory-safety -warnings-as-errors -Xcc -Werror -Xcc -Wno-nullability-completeness %s
|
||||
// RUN: %target-swift-frontend -emit-module -plugin-path %swift-plugin-dir -o %t/CountedBy.swiftmodule -I %S/Inputs -enable-experimental-feature SafeInteropWrappers -strict-memory-safety -warnings-as-errors -Xcc -Werror -Xcc -Wno-nullability-completeness -Xcc -Wno-div-by-zero -Xcc -Wno-pointer-to-int-cast %s
|
||||
|
||||
// Check that ClangImporter correctly infers and expands @_SwiftifyImport macros for functions with __counted_by parameters.
|
||||
|
||||
@@ -12,6 +12,9 @@ import CountedByClang
|
||||
|
||||
|
||||
// CHECK: /// This is an auto-generated wrapper for safer interop
|
||||
// CHECK-NEXT: @_alwaysEmitIntoClient @_disfavoredOverload public func binaryLiteral(_ p: UnsafeMutableBufferPointer<Int32>)
|
||||
|
||||
// CHECK-NEXT: /// This is an auto-generated wrapper for safer interop
|
||||
// CHECK-NEXT: @_alwaysEmitIntoClient @_disfavoredOverload public func bitshift(_ m: Int32, _ n: Int32, _ o: Int32, _ p: UnsafeMutableBufferPointer<Int32>)
|
||||
|
||||
// CHECK-NEXT: /// This is an auto-generated wrapper for safer interop
|
||||
@@ -26,6 +29,9 @@ import CountedByClang
|
||||
// CHECK-NEXT: /// This is an auto-generated wrapper for safer interop
|
||||
// CHECK-NEXT: @_alwaysEmitIntoClient @_disfavoredOverload public func constInt(_ p: UnsafeMutableBufferPointer<Int32>)
|
||||
|
||||
// CHECK-NEXT: /// This is an auto-generated wrapper for safer interop
|
||||
// CHECK-NEXT: @_alwaysEmitIntoClient @_disfavoredOverload public func hexLiteral(_ p: UnsafeMutableBufferPointer<Int32>)
|
||||
|
||||
// CHECK-NEXT: /// This is an auto-generated wrapper for safer interop
|
||||
// CHECK-NEXT: @_alwaysEmitIntoClient @_disfavoredOverload public func nonnull(_ p: UnsafeMutableBufferPointer<Int{{.*}}>)
|
||||
|
||||
@@ -35,6 +41,9 @@ import CountedByClang
|
||||
// CHECK-NEXT: /// This is an auto-generated wrapper for safer interop
|
||||
// CHECK-NEXT: @_alwaysEmitIntoClient @_disfavoredOverload public func nullable(_ p: UnsafeMutableBufferPointer<Int{{.*}}>?)
|
||||
|
||||
// CHECK-NEXT: /// This is an auto-generated wrapper for safer interop
|
||||
// CHECK-NEXT: @_alwaysEmitIntoClient @_disfavoredOverload public func octalLiteral(_ p: UnsafeMutableBufferPointer<Int32>)
|
||||
|
||||
// CHECK-NEXT: /// This is an auto-generated wrapper for safer interop
|
||||
// CHECK-NEXT: @_alwaysEmitIntoClient @_disfavoredOverload public func offByOne(_ len: Int32, _ p: UnsafeMutableBufferPointer<Int32>)
|
||||
|
||||
@@ -56,20 +65,29 @@ import CountedByClang
|
||||
// CHECK-NEXT: /// This is an auto-generated wrapper for safer interop
|
||||
// CHECK-NEXT: @_alwaysEmitIntoClient @_disfavoredOverload public func simpleFlipped(_ p: UnsafeMutableBufferPointer<Int{{.*}}>)
|
||||
|
||||
// CHECK-NEXT: /// This is an auto-generated wrapper for safer interop
|
||||
// CHECK-NEXT: @_alwaysEmitIntoClient @_disfavoredOverload public func sizeofParam(_ p: UnsafeMutableBufferPointer<Int{{.*}}>)
|
||||
|
||||
// CHECK-NEXT: /// This is an auto-generated wrapper for safer interop
|
||||
// CHECK-NEXT: @_alwaysEmitIntoClient @_disfavoredOverload public func sizeofType(_ p: UnsafeMutableBufferPointer<Int{{.*}}>)
|
||||
|
||||
// CHECK-NEXT: /// This is an auto-generated wrapper for safer interop
|
||||
// CHECK-NEXT: @_alwaysEmitIntoClient @_disfavoredOverload public func swiftAttr(_ p: UnsafeMutableBufferPointer<Int{{.*}}>)
|
||||
|
||||
@inlinable
|
||||
public func callBitshift(_ m: CInt, n: CInt, o: CInt, _ p: UnsafeMutableBufferPointer<CInt>) {
|
||||
unsafe bitshift(m, n, o, p)
|
||||
}
|
||||
|
||||
@inlinable
|
||||
public func callBitwise(_ m: CInt, n: CInt, o: CInt, _ p: UnsafeMutableBufferPointer<CInt>) {
|
||||
unsafe bitwise(m, n, o, p)
|
||||
}
|
||||
|
||||
@inlinable
|
||||
public func callComplexExpr(_ p: UnsafeMutableBufferPointer<CInt>) {
|
||||
unsafe complexExpr(CInt(p.count), 1, p)
|
||||
}
|
||||
|
||||
@inlinable
|
||||
public func callConstFloatCastedToInt(_ p: UnsafeMutableBufferPointer<CInt>) {
|
||||
unsafe constFloatCastedToInt(p)
|
||||
}
|
||||
|
||||
@inlinable
|
||||
public func callConstInt(_ p: UnsafeMutableBufferPointer<CInt>) {
|
||||
unsafe constInt(p)
|
||||
@@ -90,11 +108,21 @@ public func callNullable(_ p: UnsafeMutableBufferPointer<CInt>?) {
|
||||
unsafe nullable(p)
|
||||
}
|
||||
|
||||
@inlinable
|
||||
public func callOctalLiteral(_ p: UnsafeMutableBufferPointer<CInt>) {
|
||||
unsafe octalLiteral(p)
|
||||
}
|
||||
|
||||
@inlinable
|
||||
public func callOffByOne(_ p: UnsafeMutableBufferPointer<CInt>) {
|
||||
unsafe offByOne(0, p)
|
||||
}
|
||||
|
||||
@inlinable
|
||||
public func callOffBySome(_ p: UnsafeMutableBufferPointer<CInt>) {
|
||||
unsafe offBySome(0, 1, p)
|
||||
}
|
||||
|
||||
@inlinable
|
||||
public func callReturnPointer() {
|
||||
let _: UnsafeMutableBufferPointer<CInt>? = returnPointer(4) // call wrapper
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// REQUIRES: swift_feature_SafeInteropWrappers
|
||||
// REQUIRES: swift_feature_Lifetimes
|
||||
|
||||
// RUN: %target-swift-ide-test -print-module -module-to-print=SizedByLifetimeboundClang -plugin-path %swift-plugin-dir -I %S/Inputs -source-filename=x -enable-experimental-feature SafeInteropWrappers -Xcc -Wno-nullability-completeness | %FileCheck %s
|
||||
// RUN: %target-swift-ide-test -print-module -module-to-print=SizedByLifetimeboundClang -plugin-path %swift-plugin-dir -I %S/Inputs -source-filename=x -enable-experimental-feature SafeInteropWrappers -Xcc -Werror -Xcc -Wno-nullability-completeness | %FileCheck %s
|
||||
|
||||
// swift-ide-test doesn't currently typecheck the macro expansions, so run the compiler as well
|
||||
// RUN: %empty-directory(%t)
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
// REQUIRES: swift_feature_SafeInteropWrappers
|
||||
// REQUIRES: swift_feature_Lifetimes
|
||||
|
||||
// RUN: %target-swift-ide-test -print-module -module-to-print=SizedByNoEscapeClang -plugin-path %swift-plugin-dir -I %S/Inputs -source-filename=x -enable-experimental-feature Lifetimes -enable-experimental-feature SafeInteropWrappers -Xcc -Wno-nullability-completeness | %FileCheck %s
|
||||
// RUN: %target-swift-ide-test -print-module -module-to-print=SizedByNoEscapeClang -plugin-path %swift-plugin-dir -I %S/Inputs -source-filename=x -enable-experimental-feature Lifetimes -enable-experimental-feature SafeInteropWrappers -Xcc -Werror -Xcc -Wno-ignored-attributes -Xcc -Wno-nullability-completeness | %FileCheck %s
|
||||
|
||||
// swift-ide-test doesn't currently typecheck the macro expansions, so run the compiler as well
|
||||
// RUN: %empty-directory(%t)
|
||||
// RUN: %target-swift-frontend -emit-module -plugin-path %swift-plugin-dir -o %t/SizedByNoEscape.swiftmodule -I %S/Inputs -enable-experimental-feature Lifetimes -enable-experimental-feature SafeInteropWrappers -strict-memory-safety -warnings-as-errors -Xcc -Werror -Xcc -Wno-nullability-completeness %s
|
||||
// RUN: %target-swift-frontend -emit-module -plugin-path %swift-plugin-dir -o %t/SizedByNoEscape.swiftmodule -I %S/Inputs -enable-experimental-feature Lifetimes -enable-experimental-feature SafeInteropWrappers -strict-memory-safety -warnings-as-errors -Xcc -Werror -Xcc -Wno-ignored-attributes -Xcc -Wno-nullability-completeness %s
|
||||
|
||||
// Check that ClangImporter correctly infers and expands @_SwiftifyImport macros for functions with __sized_by __noescape parameters.
|
||||
import SizedByNoEscapeClang
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// REQUIRES: swift_feature_SafeInteropWrappers
|
||||
|
||||
// RUN: %target-swift-ide-test -print-module -module-to-print=SizedByClang -plugin-path %swift-plugin-dir -I %S/Inputs -source-filename=x -enable-experimental-feature SafeInteropWrappers -Xcc -Wno-nullability-completeness | %FileCheck %s
|
||||
// RUN: %target-swift-ide-test -print-module -module-to-print=SizedByClang -plugin-path %swift-plugin-dir -I %S/Inputs -source-filename=x -enable-experimental-feature SafeInteropWrappers -Xcc -Werror -Xcc -Wno-nullability-completeness | %FileCheck %s
|
||||
|
||||
// swift-ide-test doesn't currently typecheck the macro expansions, so run the compiler as well
|
||||
// RUN: %target-swift-frontend -emit-module -plugin-path %swift-plugin-dir -I %S/Inputs -enable-experimental-feature SafeInteropWrappers -strict-memory-safety -warnings-as-errors -Xcc -Werror -Xcc -Wno-nullability-completeness %s
|
||||
|
||||
Reference in New Issue
Block a user