[PATCH] D124339: [NFC][Clang][Pragma] Remove unused variables
zsrkmyn created this revision. Herald added a project: All. zsrkmyn requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D124339 Files: clang/lib/Lex/Pragma.cpp Index: clang/lib/Lex/Pragma.cpp === --- clang/lib/Lex/Pragma.cpp +++ clang/lib/Lex/Pragma.cpp @@ -1944,8 +1944,6 @@ static IdentifierInfo *HandleMacroAnnotationPragma(Preprocessor &PP, Token &Tok, const char *Pragma, std::string &MessageString) { - std::string Macro; - PP.Lex(Tok); if (Tok.isNot(tok::l_paren)) { PP.Diag(Tok, diag::err_expected) << "("; @@ -2034,8 +2032,6 @@ void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override { -std::string Macro; - PP.Lex(Tok); if (Tok.isNot(tok::l_paren)) { PP.Diag(Tok, diag::err_expected) << "("; Index: clang/lib/Lex/Pragma.cpp === --- clang/lib/Lex/Pragma.cpp +++ clang/lib/Lex/Pragma.cpp @@ -1944,8 +1944,6 @@ static IdentifierInfo *HandleMacroAnnotationPragma(Preprocessor &PP, Token &Tok, const char *Pragma, std::string &MessageString) { - std::string Macro; - PP.Lex(Tok); if (Tok.isNot(tok::l_paren)) { PP.Diag(Tok, diag::err_expected) << "("; @@ -2034,8 +2032,6 @@ void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override { -std::string Macro; - PP.Lex(Tok); if (Tok.isNot(tok::l_paren)) { PP.Diag(Tok, diag::err_expected) << "("; ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D124339: [NFC][Clang][Pragma] Remove unused variables
This revision was automatically updated to reflect the committed changes. Closed by commit rGae76eb32a598: [NFC][Clang][Pragma] Remove unused variables (authored by zsrkmyn). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D124339/new/ https://reviews.llvm.org/D124339 Files: clang/lib/Lex/Pragma.cpp Index: clang/lib/Lex/Pragma.cpp === --- clang/lib/Lex/Pragma.cpp +++ clang/lib/Lex/Pragma.cpp @@ -1944,8 +1944,6 @@ static IdentifierInfo *HandleMacroAnnotationPragma(Preprocessor &PP, Token &Tok, const char *Pragma, std::string &MessageString) { - std::string Macro; - PP.Lex(Tok); if (Tok.isNot(tok::l_paren)) { PP.Diag(Tok, diag::err_expected) << "("; @@ -2034,8 +2032,6 @@ void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override { -std::string Macro; - PP.Lex(Tok); if (Tok.isNot(tok::l_paren)) { PP.Diag(Tok, diag::err_expected) << "("; Index: clang/lib/Lex/Pragma.cpp === --- clang/lib/Lex/Pragma.cpp +++ clang/lib/Lex/Pragma.cpp @@ -1944,8 +1944,6 @@ static IdentifierInfo *HandleMacroAnnotationPragma(Preprocessor &PP, Token &Tok, const char *Pragma, std::string &MessageString) { - std::string Macro; - PP.Lex(Tok); if (Tok.isNot(tok::l_paren)) { PP.Diag(Tok, diag::err_expected) << "("; @@ -2034,8 +2032,6 @@ void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override { -std::string Macro; - PP.Lex(Tok); if (Tok.isNot(tok::l_paren)) { PP.Diag(Tok, diag::err_expected) << "("; ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D70671: [clang][CodeGen] Fix wrong memcpy size of no_unique_address in FieldMemcpyizer
zsrkmyn created this revision. zsrkmyn added reviewers: erichkeane, aaron.ballman, MaskRay, rjmccall. Herald added a project: clang. Herald added a subscriber: cfe-commits. When generating ctor, FieldMemcpyizer wrongly treated zero-sized class members as what should be copied, and generated wrong memcpy size under some special circumstances. This patch tries to fix it. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D70671 Files: clang/lib/CodeGen/CGClass.cpp clang/test/CodeGenCXX/no-unique-address-2.cpp Index: clang/test/CodeGenCXX/no-unique-address-2.cpp === --- /dev/null +++ clang/test/CodeGenCXX/no-unique-address-2.cpp @@ -0,0 +1,26 @@ +// RUN: %clang_cc1 -std=c++2a %s -emit-llvm -o - -triple x86_64-linux-gnu | FileCheck %s + +struct TriviallyCopyable {}; + +struct NonTriviallyCopyable { + NonTriviallyCopyable() = default; + NonTriviallyCopyable(const NonTriviallyCopyable&) = default; + NonTriviallyCopyable(NonTriviallyCopyable &&) {} +}; + +struct Foo { + int i; + [[no_unique_address]] TriviallyCopyable m; + [[no_unique_address]] NonTriviallyCopyable n; +}; + +void call() +{ + Foo foo; + Foo foo2(static_cast(foo)); +} + +// The memcpy call should copy exact 4 bytes for member 'int i' +// CHECK: define {{.*}} void @_ZN3FooC2EOS_ +// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* {{.+}}, i8* {{.+}}, i64 4, i1 false) +// CHECK: call void @_ZN20NonTriviallyCopyableC2EOS_ Index: clang/lib/CodeGen/CGClass.cpp === --- clang/lib/CodeGen/CGClass.cpp +++ clang/lib/CodeGen/CGClass.cpp @@ -914,6 +914,8 @@ } void addMemcpyableField(FieldDecl *F) { + if (F->isZeroSize(CGF.getContext())) +return; if (!FirstField) addInitialField(F); else Index: clang/test/CodeGenCXX/no-unique-address-2.cpp === --- /dev/null +++ clang/test/CodeGenCXX/no-unique-address-2.cpp @@ -0,0 +1,26 @@ +// RUN: %clang_cc1 -std=c++2a %s -emit-llvm -o - -triple x86_64-linux-gnu | FileCheck %s + +struct TriviallyCopyable {}; + +struct NonTriviallyCopyable { + NonTriviallyCopyable() = default; + NonTriviallyCopyable(const NonTriviallyCopyable&) = default; + NonTriviallyCopyable(NonTriviallyCopyable &&) {} +}; + +struct Foo { + int i; + [[no_unique_address]] TriviallyCopyable m; + [[no_unique_address]] NonTriviallyCopyable n; +}; + +void call() +{ + Foo foo; + Foo foo2(static_cast(foo)); +} + +// The memcpy call should copy exact 4 bytes for member 'int i' +// CHECK: define {{.*}} void @_ZN3FooC2EOS_ +// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* {{.+}}, i8* {{.+}}, i64 4, i1 false) +// CHECK: call void @_ZN20NonTriviallyCopyableC2EOS_ Index: clang/lib/CodeGen/CGClass.cpp === --- clang/lib/CodeGen/CGClass.cpp +++ clang/lib/CodeGen/CGClass.cpp @@ -914,6 +914,8 @@ } void addMemcpyableField(FieldDecl *F) { + if (F->isZeroSize(CGF.getContext())) +return; if (!FirstField) addInitialField(F); else ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D70671: [clang][CodeGen] Fix wrong memcpy size of no_unique_address in FieldMemcpyizer
zsrkmyn updated this revision to Diff 230991. zsrkmyn added a comment. Thanks for reviewing! Would you mind helping me commit this patch? Thanks :-D CHANGES SINCE LAST ACTION https://reviews.llvm.org/D70671/new/ https://reviews.llvm.org/D70671 Files: clang/lib/CodeGen/CGClass.cpp clang/test/CodeGenCXX/no-unique-address-2.cpp Index: clang/test/CodeGenCXX/no-unique-address-2.cpp === --- /dev/null +++ clang/test/CodeGenCXX/no-unique-address-2.cpp @@ -0,0 +1,25 @@ +// RUN: %clang_cc1 -std=c++2a %s -emit-llvm -o - -triple x86_64-linux-gnu | FileCheck %s + +struct TriviallyCopyable {}; + +struct NonTriviallyCopyable { + NonTriviallyCopyable() = default; + NonTriviallyCopyable(const NonTriviallyCopyable&) = default; + NonTriviallyCopyable(NonTriviallyCopyable &&) {} +}; + +struct Foo { + int i; + [[no_unique_address]] TriviallyCopyable m; + [[no_unique_address]] NonTriviallyCopyable n; +}; + +void call() { + Foo foo; + Foo foo2(static_cast(foo)); +} + +// The memcpy call should copy exact 4 bytes for member 'int i' +// CHECK: define {{.*}} void @_ZN3FooC2EOS_ +// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* {{.+}}, i8* {{.+}}, i64 4, i1 false) +// CHECK: call void @_ZN20NonTriviallyCopyableC2EOS_ Index: clang/lib/CodeGen/CGClass.cpp === --- clang/lib/CodeGen/CGClass.cpp +++ clang/lib/CodeGen/CGClass.cpp @@ -914,6 +914,8 @@ } void addMemcpyableField(FieldDecl *F) { + if (F->isZeroSize(CGF.getContext())) +return; if (!FirstField) addInitialField(F); else Index: clang/test/CodeGenCXX/no-unique-address-2.cpp === --- /dev/null +++ clang/test/CodeGenCXX/no-unique-address-2.cpp @@ -0,0 +1,25 @@ +// RUN: %clang_cc1 -std=c++2a %s -emit-llvm -o - -triple x86_64-linux-gnu | FileCheck %s + +struct TriviallyCopyable {}; + +struct NonTriviallyCopyable { + NonTriviallyCopyable() = default; + NonTriviallyCopyable(const NonTriviallyCopyable&) = default; + NonTriviallyCopyable(NonTriviallyCopyable &&) {} +}; + +struct Foo { + int i; + [[no_unique_address]] TriviallyCopyable m; + [[no_unique_address]] NonTriviallyCopyable n; +}; + +void call() { + Foo foo; + Foo foo2(static_cast(foo)); +} + +// The memcpy call should copy exact 4 bytes for member 'int i' +// CHECK: define {{.*}} void @_ZN3FooC2EOS_ +// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* {{.+}}, i8* {{.+}}, i64 4, i1 false) +// CHECK: call void @_ZN20NonTriviallyCopyableC2EOS_ Index: clang/lib/CodeGen/CGClass.cpp === --- clang/lib/CodeGen/CGClass.cpp +++ clang/lib/CodeGen/CGClass.cpp @@ -914,6 +914,8 @@ } void addMemcpyableField(FieldDecl *F) { + if (F->isZeroSize(CGF.getContext())) +return; if (!FirstField) addInitialField(F); else ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits