// RUN: %clang_cc1 -std=gnu++20 -fsyntax-only -ast-dump %s | FileCheck %s void f() { [[clang::annotate("decl", 1)]] int i = 0; [[clang::annotate("stmt", 2)]] i += 1; [[clang::annotate("label", 3)]] label1: i += 2; } // CHECK: -FunctionDecl {{.*}} f 'void ()' // CHECK: -VarDecl {{.*}} used i 'int' // CHECK: -AnnotateAttr {{.*}} "decl" // CHECK: -IntegerLiteral {{.*}} 'int' 1 // CHECK: -AttributedStmt // CHECK: -AnnotateAttr {{.*}} "stmt" // CHECK: -IntegerLiteral {{.*}} 'int' 2 // CHECK: -LabelStmt {{.*}} 'label1' // CHECK: -AnnotateAttr {{.*}} "label" // CHECK: -IntegerLiteral {{.*}} 'int' 3 // CHECK: -CompoundAssignOperator template void g() { [[clang::annotate("tmpl_decl", 4)]] T j = 0; [[clang::annotate("tmpl_stmt", 5)]] j += 1; [[clang::annotate("tmpl_label", 6)]] label2: j += 2; } // CHECK: -FunctionTemplateDecl {{.*}} g // CHECK: -VarDecl {{.*}} referenced j 'T' // CHECK: -AnnotateAttr {{.*}} "tmpl_decl" // CHECK: -IntegerLiteral {{.*}} 'int' 4 // CHECK: -AttributedStmt // CHECK: -AnnotateAttr {{.*}} "tmpl_stmt" // CHECK: -IntegerLiteral {{.*}} 'int' 5 // CHECK: -LabelStmt {{.*}} 'label2' // CHECK: -AnnotateAttr {{.*}} "tmpl_label" // CHECK: -IntegerLiteral {{.*}} 'int' 6 // CHECK: -CompoundAssignOperator void h() { g(); } // CHECK: -FunctionDecl {{.*}} used g 'void ()' implicit_instantiation // CHECK: -VarDecl {{.*}} used j 'int' // CHECK: -AnnotateAttr {{.*}} "tmpl_decl" // CHECK: -IntegerLiteral {{.*}} 'int' 4 // CHECK: -AttributedStmt // CHECK: -AnnotateAttr {{.*}} Implicit "tmpl_stmt" // CHECK: -IntegerLiteral {{.*}} 'int' 5 // CHECK: -LabelStmt {{.*}} 'label2' // CHECK: -AnnotateAttr {{.*}} "tmpl_label" // CHECK: -IntegerLiteral {{.*}} 'int' 6 // CHECK: -CompoundAssignOperator