Skip to content

Commit f00c2b8

Browse files
authored
Merge pull request #2203 from guwirth/cpp14
set C++14 as default
2 parents 63ba9e2 + 94a2090 commit f00c2b8

File tree

3 files changed

+40
-56
lines changed

3 files changed

+40
-56
lines changed

cxx-squid/src/main/java/org/sonar/cxx/config/MsBuild.java

Lines changed: 26 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,6 @@ public class MsBuild {
5050
private static final String MSC_IX86_600 = "_M_IX86 600";
5151
private static final String MSC_X64_100 = "_M_X64 100";
5252

53-
private static final String CPPWINRTVERSION = "__cplusplus_winrt=201009";
54-
private static final String CPPVERSION = "__cplusplus=199711L";
55-
5653
private static final Pattern[] INCLUDE_PATTERNS = {Pattern.compile("/I\"(.*?)\""),
5754
Pattern.compile("/I([^\\s\"]++) ")};
5855
private static final Pattern[] DEFINE_PATTERNS = {Pattern.compile("[/-]D\\s([^\\s]++)"),
@@ -71,7 +68,7 @@ public class MsBuild {
7168
private static final Pattern PATH_TO_VCXPROJ = Pattern.compile(
7269
"^\\S+\\s\\\"ClCompile\\\".+\\\"((?>[^\\\\]{1,260}\\\\)*[^\\\\]{1,260}\\.vcxproj)\\\".*$");
7370

74-
private String platformToolset = "V120";
71+
private String platformToolset = "V142";
7572
private String platform = "Win32";
7673

7774
private final CxxSquidConfiguration squidConfig;
@@ -543,95 +540,82 @@ private void parseCommonCompilerOptions(String line, String fileElement) {
543540
}
544541

545542
private void parseV100CompilerOptions(String line, String fileElement) {
546-
// VC++ V16.0 - VS2010 (V10.0)
547-
addMacro(CPPVERSION, fileElement);
543+
// Visual Studio 2010 SP1 [10.0]
544+
addMacro("__cplusplus=199711L", fileElement);
548545
// __cplusplus_winrt Defined when you use the /ZW option to compile. The value of __cplusplus_winrt is 201009.
549546
if (line.contains("/ZW ")) {
550-
addMacro(CPPWINRTVERSION, fileElement);
547+
addMacro("__cplusplus_winrt=201009", fileElement);
551548
}
552549
addMacro("_MSC_VER=1600", fileElement);
553-
// VS2010 SP1
554-
addMacro("_MSC_FULL_VER=16004021901", fileElement);
555-
//_MFC_VER Defines the MFC version. For example, in Visual Studio 2010, _MFC_VER is defined as 0x0C00.
550+
addMacro("_MSC_FULL_VER=160040219", fileElement);
556551
addMacro("_MFC_VER=0x0A00", fileElement);
557552
addMacro("_ATL_VER=0x0A00", fileElement);
558-
// VC++ 16.0
559553
if (line.contains("/GX ")) {
560554
addMacro("_CPPUNWIND", fileElement);
561555
}
562556
}
563557

564558
private void parseV110CompilerOptions(String line, String fileElement) {
565-
// VC++ V17.0 - VS2012 (V11.0)
566-
addMacro(CPPVERSION, fileElement);
559+
// Visual Studio 2012 Update 4 [11.0]
560+
addMacro("__cplusplus=199711L", fileElement);
567561
// __cplusplus_winrt Defined when you use the /ZW option to compile. The value of __cplusplus_winrt is 201009.
568562
if (line.contains("/ZW ")) {
569-
addMacro(CPPWINRTVERSION, fileElement);
563+
addMacro("__cplusplus_winrt=201009", fileElement);
570564
}
571565
addMacro("_MSC_VER=1700", fileElement);
572-
// VS2012 Update 4
573-
addMacro("_MSC_FULL_VER=1700610301", fileElement);
574-
//_MFC_VER Defines the MFC version (see afxver_.h)
566+
addMacro("_MSC_FULL_VER=170061030", fileElement);
575567
addMacro("_MFC_VER=0x0B00", fileElement);
576568
addMacro("_ATL_VER=0x0B00", fileElement);
577569
}
578570

579571
private void parseV120CompilerOptions(String line, String fileElement) {
580-
// VC++ V18.0 - VS2013 (V12.0)
581-
addMacro(CPPVERSION, fileElement);
572+
// Visual Studio 2013 Update 5 [12.0]
573+
addMacro("__cplusplus=199711L", fileElement);
582574
// __cplusplus_winrt Defined when you use the /ZW option to compile. The value of __cplusplus_winrt is 201009.
583575
if (line.contains("/ZW ")) {
584-
addMacro(CPPWINRTVERSION, fileElement);
576+
addMacro("__cplusplus_winrt=201009", fileElement);
585577
}
586578
addMacro("_MSC_VER=1800", fileElement);
587-
// VS2013 Update 4
588-
addMacro("_MSC_FULL_VER=180031101", fileElement);
589-
//_MFC_VER Defines the MFC version (see afxver_.h)
579+
addMacro("_MSC_FULL_VER=180040629", fileElement);
590580
addMacro("_MFC_VER=0x0C00", fileElement);
591581
addMacro("_ATL_VER=0x0C00", fileElement);
592582
}
593583

594584
private void parseV140CompilerOptions(String line, String fileElement) {
595-
// VC++ V19.0 - VS2015 (V14.0)
596-
addMacro(CPPVERSION, fileElement);
585+
// Visual Studio 2015 Update 3 [14.0]
586+
addMacro("__cplusplus=199711L", fileElement);
597587
// __cplusplus_winrt Defined when you use the /ZW option to compile. The value of __cplusplus_winrt is 201009.
598588
if (line.contains("/ZW ")) {
599-
addMacro(CPPWINRTVERSION, fileElement);
589+
addMacro("__cplusplus_winrt=201009", fileElement);
600590
}
601591
addMacro("_MSC_VER=1900", fileElement);
602-
// VS2015 Update 3 V19.00.24215.1
603-
addMacro("_MSC_FULL_VER=190024215", fileElement);
604-
//_MFC_VER Defines the MFC version (see afxver_.h)
592+
addMacro("_MSC_FULL_VER=190024210", fileElement);
605593
addMacro("_MFC_VER=0x0E00", fileElement);
606594
addMacro("_ATL_VER=0x0E00", fileElement);
607595
}
608596

609597
private void parseV141CompilerOptions(String line, String fileElement) {
610-
// VC++ V19.1 - VS2017 (V15.0)
611-
addMacro(CPPVERSION, fileElement);
598+
// Visual Studio 2017 version 15.9.11
599+
addMacro("__cplusplus=199711L", fileElement);
612600
// __cplusplus_winrt Defined when you use the /ZW option to compile. The value of __cplusplus_winrt is 201009.
613601
if (line.contains("/ZW ")) {
614-
addMacro(CPPWINRTVERSION, fileElement);
602+
addMacro("__cplusplus_winrt=201009", fileElement);
615603
}
616604
addMacro("_MSC_VER=1910", fileElement);
617-
// VS2017 RC
618-
addMacro("_MSC_FULL_VER=191024629", fileElement);
619-
//_MFC_VER Defines the MFC version (see afxver_.h)
605+
addMacro("_MSC_FULL_VER=191627030", fileElement);
620606
addMacro("_MFC_VER=0x0E00", fileElement);
621607
addMacro("_ATL_VER=0x0E00", fileElement);
622608
}
623609

624610
private void parseV142CompilerOptions(String line, String fileElement) {
625-
// VC++ V19.2 - VS2019 (V16.0)
626-
addMacro(CPPVERSION, fileElement);
611+
// Visual Studio 2019 version 16.9.2
612+
addMacro("__cplusplus=201402L", fileElement);
627613
// __cplusplus_winrt Defined when you use the /ZW option to compile. The value of __cplusplus_winrt is 201009.
628614
if (line.contains("/ZW ")) {
629-
addMacro(CPPWINRTVERSION, fileElement);
615+
addMacro("__cplusplus_winrt=201009", fileElement);
630616
}
631-
addMacro("_MSC_VER=1921", fileElement);
632-
// VS2017 RC
633-
addMacro("_MSC_FULL_VER=192127702", fileElement);
634-
//_MFC_VER Defines the MFC version (see afxver_.h)
617+
addMacro("_MSC_VER=1920", fileElement);
618+
addMacro("_MSC_FULL_VER=192829913", fileElement);
635619
addMacro("_MFC_VER=0x0E00", fileElement);
636620
addMacro("_ATL_VER=0x0E00", fileElement);
637621
}

cxx-squid/src/main/java/org/sonar/cxx/preprocessor/CxxPreprocessor.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -116,11 +116,10 @@ public class CxxPreprocessor extends Preprocessor {
116116
private final Set<File> analysedFiles = new HashSet<>();
117117
private final Parser<Grammar> pplineParser;
118118

119-
private static final String MISSING_INCLUDE_MSG =
120-
"Preprocessor: {} include directive error(s). "
121-
+ "This is only relevant if parser creates syntax errors."
122-
+ " The preprocessor searches for include files in the with "
123-
+ "'sonar.cxx.includeDirectories' defined directories and order.";
119+
private static final String MISSING_INCLUDE_MSG = "Preprocessor: {} include directive error(s). "
120+
+ "This is only relevant if parser creates syntax errors."
121+
+ " The preprocessor searches for include files in the with "
122+
+ "'sonar.cxx.includeDirectories' defined directories and order.";
124123
private static int missingIncludeFilesCounter = 0;
125124

126125
public CxxPreprocessor(SquidAstVisitorContext<Grammar> context) {
@@ -623,7 +622,8 @@ private void addPredefinedMacros() {
623622
"__TIME__ \"??:??:??\"",
624623
"__STDC__ 1",
625624
"__STDC_HOSTED__ 1",
626-
"__cplusplus 201103L",
625+
// set C++14 as default
626+
"__cplusplus 201402L",
627627
// __has_include support (C++17)
628628
"__has_include 1"
629629
};
@@ -1106,7 +1106,7 @@ PreprocessorAction handleIncludeLine(AstNode ast, Token token, String filename,
11061106
File includedFile = findIncludedFile(ast, token, filename);
11071107
if (includedFile == null) {
11081108
missingIncludeFilesCounter++;
1109-
LOG.debug("[" + filename + ":" + token.getLine()
1109+
LOG.debug("[" + filename + ":" + token.getLine()
11101110
+ "]: preprocessor cannot find include file '" + token.getValue() + "'");
11111111
} else if (analysedFiles.add(includedFile.getAbsoluteFile())) {
11121112
unitCodeProvider.pushFileState(includedFile);

cxx-squid/src/test/java/org/sonar/cxx/config/CxxSquidConfigurationTest.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -503,7 +503,7 @@ public void shouldHandleSpecificV110OptionsCorrectly() {
503503
softly.assertThat(defines).contains("_WIN32");
504504
softly.assertThat(defines).contains("_M_IX86_FP 2");
505505
softly.assertThat(defines).contains("_MSC_VER 1700");
506-
softly.assertThat(defines).contains("_MSC_FULL_VER 1700610301");
506+
softly.assertThat(defines).contains("_MSC_FULL_VER 170061030");
507507
softly.assertThat(defines).contains("_ATL_VER 0x0B00");
508508
softly.assertAll();
509509
}
@@ -529,7 +529,7 @@ public void shouldHandleSpecificV120OptionsCorrectly() {
529529
softly.assertThat(defines).contains("_M_IX86 600");
530530
softly.assertThat(defines).contains("_M_IX86_FP 2");
531531
softly.assertThat(defines).contains("_MSC_VER 1800");
532-
softly.assertThat(defines).contains("_MSC_FULL_VER 180031101");
532+
softly.assertThat(defines).contains("_MSC_FULL_VER 180040629");
533533
softly.assertThat(defines).contains("_ATL_VER 0x0C00");
534534
softly.assertAll();
535535
}
@@ -554,7 +554,7 @@ public void shouldHandleSpecificV140OptionsCorrectly() {
554554
softly.assertThat(defines).contains("_M_IX86 600");
555555
softly.assertThat(defines).contains("_M_IX86_FP 2");
556556
softly.assertThat(defines).contains("_MSC_VER 1900");
557-
softly.assertThat(defines).contains("_MSC_FULL_VER 190024215");
557+
softly.assertThat(defines).contains("_MSC_FULL_VER 190024210");
558558
softly.assertThat(defines).contains("_ATL_VER 0x0E00");
559559
softly.assertAll();
560560
}
@@ -575,7 +575,7 @@ public void shouldHandleTFSAgentV141OptionsCorrectly() {
575575
softly.assertThat(defines).contains("_M_IX86 600");
576576
softly.assertThat(defines).contains("_M_IX86_FP 2");
577577
softly.assertThat(defines).contains("_MSC_VER 1910");
578-
softly.assertThat(defines).contains("_MSC_FULL_VER 191024629");
578+
softly.assertThat(defines).contains("_MSC_FULL_VER 191627030");
579579
softly.assertThat(defines).contains("_ATL_VER 0x0E00");
580580
softly.assertAll();
581581
}
@@ -596,7 +596,7 @@ public void shouldHandleTFSAgentV141mpOptionsCorrectly() {
596596
softly.assertThat(defines).contains("_M_IX86 600");
597597
softly.assertThat(defines).contains("_M_IX86_FP 2");
598598
softly.assertThat(defines).contains("_MSC_VER 1910");
599-
softly.assertThat(defines).contains("_MSC_FULL_VER 191024629");
599+
softly.assertThat(defines).contains("_MSC_FULL_VER 191627030");
600600
softly.assertThat(defines).contains("_ATL_VER 0x0E00");
601601
softly.assertAll();
602602
}
@@ -616,7 +616,7 @@ public void shouldHandleSpecificV141x86OptionsCorrectly() {
616616
softly.assertThat(defines).contains("_M_IX86 600");
617617
softly.assertThat(defines).contains("__cplusplus 199711L");
618618
softly.assertThat(defines).contains("_MSC_VER 1910");
619-
softly.assertThat(defines).contains("_MSC_FULL_VER 191024629");
619+
softly.assertThat(defines).contains("_MSC_FULL_VER 191627030");
620620
// check atldef.h for _ATL_VER
621621
softly.assertThat(defines).contains("_ATL_VER 0x0E00");
622622
softly.assertAll();
@@ -637,7 +637,7 @@ public void shouldHandleSpecificV141x64OptionsCorrectly() {
637637
softly.assertThat(defines.contains("_M_IX86 600")).isFalse();
638638
softly.assertThat(defines).contains("__cplusplus 199711L");
639639
softly.assertThat(defines).contains("_MSC_VER 1910");
640-
softly.assertThat(defines).contains("_MSC_FULL_VER 191024629");
640+
softly.assertThat(defines).contains("_MSC_FULL_VER 191627030");
641641
// check atldef.h for _ATL_VER
642642
softly.assertThat(defines).contains("_ATL_VER 0x0E00");
643643
softly.assertAll();

0 commit comments

Comments
 (0)