mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 18:36:05 +00:00

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.
16 lines
429 B
C
16 lines
429 B
C
// RUN: %clang_cc1 -fsyntax-only -Wunused -std=c2x -verify %s
|
|
|
|
struct [[maybe_unused]] S1 { // ok
|
|
int a [[maybe_unused]];
|
|
};
|
|
struct [[maybe_unused, maybe_unused]] S2 { // ok
|
|
int a;
|
|
};
|
|
struct [[maybe_unused("Wrong")]] S3 { // expected-error {{'maybe_unused' cannot have an argument list}}
|
|
int a;
|
|
};
|
|
|
|
void func(void) {
|
|
int a[10] [[maybe_unused]]; // expected-error {{'maybe_unused' attribute cannot be applied to types}}
|
|
}
|