llvm-project/clang/test/Sema/attr-mig.cpp
Artem Dergachev c333d77563 [attributes] Add an attribute for server routines in Mach kernel and extensions.
The new __attribute__ ((mig_server_routine)) is going to be used for annotating
Mach Interface Generator (MIG) callback functions as such, so that additional
static analysis could be applied to their implementations. It can also be
applied to regular functions behavior of which is supposed to be identical to
that of a MIG server routine.

Differential Revision: https://reviews.llvm.org/D58365

llvm-svn: 354530
2019-02-21 00:01:02 +00:00

21 lines
1.1 KiB
C++

// RUN: %clang_cc1 -fsyntax-only -verify %s
typedef int kern_return_t;
typedef kern_return_t IOReturn;
#define KERN_SUCCESS 0
#define kIOReturnSuccess KERN_SUCCESS
class MyServer {
public:
virtual __attribute__((mig_server_routine)) IOReturn externalMethod();
virtual __attribute__((mig_server_routine)) void anotherMethod(); // expected-warning{{'mig_server_routine' attribute only applies to routines that return a kern_return_t}}
virtual __attribute__((mig_server_routine)) int yetAnotherMethod(); // expected-warning{{'mig_server_routine' attribute only applies to routines that return a kern_return_t}}
[[clang::mig_server_routine]] virtual IOReturn cppAnnotatedMethod();
[[clang::mig_server_routine("arg")]] virtual IOReturn cppAnnotatedMethodWithInvalidArgs(); // expected-error{{'mig_server_routine' attribute takes no arguments}}
[[clang::mig_server_routine]] virtual int cppInvalidAnnotatedMethod(); // expected-warning{{'mig_server_routine' attribute only applies to routines that return a kern_return_t}}
};
IOReturn MyServer::externalMethod() {
return kIOReturnSuccess;
}