From eecc09a99c34526ab5afb8e8d870bd8870425feb Mon Sep 17 00:00:00 2001 From: Eli Friedman Date: Fri, 5 Jul 2013 20:27:40 +0000 Subject: Don't use mangleCXXRTTIName in TBAA for C code. This changes the TBAA code so it doesn't use mangleCXXRTTIName in C, because it doesn't really make sense there. Also, as sort of a defense-in-depth change, fix the mangler so it handles C RecordDecls correctly. No tests because I don't know the TBAA code well enough to write a test, and I don't know how else to trigger mangling a local struct in C. Fixes a crash with r185450 reported by Joerg Sonnenberger. llvm-svn: 185721 --- clang/lib/CodeGen/CodeGenTBAA.cpp | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) (limited to 'clang/lib/CodeGen/CodeGenTBAA.cpp') diff --git a/clang/lib/CodeGen/CodeGenTBAA.cpp b/clang/lib/CodeGen/CodeGenTBAA.cpp index f299481ffe3..0a8c293cb70 100644 --- a/clang/lib/CodeGen/CodeGenTBAA.cpp +++ b/clang/lib/CodeGen/CodeGenTBAA.cpp @@ -150,19 +150,11 @@ CodeGenTBAA::getTBAAInfo(QualType QTy) { // Enum types are distinct types. In C++ they have "underlying types", // however they aren't related for TBAA. if (const EnumType *ETy = dyn_cast(Ty)) { - // In C mode, two anonymous enums are compatible iff their members - // are the same -- see C99 6.2.7p1. For now, be conservative. We could - // theoretically implement this by combining information about all the - // members into a single identifying MDNode. - if (!Features.CPlusPlus && - ETy->getDecl()->getTypedefNameForAnonDecl()) - return MetadataCache[Ty] = getChar(); - // In C++ mode, types have linkage, so we can rely on the ODR and // on their mangled names, if they're external. // TODO: Is there a way to get a program-wide unique name for a // decl with local linkage or no linkage? - if (Features.CPlusPlus && !ETy->getDecl()->isExternallyVisible()) + if (!Features.CPlusPlus || !ETy->getDecl()->isExternallyVisible()) return MetadataCache[Ty] = getChar(); // TODO: This is using the RTTI name. Is there a better way to get -- cgit v1.2.3