Seemed to work, reinstated in r230448. On Tue, Feb 24, 2015 at 6:19 PM, Reid Kleckner <[email protected]> wrote:
> It should pass after r230445 and r230446, I will try to reland it. > > On Tue, Feb 24, 2015 at 4:22 PM, NAKAMURA Takumi <[email protected]> > wrote: > >> Reverted in r230406.Manuel, could you reconfirm with targeting >> (i686|x86_64)-win32? >> >> 2015-02-25 9:03 GMT+09:00 Filipe Cabecinhas <[email protected]>: >> > It broke our bots and Takumi's too. >> > >> http://bb.pgr.jp/builders/ninja-clang-i686-msc18-R/builds/139/steps/test-clang/logs/stdio >> > Our bot's log: http://reviews.llvm.org/P96 (<- MSVC 2013 Update 4 + >> cmake >> > 3.1.3 + ninja 1.5.3) >> > >> > >> > F >> > >> > On Tue, Feb 24, 2015 at 1:30 PM, Reid Kleckner <[email protected]> wrote: >> >> >> >> This fails locally for me inside the Microsoft vftable builder: >> >> Assertion failed: OverridersMap.count(std::make_pair(MD, BaseOffset)) >> && >> >> "Did not find overrider!", file >> ..\tools\clang\lib\AST\VTableBuilder.cpp, >> >> line 142 >> >> >> >> We probably need to do the same change to the other vtable builder. >> >> >> >> On Tue, Feb 24, 2015 at 1:06 AM, Manuel Klimek <[email protected]> >> wrote: >> >>> >> >>> Author: klimek >> >>> Date: Tue Feb 24 03:06:28 2015 >> >>> New Revision: 230314 >> >>> >> >>> URL: http://llvm.org/viewvc/llvm-project?rev=230314&view=rev >> >>> Log: >> >>> Fix codegen for virtual methods that are (re-) exported from multiple >> >>> modules. >> >>> >> >>> Fixes multiple crashes where a non-canonical decl would be used as key >> >>> in a lookup. >> >>> >> >>> Added: >> >>> cfe/trunk/test/Modules/Inputs/merge-vtable-codegen/ >> >>> cfe/trunk/test/Modules/Inputs/merge-vtable-codegen/a.h >> >>> cfe/trunk/test/Modules/Inputs/merge-vtable-codegen/b.h >> >>> cfe/trunk/test/Modules/Inputs/merge-vtable-codegen/c.h >> >>> >> >>> >> cfe/trunk/test/Modules/Inputs/merge-vtable-codegen/merge-vtable-codegen.modulemap >> >>> cfe/trunk/test/Modules/merge-vtable-codegen.cpp >> >>> Modified: >> >>> cfe/trunk/lib/AST/VTableBuilder.cpp >> >>> >> >>> Modified: cfe/trunk/lib/AST/VTableBuilder.cpp >> >>> URL: >> >>> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/VTableBuilder.cpp?rev=230314&r1=230313&r2=230314&view=diff >> >>> >> >>> >> ============================================================================== >> >>> --- cfe/trunk/lib/AST/VTableBuilder.cpp (original) >> >>> +++ cfe/trunk/lib/AST/VTableBuilder.cpp Tue Feb 24 03:06:28 2015 >> >>> @@ -411,7 +411,8 @@ void FinalOverriders::dump(raw_ostream & >> >>> for (const auto *MD : RD->methods()) { >> >>> if (!MD->isVirtual()) >> >>> continue; >> >>> - >> >>> + MD = MD->getCanonicalDecl(); >> >>> + >> >>> OverriderInfo Overrider = getOverrider(MD, Base.getBaseOffset()); >> >>> >> >>> Out << " "; >> >>> @@ -695,6 +696,7 @@ void VCallAndVBaseOffsetBuilder::AddVCal >> >>> for (const auto *MD : RD->methods()) { >> >>> if (!MD->isVirtual()) >> >>> continue; >> >>> + MD = MD->getCanonicalDecl(); >> >>> >> >>> CharUnits OffsetOffset = getCurrentOffsetOffset(); >> >>> >> >>> @@ -1514,6 +1516,7 @@ void ItaniumVTableBuilder::AddMethods( >> >>> for (const auto *MD : RD->methods()) { >> >>> if (!MD->isVirtual()) >> >>> continue; >> >>> + MD = MD->getCanonicalDecl(); >> >>> >> >>> // Get the final overrider. >> >>> FinalOverriders::OverriderInfo Overrider = >> >>> @@ -2196,6 +2199,7 @@ void ItaniumVTableBuilder::dumpLayout(ra >> >>> // We only want virtual member functions. >> >>> if (!MD->isVirtual()) >> >>> continue; >> >>> + MD = MD->getCanonicalDecl(); >> >>> >> >>> std::string MethodName = >> >>> >> >>> PredefinedExpr::ComputeName(PredefinedExpr::PrettyFunctionNoVirtual, >> >>> >> >>> Added: cfe/trunk/test/Modules/Inputs/merge-vtable-codegen/a.h >> >>> URL: >> >>> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/merge-vtable-codegen/a.h?rev=230314&view=auto >> >>> >> >>> >> ============================================================================== >> >>> --- cfe/trunk/test/Modules/Inputs/merge-vtable-codegen/a.h (added) >> >>> +++ cfe/trunk/test/Modules/Inputs/merge-vtable-codegen/a.h Tue Feb 24 >> >>> 03:06:28 2015 >> >>> @@ -0,0 +1,8 @@ >> >>> +#ifndef A_H >> >>> +#define A_H >> >>> + >> >>> +struct A { >> >>> + virtual void x(); >> >>> +}; >> >>> + >> >>> +#endif >> >>> >> >>> Added: cfe/trunk/test/Modules/Inputs/merge-vtable-codegen/b.h >> >>> URL: >> >>> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/merge-vtable-codegen/b.h?rev=230314&view=auto >> >>> >> >>> >> ============================================================================== >> >>> --- cfe/trunk/test/Modules/Inputs/merge-vtable-codegen/b.h (added) >> >>> +++ cfe/trunk/test/Modules/Inputs/merge-vtable-codegen/b.h Tue Feb 24 >> >>> 03:06:28 2015 >> >>> @@ -0,0 +1,17 @@ >> >>> +#ifndef B_H >> >>> +#define B_H >> >>> + >> >>> +#include "a.h" >> >>> + >> >>> +class B : virtual public A { >> >>> + virtual void x() {} >> >>> +}; >> >>> + >> >>> +void b(A* p) { >> >>> + p->x(); >> >>> + // Instantiating a class that virtually inherits 'A' >> >>> + // triggers calculation of the vtable offsets in 'A'. >> >>> + B b; >> >>> +} >> >>> + >> >>> +#endif >> >>> >> >>> Added: cfe/trunk/test/Modules/Inputs/merge-vtable-codegen/c.h >> >>> URL: >> >>> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/merge-vtable-codegen/c.h?rev=230314&view=auto >> >>> >> >>> >> ============================================================================== >> >>> --- cfe/trunk/test/Modules/Inputs/merge-vtable-codegen/c.h (added) >> >>> +++ cfe/trunk/test/Modules/Inputs/merge-vtable-codegen/c.h Tue Feb 24 >> >>> 03:06:28 2015 >> >>> @@ -0,0 +1,6 @@ >> >>> +#ifndef C_H >> >>> +#define C_H >> >>> + >> >>> +#include "a.h" >> >>> + >> >>> +#endif >> >>> >> >>> Added: >> >>> >> cfe/trunk/test/Modules/Inputs/merge-vtable-codegen/merge-vtable-codegen.modulemap >> >>> URL: >> >>> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/merge-vtable-codegen/merge-vtable-codegen.modulemap?rev=230314&view=auto >> >>> >> >>> >> ============================================================================== >> >>> --- >> >>> >> cfe/trunk/test/Modules/Inputs/merge-vtable-codegen/merge-vtable-codegen.modulemap >> >>> (added) >> >>> +++ >> >>> >> cfe/trunk/test/Modules/Inputs/merge-vtable-codegen/merge-vtable-codegen.modulemap >> >>> Tue Feb 24 03:06:28 2015 >> >>> @@ -0,0 +1,11 @@ >> >>> +module "a" { >> >>> + textual header "a.h" >> >>> +} >> >>> + >> >>> +module "b" { >> >>> + header "b.h" >> >>> +} >> >>> + >> >>> +module "c" { >> >>> + header "c.h" >> >>> +} >> >>> >> >>> Added: cfe/trunk/test/Modules/merge-vtable-codegen.cpp >> >>> URL: >> >>> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/merge-vtable-codegen.cpp?rev=230314&view=auto >> >>> >> >>> >> ============================================================================== >> >>> --- cfe/trunk/test/Modules/merge-vtable-codegen.cpp (added) >> >>> +++ cfe/trunk/test/Modules/merge-vtable-codegen.cpp Tue Feb 24 >> 03:06:28 >> >>> 2015 >> >>> @@ -0,0 +1,24 @@ >> >>> +// RUN: rm -rf %t >> >>> + >> >>> +// First, build two modules that both re-export the same header. >> >>> +// RUN: %clang_cc1 -x c++ -std=c++11 -fmodules -fmodule-name=b -o >> >>> %t/b.pcm -fmodule-maps \ >> >>> +// RUN: -emit-module >> >>> %S/Inputs/merge-vtable-codegen/merge-vtable-codegen.modulemap \ >> >>> +// RUN: -I %S/Inputs/merge-vtable-codegen >> >>> +// RUN: %clang_cc1 -x c++ -std=c++11 -fmodules -fmodule-name=c -o >> >>> %t/c.pcm -fmodule-maps \ >> >>> +// RUN: -emit-module >> >>> %S/Inputs/merge-vtable-codegen/merge-vtable-codegen.modulemap \ >> >>> +// RUN: -I %S/Inputs/merge-vtable-codegen >> >>> + >> >>> +// Use the two modules in a single compile. >> >>> +// RUN: %clang_cc1 -x c++ -std=c++11 -fmodules -fmodule-file=%t/b.pcm >> >>> -fmodule-file=%t/c.pcm \ >> >>> +// RUN: >> >>> >> -fmodule-map-file=%S/Inputs/merge-vtable-codegen/merge-vtable-codegen.modulemap >> >>> \ >> >>> +// RUN: -emit-llvm -o %t/test.o %s >> >>> + >> >>> +// Note that order is important: >> >>> +// Module 'c' just reexports A, while module 'b' defines a method >> that >> >>> uses a >> >>> +// virtual method of A. >> >>> +#include "Inputs/merge-vtable-codegen/c.h" >> >>> +#include "Inputs/merge-vtable-codegen/b.h" >> >>> + >> >>> +void t() { >> >>> + b(nullptr); >> >>> +} >> >>> >> >>> >> >>> _______________________________________________ >> >>> cfe-commits mailing list >> >>> [email protected] >> >>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> >> >> >> >> >> >> >> _______________________________________________ >> >> cfe-commits mailing list >> >> [email protected] >> >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> >> >> > >> > >> > _______________________________________________ >> > cfe-commits mailing list >> > [email protected] >> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> > >> > >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
