Emulated Intel on Arm unable to build a package

Hello,

I had tried to do an experiment on x86_64 emulation on a M1 Pro system; using both UTM (3.1.5) and Lima-vm (both use Qemu), and both have an issue where unable to build an empty project:

$ uname -a
Linux lima-swift-lima 5.4.0-100-generic #113-Ubuntu SMP Thu Feb 3 18:43:29 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
 
$ lscpu  |grep QEMU
Model name:                      QEMU Virtual CPU version 2.5+

$ mkdir /tmp/test && cd /tmp/test
$ swift package init

$ swift build -v
error: 'test': Invalid manifest
/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend -frontend -c -primary-file /tmp/test/Package.swift -target x86_64-unknown-linux-gnu -disable-objc-interop -I /tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/lib/swift/pm/ManifestAPI -swift-version 5 -package-description-version 5.7.0 -new-driver-path /tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-driver -disable-implicit-concurrency-module-import -empty-abi-descriptor -resource-dir /tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/lib/swift -module-name main -o /tmp/TemporaryDirectory.8l7W3X/Package-1.o
Swift version 5.7-dev (LLVM 0f7d6007e7787bb, Swift 270d100b43f5e33)
Target: x86_64-unknown-linux-gnu
error: compile command failed due to signal 4 (use -v to see invocation)
Please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the project and the crash backtrace.
Stack dump:
0.	Program arguments: /tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend -frontend -c -primary-file /tmp/test/Package.swift -target x86_64-unknown-linux-gnu -disable-objc-interop -I /tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/lib/swift/pm/ManifestAPI -swift-version 5 -package-description-version 5.7.0 -new-driver-path /tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-driver -disable-implicit-concurrency-module-import -empty-abi-descriptor -resource-dir /tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/lib/swift -module-name main -o /tmp/TemporaryDirectory.8l7W3X/Package-1.o
1.	Swift version 5.7-dev (LLVM 0f7d6007e7787bb, Swift 270d100b43f5e33)
2.	Compiling with the current language version
3.	While evaluating request ParseSourceFileRequest(source_file "/tmp/test/Package.swift")
4.	With parser at source location: /tmp/test/Package.swift:7:17
 #0 0x00000000060e5f33 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x60e5f33)
 #1 0x00000000060e3c7e llvm::sys::RunSignalHandlers() (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x60e3c7e)
 #2 0x00000000060e62bf SignalHandler(int) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x60e62bf)
 #3 0x00007f22b41a73c0 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x143c0)
 #4 0x0000000002064c73 swift::unicode::getGraphemeClusterBreakProperty(unsigned int) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x2064c73)
 #5 0x0000000002060fe9 swift::unicode::extractFirstExtendedGraphemeCluster(llvm::StringRef) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x2060fe9)
 #6 0x0000000001bb9459 swift::StringLiteralExpr::StringLiteralExpr(llvm::StringRef, swift::SourceRange, bool) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1bb9459)
 #7 0x0000000001dcc2e5 createStringLiteralExprFromSegment(swift::ASTContext&, swift::Lexer const*, swift::Lexer::StringSegment&, swift::SourceLoc) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1dcc2e5)
 #8 0x0000000001dc835a swift::Parser::parseExprStringLiteral() (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1dc835a)
 #9 0x0000000001dc664c swift::Parser::parseExprPrimary(swift::Diag<>, bool) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1dc664c)
