<div dir="ltr">I'm not sure, but assume the Inputs directories could be sunk to a common parent (test/Inputs rather than test/CodeGen/Inputs, etc)</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, May 19, 2016 at 5:38 PM, Reid Kleckner via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rnk<br>
Date: Thu May 19 19:38:25 2016<br>
New Revision: 270164<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=270164&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=270164&view=rev</a><br>
Log:<br>
Avoid depending on test inputes that aren't in Inputs<br>
<br>
Some people have weird CI systems that run each test subdirectory<br>
independently without access to other parallel trees.<br>
<br>
Unfortunately, this means we have to suffer some duplication until Art<br>
can sort out how to share these types.<br>
<br>
Added:<br>
cfe/trunk/test/CodeGenCUDA/Inputs/cuda-initializers.h<br>
cfe/trunk/test/SemaCUDA/Inputs/cuda-initializers.h<br>
Modified:<br>
cfe/trunk/test/CodeGenCUDA/<a href="http://device-var-init.cu" rel="noreferrer" target="_blank">device-var-init.cu</a><br>
cfe/trunk/test/SemaCUDA/<a href="http://device-var-init.cu" rel="noreferrer" target="_blank">device-var-init.cu</a><br>
<br>
Added: cfe/trunk/test/CodeGenCUDA/Inputs/cuda-initializers.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCUDA/Inputs/cuda-initializers.h?rev=270164&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCUDA/Inputs/cuda-initializers.h?rev=270164&view=auto</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGenCUDA/Inputs/cuda-initializers.h (added)<br>
+++ cfe/trunk/test/CodeGenCUDA/Inputs/cuda-initializers.h Thu May 19 19:38:25 2016<br>
@@ -0,0 +1,145 @@<br>
+// CUDA struct types with interesting initialization properties.<br>
+// Keep in sync with ../SemaCUDA/Inputs/cuda-initializers.h.<br>
+<br>
+// Base classes with different initializer variants.<br>
+<br>
+// trivial constructor -- allowed<br>
+struct T {<br>
+ int t;<br>
+};<br>
+<br>
+// empty constructor<br>
+struct EC {<br>
+ int ec;<br>
+ __device__ EC() {} // -- allowed<br>
+ __device__ EC(int) {} // -- not allowed<br>
+};<br>
+<br>
+// empty destructor<br>
+struct ED {<br>
+ __device__ ~ED() {} // -- allowed<br>
+};<br>
+<br>
+struct ECD {<br>
+ __device__ ECD() {} // -- allowed<br>
+ __device__ ~ECD() {} // -- allowed<br>
+};<br>
+<br>
+// empty templated constructor -- allowed with no arguments<br>
+struct ETC {<br>
+ template <typename... T> __device__ ETC(T...) {}<br>
+};<br>
+<br>
+// undefined constructor -- not allowed<br>
+struct UC {<br>
+ int uc;<br>
+ __device__ UC();<br>
+};<br>
+<br>
+// undefined destructor -- not allowed<br>
+struct UD {<br>
+ int ud;<br>
+ __device__ ~UD();<br>
+};<br>
+<br>
+// empty constructor w/ initializer list -- not allowed<br>
+struct ECI {<br>
+ int eci;<br>
+ __device__ ECI() : eci(1) {}<br>
+};<br>
+<br>
+// non-empty constructor -- not allowed<br>
+struct NEC {<br>
+ int nec;<br>
+ __device__ NEC() { nec = 1; }<br>
+};<br>
+<br>
+// non-empty destructor -- not allowed<br>
+struct NED {<br>
+ int ned;<br>
+ __device__ ~NED() { ned = 1; }<br>
+};<br>
+<br>
+// no-constructor, virtual method -- not allowed<br>
+struct NCV {<br>
+ int ncv;<br>
+ __device__ virtual void vm() {}<br>
+};<br>
+<br>
+// virtual destructor -- not allowed.<br>
+struct VD {<br>
+ __device__ virtual ~VD() {}<br>
+};<br>
+<br>
+// dynamic in-class field initializer -- not allowed<br>
+__device__ int f();<br>
+struct NCF {<br>
+ int ncf = f();<br>
+};<br>
+<br>
+// static in-class field initializer. NVCC does not allow it, but<br>
+// clang generates static initializer for this, so we'll accept it.<br>
+// We still can't use it on __shared__ vars as they don't allow *any*<br>
+// initializers.<br>
+struct NCFS {<br>
+ int ncfs = 3;<br>
+};<br>
+<br>
+// undefined templated constructor -- not allowed<br>
+struct UTC {<br>
+ template <typename... T> __device__ UTC(T...);<br>
+};<br>
+<br>
+// non-empty templated constructor -- not allowed<br>
+struct NETC {<br>
+ int netc;<br>
+ template <typename... T> __device__ NETC(T...) { netc = 1; }<br>
+};<br>
+<br>
+// Regular base class -- allowed<br>
+struct T_B_T : T {};<br>
+<br>
+// Incapsulated object of allowed class -- allowed<br>
+struct T_F_T {<br>
+ T t;<br>
+};<br>
+<br>
+// array of allowed objects -- allowed<br>
+struct T_FA_T {<br>
+ T t[2];<br>
+};<br>
+<br>
+<br>
+// Calling empty base class initializer is OK<br>
+struct EC_I_EC : EC {<br>
+ __device__ EC_I_EC() : EC() {}<br>
+};<br>
+<br>
+// .. though passing arguments is not allowed.<br>
+struct EC_I_EC1 : EC {<br>
+ __device__ EC_I_EC1() : EC(1) {}<br>
+};<br>
+<br>
+// Virtual base class -- not allowed<br>
+struct T_V_T : virtual T {};<br>
+<br>
+// Inherited from or incapsulated class with non-empty constructor --<br>
+// not allowed<br>
+struct T_B_NEC : NEC {};<br>
+struct T_F_NEC {<br>
+ NEC nec;<br>
+};<br>
+struct T_FA_NEC {<br>
+ NEC nec[2];<br>
+};<br>
+<br>
+<br>
+// Inherited from or incapsulated class with non-empty desstructor --<br>
+// not allowed<br>
+struct T_B_NED : NED {};<br>
+struct T_F_NED {<br>
+ NED ned;<br>
+};<br>
+struct T_FA_NED {<br>
+ NED ned[2];<br>
+};<br>
<br>
Modified: cfe/trunk/test/CodeGenCUDA/<a href="http://device-var-init.cu" rel="noreferrer" target="_blank">device-var-init.cu</a><br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCUDA/device-var-init.cu?rev=270164&r1=270163&r2=270164&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCUDA/device-var-init.cu?rev=270164&r1=270163&r2=270164&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGenCUDA/<a href="http://device-var-init.cu" rel="noreferrer" target="_blank">device-var-init.cu</a> (original)<br>
+++ cfe/trunk/test/CodeGenCUDA/<a href="http://device-var-init.cu" rel="noreferrer" target="_blank">device-var-init.cu</a> Thu May 19 19:38:25 2016<br>
@@ -10,100 +10,8 @@<br>
#include "Inputs/cuda.h"<br>
#endif<br>
<br>
-// Base classes with different initializer variants.<br>
-<br>
-// trivial constructor -- allowed<br>
-struct T {<br>
- int t;<br>
-};<br>
-<br>
-// empty constructor<br>
-struct EC {<br>
- int ec;<br>
- __device__ EC() {} // -- allowed<br>
- __device__ EC(int) {} // -- not allowed<br>
-};<br>
-<br>
-// empty destructor<br>
-struct ED {<br>
- __device__ ~ED() {} // -- allowed<br>
-};<br>
-<br>
-struct ECD {<br>
- __device__ ECD() {} // -- allowed<br>
- __device__ ~ECD() {} // -- allowed<br>
-};<br>
-<br>
-// empty templated constructor -- allowed with no arguments<br>
-struct ETC {<br>
- template <typename... T> __device__ ETC(T...) {}<br>
-};<br>
-<br>
-// undefined constructor -- not allowed<br>
-struct UC {<br>
- int uc;<br>
- __device__ UC();<br>
-};<br>
-<br>
-// undefined destructor -- not allowed<br>
-struct UD {<br>
- int ud;<br>
- __device__ ~UD();<br>
-};<br>
-<br>
-// empty constructor w/ initializer list -- not allowed<br>
-struct ECI {<br>
- int eci;<br>
- __device__ ECI() : eci(1) {}<br>
-};<br>
-<br>
-// non-empty constructor -- not allowed<br>
-struct NEC {<br>
- int nec;<br>
- __device__ NEC() { nec = 1; }<br>
-};<br>
-<br>
-// non-empty destructor -- not allowed<br>
-struct NED {<br>
- int ned;<br>
- __device__ ~NED() { ned = 1; }<br>
-};<br>
-<br>
-// no-constructor, virtual method -- not allowed<br>
-struct NCV {<br>
- int ncv;<br>
- __device__ virtual void vm() {}<br>
-};<br>
-<br>
-// virtual destructor -- not allowed.<br>
-struct VD {<br>
- __device__ virtual ~VD() {}<br>
-};<br>
-<br>
-// dynamic in-class field initializer -- not allowed<br>
-__device__ int f();<br>
-struct NCF {<br>
- int ncf = f();<br>
-};<br>
-<br>
-// static in-class field initializer. NVCC does not allow it, but<br>
-// clang generates static initializer for this, so we'll accept it.<br>
-// We still can't use it on __shared__ vars as they don't allow *any*<br>
-// initializers.<br>
-struct NCFS {<br>
- int ncfs = 3;<br>
-};<br>
-<br>
-// undefined templated constructor -- not allowed<br>
-struct UTC {<br>
- template <typename... T> __device__ UTC(T...);<br>
-};<br>
-<br>
-// non-empty templated constructor -- not allowed<br>
-struct NETC {<br>
- int netc;<br>
- template <typename... T> __device__ NETC(T...) { netc = 1; }<br>
-};<br>
+// Use the types we share with Sema tests.<br>
+#include "Inputs/cuda-initializers.h"<br>
<br>
__device__ int d_v;<br>
// CHECK: @d_v = addrspace(1) externally_initialized global i32 0,<br>
@@ -115,6 +23,7 @@ __constant__ int c_v;<br>
__device__ int d_v_i = 1;<br>
// CHECK: @d_v_i = addrspace(1) externally_initialized global i32 1,<br>
<br>
+// trivial constructor -- allowed<br>
__device__ T d_t;<br>
// CHECK: @d_t = addrspace(1) externally_initialized global %struct.T zeroinitializer<br>
__shared__ T s_t;<br>
@@ -127,6 +36,7 @@ __device__ T d_t_i = {2};<br>
__constant__ T c_t_i = {2};<br>
// CHECK: @c_t_i = addrspace(4) externally_initialized global %struct.T { i32 2 },<br>
<br>
+// empty constructor<br>
__device__ EC d_ec;<br>
// CHECK: @d_ec = addrspace(1) externally_initialized global %struct.EC zeroinitializer,<br>
__shared__ EC s_ec;<br>
@@ -134,6 +44,7 @@ __shared__ EC s_ec;<br>
__constant__ EC c_ec;<br>
// CHECK: @c_ec = addrspace(4) externally_initialized global %struct.EC zeroinitializer,<br>
<br>
+// empty destructor<br>
__device__ ED d_ed;<br>
// CHECK: @d_ed = addrspace(1) externally_initialized global %struct.ED zeroinitializer,<br>
__shared__ ED s_ed;<br>
@@ -148,6 +59,7 @@ __shared__ ECD s_ecd;<br>
__constant__ ECD c_ecd;<br>
// CHECK: @c_ecd = addrspace(4) externally_initialized global %struct.ECD zeroinitializer,<br>
<br>
+// empty templated constructor -- allowed with no arguments<br>
__device__ ETC d_etc;<br>
// CHECK: @d_etc = addrspace(1) externally_initialized global %struct.ETC zeroinitializer,<br>
__shared__ ETC s_etc;<br>
@@ -161,7 +73,6 @@ __constant__ NCFS c_ncfs;<br>
// CHECK: @c_ncfs = addrspace(4) externally_initialized global %struct.NCFS { i32 3 }<br>
<br>
// Regular base class -- allowed<br>
-struct T_B_T : T {};<br>
__device__ T_B_T d_t_b_t;<br>
// CHECK: @d_t_b_t = addrspace(1) externally_initialized global %struct.T_B_T zeroinitializer,<br>
__shared__ T_B_T s_t_b_t;<br>
@@ -170,9 +81,6 @@ __constant__ T_B_T c_t_b_t;<br>
// CHECK: @c_t_b_t = addrspace(4) externally_initialized global %struct.T_B_T zeroinitializer,<br>
<br>
// Incapsulated object of allowed class -- allowed<br>
-struct T_F_T {<br>
- T t;<br>
-};<br>
__device__ T_F_T d_t_f_t;<br>
// CHECK: @d_t_f_t = addrspace(1) externally_initialized global %struct.T_F_T zeroinitializer,<br>
__shared__ T_F_T s_t_f_t;<br>
@@ -181,9 +89,6 @@ __constant__ T_F_T c_t_f_t;<br>
// CHECK: @c_t_f_t = addrspace(4) externally_initialized global %struct.T_F_T zeroinitializer,<br>
<br>
// array of allowed objects -- allowed<br>
-struct T_FA_T {<br>
- T t[2];<br>
-};<br>
__device__ T_FA_T d_t_fa_t;<br>
// CHECK: @d_t_fa_t = addrspace(1) externally_initialized global %struct.T_FA_T zeroinitializer,<br>
__shared__ T_FA_T s_t_fa_t;<br>
@@ -193,9 +98,6 @@ __constant__ T_FA_T c_t_fa_t;<br>
<br>
<br>
// Calling empty base class initializer is OK<br>
-struct EC_I_EC : EC {<br>
- __device__ EC_I_EC() : EC() {}<br>
-};<br>
__device__ EC_I_EC d_ec_i_ec;<br>
// CHECK: @d_ec_i_ec = addrspace(1) externally_initialized global %struct.EC_I_EC zeroinitializer,<br>
__shared__ EC_I_EC s_ec_i_ec;<br>
@@ -203,35 +105,6 @@ __shared__ EC_I_EC s_ec_i_ec;<br>
__constant__ EC_I_EC c_ec_i_ec;<br>
// CHECK: @c_ec_i_ec = addrspace(4) externally_initialized global %struct.EC_I_EC zeroinitializer,<br>
<br>
-// .. though passing arguments is not allowed.<br>
-struct EC_I_EC1 : EC {<br>
- __device__ EC_I_EC1() : EC(1) {}<br>
-};<br>
-<br>
-// Virtual base class -- not allowed<br>
-struct T_V_T : virtual T {};<br>
-<br>
-// Inherited from or incapsulated class with non-empty constructor --<br>
-// not allowed<br>
-struct T_B_NEC : NEC {};<br>
-struct T_F_NEC {<br>
- NEC nec;<br>
-};<br>
-struct T_FA_NEC {<br>
- NEC nec[2];<br>
-};<br>
-<br>
-<br>
-// Inherited from or incapsulated class with non-empty desstructor --<br>
-// not allowed<br>
-struct T_B_NED : NED {};<br>
-struct T_F_NED {<br>
- NED ned;<br>
-};<br>
-struct T_FA_NED {<br>
- NED ned[2];<br>
-};<br>
-<br>
// We should not emit global initializers for device-side variables.<br>
// CHECK-NOT: @__cxx_global_var_init<br>
<br>
@@ -249,14 +122,20 @@ __device__ void df() {<br>
ETC etc;<br>
// CHECK: call void @_ZN3ETCC1IJEEEDpT_(%struct.ETC* %etc)<br>
UC uc;<br>
+ // undefined constructor -- not allowed<br>
// CHECK: call void @_ZN2UCC1Ev(%struct.UC* %uc)<br>
UD ud;<br>
+ // undefined destructor -- not allowed<br>
// CHECK-NOT: call<br>
ECI eci;<br>
+ // empty constructor w/ initializer list -- not allowed<br>
// CHECK: call void @_ZN3ECIC1Ev(%struct.ECI* %eci)<br>
NEC nec;<br>
+ // non-empty constructor -- not allowed<br>
// CHECK: call void @_ZN3NECC1Ev(%struct.NEC* %nec)<br>
+ // non-empty destructor -- not allowed<br>
NED ned;<br>
+ // no-constructor, virtual method -- not allowed<br>
// CHECK: call void @_ZN3NCVC1Ev(%struct.NCV* %ncv)<br>
NCV ncv;<br>
// CHECK-NOT: call<br>
<br>
Added: cfe/trunk/test/SemaCUDA/Inputs/cuda-initializers.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCUDA/Inputs/cuda-initializers.h?rev=270164&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCUDA/Inputs/cuda-initializers.h?rev=270164&view=auto</a><br>
==============================================================================<br>
--- cfe/trunk/test/SemaCUDA/Inputs/cuda-initializers.h (added)<br>
+++ cfe/trunk/test/SemaCUDA/Inputs/cuda-initializers.h Thu May 19 19:38:25 2016<br>
@@ -0,0 +1,145 @@<br>
+// CUDA struct types with interesting initialization properties.<br>
+// Keep in sync with ../CodeGenCUDA/Inputs/cuda-initializers.h.<br>
+<br>
+// Base classes with different initializer variants.<br>
+<br>
+// trivial constructor -- allowed<br>
+struct T {<br>
+ int t;<br>
+};<br>
+<br>
+// empty constructor<br>
+struct EC {<br>
+ int ec;<br>
+ __device__ EC() {} // -- allowed<br>
+ __device__ EC(int) {} // -- not allowed<br>
+};<br>
+<br>
+// empty destructor<br>
+struct ED {<br>
+ __device__ ~ED() {} // -- allowed<br>
+};<br>
+<br>
+struct ECD {<br>
+ __device__ ECD() {} // -- allowed<br>
+ __device__ ~ECD() {} // -- allowed<br>
+};<br>
+<br>
+// empty templated constructor -- allowed with no arguments<br>
+struct ETC {<br>
+ template <typename... T> __device__ ETC(T...) {}<br>
+};<br>
+<br>
+// undefined constructor -- not allowed<br>
+struct UC {<br>
+ int uc;<br>
+ __device__ UC();<br>
+};<br>
+<br>
+// undefined destructor -- not allowed<br>
+struct UD {<br>
+ int ud;<br>
+ __device__ ~UD();<br>
+};<br>
+<br>
+// empty constructor w/ initializer list -- not allowed<br>
+struct ECI {<br>
+ int eci;<br>
+ __device__ ECI() : eci(1) {}<br>
+};<br>
+<br>
+// non-empty constructor -- not allowed<br>
+struct NEC {<br>
+ int nec;<br>
+ __device__ NEC() { nec = 1; }<br>
+};<br>
+<br>
+// non-empty destructor -- not allowed<br>
+struct NED {<br>
+ int ned;<br>
+ __device__ ~NED() { ned = 1; }<br>
+};<br>
+<br>
+// no-constructor, virtual method -- not allowed<br>
+struct NCV {<br>
+ int ncv;<br>
+ __device__ virtual void vm() {}<br>
+};<br>
+<br>
+// virtual destructor -- not allowed.<br>
+struct VD {<br>
+ __device__ virtual ~VD() {}<br>
+};<br>
+<br>
+// dynamic in-class field initializer -- not allowed<br>
+__device__ int f();<br>
+struct NCF {<br>
+ int ncf = f();<br>
+};<br>
+<br>
+// static in-class field initializer. NVCC does not allow it, but<br>
+// clang generates static initializer for this, so we'll accept it.<br>
+// We still can't use it on __shared__ vars as they don't allow *any*<br>
+// initializers.<br>
+struct NCFS {<br>
+ int ncfs = 3;<br>
+};<br>
+<br>
+// undefined templated constructor -- not allowed<br>
+struct UTC {<br>
+ template <typename... T> __device__ UTC(T...);<br>
+};<br>
+<br>
+// non-empty templated constructor -- not allowed<br>
+struct NETC {<br>
+ int netc;<br>
+ template <typename... T> __device__ NETC(T...) { netc = 1; }<br>
+};<br>
+<br>
+// Regular base class -- allowed<br>
+struct T_B_T : T {};<br>
+<br>
+// Incapsulated object of allowed class -- allowed<br>
+struct T_F_T {<br>
+ T t;<br>
+};<br>
+<br>
+// array of allowed objects -- allowed<br>
+struct T_FA_T {<br>
+ T t[2];<br>
+};<br>
+<br>
+<br>
+// Calling empty base class initializer is OK<br>
+struct EC_I_EC : EC {<br>
+ __device__ EC_I_EC() : EC() {}<br>
+};<br>
+<br>
+// .. though passing arguments is not allowed.<br>
+struct EC_I_EC1 : EC {<br>
+ __device__ EC_I_EC1() : EC(1) {}<br>
+};<br>
+<br>
+// Virtual base class -- not allowed<br>
+struct T_V_T : virtual T {};<br>
+<br>
+// Inherited from or incapsulated class with non-empty constructor --<br>
+// not allowed<br>
+struct T_B_NEC : NEC {};<br>
+struct T_F_NEC {<br>
+ NEC nec;<br>
+};<br>
+struct T_FA_NEC {<br>
+ NEC nec[2];<br>
+};<br>
+<br>
+<br>
+// Inherited from or incapsulated class with non-empty desstructor --<br>
+// not allowed<br>
+struct T_B_NED : NED {};<br>
+struct T_F_NED {<br>
+ NED ned;<br>
+};<br>
+struct T_FA_NED {<br>
+ NED ned[2];<br>
+};<br>
<br>
Modified: cfe/trunk/test/SemaCUDA/<a href="http://device-var-init.cu" rel="noreferrer" target="_blank">device-var-init.cu</a><br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCUDA/device-var-init.cu?rev=270164&r1=270163&r2=270164&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCUDA/device-var-init.cu?rev=270164&r1=270163&r2=270164&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/SemaCUDA/<a href="http://device-var-init.cu" rel="noreferrer" target="_blank">device-var-init.cu</a> (original)<br>
+++ cfe/trunk/test/SemaCUDA/<a href="http://device-var-init.cu" rel="noreferrer" target="_blank">device-var-init.cu</a> Thu May 19 19:38:25 2016<br>
@@ -3,12 +3,14 @@<br>
// Make sure we don't allow dynamic initialization for device<br>
// variables, but accept empty constructors allowed by CUDA.<br>
<br>
-// RUN: %clang_cc1 -triple nvptx64-nvidia-cuda -fcuda-is-device -std=c++11 \<br>
-// RUN: -I %S/.. -fsyntax-only -verify -o /dev/null %s<br>
+// RUN: %clang_cc1 -verify %s -triple nvptx64-nvidia-cuda -fcuda-is-device -std=c++11 %s<br>
<br>
-// Counterpart in CodeGen covers valid cases that pass Sema<br>
-// checks. Here we'll only cover cases that trigger errors.<br>
-#include "CodeGenCUDA/<a href="http://device-var-init.cu" rel="noreferrer" target="_blank">device-var-init.cu</a>"<br>
+#ifdef __clang__<br>
+#include "Inputs/cuda.h"<br>
+#endif<br>
+<br>
+// Use the types we share with CodeGen tests.<br>
+#include "Inputs/cuda-initializers.h"<br>
<br>
__shared__ int s_v_i = 1;<br>
// expected-error@-1 {{initialization is not supported for __shared__ variables.}}<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>