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
