115241ba4SReid Kleckner // This test uses PrintFunctionNames with -fdelayed-template-parsing because it
215241ba4SReid Kleckner // happens to use a RecursiveASTVisitor that forces deserialization of AST
315241ba4SReid Kleckner // files.
415241ba4SReid Kleckner //
5*6fd35373SReid Kleckner // RUN: %clang_cc1 -triple %itanium_abi_triple -fdelayed-template-parsing \
6*6fd35373SReid Kleckner // RUN:      -std=c++14 -emit-pch -o %t.pch %s
7*6fd35373SReid Kleckner // RUN: %clang_cc1 -triple %itanium_abi_triple \
8*6fd35373SReid Kleckner // RUN:     -load %llvmshlibdir/PrintFunctionNames%pluginext \
915241ba4SReid Kleckner // RUN:     -add-plugin print-fns -std=c++14 -include-pch %t.pch %s -emit-llvm \
1015241ba4SReid Kleckner // RUN:     -fdelayed-template-parsing -debug-info-kind=limited \
1115241ba4SReid Kleckner // RUN:     -o %t.ll 2>&1 | FileCheck --check-prefix=DECLS %s
1215241ba4SReid Kleckner // RUN: FileCheck --check-prefix=IR %s < %t.ll
1315241ba4SReid Kleckner //
1415241ba4SReid Kleckner // REQUIRES: plugins, examples
1515241ba4SReid Kleckner 
1615241ba4SReid Kleckner // DECLS: top-level-decl: "func"
1715241ba4SReid Kleckner 
1815241ba4SReid Kleckner // IR: define {{.*}}void @_Z4funcv()
1915241ba4SReid Kleckner 
2015241ba4SReid Kleckner #ifndef HEADER
2115241ba4SReid Kleckner #define HEADER
2215241ba4SReid Kleckner 
2315241ba4SReid Kleckner struct nullopt_t {
nullopt_tnullopt_t2415241ba4SReid Kleckner   constexpr explicit nullopt_t(int) {}
2515241ba4SReid Kleckner };
2615241ba4SReid Kleckner constexpr nullopt_t nullopt(0);
2715241ba4SReid Kleckner 
2815241ba4SReid Kleckner #else
2915241ba4SReid Kleckner 
func()3015241ba4SReid Kleckner void func() { }
3115241ba4SReid Kleckner 
3215241ba4SReid Kleckner #endif
33