hanchenye-llvm-project/clang/test/FixIt
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
..
atomic-property.m
auto-fixit.m
auto-isa-fixit.m
bridge-cast-in-arc.mm
bridge-in-non-arc.m
dereference-addressof.c
fixit-autoreleasepool.m
fixit-c90.c
fixit-class-method-messaging.m Objective-C [qoi]. Provide fix-it hint when sending 2014-08-19 23:39:17 +00:00
fixit-cxx0x.cpp Diagnose ref-qualifiers occuring after virt-specifier-seq and generate fixit hints 2015-03-25 00:53:33 +00:00
fixit-cxx1y-compat.cpp C++1y is now C++14! 2014-08-19 15:55:55 +00:00
fixit-cxx11-attributes.cpp
fixit-cxx11-compat.cpp
fixit-eof-space.c [edit] Don't hit an assert when trying to delete a trailing space at EOF 2015-03-29 18:07:29 +00:00
fixit-errors-1.c
fixit-errors.c Improve diagnostics if _Noreturn is placed after a function declarator. (This sometimes happens when a macro is used that expands to either the GNU noreturn attribute or _Noreturn.) 2014-11-10 21:10:32 +00:00
fixit-function-call.cpp
fixit-include.c
fixit-include.h
fixit-interface-as-param.m
fixit-missing-method-return-type.m
fixit-missing-self-in-block.m
fixit-multiple-selector-warnings.m Objective-C. When we use @selector(save:), etc. there may be more 2014-06-24 17:02:19 +00:00
fixit-newline-style.c
fixit-nsstring-compare.m
fixit-objc-arc.m
fixit-objc-bridge-related-attr.m
fixit-objc-bridge-related-property.m
fixit-objc-bridge-related.m Add a bunch of missing "CHECK" colons in tests. NFC. 2015-03-14 01:10:19 +00:00
fixit-objc-message-comma-separator.m
fixit-objc-message.m
fixit-objc.m
fixit-pmem.cpp
fixit-recompile.c
fixit-recursive-block.c Unify warnings/errors from "maybe you meant" to "did you mean". 2015-04-02 22:10:06 +00:00
fixit-static-object-decl.m
fixit-suffix.c
fixit-unicode-with-utf8-output.c
fixit-unicode.c
fixit-uninit.c
fixit-unrecoverable.c
fixit-unrecoverable.cpp Wire up delayed typo correction to DiagnoseEmptyLookup and set up 2014-11-20 22:06:40 +00:00
fixit-vexing-parse-cxx0x.cpp
fixit-vexing-parse.cpp
fixit.c
fixit.cpp Move fixit for const init from note to diag, weaken to warning in MS mode. 2015-04-17 08:32:38 +00:00
format-darwin.m Temporary revert r221818 until all the problems 2014-11-12 23:15:38 +00:00
format-no-fixit.m
format.m Fix test on platforms where size_t is not 'unsigned long'. 2014-05-31 15:06:33 +00:00
format.mm
messages.cpp
multiarg-selector-fixit.m Objective-C [qoi]. Patch to not do Fix-It for fixing 2014-08-12 22:16:41 +00:00
no-diagnostics-fixit-info.c
no-fixit.cpp
no-macro-fixit.c
no-typo.c
objc-literals.m
property-access-fixit.m Objective-C [qoi]. Issue warning and fixit if property-dot syntax 2014-08-08 22:33:24 +00:00
selector-fixit.m
typo-crash.cpp
typo-crash.m
typo-location-bugs.cpp Use the real CXXScopeSpec when setting the correction SourceRange. 2015-01-28 00:46:09 +00:00
typo-using.cpp
typo.c
typo.cpp
typo.m