brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · 125ddea Raw
63 lines · plain
1// RUN: %clang_cc1 -fcxx-exceptions -fcuda-is-device -fsyntax-only -std=c++17 -verify %s2 3#include "Inputs/cuda.h"4 5// Error, instantiated on device.6inline __host__ __device__ void hasInvalid() {7  throw NULL;8  // expected-error@-1 2{{cannot use 'throw' in __host__ __device__ function}}9}10 11inline __host__ __device__ void hasInvalid2() {12  throw NULL;13  // expected-error@-1 2{{cannot use 'throw' in __host__ __device__ function}}14}15 16inline __host__ __device__ void hasInvalidDiscarded() {17  // This is only used in the discarded statements below, so this should not diagnose.18  throw NULL;19}20 21static __device__ void use0() {22  hasInvalid(); // expected-note {{called by 'use0'}}23  hasInvalid(); // expected-note {{called by 'use0'}}24 25  if constexpr (true) {26    hasInvalid2(); // expected-note {{called by 'use0'}}27  } else {28    hasInvalidDiscarded();29  }30 31  if constexpr (false) {32    hasInvalidDiscarded();33  } else {34    hasInvalid2(); // expected-note {{called by 'use0'}}35  }36 37  if constexpr (false) {38    hasInvalidDiscarded();39  }40}41 42// To avoid excessive diagnostic messages, deferred diagnostics are only43// emitted the first time a function is called.44static __device__ void use1() {45  use0(); // expected-note 4{{called by 'use1'}}46  use0();47}48 49static __device__ void use2() {50  use1(); // expected-note 4{{called by 'use2'}}51  use1();52}53 54static __device__ void use3() {55  use2(); // expected-note 4{{called by 'use3'}}56  use2();57}58 59__global__ void use4() {60  use3(); // expected-note 4{{called by 'use4'}}61  use3();62}63