diff options
Diffstat (limited to 'clang/test/Misc/ast-dump-attr.cpp')
-rw-r--r-- | clang/test/Misc/ast-dump-attr.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/clang/test/Misc/ast-dump-attr.cpp b/clang/test/Misc/ast-dump-attr.cpp index bb4be5b057a..dde7ba3e094 100644 --- a/clang/test/Misc/ast-dump-attr.cpp +++ b/clang/test/Misc/ast-dump-attr.cpp @@ -114,3 +114,18 @@ extern "C" int printf(const char *format, ...); int __attribute__((cdecl)) TestOne(void), TestTwo(void); // CHECK: FunctionDecl{{.*}}TestOne{{.*}}__attribute__((cdecl)) // CHECK: FunctionDecl{{.*}}TestTwo{{.*}}__attribute__((cdecl)) + +void func() { + auto Test = []() __attribute__((no_thread_safety_analysis)) {}; + // CHECK: CXXMethodDecl{{.*}}operator() 'void (void) const' + // CHECK: NoThreadSafetyAnalysisAttr + + // Because GNU's noreturn applies to the function type, and this lambda does + // not have a capture list, the call operator and the function pointer + // conversion should both be noreturn, but the method should not contain a + // NoReturnAttr because the attribute applied to the type. + auto Test2 = []() __attribute__((noreturn)) { while(1); }; + // CHECK: CXXMethodDecl{{.*}}operator() 'void (void) __attribute__((noreturn)) const' + // CHECK-NOT: NoReturnAttr + // CHECK: CXXConversionDecl{{.*}}operator void (*)() __attribute__((noreturn)) +} |