Author: Aaron Ballman Date: 2020-06-25T08:45:32-04:00 New Revision: 37657991d17a274b1ac9c6ee63697a0138eab317
URL: https://github.com/llvm/llvm-project/commit/37657991d17a274b1ac9c6ee63697a0138eab317 DIFF: https://github.com/llvm/llvm-project/commit/37657991d17a274b1ac9c6ee63697a0138eab317.diff LOG: Fix a crash with [[clang::acquire_handle]] when written as a type attribute with no arguments provided. Added: Modified: clang/lib/Sema/SemaType.cpp clang/test/Sema/attr-handles.cpp Removed: ################################################################################ diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index 81a0c4a2a9c2..08d12fc25bf7 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -8110,6 +8110,15 @@ static void processTypeAttrs(TypeProcessingState &state, QualType &type, case ParsedAttr::AT_AcquireHandle: { if (!type->isFunctionType()) return; + + if (attr.getNumArgs() != 1) { + state.getSema().Diag(attr.getLoc(), + diag::err_attribute_wrong_number_arguments) + << attr << 1; + attr.setInvalid(); + return; + } + StringRef HandleType; if (!state.getSema().checkStringLiteralArgumentAttr(attr, 0, HandleType)) return; diff --git a/clang/test/Sema/attr-handles.cpp b/clang/test/Sema/attr-handles.cpp index 5abb1e8d00bc..135467b6c0a8 100644 --- a/clang/test/Sema/attr-handles.cpp +++ b/clang/test/Sema/attr-handles.cpp @@ -17,6 +17,7 @@ int (* __attribute__((acquire_handle("Fuchsia"))) fpt)(char *); // expected-warn auto lambdat = [](int handle __attribute__((use_handle("Fuchsia")))) __attribute__((acquire_handle("Fuchsia"))) -> int { return 0; }; int __attribute((acquire_handle("Fuchsia"))) ta; // expected-warning {{'acquire_handle' attribute only applies to functions, typedefs, and parameters}} +int open(const char *path, int flags, ...) [[clang::acquire_handle]]; // expected-error {{'acquire_handle' attribute takes one argument}} // Typedefs. typedef int callback(char *) __attribute__((acquire_handle("Fuchsia"))); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits