From b4bed4130a2803baa929b6478a57bec026223f9f Mon Sep 17 00:00:00 2001 From: Kuba Mracek Date: Thu, 14 Sep 2023 10:01:46 -0700 Subject: [PATCH] Add a lit test showing and documenting how to use builtins in -parse-stdlib mode --- test/Frontend/implicit-builtins-import.swift | 21 ++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 test/Frontend/implicit-builtins-import.swift diff --git a/test/Frontend/implicit-builtins-import.swift b/test/Frontend/implicit-builtins-import.swift new file mode 100644 index 00000000000..dfaf51feec8 --- /dev/null +++ b/test/Frontend/implicit-builtins-import.swift @@ -0,0 +1,21 @@ +// This is just an example and documentation of how -parse-stdlib implicitly imports the Builtin module. +// Note that a lot of builtins expect some types to be defined in the stdlib, otherwise the builtin will be unavailable. +// Therefore "-module-name Swift" is significant (otherwise the types won't be find in the module we're building). +// +// Example: +// %target-swift-emit-ir -parse-stdlib %s +// Builtin.unreachable() // <<< error: module 'Builtin' has no member named 'unreachable' +// +// The real problem is that the 'unreachable' builtin needs the Never type (that's its return type). +// +// Example: +// %target-swift-emit-ir -parse-stdlib -module-name Swift %s +// enum Never {} +// Builtin.unreachable() // works + +// RUN: %target-swift-emit-ir -parse-stdlib -module-name Swift %s + +enum Never {} + +Builtin.unreachable() +Builtin.int_trap()