[PATCH] Fix for Bug 19480 -- Adding a test case.

Larisse Voufo lvoufo at google.com
Thu Jul 3 11:52:18 PDT 2014


On Thu, Jul 3, 2014 at 11:21 AM, Eric Christopher <echristo at gmail.com>
wrote:

> On Thu, Jul 3, 2014 at 11:08 AM, Larisse Voufo <lvoufo at gmail.com> wrote:
> > I pushed the previous patch in since it is a simple extension of
> existing template implementation logic for variable templates, which
> continues a trend that we started last summer.
> >
>
> I'm talking less about the particular pass, but the development
> process. Once a patch is out for review you need to wait for approval
> to commit. Do feel free to commit what you consider to be an obvious
> patch in the future, however...
>
> Ok. Noted.


> > Now, I am adding a test case.
>
> Please make sure to add a test case in the future when you commit.
>

Certainly.

>
> -eric
>
> > I am not very experienced in writing linkage-level test cases yet. So, I
> could use additional pairs of eyes. Could someone please take a quick look
> and let me know if it's okay to go asap?
> >
> > http://reviews.llvm.org/D4362
> >
> > Files:
> >   test/CodeGenCXX/cxx1y-variable-template-linkage.cpp
> >
> > Index: test/CodeGenCXX/cxx1y-variable-template-linkage.cpp
> > ===================================================================
> > --- /dev/null
> > +++ test/CodeGenCXX/cxx1y-variable-template-linkage.cpp
> > @@ -0,0 +1,57 @@
> > +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm
> -std=c++1y -O1 -disable-llvm-optzns %s -o - -DFILEA | FileCheck %s
> -check-prefix=CHECKA
> > +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm
> -std=c++1y -O1 -disable-llvm-optzns -fcxx-exceptions %s -o - -DFILEB |
> FileCheck %s -check-prefix=CHECKB
> > +// expected-no-diagnostics
> > +
> > +// The variable template specialization x<Foo> generated in each file
> > +// should be 'internal global' and not 'linkonce_odr global'.
> > +
> > +// File A
> > +#ifdef FILEA
> > +
> > +template <typename T> int x = 42;
> > +
> > +// CHECKA-DAG: @_Z1xIZL3foovE3FooE = internal global
> > +
> > +// CHECKA-DAG: define internal nonnull i32* @_ZL3foov(
> > +static int &foo() {
> > +   struct Foo { };
> > +
> > +   // CHECKA-DAG: ret i32* @_Z1xIZL3foovE3FooE
> > +   return x<Foo>;
> > +}
> > +
> > +// CHECKA-DAG: define nonnull i32* @_Z3barv(
> > +int &bar() {
> > +       // CHECKA-DAG: %call = call nonnull i32* @_ZL3foov()
> > +       return foo();
> > +}
> > +
> > +#endif // end of FILE A
> > +
> > +
> > +// File B
> > +#ifdef FILEB
> > +
> > +template <typename T> int x = 42;
> > +
> > +// CHECKB-DAG: @_Z1xIZL3foovE3FooE = internal global
> > +
> > +// CHECKB-DAG: define internal nonnull i32* @_ZL3foov(
> > +static int &foo() {
> > +   struct Foo { };
> > +
> > +   // CHECKB-DAG: ret i32* @_Z1xIZL3foovE3FooE
> > +   return x<Foo>;
> > +}
> > +
> > +// CHECKB-DAG: declare nonnull i32* @_Z3barv(
> > +int &bar();
> > +
> > +int main() {
> > +       // CHECKB-DAG: %call = call nonnull i32* @_Z3barv()
> > +       // CHECKB-DAG: %call1 = call nonnull i32* @_ZL3foov()
> > +       &bar() == &foo() ? throw 0 : (void)0; // Should not throw
> exception at runtime.
> > +}
> > +
> > +#endif // end of FILE B
> > +
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140703/b905e283/attachment.html>


More information about the cfe-commits mailing list