swiftlang / swift

The Swift Programming Language
https://swift.org
Apache License 2.0
67.5k stars 10.35k forks source link

[SR-9553] Linux SILFunctionTransform crash in release mode #52001

Open stephencelis opened 5 years ago

stephencelis commented 5 years ago
Previous ID SR-9553
Radar None
Original Reporter @stephencelis
Type Bug
Environment Swift 4.2.1 / Linux
Additional Detail from JIRA | | | |------------------|-----------------| |Votes | 1 | |Component/s | Compiler | |Labels | Bug, CompilerCrash, OptimizedOnly | |Assignee | None | |Priority | Medium | md5: 1b0b999736c6962287071b6532e49ad3

Issue Description:

This commit:

https://github.com/pointfreeco/pointfreeco/commit/4ea33115de3666111e1f697ee28f17fc6c8ee694

Contains this code:

https://github.com/pointfreeco/pointfreeco/commit/4ea33115de3666111e1f697ee28f17fc6c8ee694#diff-7f12bec2f578f77c2b856d323cbeaab2R60

That crashes on Swift 4.2.1 in when built for release mode:

swift: /home/buildnode/jenkins/workspace/oss-swift-4.2-package-linux-ubuntu-16_04/swift/lib/SILOptimizer/Transforms/SILMem2Reg.cpp:879: bool (anonymous namespace)::MemoryToRegisters::promoteSingleAllocation(swift::AllocStackInst *, DomTreeLevelMap &): Assertion `isWriteOnlyAllocation(alloc) && "Non-write uses left behind"' failed.
#​0 0x000000000410ac94 PrintStackTraceSignalHandler(void*) (/usr/bin/swift+0x410ac94)
#​1 0x0000000004108b22 llvm::sys::RunSignalHandlers() (/usr/bin/swift+0x4108b22)
#​2 0x000000000410ae42 SignalHandler(int) (/usr/bin/swift+0x410ae42)
#​3 0x00007f0abfb8e390 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x11390)
#​4 0x00007f0abe2cd428 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x35428)
#​5 0x00007f0abe2cf02a abort (/lib/x86_64-linux-gnu/libc.so.6+0x3702a)
#​6 0x00007f0abe2c5bd7 (/lib/x86_64-linux-gnu/libc.so.6+0x2dbd7)
#​7 0x00007f0abe2c5c82 (/lib/x86_64-linux-gnu/libc.so.6+0x2dc82)
#​8 0x0000000000e6a879 (anonymous namespace)::MemoryToRegisters::run() (/usr/bin/swift+0xe6a879)
#​9 0x0000000000e67dc2 (anonymous namespace)::SILMem2Reg::run() (/usr/bin/swift+0xe67dc2)
#​10 0x0000000000d53bb3 swift::SILPassManager::runPassOnFunction(unsigned int, swift::SILFunction*) (/usr/bin/swift+0xd53bb3)
#​11 0x0000000000d546b1 swift::SILPassManager::runFunctionPasses(unsigned int, unsigned int) (/usr/bin/swift+0xd546b1)
#​12 0x0000000000d555e4 swift::SILPassManager::execute() (/usr/bin/swift+0xd555e4)
#​13 0x00000000005c1648 swift::SILPassManager::executePassPipelinePlan(swift::SILPassPipelinePlan const&) (/usr/bin/swift+0x5c1648)
#​14 0x0000000000d5c8a0 swift::runSILOptimizationPasses(swift::SILModule&) (/usr/bin/swift+0xd5c8a0)
#&#8203;15 0x00000000004de8b1 performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&, swift::FrontendObserver*, swift::UnifiedStatsReporter*) (/usr/bin/swift+0x4de8b1)
#&#8203;16 0x00000000004da3f0 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) (/usr/bin/swift+0x4da3f0)
#&#8203;17 0x000000000048a348 main (/usr/bin/swift+0x48a348)
#&#8203;18 0x00007f0abe2b8830 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x20830)
#&#8203;19 0x0000000000488009 _start (/usr/bin/swift+0x488009)
Stack dump:
0.  Program arguments: /usr/bin/swift -frontend -c -filelist /tmp/org.swift.swiftpm.root/sources-e96075 -supplementary-output-file-map /tmp/org.swift.swiftpm.root/supplementaryOutputs-7caff9 -target x86_64-unknown-linux -disable-objc-interop -sdk / -I /app/.build/x86_64-unknown-linux/release -I /usr/include/postgresql -I /app/.build/checkouts/swift-nio.git-3124595005861952463/Sources/CNIOZlib/include -I /app/.build/checkouts/swift-nio.git-3124595005861952463/Sources/CNIOHTTPParser/include -I /app/.build/checkouts/swift-nio.git-3124595005861952463/Sources/CNIOSHA1/include -I /app/.build/checkouts/swift-nio.git-3124595005861952463/Sources/CNIOAtomics/include -I /app/.build/checkouts/swift-nio.git-3124595005861952463/Sources/CNIODarwin/include -I /app/.build/checkouts/swift-nio.git-3124595005861952463/Sources/CNIOLinux/include -module-cache-path /app/.build/x86_64-unknown-linux/release/ModuleCache -swift-version 4.2 -O -D SWIFT_PACKAGE -Xcc -fmodule-map-file=/app/.build/checkouts/cpostgresql.git--4956655006051125229/module.modulemap -Xcc -fmodule-map-file=/app/.build/x86_64-unknown-linux/release/CNIOZlib.build/module.modulemap -Xcc -fmodule-map-file=/app/.build/x86_64-unknown-linux/release/CNIOHTTPParser.build/module.modulemap -Xcc -fmodule-map-file=/app/.build/x86_64-unknown-linux/release/CNIOSHA1.build/module.modulemap -Xcc -fmodule-map-file=/app/.build/x86_64-unknown-linux/release/CNIOAtomics.build/module.modulemap -Xcc -fmodule-map-file=/app/.build/x86_64-unknown-linux/release/CNIODarwin.build/module.modulemap -Xcc -fmodule-map-file=/app/.build/x86_64-unknown-linux/release/CNIOLinux.build/module.modulemap -Xcc -fmodule-map-file=/app/.build/checkouts/swift-nio-zlib-support.git--4503950764745536352/module.modulemap -Xcc -fmodule-map-file=/app/.build/checkouts/OpenSSL.git-3060685892958430597/module.modulemap -Xcc -fmodule-map-file=/app/.build/checkouts/Ccmark.git--7331320703646241439/module.modulemap -parse-as-library -module-name PointFree -num-threads 1 -output-filelist /tmp/org.swift.swiftpm.root/outputs-0dead8 
1.  Contents of /tmp/org.swift.swiftpm.root/sources-e96075:
---
/app/Sources/PointFree/About.swift
/app/Sources/PointFree/Account/Account.swift
/app/Sources/PointFree/Account/Cancel.swift
/app/Sources/PointFree/Account/Change.swift
/app/Sources/PointFree/Account/Invite.swift
/app/Sources/PointFree/Account/Invoices.swift
/app/Sources/PointFree/Account/PaymentInfo.swift
/app/Sources/PointFree/Account/PrivateRss.swift
/app/Sources/PointFree/Account/Team.swift
/app/Sources/PointFree/Account/UpdateProfile.swift
/app/Sources/PointFree/Admin/EpisodeCredit.swift
/app/Sources/PointFree/Admin/FreeEpisodes.swift
/app/Sources/PointFree/Admin/Index.swift
/app/Sources/PointFree/Admin/NewEpisodes.swift
/app/Sources/PointFree/Admin/SendNewBlogPostMailer.swift
/app/Sources/PointFree/AppleDeveloperMerchantIdDomainAssociation.swift
/app/Sources/PointFree/Atom.swift
/app/Sources/PointFree/AtomFeed.swift
/app/Sources/PointFree/Auth.swift
/app/Sources/PointFree/Blog/BlogAtomFeed.swift
/app/Sources/PointFree/Blog/BlogMiddleware.swift
/app/Sources/PointFree/Blog/BlogPost.swift
/app/Sources/PointFree/Blog/BlogPostIndex.swift
/app/Sources/PointFree/Blog/BlogPostShow.swift
/app/Sources/PointFree/Blog/BlogPosts/AllBlogPosts.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0001_Announcement.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0002_EpisodeCredits.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0003_Ep14_Solutions.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0004_OvertureSetters.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0005_StylingWithFunctions.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0006_TaggedSecondsAndMilliseconds.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0007_OpenSourcingNonEmpty.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0008_ConditionalCoding.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0009_6MonthAnniversary.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0010_StudentDiscounts.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0011_SolutionsToZipExercisesPt1.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0012_SolutionsToZipExercisesPt2.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0013_SolutionsToZipExercisesPt3.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0014_AnnouncingValidated.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0015_OvertureNowWithZip.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0016_AnnouncingSwiftHtml.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0017_TypeSafeVapor.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0018_TypeSafeKitura.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0019_RandomZalgoGenerator.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0020_PodcastRSS.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0021_HowToControlTheWorld.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0022_SomeNewsAboutContramap.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0023_OpenSourcingSnapshotTesting.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0024_holidayDiscount.swift
/app/Sources/PointFree/Blog/BlogPosts/BlogPost0025_yearInReview.swift
/app/Sources/PointFree/Bootstrap.swift
/app/Sources/PointFree/Components.swift
/app/Sources/PointFree/Database.swift
/app/Sources/PointFree/DatabaseDecoder.swift
/app/Sources/PointFree/Emails/AdminEmailReport.swift
/app/Sources/PointFree/Emails/ChangeEmailConfirmation.swift
/app/Sources/PointFree/Emails/EmailLayouts.swift
/app/Sources/PointFree/Emails/FreeEpisodeEmail.swift
/app/Sources/PointFree/Emails/InviteEmail.swift
/app/Sources/PointFree/Emails/Mailgun.swift
/app/Sources/PointFree/Emails/NewBlogPostEmail.swift
/app/Sources/PointFree/Emails/NewEpisodeEmail.swift
/app/Sources/PointFree/Emails/RegistrationEmail.swift
/app/Sources/PointFree/Emails/SendEmail.swift
/app/Sources/PointFree/Emails/SharedEmailComponents.swift
/app/Sources/PointFree/Emails/TeamEmails.swift
/app/Sources/PointFree/EnvVars.swift
/app/Sources/PointFree/Environment.swift
/app/Sources/PointFree/Episode/Episode.swift
/app/Sources/PointFree/Episode/Show.swift
/app/Sources/PointFree/FeatureFlags.swift
/app/Sources/PointFree/Footer.swift
/app/Sources/PointFree/GitHub.swift
/app/Sources/PointFree/GoogleAnalytics.swift
/app/Sources/PointFree/Home.swift
/app/Sources/PointFree/HtmlCssInliner.swift
/app/Sources/PointFree/Logger.swift
/app/Sources/PointFree/MetaLayout.swift
/app/Sources/PointFree/MinimalNavView.swift
/app/Sources/PointFree/MountainNavView.swift
/app/Sources/PointFree/Newsletters.swift
/app/Sources/PointFree/PageLayout.swift
/app/Sources/PointFree/Pricing.swift
/app/Sources/PointFree/Privacy.swift
/app/Sources/PointFree/PublicEpisodes/0000-Introduction.swift
/app/Sources/PointFree/PublicEpisodes/0001-Functions.swift
/app/Sources/PointFree/PublicEpisodes/0002-SideEffects.swift
/app/Sources/PointFree/PublicEpisodes/0003-StylingWithFunctions.swift
/app/Sources/PointFree/PublicEpisodes/0004-AlgebraicDataTypes.swift
/app/Sources/PointFree/PublicEpisodes/0010-ATaleOfTwoFlatMaps.swift
/app/Sources/PointFree/PublicEpisodes/0022-ATourOfPointFreeCo.swift
/app/Sources/PointFree/PublicEpisodes/0025-Zip-pt3.swift
/app/Sources/PointFree/PublicEpisodes/0029-DSL-vs-TemplatingLanguages.swift
/app/Sources/PointFree/PublicEpisodes/0041-TourOfSnapshotTesting.swift
/app/Sources/PointFree/PublicEpisodes/AllPublicEpisodes.swift
/app/Sources/PointFree/PublicEpisodes/References.swift
/app/Sources/PointFree/RouteNotFoundMiddleware.swift
/app/Sources/PointFree/Routers/AccountRoutes.swift
/app/Sources/PointFree/Routers/GitHubRoutes.swift
/app/Sources/PointFree/Routers/PointFreeRoutes.swift
/app/Sources/PointFree/Routers/TwitterRoutes.swift
/app/Sources/PointFree/Rss.swift
/app/Sources/PointFree/SVG.swift
/app/Sources/PointFree/Session.swift
/app/Sources/PointFree/SiteMiddleware.swift
/app/Sources/PointFree/StaticFileServerMiddleware.swift
/app/Sources/PointFree/Stripe.swift
/app/Sources/PointFree/StripeHtml.swift
/app/Sources/PointFree/StripeWebhooks.swift
/app/Sources/PointFree/Subscribe.swift
/app/Sources/PointFree/TODO.swift
/app/Sources/PointFree/Tag.swift
/app/Sources/PointFree/Tasks.swift
/app/Sources/PointFree/Transcripts/0005-HigherOrderFunctions.swift
/app/Sources/PointFree/Transcripts/0006-Setters.swift
/app/Sources/PointFree/Transcripts/0007-SettersAndKeyPaths.swift
/app/Sources/PointFree/Transcripts/0008-GettersAndKeyPaths.swift
/app/Sources/PointFree/Transcripts/0009-AlgebraicDataTypesPt2.swift
/app/Sources/PointFree/Transcripts/0011-CompositionWithoutOperators.swift
/app/Sources/PointFree/Transcripts/0012-Tagged.swift
/app/Sources/PointFree/Transcripts/0013-Map.swift
/app/Sources/PointFree/Transcripts/0014-Contravariance.swift
/app/Sources/PointFree/Transcripts/0015-SettersPt3.swift
/app/Sources/PointFree/Transcripts/0016-DependencyInjection.swift
/app/Sources/PointFree/Transcripts/0017-StylingWithFunctionsPt2.swift
/app/Sources/PointFree/Transcripts/0018-EnvironmentPt2.swift
/app/Sources/PointFree/Transcripts/0019-ADT-Pt3.swift
/app/Sources/PointFree/Transcripts/0020-NonEmpty.swift
/app/Sources/PointFree/Transcripts/0021-PlaygroundDrivenDevelopment.swift
/app/Sources/PointFree/Transcripts/0023-Zip-pt1.swift
/app/Sources/PointFree/Transcripts/0024-Zip-pt2.swift
/app/Sources/PointFree/Transcripts/0026-DSL-pt1.swift
/app/Sources/PointFree/Transcripts/0027-DSL-pt2.swift
/app/Sources/PointFree/Transcripts/0028-HTML-DSL.swift
/app/Sources/PointFree/Transcripts/0030-Randomness.swift
/app/Sources/PointFree/Transcripts/0031-ArbitraryPt1.swift
/app/Sources/PointFree/Transcripts/0032-ArbitraryPt2.swift
/app/Sources/PointFree/Transcripts/0033-ProtocolWitnessesPt1.swift
/app/Sources/PointFree/Transcripts/0034-ProtocolWitnessesPt2.swift
/app/Sources/PointFree/Transcripts/0035-AdvancedProtocolWitnessesPt1.swift
/app/Sources/PointFree/Transcripts/0036-AdvancedProtocolWitnessesPt2.swift
/app/Sources/PointFree/Transcripts/0037-ProtocolOrientedLibraryDesignPt1.swift
/app/Sources/PointFree/Transcripts/0038-ProtocolOrientedLibraryDesignPt2.swift
/app/Sources/PointFree/Transcripts/0039-WitnessOrientedLibraryDesign.swift
/app/Sources/PointFree/Transcripts/0040-AsyncSnapshot.swift
/app/Sources/PointFree/Transcripts/AllPrivateEpisodes.swift
/app/Sources/PointFree/Util.swift
/app/Sources/PointFree/VideoJs.swift
/app/Sources/PointFree/__Generated__/DerivedPartialIsos.swift
---
2.  While running pass #&#8203;237889 SILFunctionTransform "Mem2Reg" on SILFunction "@$S9PointFree16trackFeedRequest33_CC7B854978C56A73B08BD1588FB1AAE6LLy7Prelude2IOVy12HttpPipeline4ConnVyxq__AA8DatabaseV4UserVtGGANr0_lFAG11HeadersOpenO_AA6StripeV12SubscriptionVSgTg5".
 for 'trackFeedRequest(_:)' at /app/Sources/PointFree/Account/PrivateRss.swift:60:9
<unknown>:0: error: unable to execute command: Aborted
<unknown>:0: error: compile command failed due to signal 6 (use -v to see invocation)
error: terminated(1): /usr/bin/swift-build-tool -f /app/.build/release.yaml Server.exe output:

ERROR: Service 'web' failed to build: The command '/bin/sh -c swift build --product Server --configuration release' returned a non-zero code: 1

You can reproduce with the following steps:

git clone https://github.com/pointfreeco/pointfreeco.git
cd pointfreeco
git checkout 7647c0c
make bootstrap
make linux-start

Docker must be installed to run this process.

stephencelis commented 5 years ago

We were able to workaround the problem with this fix:

https://github.com/pointfreeco/pointfreeco/pull/375/files

Looks like it's the generic "A" that causes the issue.

belkadan commented 5 years ago

@eeckstein, is this something that's been fixed in the 5.0 branch already?

eeckstein commented 5 years ago

Yeah, this looks like a dup of rdar://problem/44143761, which I fixed in b702f996a247096a83e9bfc64e42894a38ed9fbc