forked from OSchip/llvm-project
				
			[GCC] Match a GCC version with a patch suffix without a third version component
Previously it would only accept a string as a GCC version if it had either two components and no suffix, or three components with an optional suffix. Debian and ubuntu provided mingw compilers have lib/gcc/target entries like "5.3-posix" and "5.3-win32". This doesn't try to make any specific preference between them (other than lexical sorting of the suffix). Differential Revision: https://reviews.llvm.org/D45505 llvm-svn: 330696
This commit is contained in:
		
							parent
							
								
									f2124605cb
								
							
						
					
					
						commit
						6afcd64eb6
					
				| 
						 | 
					@ -1594,21 +1594,29 @@ Generic_GCC::GCCVersion Generic_GCC::GCCVersion::Parse(StringRef VersionText) {
 | 
				
			||||||
  GoodVersion.MajorStr = First.first.str();
 | 
					  GoodVersion.MajorStr = First.first.str();
 | 
				
			||||||
  if (First.second.empty())
 | 
					  if (First.second.empty())
 | 
				
			||||||
    return GoodVersion;
 | 
					    return GoodVersion;
 | 
				
			||||||
  if (Second.first.getAsInteger(10, GoodVersion.Minor) || GoodVersion.Minor < 0)
 | 
					  StringRef MinorStr = Second.first;
 | 
				
			||||||
 | 
					  if (Second.second.empty()) {
 | 
				
			||||||
 | 
					    if (size_t EndNumber = MinorStr.find_first_not_of("0123456789")) {
 | 
				
			||||||
 | 
					      GoodVersion.PatchSuffix = MinorStr.substr(EndNumber);
 | 
				
			||||||
 | 
					      MinorStr = MinorStr.slice(0, EndNumber);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if (MinorStr.getAsInteger(10, GoodVersion.Minor) || GoodVersion.Minor < 0)
 | 
				
			||||||
    return BadVersion;
 | 
					    return BadVersion;
 | 
				
			||||||
  GoodVersion.MinorStr = Second.first.str();
 | 
					  GoodVersion.MinorStr = MinorStr.str();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // First look for a number prefix and parse that if present. Otherwise just
 | 
					  // First look for a number prefix and parse that if present. Otherwise just
 | 
				
			||||||
  // stash the entire patch string in the suffix, and leave the number
 | 
					  // stash the entire patch string in the suffix, and leave the number
 | 
				
			||||||
  // unspecified. This covers versions strings such as:
 | 
					  // unspecified. This covers versions strings such as:
 | 
				
			||||||
  //   5        (handled above)
 | 
					  //   5        (handled above)
 | 
				
			||||||
  //   4.4
 | 
					  //   4.4
 | 
				
			||||||
 | 
					  //   4.4-patched
 | 
				
			||||||
  //   4.4.0
 | 
					  //   4.4.0
 | 
				
			||||||
  //   4.4.x
 | 
					  //   4.4.x
 | 
				
			||||||
  //   4.4.2-rc4
 | 
					  //   4.4.2-rc4
 | 
				
			||||||
  //   4.4.x-patched
 | 
					  //   4.4.x-patched
 | 
				
			||||||
  // And retains any patch number it finds.
 | 
					  // And retains any patch number it finds.
 | 
				
			||||||
  StringRef PatchText = GoodVersion.PatchSuffix = Second.second.str();
 | 
					  StringRef PatchText = Second.second.str();
 | 
				
			||||||
  if (!PatchText.empty()) {
 | 
					  if (!PatchText.empty()) {
 | 
				
			||||||
    if (size_t EndNumber = PatchText.find_first_not_of("0123456789")) {
 | 
					    if (size_t EndNumber = PatchText.find_first_not_of("0123456789")) {
 | 
				
			||||||
      // Try to parse the number and any suffix.
 | 
					      // Try to parse the number and any suffix.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,3 +49,10 @@
 | 
				
			||||||
// CHECK_MINGW_UBUNTU_TREE: "{{.*}}/Inputs/mingw_ubuntu_tree/usr{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}4.8{{/|\\\\}}x86_64-w64-mingw32"
 | 
					// CHECK_MINGW_UBUNTU_TREE: "{{.*}}/Inputs/mingw_ubuntu_tree/usr{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}4.8{{/|\\\\}}x86_64-w64-mingw32"
 | 
				
			||||||
// CHECK_MINGW_UBUNTU_TREE: "{{.*}}/Inputs/mingw_ubuntu_tree/usr{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}4.8{{/|\\\\}}backward"
 | 
					// CHECK_MINGW_UBUNTU_TREE: "{{.*}}/Inputs/mingw_ubuntu_tree/usr{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}4.8{{/|\\\\}}backward"
 | 
				
			||||||
// CHECK_MINGW_UBUNTU_TREE: "{{.*}}/Inputs/mingw_ubuntu_tree/usr{{/|\\\\}}x86_64-w64-mingw32{{/|\\\\}}include"
 | 
					// CHECK_MINGW_UBUNTU_TREE: "{{.*}}/Inputs/mingw_ubuntu_tree/usr{{/|\\\\}}x86_64-w64-mingw32{{/|\\\\}}include"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// RUN: %clang -target x86_64-pc-windows-gnu -rtlib=platform -stdlib=libstdc++ -c -### --sysroot=%S/Inputs/mingw_ubuntu_posix_tree/usr %s 2>&1 | FileCheck -check-prefix=CHECK_MINGW_UBUNTU_POSIX_TREE %s
 | 
				
			||||||
 | 
					// CHECK_MINGW_UBUNTU_POSIX_TREE: "{{.*}}/Inputs/mingw_ubuntu_posix_tree/usr{{/|\\\\}}lib{{/|\\\\}}gcc{{/|\\\\}}x86_64-w64-mingw32{{/|\\\\}}5.3-posix{{/|\\\\}}include{{/|\\\\}}c++"
 | 
				
			||||||
 | 
					// CHECK_MINGW_UBUNTU_POSIX_TREE: "{{.*}}/Inputs/mingw_ubuntu_posix_tree/usr{{/|\\\\}}lib{{/|\\\\}}gcc{{/|\\\\}}x86_64-w64-mingw32{{/|\\\\}}5.3-posix{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}x86_64-w64-mingw32"
 | 
				
			||||||
 | 
					// CHECK_MINGW_UBUNTU_POSIX_TREE: "{{.*}}/Inputs/mingw_ubuntu_posix_tree/usr{{/|\\\\}}lib{{/|\\\\}}gcc{{/|\\\\}}x86_64-w64-mingw32{{/|\\\\}}5.3-posix{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}backward"
 | 
				
			||||||
 | 
					// CHECK_MINGW_UBUNTU_POSIX_TREE: "{{.*}}/Inputs/mingw_ubuntu_posix_tree/usr{{/|\\\\}}x86_64-w64-mingw32{{/|\\\\}}include"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue