brunodefraine added a comment.

Following suggestion by @dblaikie and @aaron.ballman I'm preparing a new diff 
where a function redeclaration that adds `nodebug` is flagged as an error in 
`Sema::mergeDeclAttributes`.

This triggers test failures because of violations in builtin header files, for 
example:

  In file included from clang/test/CodeGen/ms-intrinsics.c:18:
  build/lib/clang/13.0.0/include/intrin.h:451:24: error: function declared with 
'nodebug' attribute was previously declared without the 'nodebug' attribute
  static __inline__ void __DEFAULT_FN_ATTRS __movsb(unsigned char *__dst,
                         ^
  build/lib/clang/13.0.0/include/intrin.h:37:62: note: expanded from macro 
'__DEFAULT_FN_ATTRS'
  #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__))
                                                               ^
  build/lib/clang/13.0.0/include/intrin.h:80:6: note: previous declaration is 
here
  void __movsb(unsigned char *, unsigned char const *, size_t);
       ^

From what I understand from `clang/lib/Headers/intrin.h` the functions are 
declared in general at the beginning of the headers, then implemented for 
specific architectures as inline function containing assembly. I do not know if 
it is appropriate to mark the general declarations as `nodebug`...

That I already encounter this in builtin headers is probably an indication that 
the new error will break some code in the wild. A pragmatic solution would be 
to only raise the error in `Sema::mergeDeclAttributes` if `Old->isUsed()`, i.e. 
an earlier declaration without `nodebug` can be forgiven if not yet used. I 
think that would still make it impossible to trigger the crash?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D104777

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

Reply via email to