llvm-project/clang/lib/Sema
Nico Weber 337d5aa58f Move fixit for const init from note to diag, weaken to warning in MS mode.
r235046 turned "extern __declspec(selectany) int a;" from a declaration into
a definition to fix PR23242 (required for compatibility with mc.exe output).
However, this broke parsing Windows headers: A  d3d11 headers contain something
like

  struct SomeStruct {};
  extern const __declspec(selectany) SomeStruct some_struct;

This is now a definition, and const objects either need an explicit default
ctor or an initializer so this errors out with 

  d3d11.h(1065,48) :
    error: default initialization of an object of const type
           'const CD3D11_DEFAULT' without a user-provided default constructor

(cl.exe just doesn't implement this rule, independent of selectany.)

To work around this, weaken this error into a warning for selectany decls
in microsoft mode, and recover with zero-initialization.

Doing this is a bit hairy since it adds a fixit on an error emitted
by InitializationSequence – this means it needs to build a correct AST, which
in turn means InitializationSequence::Failed() cannot return true when this
fixit is applied. As a workaround, the patch adds a fixit member to
InitializationSequence, and InitializationSequence::Perform() prints the
diagnostic if the fixit member is set right after its call to Diagnose.
That function is usually called when InitializationSequences are used –
InitListChecker::PerformEmptyInit() doesn't call it, but the InitListChecker
case never performs default-initialization, so this is technically OK.

This is the alternative, original fix for PR20208 that got reviewed in the
thread "[patch] Improve diagnostic on default-initializing const variables
(PR20208)".  This change basically reverts r213725, adds the original fix for
PR20208, and makes the error a warning in Microsoft mode.

llvm-svn: 235166
2015-04-17 08:32:38 +00:00
..
AnalysisBasedWarnings.cpp Use 'override/final' instead of 'virtual' for overridden methods 2015-04-11 02:00:23 +00:00
AttributeList.cpp Automate attribute argument count semantic checking when there are variadic or optional arguments present. With this, the only time you should have to manually check attribute argument counts is when HasCustomParsing is set to true, or when you have variadic arguments that aren't really variadic (like ownership_holds and friends). 2014-07-31 16:37:04 +00:00
CMakeLists.txt Split off CUDA-specific Sema parts to a new file 2014-09-03 15:27:03 +00:00
CodeCompleteConsumer.cpp Teach Twine to support SmallString. 2015-03-17 09:51:17 +00:00
DeclSpec.cpp Add check for kind of UnqualifiedId in Declarator::isStaticMember() 2015-03-30 00:43:56 +00:00
DelayedDiagnostic.cpp Add -Wpartial-availability. 2015-03-19 19:18:22 +00:00
IdentifierResolver.cpp [modules] Remove redundant import of lexical decls when building a lookup table 2015-03-23 03:25:59 +00:00
JumpDiagnostics.cpp Warn when jumping out of a __finally block via goto. 2015-03-09 04:27:56 +00:00
Makefile
MultiplexExternalSemaSource.cpp [Modules] Preserve source order for the map of late parsed templates. 2015-03-26 09:08:15 +00:00
Scope.cpp MS ABI: Implement the MSVC 2015 scheme for scope disambiguation 2015-03-19 21:54:30 +00:00
ScopeInfo.cpp SEH: Diagnose use of C++ EH and SEH in the same function 2015-02-02 22:15:31 +00:00
Sema.cpp [Modules] Make "#pragma weak" undeclared identifiers be tracked 2015-03-26 08:32:49 +00:00
SemaAccess.cpp Don't assume friended C++ method decls have qualifiers 2014-12-17 23:40:46 +00:00
SemaAttr.cpp Implement section pragma feedback on r205810 2015-03-04 23:39:17 +00:00
SemaCUDA.cpp Create a frontend flag to disable CUDA cross-target call checks 2015-04-15 22:27:06 +00:00
SemaCXXScopeSpec.cpp [modules] If we reach a definition of a class for which we already have a 2015-03-26 04:09:53 +00:00
SemaCast.cpp PR 17456 2015-01-28 21:31:26 +00:00
SemaChecking.cpp Add Clang support for remaining integer divide and permute instructions from ISA 2.06 2015-04-09 23:58:16 +00:00
SemaCodeComplete.cpp [libclang] Fix crash when code-completing inside constructor initializer for a builtin type. 2015-03-13 07:39:30 +00:00
SemaConsumer.cpp
SemaDecl.cpp Properly implement warn_unused_result checking for classes/structs. 2015-04-09 19:43:04 +00:00
SemaDeclAttr.cpp [Objective-C Sema] patch to introduce IndependentClass 2015-04-16 18:38:44 +00:00
SemaDeclCXX.cpp Use the most recent previous decl to check if inline is added after a definition 2015-04-08 00:04:47 +00:00
SemaDeclObjC.cpp [Objective-C Sema] patch to introduce IndependentClass 2015-04-16 18:38:44 +00:00
SemaExceptionSpec.cpp [modules] Remove redundant import of lexical decls when building a lookup table 2015-03-23 03:25:59 +00:00
SemaExpr.cpp [Objective-C Sema]This patch fixes the warning when clang issues 2015-04-15 17:26:21 +00:00
SemaExprCXX.cpp Use 'override/final' instead of 'virtual' for overridden methods 2015-04-11 02:00:23 +00:00
SemaExprMember.cpp Reduce dyn_cast<> to isa<> or cast<> where possible. Clang edition. 2015-04-10 11:37:55 +00:00
SemaExprObjC.cpp [Objective-C Sema]This patch fixes the warning when clang issues 2015-04-15 17:26:21 +00:00
SemaFixItUtils.cpp PR17290: Use 'false' macro in fix-it hint for initializing a variable of type 2013-09-20 00:27:40 +00:00
SemaInit.cpp Move fixit for const init from note to diag, weaken to warning in MS mode. 2015-04-17 08:32:38 +00:00
SemaLambda.cpp Re-land "MS ABI: lambda call operators are instance methods and should use thiscall" 2015-04-01 20:22:13 +00:00
SemaLookup.cpp Use concrete type instead of auto in for-loop. No functionality change. 2015-04-15 03:48:48 +00:00
SemaObjCProperty.cpp [Objective-C Sema] Use canonical type of properties when comparing 2015-04-08 21:34:04 +00:00
SemaOpenMP.cpp [OPENMP] Fix for checking of data-sharing attributes for canonical var decls only. 2015-04-16 13:49:42 +00:00
SemaOverload.cpp [SemaCXX patch] Patch to fix a crash when a 'delete' constructor 2015-04-14 17:21:58 +00:00
SemaPseudoObject.cpp [Objective-C Sema]This patch fixes the warning when clang issues 2015-04-15 17:26:21 +00:00
SemaStmt.cpp Add new warning -Wrange-loop-analysis to warn on copies during loops. 2015-04-13 22:08:55 +00:00
SemaStmtAsm.cpp Ignore device-side asm constraint errors while compiling CUDA code for host and vice versa. 2015-03-19 18:40:25 +00:00
SemaStmtAttr.cpp Allow constant expressions in pragma loop hints. 2014-10-12 20:46:07 +00:00
SemaTemplate.cpp [modules] Handle defining a class template on top of an existing imported-but-not-visible definition. 2015-03-27 00:41:57 +00:00
SemaTemplateDeduction.cpp Move private classes into anonymous namespaces 2015-03-23 12:31:05 +00:00
SemaTemplateInstantiate.cpp Change range-based for-loops to be -Wrange-loop-analysis clean. 2015-04-15 01:21:42 +00:00
SemaTemplateInstantiateDecl.cpp Move the logic to avoid double global emission from Sema to CodeGen 2015-04-15 01:08:06 +00:00
SemaTemplateVariadic.cpp [Sema] Factor diags with %plural. No functionality change intended. 2015-03-27 17:23:14 +00:00
SemaType.cpp Re-land "MS ABI: lambda call operators are instance methods and should use thiscall" 2015-04-01 20:22:13 +00:00
TreeTransform.h [OPENMP] Fix crash on private variables not used in OpenMP region in templates. 2015-04-02 13:07:08 +00:00
TypeLocBuilder.cpp [C++11] Use 'nullptr'. Sema edition. 2014-05-26 06:22:03 +00:00
TypeLocBuilder.h Header guard canonicalization, clang part. 2014-08-13 16:25:19 +00:00