#10 0x0000000001dc142f swift::Parser::parseExprPostfix(swift::Diag<>, bool) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1dc142f)
#11 0x0000000001dc0ca4 swift::Parser::parseExprUnary(swift::Diag<>, bool) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1dc0ca4)
#12 0x0000000001dc0701 swift::Parser::parseExprSequenceElement(swift::Diag<>, bool) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1dc0701)
#13 0x0000000001dbf014 swift::Parser::parseExprSequence(swift::Diag<>, bool, bool) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1dbf014)
#14 0x0000000001dbee5a swift::Parser::parseExprImpl(swift::Diag<>, bool) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1dbee5a)
#15 0x0000000001dd0ecf swift::ParserStatus llvm::function_ref<swift::ParserStatus ()>::callback_fn<swift::Parser::parseExprList(swift::tok, swift::tok, bool, swift::SourceLoc&, llvm::SmallVectorImpl<swift::Parser::ExprListElt>&, swift::SourceLoc&, swift::syntax::SyntaxKind)::$_7>(long) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1dd0ecf)
#16 0x0000000001de13a1 swift::Parser::parseListItem(swift::ParserStatus&, swift::tok, swift::SourceLoc, swift::SourceLoc&, bool, swift::syntax::SyntaxKind, llvm::function_ref<swift::ParserStatus ()>) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1de13a1)
#17 0x0000000001de1904 swift::Parser::parseList(swift::tok, swift::SourceLoc, swift::SourceLoc&, bool, swift::Diag<>, swift::syntax::SyntaxKind, llvm::function_ref<swift::ParserStatus ()>) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1de1904)
#18 0x0000000001dcecf1 swift::Parser::parseExprList(swift::tok, swift::tok, bool, swift::SourceLoc&, llvm::SmallVectorImpl<swift::Parser::ExprListElt>&, swift::SourceLoc&, swift::syntax::SyntaxKind) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1dcecf1)
#19 0x0000000001dc52e0 swift::Parser::parseArgumentList(swift::tok, swift::tok, bool, bool) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1dc52e0)
#20 0x0000000001dc5100 swift::Parser::parseExprCallSuffix(swift::ParserResult<swift::Expr>, bool) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1dc5100)
#21 0x0000000001dc1dd0 swift::Parser::parseExprPostfixSuffix(swift::ParserResult<swift::Expr>, bool, bool, bool&) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1dc1dd0)
#22 0x0000000001dc1458 swift::Parser::parseExprPostfix(swift::Diag<>, bool) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1dc1458)
#23 0x0000000001dc0ca4 swift::Parser::parseExprUnary(swift::Diag<>, bool) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1dc0ca4)
#24 0x0000000001dc0701 swift::Parser::parseExprSequenceElement(swift::Diag<>, bool) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1dc0701)
#25 0x0000000001dbf014 swift::Parser::parseExprSequence(swift::Diag<>, bool, bool) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1dbf014)
#26 0x0000000001dbee5a swift::Parser::parseExprImpl(swift::Diag<>, bool) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1dbee5a)
#27 0x0000000001db4b3d swift::Parser::parseDeclVar(swift::OptionSet<swift::Parser::ParseDeclFlags, unsigned int>, swift::DeclAttributes&, llvm::SmallVectorImpl<swift::Decl*>&, swift::SourceLoc, swift::StaticSpellingKind, swift::SourceLoc, bool) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1db4b3d)
#28 0x0000000001da33bd swift::Parser::parseDecl(swift::OptionSet<swift::Parser::ParseDeclFlags, unsigned int>, bool, llvm::function_ref<void (swift::Decl*)>) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1da33bd)
#29 0x0000000001decff1 swift::Parser::parseBraceItems(llvm::SmallVectorImpl<swift::ASTNode>&, swift::BraceItemListKind, swift::BraceItemListKind, bool&) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1decff1)
#30 0x0000000001d89507 swift::Parser::parseTopLevel(llvm::SmallVectorImpl<swift::Decl*>&) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1d89507)
#31 0x0000000001dea1fb swift::ParseSourceFileRequest::evaluate(swift::Evaluator&, swift::SourceFile*) const (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1dea1fb)
#32 0x0000000001dead3c swift::SimpleRequest<swift::ParseSourceFileRequest, swift::SourceFileParsingResult (swift::SourceFile*), (swift::RequestFlags)12>::evaluateRequest(swift::ParseSourceFileRequest const&, swift::Evaluator&) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1dead3c)
#33 0x0000000001c5c984 llvm::Expected<swift::ParseSourceFileRequest::OutputType> swift::Evaluator::getResultUncached<swift::ParseSourceFileRequest>(swift::ParseSourceFileRequest const&) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1c5c984)
#34 0x0000000001c5c681 llvm::Expected<swift::ParseSourceFileRequest::OutputType> swift::Evaluator::getResultCached<swift::ParseSourceFileRequest, (void*)0>(swift::ParseSourceFileRequest const&) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1c5c681)
#35 0x0000000001c41e4a swift::ParseSourceFileRequest::OutputType swift::evaluateOrDefault<swift::ParseSourceFileRequest>(swift::Evaluator&, swift::ParseSourceFileRequest, swift::ParseSourceFileRequest::OutputType) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1c41e4a)
#36 0x0000000001c39e0e swift::SourceFile::getTopLevelDecls() const (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x1c39e0e)
#37 0x000000000140846c swift::performImportResolution(swift::SourceFile&) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x140846c)
#38 0x0000000000618c21 swift::CompilerInstance::performParseAndResolveImportsOnly() (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x618c21)
#39 0x0000000000618ed1 swift::CompilerInstance::performSema() (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x618ed1)
#40 0x00000000005c9195 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x5c9195)
#41 0x00000000004baf6c swift::mainEntry(int, char const**) (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x4baf6c)
#42 0x00007f22b35d20b3 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x240b3)
#43 0x00000000004ba5be _start (/tmp/swift-DEVELOPMENT-SNAPSHOT-2022-04-20-a-ubuntu20.04/usr/bin/swift-frontend+0x4ba5be)

Simplest way to reproduce is:

brew install lima

curl -s https://raw.githubusercontent.com/lima-vm/lima/master/examples/ubuntu-lts.yaml -o ubuntu-lts.yaml

sed -i '' '1 i \
arch: "x86_64"
' ubuntu-lts.yaml 

limactl start --name=swift-lima ubuntu-lts.yaml
limactl shell swift-lima

The parsing error happens on line 7:

$ head -10 Package.swift | cat -n
     1	// swift-tools-version: 5.7
     2	// The swift-tools-version declares the minimum version of Swift required to build this package.
     3	
     4	import PackageDescription
     5	
     6	let package = Package(
     7	    name: "test",
     8	    products: [
     9	        // Products define the executables and libraries a package produces, and make them visible to other packages.
    10	        .library(

I'll create a issue once the Jira migration process has been completed.

Ok, this look to be lack of pshufb instruction in the default CPU emulated by Qemu that has been discussed on Docker For Mac #5561 and Build crash when building in QEMU using new Swift 5.6 arm64 image