diff options
-rw-r--r-- | test/Sema/attr-unavailable-message.c | 2 | ||||
-rw-r--r-- | utils/TableGen/ClangAttrEmitter.cpp | 4 |
2 files changed, 6 insertions, 0 deletions
diff --git a/test/Sema/attr-unavailable-message.c b/test/Sema/attr-unavailable-message.c index 400a2c6328..415cb2f079 100644 --- a/test/Sema/attr-unavailable-message.c +++ b/test/Sema/attr-unavailable-message.c @@ -1,6 +1,8 @@ // RUN: %clang_cc1 -fsyntax-only -verify %s // rdar: //6734520 +void tooManyArgs() __attribute__((unavailable("a", "b"))); // expected-error {{'unavailable' attribute takes no more than 1 argument}} + int foo(int) __attribute__((__unavailable__("USE IFOO INSTEAD"))); // expected-note {{'foo' has been explicitly marked unavailable here}} double dfoo(double) __attribute__((__unavailable__("NO LONGER"))); // expected-note 2 {{'dfoo' has been explicitly marked unavailable here}} diff --git a/utils/TableGen/ClangAttrEmitter.cpp b/utils/TableGen/ClangAttrEmitter.cpp index 78a2eb118b..8185b6ab1e 100644 --- a/utils/TableGen/ClangAttrEmitter.cpp +++ b/utils/TableGen/ClangAttrEmitter.cpp @@ -2540,6 +2540,10 @@ static void emitArgInfo(const Record &R, std::stringstream &OS) { unsigned ArgCount = 0, OptCount = 0; bool HasVariadic = false; for (const auto *Arg : Args) { + // If the arg is fake, it's the user's job to supply it: general parsing + // logic shouldn't need to know anything about it. + if (Arg->getValueAsBit("Fake")) + continue; Arg->getValueAsBit("Optional") ? ++OptCount : ++ArgCount; if (!HasVariadic && isArgVariadic(*Arg, R.getName())) HasVariadic = true; |