aaron.ballman requested changes to this revision.
aaron.ballman added a comment.
This revision now requires changes to proceed.

Thank you for working on this, it's a problem that's annoyed me for a while but 
I've never found a satisfactory solution to. Unfortunately, it causes us to 
reject valid code (which is the same problem I kept running up against when I 
last tried).



================
Comment at: clang/test/Index/blocks.c:8
   static struct foo _foo;
-  __block i = 0;
+  __block int i = 0;
   ^ int_t(struct foo *foo) { return (int_t) foo->x + i; }(&_foo);
----------------
This change should not be necessary as the original code was valid (and I think 
was testing that validity, but could probably use a comment to make that 
explicit).


================
Comment at: clang/test/Sema/address_spaces.c:12
 {
-  _AS2 *x;// expected-warning {{type specifier missing, defaults to 'int'}}
+  _AS2 *x; // expected-error {{'address_space' attribute cannot be applied to 
a statement}}
+  // expected-error@-1 {{use of undeclared identifier 'x'}}
----------------
This breaks valid C89 code that uses implicit int (it is also a less helpful 
diagnostic, but that's secondary to the rejects valid bug).


================
Comment at: clang/test/Sema/block-literal.c:44
   takeblock(^{ x = 4; });  // expected-error {{variable is not assignable 
(missing __block type specifier)}}
-  __block y = 7;    // expected-warning {{type specifier missing, defaults to 
'int'}}
-  takeblock(^{ y = 8; });
+  __block y = 7;           // expected-error {{use of undeclared identifier 
'y'}}
+  __block int z = 7;
----------------
This is also valid C89 that should not be rejected.


================
Comment at: clang/test/SemaTemplate/address_space-dependent.cpp:12-13
 
-  __attribute__((address_space(J))) * x; // expected-error {{C++ requires a 
type specifier for all declarations}}
+  __attribute__((address_space(J))) * x; // expected-error {{use of undeclared 
identifier 'x'}}
+  // expected-error@-1 {{'address_space' attribute cannot be applied to a 
statement}}
 
----------------
I think this is a pretty unfortunate degradation of diagnostic wording. The 
code looks like a somewhat validish declaration, so the diagnostic about a 
missing type specifier is more helpful than a use of an undeclared identifier 
that the user is likely trying to declare.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D93630

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

Reply via email to