[all-commits] [llvm/llvm-project] bc7cc2: Fix an accepts-invalid issue with [[]] attributes ...

Aaron Ballman via All-commits all-commits at lists.llvm.org
Thu Jul 1 09:41:34 PDT 2021


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: bc7cc2074b7b7043e05cb46346f1368eb4ae9949
      https://github.com/llvm/llvm-project/commit/bc7cc2074b7b7043e05cb46346f1368eb4ae9949
  Author: Aaron Ballman <aaron at aaronballman.com>
  Date:   2021-07-01 (Thu, 01 Jul 2021)

  Changed paths:
    M clang/include/clang/Basic/AttributeCommonInfo.h
    M clang/lib/Parse/Parser.cpp
    M clang/lib/Sema/SemaDeclAttr.cpp
    M clang/lib/Sema/SemaType.cpp
    M clang/test/AST/ast-dump-c-attr.c
    M clang/test/Sema/attr-availability-square-brackets.c
    M clang/test/Sema/attr-c2x.c
    M clang/test/Sema/attr-deprecated-c2x.c
    M clang/test/Sema/attr-external-source-symbol.c
    M clang/test/Sema/c2x-maybe_unused-errors.c
    M clang/test/Sema/overloadable.c

  Log Message:
  -----------
  Fix an accepts-invalid issue with [[]] attributes in the type position in C

A user reported an issue to me via email that Clang was accepting some
code that GCC was rejecting. After investigation, it turned out to be a
general problem of us failing to properly reject attributes written in
the type position in C when they don't apply to types. The root cause
was a terminology issue -- we sometimes use "CXX11Attr" to mean [[]] in
C++11 mode and sometimes [[]] in general -- and this came back to bite
us because in this particular case, it really meant [[]] in C++ mode.

I fixed the issue by introducing a new function
AttributeCommonInfo::isStandardAttributeSyntax() to represent [[]] in
either C or C++ mode.

This fix pointed out that we've had the issue in some of our existing
tests, which have all been corrected. This resolves
https://bugs.llvm.org/show_bug.cgi?id=50954.




More information about the All-commits mailing list