summaryrefslogtreecommitdiffstats
path: root/test/Parser
diff options
context:
space:
mode:
authorDeLesley Hutchins <delesley@google.com>2012-02-16 16:50:43 +0000
committerDeLesley Hutchins <delesley@google.com>2012-02-16 16:50:43 +0000
commitc24a2335677f3d1bd2cab1019ac445d650f52123 (patch)
treec7942b6cb2a46762429a0936e91be4bb8f207ded /test/Parser
parent32addd519c6699000ff79c387a1c87f0ab7c3698 (diff)
Allow thread safety attributes on function definitions.
For compatibility with gcc, clang will now parse gcc attributes on function definitions, but issue a warning if the attribute is not a thread safety attribute. Warning controlled by -Wgcc-compat. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150698 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Parser')
-rw-r--r--test/Parser/attributes.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/test/Parser/attributes.c b/test/Parser/attributes.c
index 36bd8071ac..347cb9c1bf 100644
--- a/test/Parser/attributes.c
+++ b/test/Parser/attributes.c
@@ -61,3 +61,38 @@ int aligned(int);
int __attribute__((vec_type_hint(char, aligned(16) )) missing_rparen_1; // expected-error {{expected ')'}}
int __attribute__((mode(x aligned(16) )) missing_rparen_2; // expected-error {{expected ')'}}
int __attribute__((format(printf, 0 aligned(16) )) missing_rparen_3; // expected-error {{expected ')'}}
+
+
+
+int testFundef1(int *a) __attribute__((nonnull(1))) { // \
+ // expected-warning {{GCC does not allow nonnull attribute in this position on a function definition}}
+ return *a;
+}
+
+// noreturn is lifted to type qualifier
+void testFundef2() __attribute__((noreturn)) { // \
+ // expected-warning {{GCC does not allow noreturn attribute in this position on a function definition}}
+ testFundef2();
+}
+
+int testFundef3(int *a) __attribute__((nonnull(1), // \
+ // expected-warning {{GCC does not allow nonnull attribute in this position on a function definition}}
+ pure)) { // \
+ // expected-warning {{GCC does not allow pure attribute in this position on a function definition}}
+ return *a;
+}
+
+int testFundef4(int *a) __attribute__((nonnull(1))) // \
+ // expected-warning {{GCC does not allow nonnull attribute in this position on a function definition}}
+ __attribute((pure)) { // \
+ // expected-warning {{GCC does not allow pure attribute in this position on a function definition}}
+ return *a;
+}
+
+// GCC allows these
+void testFundef5() __attribute__(()) { }
+
+__attribute__((pure)) int testFundef6(int a) { return a; }
+
+
+