Bug in MSVC ?

Discussion in 'C++' started by Nindi, May 18, 2007.

  1. Nindi

    Nindi Guest

    I cannot get the following code to compile under MSVC 2003 or 2005.

    ...........................................................................................
    #include<stdio.h>

    struct _MyStruct;
    typedef struct _MyStruct MyStruct;

    typedef void (*funcType)(MyStruct *);

    struct _MyStruct {double x;};


    void MyFunc(MyStruct *theStruct){printf(" %f ",theStruct->x);}

    int main () {
    MyStruct A;
    A.x = 100.0;
    funcType f=&MyFunc;
    f(&A);

    }
    ................................................................................

    Under gcc , no problem .
     
    Nindi, May 18, 2007
    #1
    1. Advertising

  2. Nindi

    SirMike Guest

    Dnia 18 May 2007 02:50:05 -0700, Nindi napisa³(a):

    > I cannot get the following code to compile under MSVC 2003 or 2005.
    >
    > ..........................................................................................
    > #include<stdio.h>
    >
    > struct _MyStruct;
    > typedef struct _MyStruct MyStruct;
    >
    > typedef void (*funcType)(MyStruct *);
    >
    > struct _MyStruct {double x;};
    >
    >
    > void MyFunc(MyStruct *theStruct){printf(" %f ",theStruct->x);}
    >
    > int main () {
    > MyStruct A;
    > A.x = 100.0;
    > funcType f=&MyFunc;
    > f(&A);
    >
    > }
    > ...............................................................................
    >
    > Under gcc , no problem .


    Give us some errors from the compiler. I see no "return 0" here but don't
    know whether you forgot to write it here or is just the snippet.

    --
    SirMike - http://www.sirmike.org

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but
    when you do, it blows away your whole leg. - Bjarne Stroustrup
     
    SirMike, May 18, 2007
    #2
    1. Advertising

  3. On May 18, 10:50 am, Nindi <> wrote:
    > I cannot get the following code to compile under MSVC 2003 or 2005.
    >
    > ..........................................................................................
    > #include<stdio.h>
    >
    > struct _MyStruct;
    > typedef struct _MyStruct MyStruct;
    >
    > typedef void (*funcType)(MyStruct *);
    >
    > struct _MyStruct {double x;};
    >
    > void MyFunc(MyStruct *theStruct){printf(" %f ",theStruct->x);}
    >
    > int main () {
    > MyStruct A;
    > A.x = 100.0;
    > funcType f=&MyFunc;
    > f(&A);
    >
    > }
    >
    > ...............................................................................
    >
    > Under gcc , no problem .


    What compilation errors are you getting?

    I just compiled it on MS VC++ 2003 and it compiles fine.
     
    Keith Halligan, May 18, 2007
    #3
  4. Nindi

    Nindi Guest

    On 18 May, 10:59, SirMike <> wrote:
    > Dnia 18 May 2007 02:50:05 -0700, Nindi napisa³(a):
    >
    >
    >
    >
    >
    > > I cannot get the following code to compile under MSVC 2003 or 2005.

    >
    > > ............................................................................­...............
    > > #include<stdio.h>

    >
    > > struct _MyStruct;
    > > typedef struct _MyStruct MyStruct;

    >
    > > typedef void (*funcType)(MyStruct *);

    >
    > > struct _MyStruct {double x;};

    >
    > > void MyFunc(MyStruct *theStruct){printf(" %f ",theStruct->x);}

    >
    > > int main () {
    > > MyStruct A;
    > > A.x = 100.0;
    > > funcType f=&MyFunc;
    > > f(&A);

    >
    > > }
    > > ............................................................................­....

    >
    > > Under gcc , no problem .

    >
    > Give us some errors from the compiler. I see no "return 0" here but don't
    > know whether you forgot to write it here or is just the snippet.
    >
    > --
    > SirMike -http://www.sirmike.org
    >
    > C makes it easy to shoot yourself in the foot; C++ makes it harder, but
    > when you do, it blows away your whole leg. - Bjarne Stroustrup- Hide quoted text -
    >
    > - Show quoted text -




    I am not sure whether return is neccessary in main, but I aggree its
    better form to put it in.
    Here are the errors under 2003
    ..............................................................
    ------ Build started: Project: TestStruct, Configuration: Debug Win32
    ------

    Compiling...
    main.c
    c:\TEMP\TestBed\TestStruct\main.c(18) : error C2275: 'funcType' :
    illegal use of this type as an expression
    c:\TEMP\TestBed\TestStruct\main.c(8) : see declaration of
    'funcType'
    c:\TEMP\TestBed\TestStruct\main.c(18) : error C2146: syntax error :
    missing ';' before identifier 'f'
    c:\TEMP\TestBed\TestStruct\main.c(18) : error C2144: syntax error :
    '<Unknown>' should be preceded by '<Unknown>'
    c:\TEMP\TestBed\TestStruct\main.c(18) : error C2144: syntax error :
    '<Unknown>' should be preceded by '<Unknown>'
    c:\TEMP\TestBed\TestStruct\main.c(18) : error C2143: syntax error :
    missing ';' before 'identifier'
    c:\TEMP\TestBed\TestStruct\main.c(18) : error C2065: 'f' : undeclared
    identifier
    c:\TEMP\TestBed\TestStruct\main.c(18) : warning C4047: '=' : 'int'
    differs in levels of indirection from 'void (__cdecl *)(MyStruct *)'
    c:\TEMP\TestBed\TestStruct\main.c(19) : error C2063: 'f' : not a
    function

    Build log was saved at "file://c:\Temp\TestBed\TestStruct\Debug
    \BuildLog.htm"
    TestStruct - 7 error(s), 1 warning(s)

    ..........................................................


    And under gcc 3.2.3 (mingw) not a peep, it compiles and works fine.
     
    Nindi, May 18, 2007
    #4
  5. Nindi

    Sumit Rajan Guest

    Nindi wrote:
    > I cannot get the following code to compile under MSVC 2003 or 2005.


    Compiles fine for me. What errors are you getting?


    --
    Sumit Rajan <>
     
    Sumit Rajan, May 18, 2007
    #5
  6. Nindi

    Nindi Guest

    On 18 May, 11:06, Nindi <> wrote:
    > On 18 May, 10:59, SirMike <> wrote:
    >
    >
    >
    >
    >
    > > Dnia 18 May 2007 02:50:05 -0700, Nindi napisa³(a):

    >
    > > > I cannot get the following code to compile under MSVC 2003 or 2005.

    >
    > > > ............................................................................­­...............
    > > > #include<stdio.h>

    >
    > > > struct _MyStruct;
    > > > typedef struct _MyStruct MyStruct;

    >
    > > > typedef void (*funcType)(MyStruct *);

    >
    > > > struct _MyStruct {double x;};

    >
    > > > void MyFunc(MyStruct *theStruct){printf(" %f ",theStruct->x);}

    >
    > > > int main () {
    > > > MyStruct A;
    > > > A.x = 100.0;
    > > > funcType f=&MyFunc;
    > > > f(&A);

    >
    > > > }
    > > > ............................................................................­­....

    >
    > > > Under gcc , no problem .

    >
    > > Give us some errors from the compiler. I see no "return 0" here but don't
    > > know whether you forgot to write it here or is just the snippet.

    >
    > > --
    > > SirMike -http://www.sirmike.org

    >
    > > C makes it easy to shoot yourself in the foot; C++ makes it harder, but
    > > when you do, it blows away your whole leg. - Bjarne Stroustrup- Hide quoted text -

    >
    > > - Show quoted text -

    >
    > I am not sure whether return is neccessary in main, but I aggree its
    > better form to put it in.
    > Here are the errors under 2003
    > .............................................................
    > ------ Build started: Project: TestStruct, Configuration: Debug Win32
    > ------
    >
    > Compiling...
    > main.c
    > c:\TEMP\TestBed\TestStruct\main.c(18) : error C2275: 'funcType' :
    > illegal use of this type as an expression
    > c:\TEMP\TestBed\TestStruct\main.c(8) : see declaration of
    > 'funcType'
    > c:\TEMP\TestBed\TestStruct\main.c(18) : error C2146: syntax error :
    > missing ';' before identifier 'f'
    > c:\TEMP\TestBed\TestStruct\main.c(18) : error C2144: syntax error :
    > '<Unknown>' should be preceded by '<Unknown>'
    > c:\TEMP\TestBed\TestStruct\main.c(18) : error C2144: syntax error :
    > '<Unknown>' should be preceded by '<Unknown>'
    > c:\TEMP\TestBed\TestStruct\main.c(18) : error C2143: syntax error :
    > missing ';' before 'identifier'
    > c:\TEMP\TestBed\TestStruct\main.c(18) : error C2065: 'f' : undeclared
    > identifier
    > c:\TEMP\TestBed\TestStruct\main.c(18) : warning C4047: '=' : 'int'
    > differs in levels of indirection from 'void (__cdecl *)(MyStruct *)'
    > c:\TEMP\TestBed\TestStruct\main.c(19) : error C2063: 'f' : not a
    > function
    >
    > Build log was saved at "file://c:\Temp\TestBed\TestStruct\Debug
    > \BuildLog.htm"
    > TestStruct - 7 error(s), 1 warning(s)
    >
    > .........................................................
    >
    > And under gcc 3.2.3 (mingw) not a peep, it compiles and works fine.- Hide quoted text -
    >
    > - Show quoted text -



    But the following compiles fine
    ..............................................................
    #include<stdio.h>

    struct _MyStruct;
    typedef struct _MyStruct MyStruct;

    typedef void (*funcType)(MyStruct *);

    struct _MyStruct {double x;};


    void MyFunc(MyStruct *theStruct){printf(" %f ",theStruct->x);}

    int main () {
    MyStruct A;
    //A.x = 100.0;
    funcType f=&MyFunc;
    f(&A);
    return 0;

    }
    .....................................................
     
    Nindi, May 18, 2007
    #6
  7. Nindi

    Zeppe Guest

    Nindi wrote:
    > I cannot get the following code to compile under MSVC 2003 or 2005.


    It works fine in MSVC2005 to me.

    Regards,

    Zeppe
     
    Zeppe, May 18, 2007
    #7
  8. Nindi

    Nindi Guest

    On 18 May, 11:08, Zeppe <zeppe@.remove.all.this.long.comment.email.it>
    wrote:
    > Nindi wrote:
    > > I cannot get the following code to compile under MSVC 2003 or 2005.

    >
    > It works fine in MSVC2005 to me.
    >
    > Regards,
    >
    > Zeppe


    This is REALLY wierd !!!
    If the source file is called main.cpp it works fine BUT if it is
    called main.c it fails
     
    Nindi, May 18, 2007
    #8
  9. On May 18, 11:14 am, Nindi <> wrote:
    > On 18 May, 11:08, Zeppe <zeppe@.remove.all.this.long.comment.email.it>
    > wrote:
    >
    > > Nindi wrote:
    > > > I cannot get the following code to compile under MSVC 2003 or 2005.

    >
    > > It works fine in MSVC2005 to me.

    >
    > > Regards,

    >
    > > Zeppe

    >
    > This is REALLY wierd !!!
    > If the source file is called main.cpp it works fine BUT if it is
    > called main.c it fails


    As far as I can remember if the extension is just .c, msvc will invoke
    the C compiler as opposed to the C++ compiler.

    If you go into options I think you can set the compiler to invoke for
    your project, I think its under advanced or something like that.

    The reason you're getting so many failures is that your project/
    solution probably has stdafx.h and that is including one of the
    standard C++ header files that cannot be compiled by the C compiler.
    Remove stdafx.cpp and stdafx.h from the project and recompile.
     
    Keith Halligan, May 18, 2007
    #9
  10. Nindi

    Nindi Guest

    On May 18, 11:43 am, Keith Halligan <> wrote:
    > On May 18, 11:14 am, Nindi <> wrote:
    >
    > > On 18 May, 11:08, Zeppe <zeppe@.remove.all.this.long.comment.email.it>
    > > wrote:

    >
    > > > Nindi wrote:
    > > > > I cannot get the following code to compile under MSVC 2003 or 2005.

    >
    > > > It works fine in MSVC2005 to me.

    >
    > > > Regards,

    >
    > > > Zeppe

    >
    > > This is REALLY wierd !!!
    > > If the source file is called main.cpp it works fine BUT if it is
    > > called main.c it fails

    >
    > As far as I can remember if the extension is just .c, msvc will invoke
    > the C compiler as opposed to the C++ compiler.
    >
    > If you go into options I think you can set the compiler to invoke for
    > your project, I think its under advanced or something like that.
    >
    > The reason you're getting so many failures is that your project/
    > solution probably has stdafx.h and that is including one of the
    > standard C++ header files that cannot be compiled by the C compiler.
    > Remove stdafx.cpp and stdafx.h from the project and recompile.


    I am not including any othet header file, the project was set up as an
    empty console project
     
    Nindi, May 18, 2007
    #10
  11. On May 18, 11:50 am, Nindi <> wrote:
    > On May 18, 11:43 am, Keith Halligan <> wrote:
    >
    >
    >
    > > On May 18, 11:14 am, Nindi <> wrote:

    >
    > > > On 18 May, 11:08, Zeppe <zeppe@.remove.all.this.long.comment.email.it>
    > > > wrote:

    >
    > > > > Nindi wrote:
    > > > > > I cannot get the following code to compile under MSVC 2003 or 2005.

    >
    > > > > It works fine in MSVC2005 to me.

    >
    > > > > Regards,

    >
    > > > > Zeppe

    >
    > > > This is REALLY wierd !!!
    > > > If the source file is called main.cpp it works fine BUT if it is
    > > > called main.c it fails

    >
    > > As far as I can remember if the extension is just .c, msvc will invoke
    > > the C compiler as opposed to the C++ compiler.

    >
    > > If you go into options I think you can set the compiler to invoke for
    > > your project, I think its under advanced or something like that.

    >
    > > The reason you're getting so many failures is that your project/
    > > solution probably has stdafx.h and that is including one of the
    > > standard C++ header files that cannot be compiled by the C compiler.
    > > Remove stdafx.cpp and stdafx.h from the project and recompile.

    >
    > I am not including any othet header file, the project was set up as an
    > empty console project


    Look in the solution explorer and see if the files exist, if they do,
    then remove them from the solution. You're not including the files
    but thats not to say that the compiler isn't compiling these files.
     
    Keith Halligan, May 18, 2007
    #11
  12. Nindi

    Zeppe Guest

    Keith Halligan wrote:

    > Look in the solution explorer and see if the files exist, if they do,
    > then remove them from the solution. You're not including the files
    > but thats not to say that the compiler isn't compiling these files.
    >


    If you look at the errors you will see that they are not related to any
    stdafx. The weird thing is that the error disappear commenting the line
    A.x = 100.0;. I'm usually *very* reluctant in considering bugs in the
    compiler, but in this case I really can't understand this behaviour.

    Regards,

    Zeppe
     
    Zeppe, May 18, 2007
    #12
  13. Nindi

    Nindi Guest

    On May 18, 12:05 pm, Keith Halligan <> wrote:
    > On May 18, 11:50 am, Nindi <> wrote:
    >
    >
    >
    >
    >
    > > On May 18, 11:43 am, Keith Halligan <> wrote:

    >
    > > > On May 18, 11:14 am, Nindi <> wrote:

    >
    > > > > On 18 May, 11:08, Zeppe <zeppe@.remove.all.this.long.comment.email.it>
    > > > > wrote:

    >
    > > > > > Nindi wrote:
    > > > > > > I cannot get the following code to compile under MSVC 2003 or 2005.

    >
    > > > > > It works fine in MSVC2005 to me.

    >
    > > > > > Regards,

    >
    > > > > > Zeppe

    >
    > > > > This is REALLY wierd !!!
    > > > > If the source file is called main.cpp it works fine BUT if it is
    > > > > called main.c it fails

    >
    > > > As far as I can remember if the extension is just .c, msvc will invoke
    > > > the C compiler as opposed to the C++ compiler.

    >
    > > > If you go into options I think you can set the compiler to invoke for
    > > > your project, I think its under advanced or something like that.

    >
    > > > The reason you're getting so many failures is that your project/
    > > > solution probably has stdafx.h and that is including one of the
    > > > standard C++ header files that cannot be compiled by the C compiler.
    > > > Remove stdafx.cpp and stdafx.h from the project and recompile.

    >
    > > I am not including any othet header file, the project was set up as an
    > > empty console project

    >
    > Look in the solution explorer and see if the files exist, if they do,
    > then remove them from the solution. You're not including the files
    > but thats not to say that the compiler isn't compiling these files.- Hide quoted text -
    >
    > - Show quoted text -


    They are not part of the solution at all. The only file in the
    solution explorer is main.c. Also When i created the project I
    selected 'Empty' in the project settings.
    Have you been able to compile it as 'main.c'
     
    Nindi, May 18, 2007
    #13
  14. Nindi

    Ron Natalie Guest

    Nindi wrote:

    > struct _MyStruct;


    Identifiers beginninig with _ and followed by
    an uppercase letter are universally reserved to
    the implementation. Do not do this.
     
    Ron Natalie, May 18, 2007
    #14
  15. Nindi

    Nindi Guest

    On May 18, 12:16 pm, Ron Natalie <> wrote:
    > Nindi wrote:
    > > struct _MyStruct;

    >
    > Identifiers beginninig with _ and followed by
    > an uppercase letter are universally reserved to
    > the implementation. Do not do this.


    ok ... I haven't done much C and tend to stick to C++. I picked up
    this practice of nameing structs _xxxxx and then typedef _xxxxx xxxxxx
    from Glib
     
    Nindi, May 18, 2007
    #15
  16. Nindi

    Nindi Guest

    On May 18, 12:19 pm, Nindi <> wrote:
    > On May 18, 12:16 pm, Ron Natalie <> wrote:
    >
    > > Nindi wrote:
    > > > struct _MyStruct;

    >
    > > Identifiers beginninig with _ and followed by
    > > an uppercase letter are universally reserved to
    > > the implementation. Do not do this.

    >
    > ok ... I haven't done much C and tend to stick to C++. I picked up
    > this practice of nameing structs _xxxxx and then typedef _xxxxx xxxxxx
    > from Glib


    main.c
    ..............................................................
    struct struct_MyStruct;
    typedef struct struct_MyStruct MyStruct;

    typedef void (*funcType)(MyStruct *);

    struct struct_MyStruct {double x;};


    void MyFunc(MyStruct *theStruct){}

    int main () {
    MyStruct A;
    A.x = 100.0;
    funcType f=&MyFunc;
    f(&A);
    return 0;

    }
    .................................................................
     
    Nindi, May 18, 2007
    #16
  17. Nindi

    Nindi Guest

    Ok even simpler :-

    main.c ( NOT main.cpp)

    ................................................................
    struct MyStruct {double x;};
    typedef void (*funcType)(struct MyStruct *);
    void MyFunc(struct MyStruct *theStruct){}

    int main () {
    struct MyStruct A;
    A.x = 100.0;
    funcType f=&MyFunc;
    f(&A);
    return 0;

    }

    ......................................................

    Under VC 2003 & 2005 refuses to compile. The Errors are

    ..................................................................
    Compiling...
    main.c
    c:\TEMP\TestBed\TestStruct\main.c(12) : error C2275: 'funcType' :
    illegal use of this type as an expression
    c:\TEMP\TestBed\TestStruct\main.c(4) : see declaration of 'funcType'
    c:\TEMP\TestBed\TestStruct\main.c(12) : error C2146: syntax error :
    missing ';' before identifier 'f'
    c:\TEMP\TestBed\TestStruct\main.c(12) : error C2144: syntax error :
    '<Unknown>' should be preceded by '<Unknown>'
    c:\TEMP\TestBed\TestStruct\main.c(12) : error C2144: syntax error :
    '<Unknown>' should be preceded by '<Unknown>'
    c:\TEMP\TestBed\TestStruct\main.c(12) : error C2143: syntax error :
    missing ';' before 'identifier'
    c:\TEMP\TestBed\TestStruct\main.c(12) : error C2065: 'f' : undeclared
    identifier
    c:\TEMP\TestBed\TestStruct\main.c(12) : warning C4047: '=' : 'int'
    differs in levels of indirection from 'void (__cdecl *)(MyStruct *)'
    c:\TEMP\TestBed\TestStruct\main.c(13) : error C2063: 'f' : not a
    function

    Build log was saved at "file://c:\Temp\TestBed\TestStruct\Debug
    \BuildLog.htm"
    TestStruct - 7 error(s), 1 warning(s)

    .......................................................................

    under Mingw (gcc 3.2.3) compiles fine.
     
    Nindi, May 18, 2007
    #17
  18. Nindi

    Gavin Deane Guest

    On 18 May, 12:19, Nindi <> wrote:
    > On May 18, 12:16 pm, Ron Natalie <> wrote:
    >
    > > Nindi wrote:
    > > > struct _MyStruct;

    >
    > > Identifiers beginninig with _ and followed by
    > > an uppercase letter are universally reserved to
    > > the implementation. Do not do this.

    >
    > ok ... I haven't done much C and tend to stick to C++. I picked up
    > this practice of nameing structs _xxxxx and then typedef _xxxxx xxxxxx
    > from Glib


    You can drop the typedef completely in C++.

    struct MyStruct
    {
    // stuff goes here...
    };

    is sufficient.

    Gavin Deane
     
    Gavin Deane, May 18, 2007
    #18
  19. Nindi

    Nindi Guest

    On May 18, 10:50 am, Nindi <> wrote:
    > I cannot get the following code to compile under MSVC 2003 or 2005.
    >
    > ............................................................................­...............
    > #include<stdio.h>
    >
    > struct _MyStruct;
    > typedef struct _MyStruct MyStruct;
    >
    > typedef void (*funcType)(MyStruct *);
    >
    > struct _MyStruct {double x;};
    >
    > void MyFunc(MyStruct *theStruct){printf(" %f ",theStruct->x);}
    >
    > int main () {
    > MyStruct A;
    > A.x = 100.0;
    > funcType f=&MyFunc;
    > f(&A);
    >
    > }
    >
    > ............................................................................­....
    >
    > Under gcc , no problem .


    More and more inclined to think its a bug. Even more simplified

    main1.c
    ..................................................................

    struct MyStruct {double x;};

    void MyFunc(){}

    int main () {
    struct MyStruct A;
    A.x = 100.0;
    void (*f)() = &MyFunc;
    return 0;

    }

    ...................................................................


    main2.c
    ..................................................................

    struct MyStruct {double x;};

    void MyFunc(){}

    int main () {
    struct MyStruct A;
    //A.x = 100.0;
    void (*f)() = &MyFunc;
    return 0;

    }

    ...................................................................


    main3.c
    ..................................................................

    struct MyStruct {double x;};

    void MyFunc(){}

    int main () {
    struct MyStruct A;
    A.x = 100.0;
    //void (*f)() = &MyFunc;
    return 0;

    }

    ...................................................................



    main1.c fails to compile under VS 2003 & 2005 , main2.c and main3.c
    compile fine.

    All compile under gcc fine.
     
    Nindi, May 18, 2007
    #19
  20. * Nindi:
    > ...............................................................
    > struct MyStruct {double x;};
    > typedef void (*funcType)(struct MyStruct *);
    > void MyFunc(struct MyStruct *theStruct){}
    >
    > int main () {
    > struct MyStruct A;
    > A.x = 100.0;
    > funcType f=&MyFunc;
    > f(&A);
    > return 0;
    >
    > }
    >
    > .....................................................
    >
    > Under VC 2003 & 2005 refuses to compile. The Errors are
    >
    > .................................................................
    > Compiling...
    > main.c
    > c:\TEMP\TestBed\TestStruct\main.c(12) : error C2275: 'funcType' :
    > illegal use of this type as an expression


    In C declarations must come before other statements in the block.

    You can fix that by using an inner block (curly braces).

    Or you can compile as C++ instead of as C.

    --
    A: Because it messes up the order in which people normally read text.
    Q: Why is it such a bad thing?
    A: Top-posting.
    Q: What is the most annoying thing on usenet and in e-mail?
     
    Alf P. Steinbach, May 18, 2007
    #20
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Dan
    Replies:
    0
    Views:
    1,105
  2. Victor Bazarov

    Re: array of complex numbers in MSVC++ 6

    Victor Bazarov, Jul 5, 2003, in forum: C++
    Replies:
    0
    Views:
    482
    Victor Bazarov
    Jul 5, 2003
  3. Arkadiy Vertleyb
    Replies:
    1
    Views:
    1,434
    Victor Bazarov
    Jul 9, 2003
  4. jryden
    Replies:
    11
    Views:
    637
    Default User
    Apr 28, 2006
  5. Replies:
    4
    Views:
    379
Loading...

Share This Page