svn commit: r207632 - in vendor/clang/dist: include/clang/AST
include/clang/Analysis include/clang/Basic
include/clang/Driver include/clang/Frontend include/clang/Lex
include/clang/Parse include/cl...
Roman Divacky
rdivacky at FreeBSD.org
Tue May 4 20:51:20 UTC 2010
Author: rdivacky
Date: Tue May 4 20:51:19 2010
New Revision: 207632
URL: http://svn.freebsd.org/changeset/base/207632
Log:
Update clang to r103052.
Added:
vendor/clang/dist/test/Misc/macro-backtrace-limit.c
Modified:
vendor/clang/dist/include/clang/AST/ASTDiagnostic.h
vendor/clang/dist/include/clang/AST/UnresolvedSet.h
vendor/clang/dist/include/clang/Analysis/AnalysisDiagnostic.h
vendor/clang/dist/include/clang/Basic/Diagnostic.h
vendor/clang/dist/include/clang/Basic/Diagnostic.td
vendor/clang/dist/include/clang/Basic/DiagnosticGroups.td
vendor/clang/dist/include/clang/Basic/DiagnosticSemaKinds.td
vendor/clang/dist/include/clang/Driver/CC1Options.td
vendor/clang/dist/include/clang/Driver/DriverDiagnostic.h
vendor/clang/dist/include/clang/Driver/Options.td
vendor/clang/dist/include/clang/Frontend/DiagnosticOptions.h
vendor/clang/dist/include/clang/Frontend/FrontendDiagnostic.h
vendor/clang/dist/include/clang/Frontend/TextDiagnosticPrinter.h
vendor/clang/dist/include/clang/Lex/LexDiagnostic.h
vendor/clang/dist/include/clang/Parse/ParseDiagnostic.h
vendor/clang/dist/include/clang/Sema/SemaDiagnostic.h
vendor/clang/dist/lib/AST/StmtDumper.cpp
vendor/clang/dist/lib/Basic/Diagnostic.cpp
vendor/clang/dist/lib/CodeGen/CGBlocks.cpp
vendor/clang/dist/lib/CodeGen/CGDebugInfo.cpp
vendor/clang/dist/lib/CodeGen/CGDecl.cpp
vendor/clang/dist/lib/CodeGen/CGDeclCXX.cpp
vendor/clang/dist/lib/CodeGen/CGObjC.cpp
vendor/clang/dist/lib/Driver/Tools.cpp
vendor/clang/dist/lib/Frontend/CompilerInvocation.cpp
vendor/clang/dist/lib/Frontend/TextDiagnosticPrinter.cpp
vendor/clang/dist/lib/Sema/SemaDecl.cpp
vendor/clang/dist/lib/Sema/SemaDeclCXX.cpp
vendor/clang/dist/lib/Sema/SemaExpr.cpp
vendor/clang/dist/lib/Sema/SemaOverload.cpp
vendor/clang/dist/lib/Sema/SemaTemplateInstantiateDecl.cpp
vendor/clang/dist/test/CodeGen/staticinit.c
vendor/clang/dist/test/CodeGenCXX/reference-in-blocks.cpp
vendor/clang/dist/test/CodeGenObjCXX/ivar-objects.mm
vendor/clang/dist/test/Sema/function-redecl.c
vendor/clang/dist/test/SemaCXX/default-assignment-operator.cpp
vendor/clang/dist/test/SemaTemplate/instantiate-function-params.cpp
Modified: vendor/clang/dist/include/clang/AST/ASTDiagnostic.h
==============================================================================
--- vendor/clang/dist/include/clang/AST/ASTDiagnostic.h Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/include/clang/AST/ASTDiagnostic.h Tue May 4 20:51:19 2010 (r207632)
@@ -15,7 +15,7 @@
namespace clang {
namespace diag {
enum {
-#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE) ENUM,
+#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE,CATEGORY) ENUM,
#define ASTSTART
#include "clang/Basic/DiagnosticASTKinds.inc"
#undef DIAG
Modified: vendor/clang/dist/include/clang/AST/UnresolvedSet.h
==============================================================================
--- vendor/clang/dist/include/clang/AST/UnresolvedSet.h Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/include/clang/AST/UnresolvedSet.h Tue May 4 20:51:19 2010 (r207632)
@@ -45,6 +45,7 @@ public:
NamedDecl *getDecl() const { return ir->getDecl(); }
AccessSpecifier getAccess() const { return ir->getAccess(); }
+ void setAccess(AccessSpecifier AS) { ir->setAccess(AS); }
DeclAccessPair getPair() const { return *ir; }
NamedDecl *operator*() const { return getDecl(); }
Modified: vendor/clang/dist/include/clang/Analysis/AnalysisDiagnostic.h
==============================================================================
--- vendor/clang/dist/include/clang/Analysis/AnalysisDiagnostic.h Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/include/clang/Analysis/AnalysisDiagnostic.h Tue May 4 20:51:19 2010 (r207632)
@@ -15,7 +15,7 @@
namespace clang {
namespace diag {
enum {
-#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE) ENUM,
+#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE,CATEGORY) ENUM,
#define ANALYSISSTART
#include "clang/Basic/DiagnosticAnalysisKinds.inc"
#undef DIAG
Modified: vendor/clang/dist/include/clang/Basic/Diagnostic.h
==============================================================================
--- vendor/clang/dist/include/clang/Basic/Diagnostic.h Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/include/clang/Basic/Diagnostic.h Tue May 4 20:51:19 2010 (r207632)
@@ -60,7 +60,7 @@ namespace clang {
// Get typedefs for common diagnostics.
enum {
-#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE) ENUM,
+#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE,CATEGORY) ENUM,
#include "clang/Basic/DiagnosticCommonKinds.inc"
NUM_BUILTIN_COMMON_DIAGNOSTICS
#undef DIAG
@@ -283,13 +283,13 @@ public:
void setTemplateBacktraceLimit(unsigned Limit) {
TemplateBacktraceLimit = Limit;
}
-
+
/// \brief Retrieve the maximum number of template instantiation
/// nodes to emit along with a given diagnostic.
unsigned getTemplateBacktraceLimit() const {
return TemplateBacktraceLimit;
}
-
+
/// setIgnoreAllWarnings - When set to true, any unmapped warnings are
/// ignored. If this and WarningsAsErrors are both set, then this one wins.
void setIgnoreAllWarnings(bool Val) { IgnoreAllWarnings = Val; }
Modified: vendor/clang/dist/include/clang/Basic/Diagnostic.td
==============================================================================
--- vendor/clang/dist/include/clang/Basic/Diagnostic.td Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/include/clang/Basic/Diagnostic.td Tue May 4 20:51:19 2010 (r207632)
@@ -26,10 +26,17 @@ def CLASS_WARNING : DiagClass;
def CLASS_EXTENSION : DiagClass;
def CLASS_ERROR : DiagClass;
+// Diagnostic Categories. These can be applied to groups or individual
+// diagnostics to specify a category.
+class DiagCategory<string Name> {
+ string CategoryName = Name;
+}
+
// Diagnostic Groups.
class DiagGroup<string Name, list<DiagGroup> subgroups = []> {
string GroupName = Name;
list<DiagGroup> SubGroups = subgroups;
+ string CategoryName = "";
}
class InGroup<DiagGroup G> { DiagGroup Group = G; }
//class IsGroup<string Name> { DiagGroup Group = DiagGroup<Name>; }
@@ -48,6 +55,7 @@ class Diagnostic<string text, DiagClass
bit SFINAE = 1;
DiagMapping DefaultMapping = defaultmapping;
DiagGroup Group;
+ string CategoryName = "";
}
class Error<string str> : Diagnostic<str, CLASS_ERROR, MAP_ERROR>;
Modified: vendor/clang/dist/include/clang/Basic/DiagnosticGroups.td
==============================================================================
--- vendor/clang/dist/include/clang/Basic/DiagnosticGroups.td Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/include/clang/Basic/DiagnosticGroups.td Tue May 4 20:51:19 2010 (r207632)
@@ -15,8 +15,6 @@ def Implicit : DiagGroup<"implicit", [
ImplicitFunctionDeclare,
ImplicitInt
]>;
-
-
// Empty DiagGroups are recognized by clang but ignored.
def : DiagGroup<"address">;
@@ -102,7 +100,7 @@ def : DiagGroup<"strict-prototypes">;
def : DiagGroup<"strict-selector-match">;
def SwitchEnum : DiagGroup<"switch-enum">;
def Switch : DiagGroup<"switch", [SwitchEnum]>;
-def Trigraphs : DiagGroup<"trigraphs">;
+def Trigraphs : DiagGroup<"trigraphs">;
def : DiagGroup<"type-limits">;
def Uninitialized : DiagGroup<"uninitialized">;
@@ -135,7 +133,8 @@ def Parentheses : DiagGroup<"parentheses
// -Wconversion has its own warnings, but we split this one out for
// legacy reasons.
def Conversion : DiagGroup<"conversion",
- [DiagGroup<"shorten-64-to-32">]>;
+ [DiagGroup<"shorten-64-to-32">]>,
+ DiagCategory<"Value Conversion">;
def Unused : DiagGroup<"unused",
[UnusedArgument, UnusedFunction, UnusedLabel,
@@ -143,7 +142,8 @@ def Unused : DiagGroup<"unused",
UnusedValue, UnusedVariable]>;
// Format settings.
-def Format : DiagGroup<"format", [FormatExtraArgs, FormatZeroLength, NonNull]>;
+def Format : DiagGroup<"format", [FormatExtraArgs, FormatZeroLength, NonNull]>,
+ DiagCategory<"Format String">;
def FormatSecurity : DiagGroup<"format-security", [Format]>;
def FormatNonLiteral : DiagGroup<"format-nonliteral", [FormatSecurity]>;
def FormatY2K : DiagGroup<"format-y2k", [Format]>;
Modified: vendor/clang/dist/include/clang/Basic/DiagnosticSemaKinds.td
==============================================================================
--- vendor/clang/dist/include/clang/Basic/DiagnosticSemaKinds.td Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/include/clang/Basic/DiagnosticSemaKinds.td Tue May 4 20:51:19 2010 (r207632)
@@ -1457,7 +1457,7 @@ def note_template_default_arg_checking :
"while checking a default template argument used here">;
def note_instantiation_contexts_suppressed : Note<
"(skipping %0 context%s0 in backtrace; use -ftemplate-backtrace-limit=0 to "
- "see all)">;
+ "see all)">;
def err_field_instantiates_to_function : Error<
"data member instantiated with function type %0">;
Modified: vendor/clang/dist/include/clang/Driver/CC1Options.td
==============================================================================
--- vendor/clang/dist/include/clang/Driver/CC1Options.td Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/include/clang/Driver/CC1Options.td Tue May 4 20:51:19 2010 (r207632)
@@ -200,6 +200,8 @@ def ftabstop : Separate<"-ftabstop">, Me
HelpText<"Set the tab stop distance.">;
def ferror_limit : Separate<"-ferror-limit">, MetaVarName<"<N>">,
HelpText<"Set the maximum number of errors to emit before stopping (0 = no limit).">;
+def fmacro_backtrace_limit : Separate<"-fmacro-backtrace-limit">, MetaVarName<"<N>">,
+ HelpText<"Set the maximum number of entries to print in a macro instantiation backtrace (0 = no limit).">;
def ftemplate_backtrace_limit : Separate<"-ftemplate-backtrace-limit">, MetaVarName<"<N>">,
HelpText<"Set the maximum number of entries to print in a template instantiation backtrace (0 = no limit).">;
def fmessage_length : Separate<"-fmessage-length">, MetaVarName<"<N>">,
Modified: vendor/clang/dist/include/clang/Driver/DriverDiagnostic.h
==============================================================================
--- vendor/clang/dist/include/clang/Driver/DriverDiagnostic.h Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/include/clang/Driver/DriverDiagnostic.h Tue May 4 20:51:19 2010 (r207632)
@@ -15,7 +15,7 @@
namespace clang {
namespace diag {
enum {
-#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE) ENUM,
+#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE,CATEGORY) ENUM,
#define DRIVERSTART
#include "clang/Basic/DiagnosticDriverKinds.inc"
#undef DIAG
Modified: vendor/clang/dist/include/clang/Driver/Options.td
==============================================================================
--- vendor/clang/dist/include/clang/Driver/Options.td Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/include/clang/Driver/Options.td Tue May 4 20:51:19 2010 (r207632)
@@ -280,6 +280,8 @@ def flat__namespace : Flag<"-flat_namesp
def flax_vector_conversions : Flag<"-flax-vector-conversions">, Group<f_Group>;
def flimited_precision_EQ : Joined<"-flimited-precision=">, Group<f_Group>;
def flto : Flag<"-flto">, Group<f_Group>;
+def fmacro_backtrace_limit_EQ : Joined<"-fmacro-backtrace-limit=">,
+ Group<f_Group>;
def fmath_errno : Flag<"-fmath-errno">, Group<f_Group>;
def fmerge_all_constants : Flag<"-fmerge-all-constants">, Group<f_Group>;
def fmessage_length_EQ : Joined<"-fmessage-length=">, Group<f_Group>;
Modified: vendor/clang/dist/include/clang/Frontend/DiagnosticOptions.h
==============================================================================
--- vendor/clang/dist/include/clang/Frontend/DiagnosticOptions.h Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/include/clang/Frontend/DiagnosticOptions.h Tue May 4 20:51:19 2010 (r207632)
@@ -39,11 +39,15 @@ public:
/// deserialized by, e.g., the CIndex library.
unsigned ErrorLimit; /// Limit # errors emitted.
+ unsigned MacroBacktraceLimit; /// Limit depth of macro instantiation
+ /// backtrace.
unsigned TemplateBacktraceLimit; /// Limit depth of instantiation backtrace.
/// The distance between tab stops.
unsigned TabStop;
- enum { DefaultTabStop = 8, MaxTabStop = 100 };
+ enum { DefaultTabStop = 8, MaxTabStop = 100,
+ DefaultMacroBacktraceLimit = 6,
+ DefaultTemplateBacktraceLimit = 10 };
/// Column limit for formatting message diagnostics, or 0 if unused.
unsigned MessageLength;
@@ -75,6 +79,7 @@ public:
BinaryOutput = 0;
ErrorLimit = 0;
TemplateBacktraceLimit = 0;
+ MacroBacktraceLimit = 0;
}
};
Modified: vendor/clang/dist/include/clang/Frontend/FrontendDiagnostic.h
==============================================================================
--- vendor/clang/dist/include/clang/Frontend/FrontendDiagnostic.h Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/include/clang/Frontend/FrontendDiagnostic.h Tue May 4 20:51:19 2010 (r207632)
@@ -15,7 +15,7 @@
namespace clang {
namespace diag {
enum {
-#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE) ENUM,
+#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE,CATEGORY) ENUM,
#define FRONTENDSTART
#include "clang/Basic/DiagnosticFrontendKinds.inc"
#undef DIAG
Modified: vendor/clang/dist/include/clang/Frontend/TextDiagnosticPrinter.h
==============================================================================
--- vendor/clang/dist/include/clang/Frontend/TextDiagnosticPrinter.h Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/include/clang/Frontend/TextDiagnosticPrinter.h Tue May 4 20:51:19 2010 (r207632)
@@ -71,12 +71,15 @@ public:
const SourceManager &SM,
const FixItHint *Hints,
unsigned NumHints,
- unsigned Columns);
+ unsigned Columns,
+ unsigned OnMacroInst,
+ unsigned MacroSkipStart,
+ unsigned MacroSkipEnd);
virtual void HandleDiagnostic(Diagnostic::Level DiagLevel,
const DiagnosticInfo &Info);
};
-} // end namspace clang
+} // end namespace clang
#endif
Modified: vendor/clang/dist/include/clang/Lex/LexDiagnostic.h
==============================================================================
--- vendor/clang/dist/include/clang/Lex/LexDiagnostic.h Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/include/clang/Lex/LexDiagnostic.h Tue May 4 20:51:19 2010 (r207632)
@@ -15,7 +15,7 @@
namespace clang {
namespace diag {
enum {
-#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE) ENUM,
+#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE,CATEGORY) ENUM,
#define LEXSTART
#include "clang/Basic/DiagnosticLexKinds.inc"
#undef DIAG
Modified: vendor/clang/dist/include/clang/Parse/ParseDiagnostic.h
==============================================================================
--- vendor/clang/dist/include/clang/Parse/ParseDiagnostic.h Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/include/clang/Parse/ParseDiagnostic.h Tue May 4 20:51:19 2010 (r207632)
@@ -15,7 +15,7 @@
namespace clang {
namespace diag {
enum {
-#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE) ENUM,
+#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE,CATEGORY) ENUM,
#define PARSESTART
#include "clang/Basic/DiagnosticParseKinds.inc"
#undef DIAG
Modified: vendor/clang/dist/include/clang/Sema/SemaDiagnostic.h
==============================================================================
--- vendor/clang/dist/include/clang/Sema/SemaDiagnostic.h Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/include/clang/Sema/SemaDiagnostic.h Tue May 4 20:51:19 2010 (r207632)
@@ -15,7 +15,7 @@
namespace clang {
namespace diag {
enum {
-#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE) ENUM,
+#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE,CATEGORY) ENUM,
#define SEMASTART
#include "clang/Basic/DiagnosticSemaKinds.inc"
#undef DIAG
Modified: vendor/clang/dist/lib/AST/StmtDumper.cpp
==============================================================================
--- vendor/clang/dist/lib/AST/StmtDumper.cpp Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/lib/AST/StmtDumper.cpp Tue May 4 20:51:19 2010 (r207632)
@@ -260,6 +260,13 @@ void StmtDumper::DumpDeclarator(Decl *D)
else
ns = "<anonymous>";
OS << '"' << UD->getDeclKindName() << ns << ";\"";
+ } else if (UsingDecl *UD = dyn_cast<UsingDecl>(D)) {
+ // print using decl (e.g. "using std::string;")
+ const char *tn = UD->isTypeName() ? "typename " : "";
+ OS << '"' << UD->getDeclKindName() << tn;
+ UD->getTargetNestedNameDecl()->print(OS,
+ PrintingPolicy(UD->getASTContext().getLangOptions()));
+ OS << ";\"";
} else {
assert(0 && "Unexpected decl");
}
Modified: vendor/clang/dist/lib/Basic/Diagnostic.cpp
==============================================================================
--- vendor/clang/dist/lib/Basic/Diagnostic.cpp Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/lib/Basic/Diagnostic.cpp Tue May 4 20:51:19 2010 (r207632)
@@ -51,6 +51,8 @@ struct StaticDiagInfoRec {
unsigned Mapping : 3;
unsigned Class : 3;
bool SFINAE : 1;
+ unsigned Category : 5;
+
const char *Description;
const char *OptionGroup;
@@ -63,8 +65,8 @@ struct StaticDiagInfoRec {
};
static const StaticDiagInfoRec StaticDiagInfo[] = {
-#define DIAG(ENUM,CLASS,DEFAULT_MAPPING,DESC,GROUP,SFINAE) \
- { diag::ENUM, DEFAULT_MAPPING, CLASS, SFINAE, DESC, GROUP },
+#define DIAG(ENUM,CLASS,DEFAULT_MAPPING,DESC,GROUP,SFINAE, CATEGORY) \
+ { diag::ENUM, DEFAULT_MAPPING, CLASS, SFINAE, CATEGORY, DESC, GROUP },
#include "clang/Basic/DiagnosticCommonKinds.inc"
#include "clang/Basic/DiagnosticDriverKinds.inc"
#include "clang/Basic/DiagnosticFrontendKinds.inc"
@@ -73,7 +75,7 @@ static const StaticDiagInfoRec StaticDia
#include "clang/Basic/DiagnosticASTKinds.inc"
#include "clang/Basic/DiagnosticSemaKinds.inc"
#include "clang/Basic/DiagnosticAnalysisKinds.inc"
- { 0, 0, 0, 0, 0, 0}
+ { 0, 0, 0, 0, 0, 0, 0}
};
#undef DIAG
@@ -99,7 +101,7 @@ static const StaticDiagInfoRec *GetDiagI
#endif
// Search the diagnostic table with a binary search.
- StaticDiagInfoRec Find = { DiagID, 0, 0, 0, 0, 0 };
+ StaticDiagInfoRec Find = { DiagID, 0, 0, 0, 0, 0, 0 };
const StaticDiagInfoRec *Found =
std::lower_bound(StaticDiagInfo, StaticDiagInfo + NumDiagEntries, Find);
Modified: vendor/clang/dist/lib/CodeGen/CGBlocks.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGBlocks.cpp Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/lib/CodeGen/CGBlocks.cpp Tue May 4 20:51:19 2010 (r207632)
@@ -532,6 +532,8 @@ llvm::Value *CodeGenFunction::GetAddrOfB
V = Builder.CreateBitCast(V, PtrStructTy);
V = Builder.CreateStructGEP(V, getByRefValueLLVMField(VD),
VD->getNameAsString());
+ if (VD->getType()->isReferenceType())
+ V = Builder.CreateLoad(V);
} else {
const llvm::Type *Ty = CGM.getTypes().ConvertType(VD->getType());
Modified: vendor/clang/dist/lib/CodeGen/CGDebugInfo.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGDebugInfo.cpp Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/lib/CodeGen/CGDebugInfo.cpp Tue May 4 20:51:19 2010 (r207632)
@@ -495,7 +495,10 @@ CollectRecordFields(const RecordDecl *RD
llvm::DIType
CGDebugInfo::getOrCreateMethodType(const CXXMethodDecl *Method,
llvm::DIFile Unit) {
- llvm::DIType FnTy = getOrCreateType(Method->getType(), Unit);
+ llvm::DIType FnTy
+ = getOrCreateType(QualType(Method->getType()->getAs<FunctionProtoType>(),
+ 0),
+ Unit);
// Static methods do not need "this" pointer argument.
if (Method->isStatic())
Modified: vendor/clang/dist/lib/CodeGen/CGDecl.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGDecl.cpp Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/lib/CodeGen/CGDecl.cpp Tue May 4 20:51:19 2010 (r207632)
@@ -231,9 +231,6 @@ CodeGenFunction::AddInitializerToGlobalB
void CodeGenFunction::EmitStaticBlockVarDecl(const VarDecl &D,
llvm::GlobalValue::LinkageTypes Linkage) {
- // Bail out early if the block is unreachable.
- if (!Builder.GetInsertBlock()) return;
-
llvm::Value *&DMEntry = LocalDeclMap[&D];
assert(DMEntry == 0 && "Decl already exists in localdeclmap!");
@@ -245,9 +242,9 @@ void CodeGenFunction::EmitStaticBlockVar
if (getContext().getLangOptions().CPlusPlus)
CGM.setStaticLocalDeclAddress(&D, GV);
+ // We can't have a VLA here, but we can have a pointer to a VLA,
+ // even though that doesn't really make any sense.
// Make sure to evaluate VLA bounds now so that we have them for later.
- //
- // FIXME: Can this happen?
if (D.getType()->isVariablyModifiedType())
EmitVLASize(D.getType());
Modified: vendor/clang/dist/lib/CodeGen/CGDeclCXX.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGDeclCXX.cpp Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/lib/CodeGen/CGDeclCXX.cpp Tue May 4 20:51:19 2010 (r207632)
@@ -279,6 +279,9 @@ static llvm::Constant *getGuardAbortFn(C
void
CodeGenFunction::EmitStaticCXXBlockVarDeclInit(const VarDecl &D,
llvm::GlobalVariable *GV) {
+ // Bail out early if this initializer isn't reachable.
+ if (!Builder.GetInsertBlock()) return;
+
bool ThreadsafeStatics = getContext().getLangOptions().ThreadsafeStatics;
llvm::SmallString<256> GuardVName;
Modified: vendor/clang/dist/lib/CodeGen/CGObjC.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGObjC.cpp Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/lib/CodeGen/CGObjC.cpp Tue May 4 20:51:19 2010 (r207632)
@@ -441,18 +441,20 @@ void CodeGenFunction::GenerateObjCCtorDt
LoadObjCSelf(), Ivar, 0);
const RecordType *RT = FieldType->getAs<RecordType>();
CXXRecordDecl *FieldClassDecl = cast<CXXRecordDecl>(RT->getDecl());
- if (Array) {
- const llvm::Type *BasePtr = ConvertType(FieldType);
- BasePtr = llvm::PointerType::getUnqual(BasePtr);
- llvm::Value *BaseAddrPtr =
- Builder.CreateBitCast(LV.getAddress(), BasePtr);
- EmitCXXAggrDestructorCall(FieldClassDecl->getDestructor(getContext()),
- Array, BaseAddrPtr);
- }
- else
- EmitCXXDestructorCall(FieldClassDecl->getDestructor(CGM.getContext()),
- Dtor_Complete, /*ForVirtualBase=*/false,
- LV.getAddress());
+ CXXDestructorDecl *Dtor = FieldClassDecl->getDestructor(getContext());
+ if (!Dtor->isTrivial())
+ if (Array) {
+ const llvm::Type *BasePtr = ConvertType(FieldType);
+ BasePtr = llvm::PointerType::getUnqual(BasePtr);
+ llvm::Value *BaseAddrPtr =
+ Builder.CreateBitCast(LV.getAddress(), BasePtr);
+ EmitCXXAggrDestructorCall(Dtor,
+ Array, BaseAddrPtr);
+ }
+ else
+ EmitCXXDestructorCall(Dtor,
+ Dtor_Complete, /*ForVirtualBase=*/false,
+ LV.getAddress());
}
}
FinishFunction();
Modified: vendor/clang/dist/lib/Driver/Tools.cpp
==============================================================================
--- vendor/clang/dist/lib/Driver/Tools.cpp Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/lib/Driver/Tools.cpp Tue May 4 20:51:19 2010 (r207632)
@@ -21,6 +21,7 @@
#include "clang/Driver/Options.h"
#include "clang/Driver/ToolChain.h"
#include "clang/Driver/Util.h"
+#include "clang/Frontend/DiagnosticOptions.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringSwitch.h"
@@ -1082,11 +1083,19 @@ void Clang::ConstructJob(Compilation &C,
else
CmdArgs.push_back("19");
+ CmdArgs.push_back("-fmacro-backtrace-limit");
+ if (Arg *A = Args.getLastArg(options::OPT_fmacro_backtrace_limit_EQ))
+ CmdArgs.push_back(A->getValue(Args));
+ else
+ CmdArgs.push_back(Args.MakeArgString(
+ llvm::Twine(DiagnosticOptions::DefaultMacroBacktraceLimit)));
+
CmdArgs.push_back("-ftemplate-backtrace-limit");
if (Arg *A = Args.getLastArg(options::OPT_ftemplate_backtrace_limit_EQ))
CmdArgs.push_back(A->getValue(Args));
else
- CmdArgs.push_back("10");
+ CmdArgs.push_back(Args.MakeArgString(
+ llvm::Twine(DiagnosticOptions::DefaultTemplateBacktraceLimit)));
// Pass -fmessage-length=.
CmdArgs.push_back("-fmessage-length");
Modified: vendor/clang/dist/lib/Frontend/CompilerInvocation.cpp
==============================================================================
--- vendor/clang/dist/lib/Frontend/CompilerInvocation.cpp Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/lib/Frontend/CompilerInvocation.cpp Tue May 4 20:51:19 2010 (r207632)
@@ -247,7 +247,13 @@ static void DiagnosticOptsToArgs(const D
Res.push_back("-ferror-limit");
Res.push_back(llvm::utostr(Opts.ErrorLimit));
}
- if (Opts.TemplateBacktraceLimit != 10) {
+ if (Opts.MacroBacktraceLimit
+ != DiagnosticOptions::DefaultMacroBacktraceLimit) {
+ Res.push_back("-fmacro-backtrace-limit");
+ Res.push_back(llvm::utostr(Opts.MacroBacktraceLimit));
+ }
+ if (Opts.TemplateBacktraceLimit
+ != DiagnosticOptions::DefaultTemplateBacktraceLimit) {
Res.push_back("-ftemplate-backtrace-limit");
Res.push_back(llvm::utostr(Opts.TemplateBacktraceLimit));
}
@@ -877,8 +883,13 @@ static void ParseDiagnosticArgs(Diagnost
Opts.VerifyDiagnostics = Args.hasArg(OPT_verify);
Opts.BinaryOutput = Args.hasArg(OPT_fdiagnostics_binary);
Opts.ErrorLimit = getLastArgIntValue(Args, OPT_ferror_limit, 0, Diags);
+ Opts.MacroBacktraceLimit
+ = getLastArgIntValue(Args, OPT_fmacro_backtrace_limit,
+ DiagnosticOptions::DefaultMacroBacktraceLimit, Diags);
Opts.TemplateBacktraceLimit
- = getLastArgIntValue(Args, OPT_ftemplate_backtrace_limit, 0, Diags);
+ = getLastArgIntValue(Args, OPT_ftemplate_backtrace_limit,
+ DiagnosticOptions::DefaultTemplateBacktraceLimit,
+ Diags);
Opts.TabStop = getLastArgIntValue(Args, OPT_ftabstop,
DiagnosticOptions::DefaultTabStop, Diags);
if (Opts.TabStop == 0 || Opts.TabStop > DiagnosticOptions::MaxTabStop) {
Modified: vendor/clang/dist/lib/Frontend/TextDiagnosticPrinter.cpp
==============================================================================
--- vendor/clang/dist/lib/Frontend/TextDiagnosticPrinter.cpp Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/lib/Frontend/TextDiagnosticPrinter.cpp Tue May 4 20:51:19 2010 (r207632)
@@ -285,7 +285,10 @@ void TextDiagnosticPrinter::EmitCaretDia
const SourceManager &SM,
const FixItHint *Hints,
unsigned NumHints,
- unsigned Columns) {
+ unsigned Columns,
+ unsigned OnMacroInst,
+ unsigned MacroSkipStart,
+ unsigned MacroSkipEnd) {
assert(LangOpts && "Unexpected diagnostic outside source file processing");
assert(!Loc.isInvalid() && "must have a valid source location here");
@@ -293,10 +296,16 @@ void TextDiagnosticPrinter::EmitCaretDia
// instantiated (recursively) then emit information about where the token was
// spelled from.
if (!Loc.isFileID()) {
+ // Whether to suppress printing this macro instantiation.
+ bool Suppressed
+ = OnMacroInst >= MacroSkipStart && OnMacroInst < MacroSkipEnd;
+
+
SourceLocation OneLevelUp = SM.getImmediateInstantiationRange(Loc).first;
// FIXME: Map ranges?
- EmitCaretDiagnostic(OneLevelUp, Ranges, NumRanges, SM, 0, 0, Columns);
-
+ EmitCaretDiagnostic(OneLevelUp, Ranges, NumRanges, SM, 0, 0, Columns,
+ OnMacroInst + 1, MacroSkipStart, MacroSkipEnd);
+
// Map the location.
Loc = SM.getImmediateSpellingLoc(Loc);
@@ -308,26 +317,38 @@ void TextDiagnosticPrinter::EmitCaretDia
Ranges[i] = SourceRange(S, E);
}
- // Get the pretty name, according to #line directives etc.
- PresumedLoc PLoc = SM.getPresumedLoc(Loc);
-
- // If this diagnostic is not in the main file, print out the "included from"
- // lines.
- if (LastWarningLoc != PLoc.getIncludeLoc()) {
- LastWarningLoc = PLoc.getIncludeLoc();
- PrintIncludeStack(LastWarningLoc, SM);
- }
+ if (!Suppressed) {
+ // Get the pretty name, according to #line directives etc.
+ PresumedLoc PLoc = SM.getPresumedLoc(Loc);
+
+ // If this diagnostic is not in the main file, print out the
+ // "included from" lines.
+ if (LastWarningLoc != PLoc.getIncludeLoc()) {
+ LastWarningLoc = PLoc.getIncludeLoc();
+ PrintIncludeStack(LastWarningLoc, SM);
+ }
- if (DiagOpts->ShowLocation) {
- // Emit the file/line/column that this expansion came from.
- OS << PLoc.getFilename() << ':' << PLoc.getLine() << ':';
- if (DiagOpts->ShowColumn)
- OS << PLoc.getColumn() << ':';
- OS << ' ';
+ if (DiagOpts->ShowLocation) {
+ // Emit the file/line/column that this expansion came from.
+ OS << PLoc.getFilename() << ':' << PLoc.getLine() << ':';
+ if (DiagOpts->ShowColumn)
+ OS << PLoc.getColumn() << ':';
+ OS << ' ';
+ }
+ OS << "note: instantiated from:\n";
+
+ EmitCaretDiagnostic(Loc, Ranges, NumRanges, SM, Hints, NumHints, Columns,
+ OnMacroInst + 1, MacroSkipStart, MacroSkipEnd);
+ return;
+ }
+
+ if (OnMacroInst == MacroSkipStart) {
+ // Tell the user that we've skipped contexts.
+ OS << "note: (skipping " << (MacroSkipEnd - MacroSkipStart)
+ << " contexts in backtrace; use -fmacro-backtrace-limit=0 to see "
+ "all)\n";
}
- OS << "note: instantiated from:\n";
-
- EmitCaretDiagnostic(Loc, Ranges, NumRanges, SM, Hints, NumHints, Columns);
+
return;
}
@@ -866,10 +887,29 @@ void TextDiagnosticPrinter::HandleDiagno
}
}
+ unsigned MacroInstSkipStart = 0, MacroInstSkipEnd = 0;
+ if (DiagOpts && DiagOpts->MacroBacktraceLimit && !LastLoc.isFileID()) {
+ // Compute the length of the macro-instantiation backtrace, so that we
+ // can establish which steps in the macro backtrace we'll skip.
+ SourceLocation Loc = LastLoc;
+ unsigned Depth = 0;
+ do {
+ ++Depth;
+ Loc = LastLoc.getManager().getImmediateInstantiationRange(Loc).first;
+ } while (!Loc.isFileID());
+
+ if (Depth > DiagOpts->MacroBacktraceLimit) {
+ MacroInstSkipStart = DiagOpts->MacroBacktraceLimit / 2 +
+ DiagOpts->MacroBacktraceLimit % 2;
+ MacroInstSkipEnd = Depth - DiagOpts->MacroBacktraceLimit / 2;
+ }
+ }
+
EmitCaretDiagnostic(LastLoc, Ranges, NumRanges, LastLoc.getManager(),
Info.getFixItHints(),
Info.getNumFixItHints(),
- DiagOpts->MessageLength);
+ DiagOpts->MessageLength,
+ 0, MacroInstSkipStart, MacroInstSkipEnd);
}
OS.flush();
Modified: vendor/clang/dist/lib/Sema/SemaDecl.cpp
==============================================================================
--- vendor/clang/dist/lib/Sema/SemaDecl.cpp Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/lib/Sema/SemaDecl.cpp Tue May 4 20:51:19 2010 (r207632)
@@ -3243,8 +3243,10 @@ Sema::ActOnFunctionDeclarator(Scope* S,
for (FunctionProtoType::arg_type_iterator AI = FT->arg_type_begin(),
AE = FT->arg_type_end(); AI != AE; ++AI) {
ParmVarDecl *Param = ParmVarDecl::Create(Context, NewFD,
- SourceLocation(), 0,
- *AI, /*TInfo=*/0,
+ D.getIdentifierLoc(), 0,
+ *AI,
+ Context.getTrivialTypeSourceInfo(*AI,
+ D.getIdentifierLoc()),
VarDecl::None,
VarDecl::None, 0);
Param->setImplicit();
Modified: vendor/clang/dist/lib/Sema/SemaDeclCXX.cpp
==============================================================================
--- vendor/clang/dist/lib/Sema/SemaDeclCXX.cpp Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/lib/Sema/SemaDeclCXX.cpp Tue May 4 20:51:19 2010 (r207632)
@@ -4134,13 +4134,16 @@ void Sema::DefineImplicitDestructor(Sour
///
/// \param From The expression we are copying from.
///
+/// \param CopyingBaseSubobject Whether we're copying a base subobject.
+/// Otherwise, it's a non-static member subobject.
+///
/// \param Depth Internal parameter recording the depth of the recursion.
///
/// \returns A statement or a loop that copies the expressions.
static Sema::OwningStmtResult
BuildSingleCopyAssign(Sema &S, SourceLocation Loc, QualType T,
Sema::OwningExprResult To, Sema::OwningExprResult From,
- unsigned Depth = 0) {
+ bool CopyingBaseSubobject, unsigned Depth = 0) {
typedef Sema::OwningStmtResult OwningStmtResult;
typedef Sema::OwningExprResult OwningExprResult;
@@ -4172,6 +4175,25 @@ BuildSingleCopyAssign(Sema &S, SourceLoc
}
F.done();
+ // Suppress the protected check (C++ [class.protected]) for each of the
+ // assignment operators we found. This strange dance is required when
+ // we're assigning via a base classes's copy-assignment operator. To
+ // ensure that we're getting the right base class subobject (without
+ // ambiguities), we need to cast "this" to that subobject type; to
+ // ensure that we don't go through the virtual call mechanism, we need
+ // to qualify the operator= name with the base class (see below). However,
+ // this means that if the base class has a protected copy assignment
+ // operator, the protected member access check will fail. So, we
+ // rewrite "protected" access to "public" access in this case, since we
+ // know by construction that we're calling from a derived class.
+ if (CopyingBaseSubobject) {
+ for (LookupResult::iterator L = OpLookup.begin(), LEnd = OpLookup.end();
+ L != LEnd; ++L) {
+ if (L.getAccess() == AS_protected)
+ L.setAccess(AS_public);
+ }
+ }
+
// Create the nested-name-specifier that will be used to qualify the
// reference to operator=; this is required to suppress the virtual
// call mechanism.
@@ -4277,7 +4299,8 @@ BuildSingleCopyAssign(Sema &S, SourceLoc
// Build the copy for an individual element of the array.
OwningStmtResult Copy = BuildSingleCopyAssign(S, Loc,
ArrayTy->getElementType(),
- move(To), move(From), Depth+1);
+ move(To), move(From),
+ CopyingBaseSubobject, Depth+1);
if (Copy.isInvalid()) {
InitStmt->Destroy(S.Context);
return S.StmtError();
@@ -4381,7 +4404,8 @@ void Sema::DefineImplicitCopyAssignment(
// Build the copy.
OwningStmtResult Copy = BuildSingleCopyAssign(*this, Loc, BaseType,
- move(To), Owned(From));
+ move(To), Owned(From),
+ /*CopyingBaseSubobject=*/true);
if (Copy.isInvalid()) {
Invalid = true;
continue;
@@ -4501,7 +4525,8 @@ void Sema::DefineImplicitCopyAssignment(
// Build the copy of this field.
OwningStmtResult Copy = BuildSingleCopyAssign(*this, Loc, FieldType,
- move(To), move(From));
+ move(To), move(From),
+ /*CopyingBaseSubobject=*/false);
if (Copy.isInvalid()) {
Invalid = true;
continue;
Modified: vendor/clang/dist/lib/Sema/SemaExpr.cpp
==============================================================================
--- vendor/clang/dist/lib/Sema/SemaExpr.cpp Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/lib/Sema/SemaExpr.cpp Tue May 4 20:51:19 2010 (r207632)
@@ -3565,8 +3565,8 @@ Sema::ActOnCallExpr(Scope *S, ExprArg fn
if (BinaryOperator *BO = dyn_cast<BinaryOperator>(NakedFn)) {
if (BO->getOpcode() == BinaryOperator::PtrMemD ||
BO->getOpcode() == BinaryOperator::PtrMemI) {
- if (const FunctionProtoType *FPT =
- dyn_cast<FunctionProtoType>(BO->getType())) {
+ if (const FunctionProtoType *FPT
+ = BO->getType()->getAs<FunctionProtoType>()) {
QualType ResultTy = FPT->getResultType().getNonReferenceType();
ExprOwningPtr<CXXMemberCallExpr>
Modified: vendor/clang/dist/lib/Sema/SemaOverload.cpp
==============================================================================
--- vendor/clang/dist/lib/Sema/SemaOverload.cpp Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/lib/Sema/SemaOverload.cpp Tue May 4 20:51:19 2010 (r207632)
@@ -6513,7 +6513,7 @@ Sema::BuildCallToMemberFunction(Scope *S
MemExpr->setBase(ObjectArg);
// Convert the rest of the arguments
- const FunctionProtoType *Proto = cast<FunctionProtoType>(Method->getType());
+ const FunctionProtoType *Proto = Method->getType()->getAs<FunctionProtoType>();
if (ConvertArgumentsForCall(&*TheCall, MemExpr, Method, Proto, Args, NumArgs,
RParenLoc))
return ExprError();
Modified: vendor/clang/dist/lib/Sema/SemaTemplateInstantiateDecl.cpp
==============================================================================
--- vendor/clang/dist/lib/Sema/SemaTemplateInstantiateDecl.cpp Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/lib/Sema/SemaTemplateInstantiateDecl.cpp Tue May 4 20:51:19 2010 (r207632)
@@ -1169,6 +1169,27 @@ TemplateDeclInstantiator::VisitCXXMethod
return 0;
QualType T = TInfo->getType();
+ // \brief If the type of this function is not *directly* a function
+ // type, then we're instantiating the a function that was declared
+ // via a typedef, e.g.,
+ //
+ // typedef int functype(int, int);
+ // functype func;
+ //
+ // In this case, we'll just go instantiate the ParmVarDecls that we
+ // synthesized in the method declaration.
+ if (!isa<FunctionProtoType>(T)) {
+ assert(!Params.size() && "Instantiating type could not yield parameters");
+ for (unsigned I = 0, N = D->getNumParams(); I != N; ++I) {
+ ParmVarDecl *P = SemaRef.SubstParmVarDecl(D->getParamDecl(I),
+ TemplateArgs);
+ if (!P)
+ return 0;
+
+ Params.push_back(P);
+ }
+ }
+
NestedNameSpecifier *Qualifier = D->getQualifier();
if (Qualifier) {
Qualifier = SemaRef.SubstNestedNameSpecifier(Qualifier,
Modified: vendor/clang/dist/test/CodeGen/staticinit.c
==============================================================================
--- vendor/clang/dist/test/CodeGen/staticinit.c Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/test/CodeGen/staticinit.c Tue May 4 20:51:19 2010 (r207632)
@@ -29,3 +29,13 @@ void foo(void) {
// RUN: grep "f1.l0 = internal global i32 ptrtoint (i32 ()\* @f1 to i32)" %t
int f1(void) { static int l0 = (unsigned) f1; }
+// PR7044
+char *f2(char key) {
+ switch (key) {
+ static char _msg[40];
+ case '\014':
+ return _msg;
+ }
+
+ return 0;
+}
Modified: vendor/clang/dist/test/CodeGenCXX/reference-in-blocks.cpp
==============================================================================
--- vendor/clang/dist/test/CodeGenCXX/reference-in-blocks.cpp Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/test/CodeGenCXX/reference-in-blocks.cpp Tue May 4 20:51:19 2010 (r207632)
@@ -9,6 +9,26 @@ T _i;
T get() {return _i;};
};
+// rdar: // 7495203
+class A {
+ public:
+ A() : field(10), d1(3.14) {}
+ void F();
+ void S() {
+ printf(" field = %d\n", field);
+ printf(" field = %f\n", d1);
+ }
+ int field;
+ double d1;
+};
+
+void A::F()
+ {
+ __block A &tlc = *this;
+ // crashed in code gen (radar 7495203)
+ ^{ tlc.S(); }();
+ }
+
int main() {
// works
@@ -16,6 +36,8 @@ int main() {
//crashes in godegen?
void (^bl2)(range<int>& ) = ^(range<int>& i){printf("Hello Blocks %d\n", i.get()); };
+
+ A *a = new A;
+ a->F();
return 0;
}
-
Modified: vendor/clang/dist/test/CodeGenObjCXX/ivar-objects.mm
==============================================================================
--- vendor/clang/dist/test/CodeGenObjCXX/ivar-objects.mm Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/test/CodeGenObjCXX/ivar-objects.mm Tue May 4 20:51:19 2010 (r207632)
@@ -69,3 +69,18 @@ int main() {
[a release];
}
+// rdar: // 7468090
+class S {
+public:
+ S& operator = (const S&);
+};
+
+ at interface I {
+ S position;
+}
+ at property(assign, nonatomic) S position;
+ at end
+
+ at implementation I
+ @synthesize position;
+ at end
Added: vendor/clang/dist/test/Misc/macro-backtrace-limit.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ vendor/clang/dist/test/Misc/macro-backtrace-limit.c Tue May 4 20:51:19 2010 (r207632)
@@ -0,0 +1,32 @@
+// RUN: %clang-cc1 -fsyntax-only -fmacro-backtrace-limit 5 %s > %t 2>&1
+// RUN: FileCheck %s < %t
+
+#define M1(A, B) ((A) < (B))
+#define M2(A, B) M1(A, B)
+#define M3(A, B) M2(A, B)
+#define M4(A, B) M3(A, B)
+#define M5(A, B) M4(A, B)
+#define M6(A, B) M5(A, B)
+#define M7(A, B) M6(A, B)
+#define M8(A, B) M7(A, B)
+#define M9(A, B) M8(A, B)
+#define M10(A, B) M9(A, B)
+#define M11(A, B) M10(A, B)
+#define M12(A, B) M11(A, B)
+
+void f(int *ip, float *fp) {
+ // CHECK: macro-backtrace-limit.c:31:7: warning: comparison of distinct pointer types ('int *' and 'float *')
+ // CHECK: if (M12(ip, fp)) { }
+ // CHECK: macro-backtrace-limit.c:15:19: note: instantiated from:
+ // CHECK: #define M12(A, B) M11(A, B)
+ // CHECK: macro-backtrace-limit.c:14:19: note: instantiated from:
+ // CHECK: #define M11(A, B) M10(A, B)
+ // CHECK: note: (skipping 7 contexts in backtrace; use -fmacro-backtrace-limit=0 to see all)
+ // CHECK: macro-backtrace-limit.c:6:18: note: instantiated from:
+ // CHECK: #define M3(A, B) M2(A, B)
+ // CHECK: macro-backtrace-limit.c:5:18: note: instantiated from:
+ // CHECK: #define M2(A, B) M1(A, B)
+ // CHECK: macro-backtrace-limit.c:4:23: note: instantiated from:
+ // CHECK: #define M1(A, B) ((A) < (B))
+ if (M12(ip, fp)) { }
+}
Modified: vendor/clang/dist/test/Sema/function-redecl.c
==============================================================================
--- vendor/clang/dist/test/Sema/function-redecl.c Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/test/Sema/function-redecl.c Tue May 4 20:51:19 2010 (r207632)
@@ -120,7 +120,7 @@ extern __typeof (i1) i1;
typedef int a();
typedef int a2(int*);
a x;
-a2 x2;
+a2 x2; // expected-note{{passing argument to parameter here}}
void test_x() {
x(5);
x2(5); // expected-warning{{incompatible integer to pointer conversion passing 'int' to parameter of type 'int *'}}
Modified: vendor/clang/dist/test/SemaCXX/default-assignment-operator.cpp
==============================================================================
--- vendor/clang/dist/test/SemaCXX/default-assignment-operator.cpp Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/test/SemaCXX/default-assignment-operator.cpp Tue May 4 20:51:19 2010 (r207632)
@@ -89,3 +89,31 @@ void j() {
e1 = e2;
}
+namespace ProtectedCheck {
+ struct X {
+ protected:
+ X &operator=(const X&); // expected-note{{declared protected here}}
+ };
+
+ struct Y : public X { };
+
+ void f(Y y) { y = y; }
+
+ struct Z { // expected-error{{'operator=' is a protected member of 'ProtectedCheck::X'}}
+ X x;
+ };
+
+ void f(Z z) { z = z; } //
+}
+
+namespace MultiplePaths {
+ struct X0 {
+ X0 &operator=(const X0&);
+ };
+
+ struct X1 : public virtual X0 { };
+
+ struct X2 : X0, X1 { };
+
+ void f(X2 x2) { x2 = x2; }
+}
Modified: vendor/clang/dist/test/SemaTemplate/instantiate-function-params.cpp
==============================================================================
--- vendor/clang/dist/test/SemaTemplate/instantiate-function-params.cpp Tue May 4 20:50:39 2010 (r207631)
+++ vendor/clang/dist/test/SemaTemplate/instantiate-function-params.cpp Tue May 4 20:51:19 2010 (r207632)
@@ -76,3 +76,15 @@ namespace PR6990 {
{
};
}
+
+namespace InstantiateFunctionTypedef {
+ template<typename T>
+ struct X {
+ typedef int functype(int, int);
+ functype func;
+ };
+
+ void f(X<int> x) {
+ (void)x.func(1, 2);
+ }
+}
More information about the svn-src-all
mailing list