reference, declaration → definition definition → references, declarations, derived classes, virtual overrides reference to multiple definitions → definitions unreferenced |
3016 emitSourceFileHeader("Code to implement the __has_attribute logic", OS); 3045 OS << "const llvm::Triple &T = Target.getTriple();\n"; 3046 OS << "switch (Syntax) {\n"; 3047 OS << "case AttrSyntax::GNU:\n"; 3048 OS << " return llvm::StringSwitch<int>(Name)\n"; 3049 GenerateHasAttrSpellingStringSwitch(GNU, OS, "GNU"); 3050 OS << "case AttrSyntax::Declspec:\n"; 3051 OS << " return llvm::StringSwitch<int>(Name)\n"; 3052 GenerateHasAttrSpellingStringSwitch(Declspec, OS, "Declspec"); 3053 OS << "case AttrSyntax::Microsoft:\n"; 3054 OS << " return llvm::StringSwitch<int>(Name)\n"; 3055 GenerateHasAttrSpellingStringSwitch(Microsoft, OS, "Microsoft"); 3056 OS << "case AttrSyntax::Pragma:\n"; 3057 OS << " return llvm::StringSwitch<int>(Name)\n"; 3058 GenerateHasAttrSpellingStringSwitch(Pragma, OS, "Pragma"); 3059 auto fn = [&OS](const char *Spelling, const char *Variety, 3061 OS << "case AttrSyntax::" << Variety << ": {\n"; 3065 OS << " else "; 3067 OS << "if (ScopeName == \"\") {\n"; 3069 OS << "if (ScopeName == \"" << I->first << "\") {\n"; 3070 OS << " return llvm::StringSwitch<int>(Name)\n"; 3071 GenerateHasAttrSpellingStringSwitch(I->second, OS, Spelling, I->first); 3072 OS << "}"; 3074 OS << "\n} break;\n"; 3078 OS << "}\n";