pmatos added inline comments.

================
Comment at: clang/test/SemaCXX/wasm-refs-and-tables.cpp:16-17
+__externref_t **t2;              // expected-error {{pointer to WebAssembly 
reference type is not allowed}}
+__externref_t ******t3;          // expected-error {{pointer to WebAssembly 
reference type is not allowed}}
+static __externref_t t4[3];      // expected-error {{only zero-length 
WebAssembly tables are currently supported}}
+static __externref_t t5[];       // expected-error {{only zero-length 
WebAssembly tables are currently supported}}
----------------
aaron.ballman wrote:
> This seems really... confused. We can't form a pointer to the type, but we 
> can form an array of the type (which decays into a pointer when you sneeze 
> near it, and it's not clear whether that should be allowed or not) so long as 
> it's a zero-length array (which is an extension in C and C++, so do we need 
> to silence pedantic warnings in WASM for this?).
As it stands, tables are declared as static arrays of size zero. Then to access 
them we need to use builtins. No subscripting, no comparison, no pointer decay, 
etc. No passing into functions, returning from functions, etc. Nothing besides 
using them as arguments to wasm_table... builtins.


================
Comment at: clang/test/SemaCXX/wasm-refs-and-tables.cpp:88
+  varargs(1, table);              // expected-error {{cannot use WebAssembly 
table as a function parameter}}
+  table == 1;                     // expected-error {{invalid operands to 
binary expression ('__attribute__((address_space(1))) __externref_t[0]' and 
'int')}}
+  1 >= table;                     // expected-error {{invalid operands to 
binary expression ('int' and '__attribute__((address_space(1))) 
__externref_t[0]')}}
----------------
aaron.ballman wrote:
> 
No comparisons are allowed - I have added a few tests to that effect.


================
Comment at: clang/test/SemaCXX/wasm-refs-and-tables.cpp:95
+  table ? : other_table;          // expected-error {{cannot use a WebAssembly 
table within a branch of a conditional expression}}
+  (void *)table;                  // expected-error {{cannot cast from a 
WebAssembly table}}
+  void *u;
----------------
aaron.ballman wrote:
> 
(void)table; is allowed.


================
Comment at: clang/test/SemaCXX/wasm-refs-and-tables.cpp:102
+
+  table[0];
+  table[0] = ref;
----------------
aaron.ballman wrote:
> This involves array to pointer decay, so we're forming a pointer to the table 
> here. Why is this pointer fine but others are not?
I have disallowed this to avoid the problems you mention. Table set happens 
only through the builtin wasm_table_set.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D139010/new/

https://reviews.llvm.org/D139010

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to