[PATCH] D69585: Add option to instantiate templates already in the PCH
This revision was automatically updated to reflect the committed changes. Closed by commit rGa45f713c6730: add option to instantiate templates already in the PCH (authored by llunak). Changed prior to commit: https://reviews.llvm.org/D69585?vs=265918&id=272312#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D69585/new/ https://reviews.llvm.org/D69585 Files: clang/include/clang/Basic/LangOptions.def clang/include/clang/Driver/Options.td clang/include/clang/Sema/Sema.h clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Frontend/CompilerInvocation.cpp clang/lib/Sema/Sema.cpp clang/lib/Sema/SemaTemplateInstantiateDecl.cpp clang/test/PCH/crash-12631281.cpp clang/test/PCH/cxx-alias-decl.cpp clang/test/PCH/cxx-dependent-sized-ext-vector.cpp clang/test/PCH/cxx-explicit-specifier.cpp clang/test/PCH/cxx-exprs.cpp clang/test/PCH/cxx-friends.cpp clang/test/PCH/cxx-member-init.cpp clang/test/PCH/cxx-ms-function-specialization-class-scope.cpp clang/test/PCH/cxx-static_assert.cpp clang/test/PCH/cxx-templates.cpp clang/test/PCH/cxx-variadic-templates-with-default-params.cpp clang/test/PCH/cxx-variadic-templates.cpp clang/test/PCH/cxx0x-default-delete.cpp clang/test/PCH/cxx11-constexpr.cpp clang/test/PCH/cxx11-enum-template.cpp clang/test/PCH/cxx11-exception-spec.cpp clang/test/PCH/cxx11-inheriting-ctors.cpp clang/test/PCH/cxx11-user-defined-literals.cpp clang/test/PCH/cxx1y-decltype-auto.cpp clang/test/PCH/cxx1y-deduced-return-type.cpp clang/test/PCH/cxx1y-default-initializer.cpp clang/test/PCH/cxx1y-init-captures.cpp clang/test/PCH/cxx1y-variable-templates.cpp clang/test/PCH/cxx1z-aligned-alloc.cpp clang/test/PCH/cxx1z-decomposition.cpp clang/test/PCH/cxx1z-using-declaration.cpp clang/test/PCH/cxx2a-bitfield-init.cpp clang/test/PCH/cxx2a-concept-specialization-expr.cpp clang/test/PCH/cxx2a-constraints.cpp clang/test/PCH/cxx2a-defaulted-comparison.cpp clang/test/PCH/cxx2a-requires-expr.cpp clang/test/PCH/cxx2a-template-lambdas.cpp clang/test/PCH/delayed-pch-instantiate.cpp clang/test/PCH/friend-template.cpp clang/test/PCH/implicitly-deleted.cpp clang/test/PCH/late-parsed-instantiations.cpp clang/test/PCH/local_static.cpp clang/test/PCH/macro-undef.cpp clang/test/PCH/make-integer-seq.cpp clang/test/PCH/ms-if-exists.cpp clang/test/PCH/pch-instantiate-templates-forward-decl.cpp clang/test/PCH/pch-instantiate-templates.cpp clang/test/PCH/pr18806.cpp clang/test/PCH/pragma-diag-section.cpp clang/test/PCH/rdar10830559.cpp clang/test/PCH/specialization-after-instantiation.cpp clang/test/PCH/type_pack_element.cpp Index: clang/test/PCH/type_pack_element.cpp === --- clang/test/PCH/type_pack_element.cpp +++ clang/test/PCH/type_pack_element.cpp @@ -1,6 +1,9 @@ // RUN: %clang_cc1 -std=c++14 -x c++-header %s -emit-pch -o %t.pch // RUN: %clang_cc1 -std=c++14 -x c++ /dev/null -include-pch %t.pch +// RUN: %clang_cc1 -std=c++14 -x c++-header %s -emit-pch -fpch-instantiate-templates -o %t.pch +// RUN: %clang_cc1 -std=c++14 -x c++ /dev/null -include-pch %t.pch + template struct X { }; Index: clang/test/PCH/specialization-after-instantiation.cpp === --- /dev/null +++ clang/test/PCH/specialization-after-instantiation.cpp @@ -0,0 +1,32 @@ +// Test this without pch. +// RUN: %clang_cc1 -fsyntax-only -verify -DBODY %s + +// Test with pch. +// RUN: %clang_cc1 -emit-pch -o %t %s +// RUN: %clang_cc1 -include-pch %t -fsyntax-only -verify -DBODY %s + +// RUN: %clang_cc1 -emit-pch -fpch-instantiate-templates -o %t %s +// RUN: %clang_cc1 -include-pch %t -fsyntax-only -verify -DBODY %s + +#ifndef HEADER_H +#define HEADER_H + +template +struct A { + int foo() const; +}; + +int bar(A *a) { + return a->foo(); +} + +#endif // HEADER_H + +#ifdef BODY + +template <> +int A::foo() const { // expected-error {{explicit specialization of 'foo' after instantiation}} // expected-note@20 {{implicit instantiation first required here}} + return 10; +} + +#endif // BODY Index: clang/test/PCH/rdar10830559.cpp === --- clang/test/PCH/rdar10830559.cpp +++ clang/test/PCH/rdar10830559.cpp @@ -6,6 +6,9 @@ // RUN: %clang_cc1 -emit-pch -o %t %s // RUN: %clang_cc1 -include-pch %t -emit-llvm-only %t.empty.cpp +// RUN: %clang_cc1 -emit-pch -fpch-instantiate-templates -o %t %s +// RUN: %clang_cc1 -include-pch %t -emit-llvm-only %t.empty.cpp + // rdar://10830559 //#pragma ms_struct on Index: clang/test/PCH/pragma-diag-section.cpp === --- clang/test/PCH/pragma-diag-section.cpp +++ clang/test/PCH/pragma-diag-section.cpp @@ -5,6 +5,9 @@ // RUN: %clang_cc1 %s -emit-pch -o %t // RUN: %clang_cc1 %s -include-pch %t -verify -fsyntax-only -Wuninitialized +//
[PATCH] D69585: Add option to instantiate templates already in the PCH
llunak updated this revision to Diff 265918. llunak edited the summary of this revision. llunak added a comment. Enabled the option by default for clang-cl to match MSVC. Repository: rC Clang CHANGES SINCE LAST ACTION https://reviews.llvm.org/D69585/new/ https://reviews.llvm.org/D69585 Files: clang/include/clang/Basic/LangOptions.def clang/include/clang/Driver/Options.td clang/include/clang/Sema/Sema.h clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Frontend/CompilerInvocation.cpp clang/lib/Sema/Sema.cpp clang/lib/Sema/SemaTemplateInstantiateDecl.cpp clang/test/PCH/codegen.cpp clang/test/PCH/crash-12631281.cpp clang/test/PCH/cxx-alias-decl.cpp clang/test/PCH/cxx-dependent-sized-ext-vector.cpp clang/test/PCH/cxx-explicit-specifier.cpp clang/test/PCH/cxx-exprs.cpp clang/test/PCH/cxx-friends.cpp clang/test/PCH/cxx-member-init.cpp clang/test/PCH/cxx-ms-function-specialization-class-scope.cpp clang/test/PCH/cxx-static_assert.cpp clang/test/PCH/cxx-templates.cpp clang/test/PCH/cxx-variadic-templates-with-default-params.cpp clang/test/PCH/cxx-variadic-templates.cpp clang/test/PCH/cxx0x-default-delete.cpp clang/test/PCH/cxx11-constexpr.cpp clang/test/PCH/cxx11-enum-template.cpp clang/test/PCH/cxx11-exception-spec.cpp clang/test/PCH/cxx11-inheriting-ctors.cpp clang/test/PCH/cxx11-user-defined-literals.cpp clang/test/PCH/cxx1y-decltype-auto.cpp clang/test/PCH/cxx1y-deduced-return-type.cpp clang/test/PCH/cxx1y-default-initializer.cpp clang/test/PCH/cxx1y-init-captures.cpp clang/test/PCH/cxx1y-variable-templates.cpp clang/test/PCH/cxx1z-aligned-alloc.cpp clang/test/PCH/cxx1z-decomposition.cpp clang/test/PCH/cxx1z-using-declaration.cpp clang/test/PCH/cxx2a-bitfield-init.cpp clang/test/PCH/cxx2a-concept-specialization-expr.cpp clang/test/PCH/cxx2a-constraints.cpp clang/test/PCH/cxx2a-defaulted-comparison.cpp clang/test/PCH/cxx2a-requires-expr.cpp clang/test/PCH/cxx2a-template-lambdas.cpp clang/test/PCH/delayed-pch-instantiate.cpp clang/test/PCH/friend-template.cpp clang/test/PCH/implicitly-deleted.cpp clang/test/PCH/late-parsed-instantiations.cpp clang/test/PCH/local_static.cpp clang/test/PCH/macro-undef.cpp clang/test/PCH/make-integer-seq.cpp clang/test/PCH/ms-if-exists.cpp clang/test/PCH/pch-instantiate-templates-forward-decl.cpp clang/test/PCH/pch-instantiate-templates.cpp clang/test/PCH/pr18806.cpp clang/test/PCH/pragma-diag-section.cpp clang/test/PCH/rdar10830559.cpp clang/test/PCH/specialization-after-instantiation.cpp clang/test/PCH/type_pack_element.cpp Index: clang/test/PCH/type_pack_element.cpp === --- clang/test/PCH/type_pack_element.cpp +++ clang/test/PCH/type_pack_element.cpp @@ -1,6 +1,9 @@ // RUN: %clang_cc1 -std=c++14 -x c++-header %s -emit-pch -o %t.pch // RUN: %clang_cc1 -std=c++14 -x c++ /dev/null -include-pch %t.pch +// RUN: %clang_cc1 -std=c++14 -x c++-header %s -emit-pch -fpch-instantiate-templates -o %t.pch +// RUN: %clang_cc1 -std=c++14 -x c++ /dev/null -include-pch %t.pch + template struct X { }; Index: clang/test/PCH/specialization-after-instantiation.cpp === --- /dev/null +++ clang/test/PCH/specialization-after-instantiation.cpp @@ -0,0 +1,32 @@ +// Test this without pch. +// RUN: %clang_cc1 -fsyntax-only -verify -DBODY %s + +// Test with pch. +// RUN: %clang_cc1 -emit-pch -o %t %s +// RUN: %clang_cc1 -include-pch %t -fsyntax-only -verify -DBODY %s + +// RUN: %clang_cc1 -emit-pch -fpch-instantiate-templates -o %t %s +// RUN: %clang_cc1 -include-pch %t -fsyntax-only -verify -DBODY %s + +#ifndef HEADER_H +#define HEADER_H + +template +struct A { + int foo() const; +}; + +int bar(A *a) { + return a->foo(); +} + +#endif // HEADER_H + +#ifdef BODY + +template <> +int A::foo() const { // expected-error {{explicit specialization of 'foo' after instantiation}} // expected-note@20 {{implicit instantiation first required here}} + return 10; +} + +#endif // BODY Index: clang/test/PCH/rdar10830559.cpp === --- clang/test/PCH/rdar10830559.cpp +++ clang/test/PCH/rdar10830559.cpp @@ -6,6 +6,9 @@ // RUN: %clang_cc1 -emit-pch -o %t %s // RUN: %clang_cc1 -include-pch %t -emit-llvm-only %t.empty.cpp +// RUN: %clang_cc1 -emit-pch -fpch-instantiate-templates -o %t %s +// RUN: %clang_cc1 -include-pch %t -emit-llvm-only %t.empty.cpp + // rdar://10830559 //#pragma ms_struct on Index: clang/test/PCH/pragma-diag-section.cpp === --- clang/test/PCH/pragma-diag-section.cpp +++ clang/test/PCH/pragma-diag-section.cpp @@ -5,6 +5,9 @@ // RUN: %clang_cc1 %s -emit-pch -o %t // RUN: %clang_cc1 %s -include-pch %t -verify -fsyntax-only -Wuninitialized +// RUN: %clang_cc1 %s -emit-pch -fpch-instantiate-templates -o %t +// RUN: %clang_cc
[PATCH] D69585: Add option to instantiate templates already in the PCH
llunak marked an inline comment as done. llunak added inline comments. Comment at: clang/lib/Driver/ToolChains/Clang.cpp:5610 + if (Args.hasFlag(options::OPT_fpch_instantiate_templates, + options::OPT_fno_pch_instantiate_templates, false)) +CmdArgs.push_back("-fpch-instantiate-templates"); rnk wrote: > llunak wrote: > > rnk wrote: > > > Does MSVC default to this behavior? Should this default to true with > > > clang-cl /Yu / /Yc? This can be future work and does not need to be part > > > of this patch. > > Since MSVC is noticeably faster for an equivalent PCH compile than current > > Clang, presumably it instantiates templates already in the PCH. But that > > doesn't really matter for this patch, if it were ok to enable this by > > default for clang-cl, than it would be ok also for clang itself. That > > cannot be done now though, https://reviews.llvm.org/D69585#1946765 points > > out a corner case where this change makes a valid compilation error out, > > and that's the reason for having this behind a flag. I expect Clang could > > possibly be adjusted to bail out and delay template instantiantion in such > > a case until it can be performed successfully, but given the response rate > > to my PCH patches I first wanted to get the feature in somehow, and I can > > try to make the flag default/irrelevant later. > > > Right, I guess what I mean is, for that example where instantiation at the > end of the PCH creates an error, does MSVC emit an error? I just checked, and > it looks like the answer is yes, so it seems like we could make this the > default behavior for `clang-cl /Yc` without much further discussion. That's a good point. Yes, since MSVC creates PCHs by basically compiling an empty .cpp, it apparently does instantiate templates as a side-effect of that, and https://reviews.llvm.org/D69585#1946765 indeed doesn't work with MSVC. So no harm in enabling the option for clang-cl. I'll update the patch. Repository: rC Clang CHANGES SINCE LAST ACTION https://reviews.llvm.org/D69585/new/ https://reviews.llvm.org/D69585 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D69585: Add option to instantiate templates already in the PCH
rnk added inline comments. Comment at: clang/lib/Driver/ToolChains/Clang.cpp:5610 + if (Args.hasFlag(options::OPT_fpch_instantiate_templates, + options::OPT_fno_pch_instantiate_templates, false)) +CmdArgs.push_back("-fpch-instantiate-templates"); llunak wrote: > rnk wrote: > > Does MSVC default to this behavior? Should this default to true with > > clang-cl /Yu / /Yc? This can be future work and does not need to be part of > > this patch. > Since MSVC is noticeably faster for an equivalent PCH compile than current > Clang, presumably it instantiates templates already in the PCH. But that > doesn't really matter for this patch, if it were ok to enable this by default > for clang-cl, than it would be ok also for clang itself. That cannot be done > now though, https://reviews.llvm.org/D69585#1946765 points out a corner case > where this change makes a valid compilation error out, and that's the reason > for having this behind a flag. I expect Clang could possibly be adjusted to > bail out and delay template instantiantion in such a case until it can be > performed successfully, but given the response rate to my PCH patches I first > wanted to get the feature in somehow, and I can try to make the flag > default/irrelevant later. > Right, I guess what I mean is, for that example where instantiation at the end of the PCH creates an error, does MSVC emit an error? I just checked, and it looks like the answer is yes, so it seems like we could make this the default behavior for `clang-cl /Yc` without much further discussion. Repository: rC Clang CHANGES SINCE LAST ACTION https://reviews.llvm.org/D69585/new/ https://reviews.llvm.org/D69585 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D69585: Add option to instantiate templates already in the PCH
llunak marked an inline comment as done. llunak added inline comments. Comment at: clang/lib/Driver/ToolChains/Clang.cpp:5610 + if (Args.hasFlag(options::OPT_fpch_instantiate_templates, + options::OPT_fno_pch_instantiate_templates, false)) +CmdArgs.push_back("-fpch-instantiate-templates"); rnk wrote: > Does MSVC default to this behavior? Should this default to true with clang-cl > /Yu / /Yc? This can be future work and does not need to be part of this patch. Since MSVC is noticeably faster for an equivalent PCH compile than current Clang, presumably it instantiates templates already in the PCH. But that doesn't really matter for this patch, if it were ok to enable this by default for clang-cl, than it would be ok also for clang itself. That cannot be done now though, https://reviews.llvm.org/D69585#1946765 points out a corner case where this change makes a valid compilation error out, and that's the reason for having this behind a flag. I expect Clang could possibly be adjusted to bail out and delay template instantiantion in such a case until it can be performed successfully, but given the response rate to my PCH patches I first wanted to get the feature in somehow, and I can try to make the flag default/irrelevant later. Repository: rC Clang CHANGES SINCE LAST ACTION https://reviews.llvm.org/D69585/new/ https://reviews.llvm.org/D69585 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D69585: Add option to instantiate templates already in the PCH
rnk accepted this revision. rnk added a comment. This revision is now accepted and ready to land. lgtm IMO there is a pretty clear performance use case for this mode of operation, and it seems to me that you have addressed @rsmith's feedback. Please wait a few days to see if he has more to add, but otherwise, feel free to land this after Friday. Comment at: clang/lib/Driver/ToolChains/Clang.cpp:5610 + if (Args.hasFlag(options::OPT_fpch_instantiate_templates, + options::OPT_fno_pch_instantiate_templates, false)) +CmdArgs.push_back("-fpch-instantiate-templates"); Does MSVC default to this behavior? Should this default to true with clang-cl /Yu / /Yc? This can be future work and does not need to be part of this patch. Comment at: clang/test/PCH/crash-12631281.cpp:4 + +// RUN: %clang_cc1 -std=c++11 %s -emit-pch -fpch-instantiate-templates -o %t.pch +// RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -include-pch %t.pch -verify I wish we had a better solution for parameterizing tests like this, but thank you for making sure this new mode is covered by the existing tests. It looks like you found some interesting issues. Repository: rC Clang CHANGES SINCE LAST ACTION https://reviews.llvm.org/D69585/new/ https://reviews.llvm.org/D69585 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D69585: Add option to instantiate templates already in the PCH
llunak added a comment. Ping. Repository: rC Clang CHANGES SINCE LAST ACTION https://reviews.llvm.org/D69585/new/ https://reviews.llvm.org/D69585 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D69585: Add option to instantiate templates already in the PCH
llunak added a comment. Ping. Repository: rC Clang CHANGES SINCE LAST ACTION https://reviews.llvm.org/D69585/new/ https://reviews.llvm.org/D69585 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D69585: Add option to instantiate templates already in the PCH
llunak updated this revision to Diff 258605. llunak retitled this revision from "PerformPendingInstatiations() already in the PCH" to "Add option to instantiate templates already in the PCH". llunak edited the summary of this revision. llunak added a comment. Changed to use -fpch-instantiate-templates to control the feature. Repository: rC Clang CHANGES SINCE LAST ACTION https://reviews.llvm.org/D69585/new/ https://reviews.llvm.org/D69585 Files: clang/include/clang/Basic/LangOptions.def clang/include/clang/Driver/Options.td clang/include/clang/Sema/Sema.h clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Frontend/CompilerInvocation.cpp clang/lib/Sema/Sema.cpp clang/lib/Sema/SemaTemplateInstantiateDecl.cpp clang/test/PCH/codegen.cpp clang/test/PCH/crash-12631281.cpp clang/test/PCH/cxx-alias-decl.cpp clang/test/PCH/cxx-dependent-sized-ext-vector.cpp clang/test/PCH/cxx-explicit-specifier.cpp clang/test/PCH/cxx-exprs.cpp clang/test/PCH/cxx-friends.cpp clang/test/PCH/cxx-member-init.cpp clang/test/PCH/cxx-ms-function-specialization-class-scope.cpp clang/test/PCH/cxx-static_assert.cpp clang/test/PCH/cxx-templates.cpp clang/test/PCH/cxx-variadic-templates-with-default-params.cpp clang/test/PCH/cxx-variadic-templates.cpp clang/test/PCH/cxx0x-default-delete.cpp clang/test/PCH/cxx11-constexpr.cpp clang/test/PCH/cxx11-enum-template.cpp clang/test/PCH/cxx11-exception-spec.cpp clang/test/PCH/cxx11-inheriting-ctors.cpp clang/test/PCH/cxx11-user-defined-literals.cpp clang/test/PCH/cxx1y-decltype-auto.cpp clang/test/PCH/cxx1y-deduced-return-type.cpp clang/test/PCH/cxx1y-default-initializer.cpp clang/test/PCH/cxx1y-init-captures.cpp clang/test/PCH/cxx1y-variable-templates.cpp clang/test/PCH/cxx1z-aligned-alloc.cpp clang/test/PCH/cxx1z-decomposition.cpp clang/test/PCH/cxx1z-using-declaration.cpp clang/test/PCH/cxx2a-bitfield-init.cpp clang/test/PCH/cxx2a-concept-specialization-expr.cpp clang/test/PCH/cxx2a-constraints.cpp clang/test/PCH/cxx2a-defaulted-comparison.cpp clang/test/PCH/cxx2a-requires-expr.cpp clang/test/PCH/cxx2a-template-lambdas.cpp clang/test/PCH/delayed-pch-instantiate.cpp clang/test/PCH/friend-template.cpp clang/test/PCH/implicitly-deleted.cpp clang/test/PCH/late-parsed-instantiations.cpp clang/test/PCH/local_static.cpp clang/test/PCH/macro-undef.cpp clang/test/PCH/make-integer-seq.cpp clang/test/PCH/ms-if-exists.cpp clang/test/PCH/pch-instantiate-templates-forward-decl.cpp clang/test/PCH/pch-instantiate-templates.cpp clang/test/PCH/pr18806.cpp clang/test/PCH/pragma-diag-section.cpp clang/test/PCH/rdar10830559.cpp clang/test/PCH/specialization-after-instantiation.cpp clang/test/PCH/type_pack_element.cpp Index: clang/test/PCH/type_pack_element.cpp === --- clang/test/PCH/type_pack_element.cpp +++ clang/test/PCH/type_pack_element.cpp @@ -1,6 +1,9 @@ // RUN: %clang_cc1 -std=c++14 -x c++-header %s -emit-pch -o %t.pch // RUN: %clang_cc1 -std=c++14 -x c++ /dev/null -include-pch %t.pch +// RUN: %clang_cc1 -std=c++14 -x c++-header %s -emit-pch -fpch-instantiate-templates -o %t.pch +// RUN: %clang_cc1 -std=c++14 -x c++ /dev/null -include-pch %t.pch + template struct X { }; Index: clang/test/PCH/specialization-after-instantiation.cpp === --- /dev/null +++ clang/test/PCH/specialization-after-instantiation.cpp @@ -0,0 +1,32 @@ +// Test this without pch. +// RUN: %clang_cc1 -fsyntax-only -verify -DBODY %s + +// Test with pch. +// RUN: %clang_cc1 -emit-pch -o %t %s +// RUN: %clang_cc1 -include-pch %t -fsyntax-only -verify -DBODY %s + +// RUN: %clang_cc1 -emit-pch -fpch-instantiate-templates -o %t %s +// RUN: %clang_cc1 -include-pch %t -fsyntax-only -verify -DBODY %s + +#ifndef HEADER_H +#define HEADER_H + +template +struct A { + int foo() const; +}; + +int bar(A *a) { + return a->foo(); +} + +#endif // HEADER_H + +#ifdef BODY + +template <> +int A::foo() const { // expected-error {{explicit specialization of 'foo' after instantiation}} // expected-note@20 {{implicit instantiation first required here}} + return 10; +} + +#endif // BODY Index: clang/test/PCH/rdar10830559.cpp === --- clang/test/PCH/rdar10830559.cpp +++ clang/test/PCH/rdar10830559.cpp @@ -6,6 +6,9 @@ // RUN: %clang_cc1 -emit-pch -o %t %s // RUN: %clang_cc1 -include-pch %t -emit-llvm-only %t.empty.cpp +// RUN: %clang_cc1 -emit-pch -fpch-instantiate-templates -o %t %s +// RUN: %clang_cc1 -include-pch %t -emit-llvm-only %t.empty.cpp + // rdar://10830559 //#pragma ms_struct on Index: clang/test/PCH/pragma-diag-section.cpp === --- clang/test/PCH/pragma-diag-section.cpp +++ clang/test/PCH/pragma-diag-section.cpp @@ -5,6 +5,9 @@ // RUN: %clang_cc1 %s -emit-pch -o %t // RUN