@@ -459,85 +459,19 @@ TypeSystemClang::ConvertAccessTypeToAccessSpecifier(AccessType access) {
459
459
return AS_none;
460
460
}
461
461
462
- static void ParseLangArgs (LangOptions &Opts, InputKind IK, const char *triple ) {
462
+ static void ParseLangArgs (LangOptions &Opts, ArchSpec arch ) {
463
463
// FIXME: Cleanup per-file based stuff.
464
464
465
- // Set some properties which depend solely on the input kind; it would be
466
- // nice to move these to the language standard, and have the driver resolve
467
- // the input kind + language standard.
468
- if (IK.getLanguage () == clang::Language::Asm) {
469
- Opts.AsmPreprocessor = 1 ;
470
- } else if (IK.isObjectiveC ()) {
471
- Opts.ObjC = 1 ;
472
- }
473
-
474
- LangStandard::Kind LangStd = LangStandard::lang_unspecified;
475
-
476
- if (LangStd == LangStandard::lang_unspecified) {
477
- // Based on the base language, pick one.
478
- switch (IK.getLanguage ()) {
479
- case clang::Language::Unknown:
480
- case clang::Language::CIR:
481
- case clang::Language::LLVM_IR:
482
- case clang::Language::RenderScript:
483
- llvm_unreachable (" Invalid input kind!" );
484
- case clang::Language::OpenCL:
485
- LangStd = LangStandard::lang_opencl10;
486
- break ;
487
- case clang::Language::OpenCLCXX:
488
- LangStd = LangStandard::lang_openclcpp10;
489
- break ;
490
- case clang::Language::Asm:
491
- case clang::Language::C:
492
- case clang::Language::ObjC:
493
- LangStd = LangStandard::lang_gnu99;
494
- break ;
495
- case clang::Language::CXX:
496
- case clang::Language::ObjCXX:
497
- LangStd = LangStandard::lang_gnucxx98;
498
- break ;
499
- case clang::Language::CUDA:
500
- case clang::Language::HIP:
501
- LangStd = LangStandard::lang_gnucxx17;
502
- break ;
503
- case clang::Language::HLSL:
504
- LangStd = LangStandard::lang_hlsl;
505
- break ;
506
- }
507
- }
508
-
509
- const LangStandard &Std = LangStandard::getLangStandardForKind (LangStd);
510
- Opts.LineComment = Std.hasLineComments ();
511
- Opts.C99 = Std.isC99 ();
512
- Opts.CPlusPlus = Std.isCPlusPlus ();
513
- Opts.CPlusPlus11 = Std.isCPlusPlus11 ();
514
- Opts.CPlusPlus14 = Std.isCPlusPlus14 ();
515
- Opts.CPlusPlus17 = Std.isCPlusPlus17 ();
516
- Opts.CPlusPlus20 = Std.isCPlusPlus20 ();
517
- Opts.Digraphs = Std.hasDigraphs ();
518
- Opts.GNUMode = Std.isGNUMode ();
519
- Opts.GNUInline = !Std.isC99 ();
520
- Opts.HexFloats = Std.hasHexFloats ();
521
-
522
- Opts.WChar = true ;
523
-
524
- // OpenCL has some additional defaults.
525
- if (LangStd == LangStandard::lang_opencl10) {
526
- Opts.OpenCL = 1 ;
527
- Opts.AltiVec = 1 ;
528
- Opts.CXXOperatorNames = 1 ;
529
- Opts.setLaxVectorConversions (LangOptions::LaxVectorConversionKind::All);
530
- }
531
-
532
- // OpenCL and C++ both have bool, true, false keywords.
533
- Opts.Bool = Opts.OpenCL || Opts.CPlusPlus ;
465
+ std::vector<std::string> Includes;
466
+ LangOptions::setLangDefaults (Opts, clang::Language::ObjCXX, arch.GetTriple (),
467
+ Includes, clang::LangStandard::lang_gnucxx98);
534
468
535
469
Opts.setValueVisibilityMode (DefaultVisibility);
536
470
537
471
// Mimicing gcc's behavior, trigraphs are only enabled if -trigraphs is
538
472
// specified, or -std is set to a conforming mode.
539
473
Opts.Trigraphs = !Opts.GNUMode ;
540
- Opts.CharIsSigned = ArchSpec (triple) .CharIsSignedByDefault ();
474
+ Opts.CharIsSigned = arch .CharIsSignedByDefault ();
541
475
Opts.OptimizeSize = 0 ;
542
476
543
477
// FIXME: Eliminate this dependency.
@@ -727,8 +661,7 @@ void TypeSystemClang::CreateASTContext() {
727
661
m_ast_owned = true ;
728
662
729
663
m_language_options_up = std::make_unique<LangOptions>();
730
- ParseLangArgs (*m_language_options_up, clang::Language::ObjCXX,
731
- GetTargetTriple ());
664
+ ParseLangArgs (*m_language_options_up, ArchSpec (GetTargetTriple ()));
732
665
733
666
m_identifier_table_up =
734
667
std::make_unique<IdentifierTable>(*m_language_options_up, nullptr );
0 commit comments