diff options
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/Sema/ast-print.c | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/clang/test/Sema/ast-print.c b/clang/test/Sema/ast-print.c index 83a08bf2458..86166dbd99c 100644 --- a/clang/test/Sema/ast-print.c +++ b/clang/test/Sema/ast-print.c @@ -1,5 +1,12 @@ -// RUN: %clang_cc1 %s -ast-print | FileCheck %s -// RUN: %clang_cc1 %s -ast-print | %clang_cc1 -fsyntax-only - +// RUN: %clang_cc1 %s -ast-print -verify > %t.c +// RUN: FileCheck %s --input-file %t.c +// +// RUN: echo >> %t.c "// expected""-warning@* {{use of GNU old-style field designator extension}}" +// RUN: echo >> %t.c "// expected""-warning@* {{'EnumWithAttributes' is deprecated}}" +// RUN: echo >> %t.c "// expected""-note@* {{'EnumWithAttributes' has been explicitly marked deprecated here}}" +// RUN: echo >> %t.c "// expected""-warning@* {{'EnumWithAttributes3' is deprecated}}" +// RUN: echo >> %t.c "// expected""-note@* {{'EnumWithAttributes3' has been explicitly marked deprecated here}}" +// RUN: %clang_cc1 -fsyntax-only %t.c -verify typedef void func_typedef(); func_typedef xxx; @@ -58,7 +65,7 @@ struct pair_t { }; // CHECK: struct pair_t p = {a: 3, .b = 4}; -struct pair_t p = {a: 3, .b = 4}; +struct pair_t p = {a: 3, .b = 4}; // expected-warning {{use of GNU old-style field designator extension}} void initializers() { // CHECK: int *x = ((void *)0), *y = ((void *)0); @@ -70,11 +77,30 @@ void initializers() { } z = {(struct Z){}}; } -// CHECK-LABEL: enum EnumWithAttributes { -enum EnumWithAttributes { +// CHECK-LABEL: enum __attribute__((deprecated(""))) EnumWithAttributes { +enum EnumWithAttributes { // expected-warning {{'EnumWithAttributes' is deprecated}} // CHECK-NEXT: EnumWithAttributesFoo __attribute__((deprecated(""))), EnumWithAttributesFoo __attribute__((deprecated)), // CHECK-NEXT: EnumWithAttributesBar __attribute__((unavailable(""))) = 50 EnumWithAttributesBar __attribute__((unavailable)) = 50 - // CHECK-NEXT: } __attribute__((deprecated(""))) -} __attribute__((deprecated)); + // CHECK-NEXT: }; + // CHECK-NEXT: enum EnumWithAttributes *EnumWithAttributesPtr; +} __attribute__((deprecated)) *EnumWithAttributesPtr; // expected-note {{'EnumWithAttributes' has been explicitly marked deprecated here}} + +// FIXME: If enum is forward-declared at file scope, attributes are lost. +// CHECK-LABEL: enum EnumWithAttributes2 *EnumWithAttributes2Ptr; +// expected-warning@+2 {{'EnumWithAttributes2' is deprecated}} +// expected-note@+1 {{'EnumWithAttributes2' has been explicitly marked deprecated here}} +enum __attribute__((deprecated)) EnumWithAttributes2 *EnumWithAttributes2Ptr; + +// CHECK-LABEL: EnumWithAttributes3Fn +void EnumWithAttributes3Fn() { + // CHECK-NEXT: enum __attribute__((deprecated(""))) EnumWithAttributes3 *EnumWithAttributes3Ptr; + // expected-warning@+2 {{'EnumWithAttributes3' is deprecated}} + // expected-note@+1 {{'EnumWithAttributes3' has been explicitly marked deprecated here}} + enum __attribute__((deprecated)) EnumWithAttributes3 *EnumWithAttributes3Ptr; + // Printing must not put the attribute after the tag where it would apply to + // the variable instead of the type, and then our deprecation warning would + // move to this use of the variable. + void *p = EnumWithAttributes3Ptr; +} |