From: Nico Weber Date: Tue, 19 Jun 2012 23:58:27 +0000 (+0000) Subject: Do a second lookup for type_info in the global namespace in microsoft mode. PR13153. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ed36b2a80878c29603bdc89a7969253fb6446174;p=clang Do a second lookup for type_info in the global namespace in microsoft mode. PR13153. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@158768 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index 95dcbe9ad8..a053c2aed6 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -374,6 +374,12 @@ Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc, LookupResult R(*this, TypeInfoII, SourceLocation(), LookupTagName); LookupQualifiedName(R, getStdNamespace()); CXXTypeInfoDecl = R.getAsSingle(); + // Microsoft's typeinfo doesn't have type_info in std but in the global + // namespace if _HAS_EXCEPTIONS is defined to 0. See PR13153. + if (!CXXTypeInfoDecl && LangOpts.MicrosoftMode) { + LookupQualifiedName(R, Context.getTranslationUnitDecl()); + CXXTypeInfoDecl = R.getAsSingle(); + } if (!CXXTypeInfoDecl) return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid)); } diff --git a/test/SemaCXX/MicrosoftCompatibilityNoExceptions.cpp b/test/SemaCXX/MicrosoftCompatibilityNoExceptions.cpp new file mode 100644 index 0000000000..d932b5dbbc --- /dev/null +++ b/test/SemaCXX/MicrosoftCompatibilityNoExceptions.cpp @@ -0,0 +1,8 @@ +// RUN: %clang_cc1 %s -fsyntax-only -verify -fms-compatibility + +// PR13153 +namespace std {} +class type_info {}; +void f() { + (void)typeid(int); +}