[llvm-branch-commits] [cfe-branch] r195901 - Merging r195887:

Bill Wendling isanbard at gmail.com
Sat Nov 30 18:14:03 PST 2013


I went ahead and added it. Thanks!

-bw

On Nov 29, 2013, at 7:16 PM, NAKAMURA Takumi <geek4civic at gmail.com> wrote:

> Bill, it requires a fixup r195897 in trunk. May I merge r195897 into release_34?
> (or, please do it yourself if you can)
> 
> http://bb.pgr.jp/builders/cmake-clang-x86_64-linux/builds/17378/steps/test_clang/logs/Clang%20%3A%3A%20SemaTemplate__instantiate-local-class.cpp
> 
> error: 'warning' diagnostics seen but not expected:
>  File /home/bb/cmake-clang-x86_64-linux/llvm-project/clang/test/SemaTemplate/instantiate-local-class.cpp
> Line 181: control reaches end of non-void function
> 1 error generated.
> 
> 2013/11/28 Bill Wendling <isanbard at gmail.com>:
>> Author: void
>> Date: Wed Nov 27 18:34:28 2013
>> New Revision: 195901
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=195901&view=rev
>> Log:
>> Merging r195887:
>> ------------------------------------------------------------------------
>> r195887 | majnemer | 2013-11-27 14:57:44 -0800 (Wed, 27 Nov 2013) | 9 lines
>> 
>> Sema: Instantiation of variable definitions weren't local enough
>> 
>> We wouldn't properly save and restore the pending local instantiations
>> we had built up prior to instantiation of a variable definition.  This
>> would lead to us instantiating too much causing crashes and other
>> general badness.
>> 
>> This fixes PR14374.
>> 
>> ------------------------------------------------------------------------
>> 
>> Modified:
>>    cfe/branches/release_34/   (props changed)
>>    cfe/branches/release_34/include/clang/Sema/Sema.h
>>    cfe/branches/release_34/lib/Sema/SemaTemplateInstantiateDecl.cpp
>>    cfe/branches/release_34/test/SemaTemplate/instantiate-local-class.cpp
>> 
>> Propchange: cfe/branches/release_34/
>> ------------------------------------------------------------------------------
>> --- svn:mergeinfo (original)
>> +++ svn:mergeinfo Wed Nov 27 18:34:28 2013
>> @@ -1,4 +1,4 @@
>> /cfe/branches/type-system-rewrite:134693-134817
>> -/cfe/trunk:195126,195128,195135-195136,195146,195149,195154,195158,195163,195168,195174,195268,195283,195303,195326,195329,195367,195384,195409,195420,195422,195501,195547,195556,195558,195587,195620,195669,195687,195693,195710,195716,195760,195768,195827,195888
>> +/cfe/trunk:195126,195128,195135-195136,195146,195149,195154,195158,195163,195168,195174,195268,195283,195303,195326,195329,195367,195384,195409,195420,195422,195501,195547,195556,195558,195587,195620,195669,195687,195693,195710,195716,195760,195768,195827,195887-195888
>> /cfe/trunk/test:170344
>> /cfe/trunk/test/SemaTemplate:126920
>> 
>> Modified: cfe/branches/release_34/include/clang/Sema/Sema.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_34/include/clang/Sema/Sema.h?rev=195901&r1=195900&r2=195901&view=diff
>> ==============================================================================
>> --- cfe/branches/release_34/include/clang/Sema/Sema.h (original)
>> +++ cfe/branches/release_34/include/clang/Sema/Sema.h Wed Nov 27 18:34:28 2013
>> @@ -6406,6 +6406,24 @@ public:
>>   /// types, static variables, enumerators, etc.
>>   std::deque<PendingImplicitInstantiation> PendingLocalImplicitInstantiations;
>> 
>> +  class SavePendingLocalImplicitInstantiationsRAII {
>> +  public:
>> +    SavePendingLocalImplicitInstantiationsRAII(Sema &S): S(S) {
>> +      SavedPendingLocalImplicitInstantiations.swap(
>> +          S.PendingLocalImplicitInstantiations);
>> +    }
>> +
>> +    ~SavePendingLocalImplicitInstantiationsRAII() {
>> +      SavedPendingLocalImplicitInstantiations.swap(
>> +          S.PendingLocalImplicitInstantiations);
>> +    }
>> +
>> +  private:
>> +    Sema &S;
>> +    std::deque<PendingImplicitInstantiation>
>> +    SavedPendingLocalImplicitInstantiations;
>> +  };
>> +
>>   void PerformPendingInstantiations(bool LocalOnly = false);
>> 
>>   TypeSourceInfo *SubstType(TypeSourceInfo *T,
>> 
>> Modified: cfe/branches/release_34/lib/Sema/SemaTemplateInstantiateDecl.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_34/lib/Sema/SemaTemplateInstantiateDecl.cpp?rev=195901&r1=195900&r2=195901&view=diff
>> ==============================================================================
>> --- cfe/branches/release_34/lib/Sema/SemaTemplateInstantiateDecl.cpp (original)
>> +++ cfe/branches/release_34/lib/Sema/SemaTemplateInstantiateDecl.cpp Wed Nov 27 18:34:28 2013
>> @@ -3224,10 +3224,8 @@ void Sema::InstantiateFunctionDefinition
>>   // while we're still within our own instantiation context.
>>   SmallVector<VTableUse, 16> SavedVTableUses;
>>   std::deque<PendingImplicitInstantiation> SavedPendingInstantiations;
>> -  std::deque<PendingImplicitInstantiation>
>> -                              SavedPendingLocalImplicitInstantiations;
>> -  SavedPendingLocalImplicitInstantiations.swap(
>> -                                  PendingLocalImplicitInstantiations);
>> +  SavePendingLocalImplicitInstantiationsRAII
>> +      SavedPendingLocalImplicitInstantiations(*this);
>>   if (Recursive) {
>>     VTableUses.swap(SavedVTableUses);
>>     PendingInstantiations.swap(SavedPendingInstantiations);
>> @@ -3308,8 +3306,6 @@ void Sema::InstantiateFunctionDefinition
>>            "PendingInstantiations should be empty before it is discarded.");
>>     PendingInstantiations.swap(SavedPendingInstantiations);
>>   }
>> -  SavedPendingLocalImplicitInstantiations.swap(
>> -                            PendingLocalImplicitInstantiations);
>> }
>> 
>> VarTemplateSpecializationDecl *Sema::BuildVarTemplateInstantiation(
>> @@ -3727,6 +3723,8 @@ void Sema::InstantiateVariableDefinition
>>   // while we're still within our own instantiation context.
>>   SmallVector<VTableUse, 16> SavedVTableUses;
>>   std::deque<PendingImplicitInstantiation> SavedPendingInstantiations;
>> +  SavePendingLocalImplicitInstantiationsRAII
>> +      SavedPendingLocalImplicitInstantiations(*this);
>>   if (Recursive) {
>>     VTableUses.swap(SavedVTableUses);
>>     PendingInstantiations.swap(SavedPendingInstantiations);
>> 
>> Modified: cfe/branches/release_34/test/SemaTemplate/instantiate-local-class.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_34/test/SemaTemplate/instantiate-local-class.cpp?rev=195901&r1=195900&r2=195901&view=diff
>> ==============================================================================
>> --- cfe/branches/release_34/test/SemaTemplate/instantiate-local-class.cpp (original)
>> +++ cfe/branches/release_34/test/SemaTemplate/instantiate-local-class.cpp Wed Nov 27 18:34:28 2013
>> @@ -160,3 +160,23 @@ void call() {
>>   C::func([]() {});
>> }
>> }
>> +
>> +namespace PR14373 {
>> +  struct function {
>> +    template <typename _Functor> function(_Functor __f) { __f(); }
>> +  };
>> +  template <typename Func> function exec_func(Func f) {
>> +    struct functor {
>> +      functor(Func f) : func(f) {}
>> +      void operator()() const { func(); }
>> +      Func func;
>> +    };
>> +    return functor(f);
>> +  }
>> +  struct Type {
>> +    void operator()() const {}
>> +  };
>> +  int call() {
>> +    exec_func(Type());
>> +  }
>> +}
>> 
>> 
>> _______________________________________________
>> llvm-branch-commits mailing list
>> llvm-branch-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-branch-commits





More information about the llvm-branch-commits mailing list