forked from OSchip/llvm-project
26 lines
1.3 KiB
C++
26 lines
1.3 KiB
C++
// RUN: %clang -fplugin=%llvmshlibdir/Attribute%pluginext -emit-llvm -S %s -o - 2>&1 | FileCheck %s --check-prefix=ATTRIBUTE
|
|
// RUN: not %clang -fplugin=%llvmshlibdir/Attribute%pluginext -emit-llvm -DBAD_ATTRIBUTE -S %s -o - 2>&1 | FileCheck %s --check-prefix=BADATTRIBUTE
|
|
// REQUIRES: plugins, examples
|
|
|
|
void fn1a() __attribute__((example)) { }
|
|
[[example]] void fn1b() { }
|
|
[[plugin::example]] void fn1c() { }
|
|
void fn2() __attribute__((example("somestring"))) { }
|
|
// ATTRIBUTE: warning: 'example' attribute only applies to functions
|
|
int var1 __attribute__((example("otherstring"))) = 1;
|
|
|
|
// ATTRIBUTE: [[STR1_VAR:@.+]] = private unnamed_addr constant [10 x i8] c"example()\00"
|
|
// ATTRIBUTE: [[STR2_VAR:@.+]] = private unnamed_addr constant [20 x i8] c"example(somestring)\00"
|
|
// ATTRIBUTE: @llvm.global.annotations = {{.*}}@{{.*}}fn1a{{.*}}[[STR1_VAR]]{{.*}}@{{.*}}fn1b{{.*}}[[STR1_VAR]]{{.*}}@{{.*}}fn1c{{.*}}[[STR1_VAR]]{{.*}}@{{.*}}fn2{{.*}}[[STR2_VAR]]
|
|
|
|
#ifdef BAD_ATTRIBUTE
|
|
class Example {
|
|
// BADATTRIBUTE: error: 'example' attribute only allowed at file scope
|
|
void __attribute__((example)) fn3();
|
|
};
|
|
// BADATTRIBUTE: error: 'example' attribute requires a string
|
|
void fn4() __attribute__((example(123))) { }
|
|
// BADATTRIBUTE: error: 'example' attribute takes no more than 1 argument
|
|
void fn5() __attribute__((example("a","b"))) { }
|
|
#endif
|