|  | // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fcoroutines-ts -std=c++14 -emit-llvm %s -o - | FileCheck %s | 
|  | #include "Inputs/coroutine.h" | 
|  |  | 
|  | using namespace std::experimental; | 
|  |  | 
|  | struct coro { | 
|  | struct promise_type { | 
|  | coro get_return_object(); | 
|  | suspend_never initial_suspend(); | 
|  | suspend_never final_suspend(); | 
|  | void return_void(); | 
|  | static void unhandled_exception(); | 
|  | }; | 
|  | }; | 
|  |  | 
|  | struct A { | 
|  | ~A(); | 
|  | bool await_ready(); | 
|  | int await_resume() { return 8; } | 
|  | template <typename F> void await_suspend(F); | 
|  | }; | 
|  |  | 
|  | extern "C" void consume(int); | 
|  |  | 
|  | // Verifies that domination is properly built during cleanup. | 
|  | // Without CGCleanup.cpp fix verifier was reporting: | 
|  | // Instruction does not dominate all uses! | 
|  | //  %tmp.exprcleanup = alloca i32*, align 8 | 
|  | //  store i32* %x, i32** %tmp.exprcleanup, align 8 | 
|  |  | 
|  |  | 
|  | // CHECK-LABEL: f( | 
|  | extern "C" coro f(int) { | 
|  | int x = 42; | 
|  | x = co_await A{}; | 
|  | consume(x); | 
|  | } | 
|  |  |